高度な正規化理論(第4・第5正規形・多値従属・無損失分解)
BCNFまで整えても、独立した複数の集合を同じ表に入れると冗長性が残ることがあります。第4正規形は多値従属、第5正規形は結合従属を扱います。形式名を暗記するより、表を分けてから自然結合したとき、元にない組合せが生じるかを具体的に確かめます。
多値従属は、独立した組合せの制約
R(技術者, 資格, 言語)で、同じ技術者の資格と使用言語が独立し、すべての組合せを記録するルールを考えます。技術者Aが資格Q1・Q2と言語L1・L2を持つなら4行が必要です。このとき技術者→→資格という多値従属が成立します。資格が言語を決めるなら独立性はなく、この分解の前提は成立しません。
技術者 | 資格 | 言語 |
|---|---|---|
A | Q1 | L1 |
A | Q1 | L2 |
A | Q2 | L1 |
A | Q2 | L2 |
多値従属X→→Yが非自明とは、YがXの部分集合ではなく、XとYだけで表の全属性を覆わないことです。4NFは、成立する非自明な多値従属の左辺Xがスーパーキーであることを要求します。関数従属は多値従属の特別な場合なので、4NFならBCNFも満たします。
4NFへの分解と、0件の集合の扱い
技術者資格(技術者,資格)と技術者言語(技術者,言語)に分けます。独立性の制約があれば自然結合で元の4行が戻り、資格を1つ追加するたびに言語の数だけ行を追加する必要もなくなります。
ただし、資格を持たない技術者の使用言語を三列の表だけで表すことはできません。技術者マスタと、それぞれ独立した関連表を設ければ、資格が0件で言語が1件という状態も表現できます。NULLを含むSQL表の結合挙動と、NULLを使わない関係理論の分解を混ぜないようにします。
- 1. 資格の集合を保持
- 2. 言語の集合を保持
資格と言語が独立するという業務ルールが前提です。0件の集合も扱う場合は技術者マスタを別に保持します。
結合従属と5NFの正しい定義
表Rが、属性集合R1〜Rnへの射影を自然結合した結果と常に等しいなら、結合従属JD(R1,…,Rn)が成立します。分解した表のどれかが元の全属性を含む結合従属は自明です。5NFは、成立するすべての非自明な結合従属が候補キーから含意されることを要求します。「分解した各表が元のスーパーキーを含めばよい」という定義ではありません。
仕入先・部品・プロジェクトの三者関係を、それぞれの二者関係へ分ける場合を考えます。「3つの二者関係がすべて成立すれば三者関係も成立する」という業務制約がなければ、再結合で架空の取引が生まれます。5NFのためと称して、実際には成立しない結合従属を仮定して分解してはいけません。
無損失性の二分解判定と適用範囲
関数従属集合Fを前提にRをR1とR2へ分解する場合、共通属性R1∩R2がFからR1またはR2を決定できれば、無損失です。関数従属だけによる判定ではこの条件が必要十分になります。共通属性がどちらかの表のキーとなる、という形で覚えると具体例を追いやすくなります。
ただし、多値従属や一般の結合従属も制約として認める場合、関数従属だけでは決定関係がなくても無損失となる分解があります。技術者資格と言語の例がその1つです。「無損失なら必ず共通属性がどちらかを関数的に決定する」と、前提を外して一般化しないようにします。
A | B | C |
|---|---|---|
A1 | B1 | C1 |
A1 | B2 | C2 |
A2 | B1 | C2 |
この3行をAB・AC・BCへ射影して自然結合すると、元にはない(A1,B1,C2)が増えます。ABの(A1,B1)、ACの(A1,C2)、BCの(B1,C2)がそれぞれ存在するためです。二者関係に分ければ常に無損失になるわけではないことを、こうした反例で確かめます。
演習1:独立性を確認する
条件:Aの資格はQ1・Q2、言語はL1・L2。資格と言語の組合せはすべて許される。
問い:三列の表には何行必要か。資格表と言語表に分けると合計何行か。
解答例:三列の表は4行。二表の合計も4行だが、独立に更新できる。
根拠:それぞれ3件なら三列は9行、二表の合計は6行になる。小さな例でも、行数だけでなく更新単位の違いを見る。
演習2:分解で架空の取引が生まれる理由
条件:仕入先と部品、部品と案件、仕入先と案件の各組合せは登録されているが、三者の取引は別に許可される。
問い:二者関係の自然結合で元にない取引ができる理由を説明しよう。(35字以内)
解答例:二者関係だけでは三者の許可を決定できない。(21字)
根拠:三者関係の存在を二者関係から導く結合従属が成立していない。
復習で確かめること
例の数値や業務条件を変えて同じ結論になるか確認してください。用語の定義だけでなく、問題文のどの条件から、どの制約・SQL・対策を選んだのかを自分の言葉で説明できれば、次の過去問に進みます。
出典と仕様を確認する
Database System Concepts 著者公開資料:関係データベース設計
関連するテーマ
次におすすめの学習
編集・検証について
編集・検証:IT資格ラボ編集部
IPAが公開する試験要綱・シラバス・過去問題と、各技術の公式資料を優先して内容を確認しています。制度変更や誤りを確認した場合は、記事を見直して更新します。
編集方針・情報源・訂正方針を見る