【データベース】完全復元を保証する分割のルール!「情報無損失分解」|情報処理問題1000本ノック
データベースの正規化において、テーブルをただバラバラに分ければいいわけではありません。合体したときに100%元通りになる正しい分け方「情報無損失分解」の定義を攻略しましょう。
1. 【 問題 】:関係データベースの正規化と情報無損失分解
【 問題 】 関係データベース(RDB)の設計において、1つの表(関係)を複数の表に分割する際、分割されたすべての表を自然結合(JOIN)することによって、元の表が持っていたデータ構造や情報を、過不足なく(偽の行が発生することなく)完全に復元できるような分解のことを何と呼ぶでしょうか?
① 関数従属分解 (Functional Dependency Decomposition)
② 情報無損失分解 (Lossless-Join Decomposition)
③ 垂直結合分解 (Vertical Join 分解)
④ 非可逆的関係分解 (Irreversible Decomposition)
2. 正解:
正解: ② 情報無損失分解(じょうほうむそんしつぶんかい)
3. 解説:「損失」とは、データが消えることではなく「ゴミが増える」こと
データベースの正規化(第2正規化や第3正規化など)では、データの重複を無くすために1つの大きなテーブルを2つ以上に小分けにします。このとき、情報無損失分解になっている必要があります。
・勘違いしやすいポイント:「無損失(Lossless)」という言葉を聞くと、受験生はつい「データが消えて無くならないこと」と思ってしまいがちです。しかし、データベース理論における損失とは、「間違った分け方をしたせいで、結合したときに『元の表には無かったはずの、偽のゴミデータ(幽霊レコード)』が発生してしまい、元の情報を正しく特定できなくなる(=情報の意味が失われる)状態」を指します。 ← ココが午前試験の最大のひっかけ!
・成立する条件(関数従属性):元の表を「表1」と「表2」に分けたとき、2つの表の【共通する列(結合キー)】が、表1または表2のどちらか一方において、データを1行に特定できる「主キー(または候補キー)」になっていなければなりません。このルールを守って分解すれば、結合したときに絶対に元の関係が復元できます。
★ ① 関数従属分解:関数従属性(ある列が決まれば、もう一方の列も自動的に決まる関係)に基づいてテーブルを分ける行為そのもののことですが、復元可能性を保証する用語としては②が正解です。
★ ③ 垂直結合分解:テーブルを列単位で縦に切り分けることを「垂直分解」と言いますが、これ単体では情報無損失を保証する用語ではありません。
★ ④ 非可逆的関係分解:元に戻せなくなってしまうダメな分解(情報有損失分解)をイメージさせる、試験用のひっかけ造語です。
1. 理解のコツ: 「1枚の紙の書類を、ハサミで2つに切り分ける作業」に例えてみましょう。
・書類(元テーブル)に書かれた「社員名」と「所属部署」をハサミで切り離します。このとき、両方の紙切れに共通の『社員ID』を書き残しておけば(結合キー=主キー)、後からセロハンテープでペタッと貼り合わせたときに、誰がどの部署だったか100%元通りに分かります(情報無損失分解)。
・もし、共通の『社員ID』を書き残さずに「名前の紙」と「部署の紙」に分けてしまうと、同じ部署に複数の社員がいた場合、合体させたときに「あれ?この部署の人はAさんだっけ?Bさんだっけ?」と、ありもしない組み合わせ(ゴミデータ)が発生して元に戻せなくなります。これが情報有損失分解です。
2. 試験対策の視点: 「関係を複数個の関係に分解しても」「結合すると必ず元の関係が持っていた情報が復元」という、正規化の正当性を担保する理論的フレーズが出たら「情報無損失分解」が一択です。基本情報や応用情報の午前試験では、データベースの正規化の手順が正しいかどうかを論理的に説明する際の根本ルールとして、また「情報無損失分解であるための条件はどれか」という数理的な問題として非常によく狙われます。
4. まとめ
「データベースの正規化において、テーブルを分割しても、結合(JOIN)によって元のデータを1ミリの狂いもなく完全復元できることを保証する、データモデル設計の絶対原則」。これが情報無損失分解です。この数理的な裏付けがあるからこそ、私たちは安心してテーブルを綺麗に正規化し、いつでも必要なときにSQLで結合して元の正しいデータを取り出すことができるのです。