430 likes | 846 Views
Chapter 11 Functional Dependencies (関数従属性). 寺田 純子. 11.1 Introduction. 関数従属( Functional Dependencies )とは ある関係において、属性のある集合から他の集合への多対1の関連 である ※ 以下 FD と略す 図3.8 SP. 11.2 基本的な定義. S #、 P# 、 QTY に関連した納入業者が関連する都市を表す属性 CITY を加えた関係 → SCP 図11.1関係 SCP. 関数従属性の概念. Case a ある時点におけるある関係の値
E N D
Chapter11Functional Dependencies(関数従属性) 寺田 純子 presented by junko
11.1Introduction • 関数従属(Functional Dependencies)とは ある関係において、属性のある集合から他の集合への多対1の関連 である ※以下FDと略す • 図3.8 SP presented by junko
11.2 基本的な定義 • S#、P#、QTYに関連した納入業者が関連する都市を表す属性CITYを加えた関係 →SCP 図11.1関係SCP presented by junko
関数従属性の概念 • Case a ある時点におけるある関係の値 (→関係変数) • Case b その関係変数が様々な時点で取り得る全ての値の集合 拡張 presented by junko
Case a • R: 関係 • X,Y: Rの属性集合の任意の部分集合 R上の全てのXの値について、これと関連するYの値がただ一つ存在するとき、かつそのときに限り、YはXに関数的に従属である “X → Y” R X Y x y presented by junko
関係SCPのFD • { S# } → { CITY } • { S#, P# } → { QTY } • { S#, P# } → { CITY } • { S#, P# } → { CITY, QTY } • { S#, P# } → { S# } • { S#, P# } → { S#, P#, CITY, QTY } • { S# } → { QTY } • { QTY } → { S# } 決定項従属項 presented by junko
ある時点で変数が持っている値について たまたま成り立つFDには興味が無い • その変数が取り得る全ての値に対して成り立つFD 興味があるのは・・・ presented by junko
Case b (Case aの拡張) • R:関係変数 • X,Y:Rの属性集合の任意の部分集合 Rが取り得る全ての正当な値において、ただ一つのYの値と関連するとき、かつそのときに限り、Yは関数的にXに従属している “X → Y” presented by junko
時間独立なFD • 関数従属性 = 時間独立 time-independent • 関係SCPの時間独立なFD • { S#, P# } → QTY • { S#, P# } → CITY • { S#, P# } → { CITY, QTY } • { S#, P# } → S# • { S#, P# } → { S#, P#, CITY, QTY } • { S# } → CITY presented by junko
次のFDは、図11.1では成り立つが、 いつも成り立つわけではない • S# → QTY • QTY → S# “ある納入業者に関する全ての出荷は同じ出荷量を持つ” SCPが取り得る全ての正当な値に 対しては成り立たない presented by junko
必然的な従属 • Xが関係Rの候補キー(特に主キー)であるならば、関係Rの全ての属性Yは必然的にXに従属する 候補キーの定義より生じる P# → { P#、PNAME、COLOR、WHIGHT、CITY} ※候補キー(Chapter9より) • 一意に識別できる • 非冗長 presented by junko
本章の目的 • ある関係が取り得る全ての正当な値が満たすFDの集合は、非常に大きいはず! • その集合を扱いやすいサイズに簡略化する方法を見つける そこで、 本章の目的 は・・・ presented by junko
目的の理由 • FDが完全性制約と関係するため、DBMSが更新を実行するときにFDを検査する必要がある • 完全性制約:データが間違っていたり,データ間で矛盾 がない事を保証するための条件 presented by junko
FDの検査 あるFDの集合Sに対して、Sより十分小さく、Sのあら ゆるFDを表現する別の集合Tを見つける DBMSが集合Tの中のFDを検査 自動的にSの中のFDも検査したことになる 集合Tを見つけることは非常に現実的 presented by junko
9.3 自明/自明でない従属 • 自明・・・従属性が満たされないことはあり得 ない場合 { S#, P# } → S# 右辺が左辺の部分集合 FDは自明 presented by junko
9.4 従属集合の閉包 • FDのある集合Sによって暗示される全てのFDの集合をSの閉包(closure)という S+ { S#, P# } → { CITY, QTY } ー { S#, P# } → CITY { S#, P# } → QTY S S+ presented by junko
推移FDの例 • 関係R上の三つの属性A,B,CがR上で FD : A → B FD : B → C を満たしている • この場合 FD : A → C もR上で成り立つ CはB経由でAに推移的に従属している presented by junko
アームストロングの論文 • SからS+を計算する方法が必要 アームストロングの論文 • 最初の取り組み • あるFDから新しいFDを推論する • 一連の推論規則(アームストロングの公理) presented by junko
アームストロングの推論の規則 • A、B、Cをある関係Rの属性集合の任意の部分集合とする • ABはAとBの和を意味する 1.反射 Reflexivity:BがAの部分集合ならば A →B 2.増加 Augmentation:A→Bならば AC → BC 3.推移 Transitivity:A→BでB→Cならば A→C presented by junko
アームストロングの規則について • これらの規則は、それぞれ関数従属から直ちに証明できる • FDのある集合Sにおいて、Sによって暗示される全てのFDが導き出される →complete(完備) • 追加のFDは導き出されない →sound(健全) この規則は正確に閉包S+を導き出すことができる presented by junko
追加規則 4.自己決定 Self-determination:A → A 5.分解 Decomposition:A→BCならば A→BかつA→C 6.和 Union:A→BかつA→Cならば A→BC 7.合成 Composition:A→BかつC→Dならば AC→BD presented by junko
Darwenの規則 • Darwenは次の規則を示し、一般的な単一化定理と呼んでいる 8.A→BかつC→DならばA∨(C-B) → BD (“∨”は和を、“ー”は集合の差を表す) presented by junko
一般的な単一化定理(Darwenの規則) 例:属性A、B、C、D、E、FとFD A → BC (BC:属性Bと属性Cからなる集合) B → E CD → EF 『FD:AD→FはR上で成り立ち、その集合の閉包の一部である』 証:1.A → BC (与えられたもの) 2.A → C (1の分解) 3.AD → CD (2の増加) 4.CD → EF (与えられたもの) 5.AD → EF (3と4の推移) 6.AD → F (5の分解) presented by junko
9.5 属性集合の閉包 • あるFDが閉包かどうかを判別するための有効な手段を示す • 関係Rのスーパーキー • Rの候補キーを部分集合として少なくとも一つ持つRの属性集合 • 関数従属性 K→A がRの全ての属性Aに対して成り立つようなRの属性集合の部分集合K • 属性集合Kがスーパーキーかの判別はKが候補キーであるかの判別の大きなステップ (候補キー=最小のスーパーキー) presented by junko
Kがスーパーキーか? • Kに関数的に従属している全ての属性集合が、本当にRの全ての属性集合か • R上で成り立つ集合SのもとでのKの閉包K+を判別する方法が必要 presented by junko
閉包K+の計算アルゴリズム CLOSURE[K,S] := K ; Do “forever” ; for each FD x → y in S do ; if X is a subset of CLOSURE[K,S] then CLOSURE[K,S] := CLOSURE[K,S] UNION Y ; end ; if CLOSURE[K,S] did not change on this iteration then leave the loop ; End; presented by junko
例 例:属性A、B、C、D、E、FとFD A → BC E → CF B → E CD → EF をもつ関係Rがあるとする FDのこの集合への属性集合{A、B}の閉包{A、B}+を 計算する presented by junko
閉包の計算 1.{A,B}の閉包を格納する変数CLOSURE[K,S]を初期化 2.与えられたFDにつき1回、計4回内側のループを回す 最初の反復(A→BC):左辺=計算したCLOSURE[K、S]の部分集合 →属性(Bと)Cを結果に加える →CLOSURE[K,S]を集合{A,B、C}とする 3.2回目の反復(E→CF):左辺≠計算した結果の部分集合 →変化なし 4.3回目の反復(B→E):CLOSURE[K,S]にEを加える 5.4回目の反復(CD→EF):CLOSURE[K,S]変化なし 6.再び4回内側のループを回す 1,3,4回目-変化なし 、 2回目-{A、B、C、E、F}へ拡張 7.再び4回内側のループを回す →CLOSURE[K,S]変化なし →{A,B}+={A,B,C,E,F} 終結 ∴{A,B}はスーパーキーでない(候補キーでもない) presented by junko
9.6 従属の規約集合 • S1とS2を二つの集合とする • S1+がS2+の部分集合ならば、S2はS1のcover(被覆)という • S2がS1のcoverであり、S1がS2のcoverであるならば(S1+=S2+)、S1とS2は等価である presented by junko
既約 irreducible • 次の三つの性質を満たすとき、かつそのときに限り、FDの集合Sは既約( irreducible )であると定義する 1.Sの全てのFDの右辺はただ一つの属性を持つ 2.Sの全てのFDの左辺は既約である 3.閉包を変えることなしには、SからどのFDも取り 去ることはできない presented by junko
既約の性質 • 既約の性質の例として部品関係Pを考える 次のFDはその関係内で成り立つ P# → PNAME P# → COLOR P# → WEIGHT P# → CITY FDのこの集合は、簡単に既約であることが分かる • 右辺は単一属性 • 左辺は明らかに既約 • 閉包を変更しない限りどのFDも取り除くことはできない presented by junko
既約の性質(1) • Sの全てのFDの右辺(従属項)はただ一つの属性を持つ → 単項集合 <既約ではない例(1)> ① P# → {PNAME、COLOR} ② P# → WEIGHT ③P# → CITY 理由:①の右辺は単項集合ではない presented by junko
既約の性質(2) • Sの全ての左辺(決定項)は既約である • 閉包S+を変えることなしに決定項からいかなる属性も取り去ることはできない→左既約 <既約ではない例(2)> ①{P#、PNAME} → COLOR ②P# → PNAME ③P# → WEIGHT ④P# → CITY 理由:①のFDは、閉包を変えることなしに左辺から PNAMEを落とすことで簡略化可能 presented by junko
既約の性質(3) • 閉包S+を変えることなしにはSからどのSのどのFDも取り去ることはできない <既約ではない例(3)> ①P# → P# ②P# → PNAME ③P# → COLOR ④P# → WEIGHT ⑤P# → CITY 理由:①のFDは閉包を変えることなしに取り去ること が可能 presented by junko
既約集合に等価な集合 FDの全ての集合について既約集合に等価な集合が少なくとも一つ存在する 証明:SのもともとのFDの集合を考える • 分解規則により、SのそれぞれのFDを、一般性を損なうことなしに右辺単項にする • SのそれぞれのFDfについてfの左辺のそれぞれの属性Aを調べる • Sと、fの左辺からAを削除することで得られるFDの集合が等価ならば・・・ • Fの左辺からAを削除する • 最終的なSは既約、もともとの集合Sに等価である presented by junko
既約集合に等価な集合:例 • 例:属性A、B、C、DとFD • A → BC • B → C • A → B • AB → C • AC → D をもつ関係Rを考える 与えられた集合に等価で既約なFDの集合を計算する presented by junko
例(1) 1.それぞれのFDを右辺単項に書き直す • A → B • A → C • B → C • A → B • AB → C • AC → D A → BC presented by junko
例(2) 2.FD:AC→Dの左辺から属性Cを削除できる • A→Cがあるので、追加性より A→AC • AC→Dならば 推移性より A→D 属性Cを削除 presented by junko
例(3) • FD:AB→Cは削除できる • A→Cがあるので、追加性より AB→CB • 分解性より AB→C (AB→B) FD:AB→C削除 presented by junko
例(4) • FD:A→Cは削除できる • A→BとB→Cによって暗示され A→C FD:A→C削除 presented by junko
既約被覆 • 最後に残るFDは以下の三つ • A → B • B → C • A → D が残る • この集合は既約である • 既約でFDの他のある集合Sと等価なFDの集合IはSの既約被覆(irreducible cover)という • 検査されるべきFDのある特定の集合があるとき、システムにとっては代わりの既約Iを見つけて検査する • FDのある集合が必ずしも一意既約被覆である必要は無い presented by junko
まとめ • 関数従属性FDは、ある関係の属性の二つの集合間における多対1の関係 • 自明なFDには興味がない • あるFDは他のFDを暗示する(閉包closure) • CompleteでsoundなFDの推論規則 • アームストロングの規則 • 既約集合 • 既約被覆 presented by junko