リレーショナルデータベースデザイン
リレーション社員(社員番号,社員名,給与,所属,勤務地) があったとする。主キーは社員番号で、主キー以外の候補キーはなく、 非キー属性である社員名、給与、所属、勤務地は主キーに完全従属しています。 このリレーションは第2正規形であるといえます。 ですが、このリレーション社員には様々な更新時異常が発生してしまいます。
図1.リレーション 社員
図1リレーション社員は第2正規形ですが、所属地→勤務地という関数従属性が存在し、 勤務地が主キーに完全従属はしているのだけれど、社員番号→勤務地という主キーからの完全従属性は 社員番号→所属∧所属→勤務地 ⇒ 社員番号→勤務地(推移律) により導出された推移的関数従属性であるということに原因しています。 つまり、所属が決まると勤務地が決まるという関数関係は、リレーション社員からは分離して格納されてよく、 その関数従属性を使ってリレーション社員を図2図3のように分解して正規化すべきなのです。
そこで、商品名 → 単価という関数従属性を使ってリレーション注文を2つの射影 注文[顧客名,商品名,数量,金額](図2)と注文[商品名,単価](図3)に情報無損失分解すると 2つのリレーションが第2正規形となる。
図2.リレーション 社員[社員番号,社員名,給与,所属]
図3.リレーション 社員[所属,勤務地]
X,Y,ZをリレーションスキーマRの異なった属性とする。また、
Rには次の3つの制約が成立しているとする。
X→Y
¬Y→X
Y→Z
ただし、Y→Zは自明な関数従属性ではないとする。すると、これから次の2つの制約が成立する。
X→Z
¬Z→X
このようなとき、X→Zを推移的関数従属性(transitive functional dependency)といい、
ZはXに推移的に従属する。(transitively functionally dependent)という。
リレーションスキーマRが第3正規形(the third normal form, 3NF)であるとは次の2つの条件を
満たすときをいう:
(1)Rは第2正規形である。
(2)Rの全ての非キー属性はRのいかなる候補キーにも推移的に関数従属しない。