はじめに
リレーショナルデータモデルの正規化理論を理解するためには、部分関数従属性と推移的関数従属性の理解が必要となります。ですが、テキスト毎に定義のばらつきがみられました。
そこで、本記事では定義の整理とばらつきの理由について考察を行いました。
略記について
本記事内では参考にしたテキストを略記表記します。
略記 | 書名(著者・出版社) |
---|---|
RDB入門 | リレーショナルデータベース入門―データモデル・SQL・管理システム・NoSQL (Information & Computing) [第3版](増永 良文・サイエンス社) |
DBSP教科書 | 情報処理教科書 データベーススペシャリスト 2020年版(三好 康之・翔泳社) |
DBSP教本 | 令和02年データベーススペシャリスト合格教本(金子 則彦・技術評論社) |
各書の定義
RDB入門
89ページ
[定義4.4](完全関数従属性)関数従属性 X → Y で、X の任意の真部分集合 X' (X' ⊂ X) について X' → Y は成立しないとき、Y は X に完全関数従属しているという。106ページ
[定義4.11]リレーション R が第2正規形であるとは次の2つの条件を満たすときをいう。
(1) R は第1正規形である。
(2) R の全ての非キー属性は R の各候補キーに完全関数従属している。
110ページ
[定義4.12](推移的関数従属性)X, Y, Z をリレーションスキーマ R の属性集合とし、関数従属性に関して次が成立しているとする。
X → Y
Y → X が成立しない
Y → Z
ただし Y → Z は自明(な関数従属性)ではないとする(つまり、Z ⊆ Y ではない)。すると、次が成立する。
X → Z
Z → X が成立しない
このとき、X → Z を推移的関数従属性 (transitive functional dependency) といい、Z は X に推移的に関数従属する (transitively functionally dependent) という。111ページ
[定義4.13](第3正規形)リレーション R が第3正規形であるとは次の2つの条件を満たすときをいう。
(1) R は第2正規形である。
(2) R の全ての非キー属性は R のいかなる候補キーにも推移的に関数従属しない。
DBSP教科書
286ページ
[第2正規形の定義]
リレーション R が次の二つの条件を満たす。
(1) 第1正規形であること
(2) すべての非キー属性は、いかなる候補キーにも部分関数従属していない(完全関数従属である)こと<中略>
"完全関数従属している状態" とか "完全関数従属性という性質" は、①関数従属性(候補キー:X)→(非キー属性:Y)が成立するが、②(候補キー:Xの真部分集合)→(非キー属性:Y)は成立しないときの状態及び性質のことである。逆に、①ではあるが、②が成立・存在している状態及び性質のことを "部分関数従属している" とか "部分関数従属性" という。
非キー属性:候補キーの一部にも含まれない属性
完全関数従属性の定義をDBSP教科書とRDB入門と比較すると、DBSP教科書の定義には「候補キー」や「非キー属性」が含まれており、これらに制限しています。
288ページ
[第3正規形の定義]
リレーション R が次の二つの条件を満たす。
(1) 第2正規形であること
(2) すべての非キー属性は、いかなる候補キーにも推移的関数従属していない<中略>
関数従属が推移的に行われているとき、これを推移的関数従属性という。
集合 R の属性 X, Y, Z において、
① X → Y
② Y → X ではない
③ Y → Z(ただし、Z は Y の部分集合ではない)
の三つの条件が成立しているときに、"Z" は "X" に推移的に関数従属している。
このとき、次の二つが成立する。
(ⅰ) X → Z
(ⅱ) Z → X ではない
推移的関数従属の定義はDBSP教科書とRDB入門で一致しています。
DBSP教本
79ページ
完全関数従属性…非キー属性が、候補キーを構成するすべての属性に関数従属していること
部分関数従属性…非キー属性が、候補キーを構成する属性の一部に関数従属していること
完全関数従属性の定義をDBSP教本とRDB入門と比較すると、DBSP教本の定義には「候補キー」や「非キー属性」が含まれており、これらに制限しています。
完全関数従属性を「候補キー」や「非キー属性」で制限するのはDBSP教本・DBSP教科書共に共通しています。
83ページ
第 3 正規形を考える上での推移的関数従属性とは、下図のように属性 X が候補キー、属性 Y,Z が非キー属性であることを前提し、下図の①(X → Y がある)②(Y → Z がある)③(Y → X がない)のすべてが成立した関数従属性のことです。
※図は省略した。
推移的関数従属性の定義をDBSP教本とRDB入門と比較すると、DBSP教本の定義では「候補キー」や「非キー属性」を前提としています。
推移的関数従属性で「候補キー」や「非キー属性」を前提としているのはDBSP教本だけです。
定義の違いとその影響
データベーススペシャリスト試験 平成29年度午後Ⅰ問1 を参考にします。
下記の候補キーと関数従属性が与えられていました。
候補キー:
{電子会議番号,投稿番号}
{分野番号,表示順,投稿番号}
関数従属性:
① 電子会議番号 → 議題
② 分野番号 → 分野名
③ {分野番号,表示順} → 電子会議番号
④ 電子会議番号 → {分野番号,表示順}
⑤ 電子会議番号 → 作成者ユーザID
⑥ {電子会議番号,投稿番号} → 投稿本文,投稿者ユーザID
⑦ 電子会議番号 → 分野番号
(1) 部分関数従属性の検討
ここから部分関数従属性を考えるとき、DBSP教科書では『他の候補キーの一部になっている場合は、部分関数従属性ではない』とし、以下について部分関数従属性が無いと判断していました。
・④は{分野番号,表示順}が他の候補キーの一部になっている
・⑦は分野番号が他の候補キーの一部になっている
これはDBSP教科書の説明と一致しています。
一方、RDB入門では「部分関数従属性」の定義を与えていませんが、[定義4.4] より部分関数従属性を「関数従属性 X → Y で、X の任意の真部分集合 X' (X' ⊂ X) について X' → Y が成立するとき」とするならば、④⑦も部分関数従属性といえます。なぜなら、この定義では「他の候補キーの一部になっていないこと」という制限が含まれていないからです。
残念ながらIPAの解答例からはどちらが妥当であるかを判断できませんでした。解答例は部分関数従属性の具体例を一つ示しているのみであり、今回の妥当性の判断には使えないためです。
(2) 推移的関数従属性の検討
IPAの解答例は「電子会議番号 → 分野番号 → 分野名」となっていました。
RDB入門及びDBSP教科書の定義とは矛盾ありません。
一方、DBSP教本の定義と比較すると、"分野番号" は候補キーの一部(つまり非キー属性ではない)なので、定義内の前提とは矛盾しています。このことについてDBSP教本の解説では触れられていませんでした。
定義の違いに対する考察
定義の妥当性
私の見解になりますが、RDB入門の定義が最も妥当に思われます。弱い根拠ではありますが、以下の2点を挙げます。
(1) Wikipedia の「関数従属性」の定義
「関係の正規化」の「第2正規形」の説明を引用します。
A及びBを属性または属性の集合としたとき、「AがBに関数従属する」とは、Bの値を決めると、常にAの値が一つに定まるような性質をAが有することをいい、これをB → Aと書く。矢印の左側、つまりここでのBのことを決定項、右側、つまりここでのAのことを従属項という。属性の集合は { } で括る。(なお、A → A、{A, B} → A のように、従属項と決定項が同じか、従属項が決定項に含まれる属性だけからなる場合を自明な関数従属といい、以下の説明では関数従属から自明な関数従属を除く。)
関係の正規化 - Wikipedia
<中略>
複数の属性からなる決定項のうち一部の属性にも関数従属することを部分(関数)従属(性)といい、複数の属性からなる決定項に関数従属するが部分従属はしないことを完全(関数)従属(性)という。つまり、決定項に「余分な属性」がない場合が完全従属である。
このWikipediaの説明はRDB入門の定義と一致しています。
(2) 第2正規形の定義
RDB入門における第2正規形の定義を再度引用します。
[定義4.11]リレーション R が第2正規形であるとは次の2つの条件を満たすときをいう。
(1) R は第1正規形である。
(2) R の全ての非キー属性は R の各候補キーに完全関数従属している。
この定義はDBSP教科書やDBSP教本でも同様です。
ここで (2) に注目すると、もし完全関数従属の定義に候補キー・非キー属性の制限を含めているのであれば、(2) は「Rが完全関数従属であること」とするだけで済んだはずです。そうしていないということは、完全関数従属性の純粋な定義には候補キー・非キー属性の制限が無いと考えました。
おわりに
本件についてDBSP教科書及びDBSP教本の出版社に対し質問してみましたが、回答をいただくことができませんでした。おそらく、「記載の内容を超える」ため回答できないと判断されたと思われます。確認できなかったことは残念ですが、致し方ないことだと理解しています。
今後、新たな知見が得られれば、記事を更新します。