著書/データベースの仕組み/リレーショナルモデルの設計論/関数従属性
出典: Fukudat.com
目次 |
§6.1.5 属性集合の閉包 と 定理6.1
本書の中で唯一,証明が与えられているのが定理6.1である.
- 定理6.1
-
ならば,そしてその時に限り,FD
が成り立つ.
この定理は,人によっては当たり前と感じるかもしれない[1]のだが,証明は長ったらしいので,煙に巻かれてしまった読者もいるだろう.完全理解を目指して解説を加えてみようと思う.
準備
まず,リレーション R で FD
が成り立つとはどういうことか,復習しておく(§6.1.1).
Rで
が成り立つとは,Rの任意の2つのタプル
でXの値が等しい (t1[X] = t2[X]) ならば,必ずAの値も等しい (t1[A] = t2[A])ことを言うのであった(定義6.1).
関数従属性を論じるとき,それが成り立つ特定のリレーションインスタンスを考えているのではなく,例6.1の後半に述べられているように,その関数従属性を満たす任意のリレーションインスタンスについて考えているのだ.
が成り立っているRは,いろいろ値を変えることができるのだが,何でも勝手な値をとることはできず,Xの値が等しければAの値も等しいという制約が課せられているわけだ.
さて,複数の関数従属性が存在する場合のことを考える.その関数従属性の集合をFとする[2].F中のすべての関数従属性を満たすリレーションインスタンスは,図6.2に示されるように,個々の関数従属性が許す範囲の共通部分に入っていなければならない. 定理6.1は閉包を求めることでこの共通部分がどのようなものかを正確に過不足なく知ることができると主張している[3].
定理6.1の証明
さて,定理が主張している次の2点をそれぞれ細かく見ていこう.
- (十分性)
-
ならば,
である.
- (必要性)
-
ならば,
である.
十分性
(十分性)は,「
に含まれる属性(D)はすべて,Fを満たす任意のリレーションインスタンスにおいて
に関数従属する」という意味である.
証明は,基本的な数学的帰納法に則っている.
- (基底) はアルゴリズムが1回も繰り返しを行わなかった場合に,(十分性)が成り立っていることを確認している.
- (導出) はアルゴリズムがk − 1回繰り返しを行った時点で(十分性)が成り立っていると仮定したときに,k回目の繰り返しを行っても(十分性)が満たされていることを確認している.
これで,関数従属しない属性を閉包が含むことがないことが確認できた.
必要性
(必要性)は,「Fを満たす任意のリレーションインスタンスにおいてある関数従属性
が成り立っているのであれば,Dは閉包
に必ず含まれる」という意味である.
この対偶を取って,「Bが閉包
に含まれないならば,Fを満たすあるリレーションインスタンスにおいて
は成り立たない」ことを示せばよい.ここで対偶を取ったことで「任意の」が「ある」に変わったことに注意しよう.「任意のXXXでYYYが成り立つ」の否定は「あるXXXが存在してYYYが成り立たない」である[4].
(必要性)の証明では,成り立たない例(反例)を実際に構成して見せている.
