■第2正規形にした関係
“伝票明細”
伝票番号 | 商品番号 | 商品名 | 数量 |
1001 | 2001 | 商品A | 5 |
1001 | 2002 | 商品B | 10 |
1002 | 2001 | 商品A | 7 |
1002 | 2003 | 商品C | 20 |
1002 | 2004 | 商品D | 8 |
1003 | 2005 | 商品E | 30 |
1004 | 2005 | 商品E | 50 |
“伝票”
伝票番号 | 顧客番号 | 顧客名 |
1001 | 11 | 顧客A |
1002 | 13 | 顧客B |
1003 | 29 | 顧客C |
1004 | 29 | 顧客C |
■第2正規形の問題点
1.タプル挿入時異状
顧客番号15、顧客名が顧客Dのデータを伝票が発生する前に、(NULL、15、顧客D)を登録しようとすると、主キーの伝票番号がNULL不可のため、登録できません。
2.タプル更新時異状
顧客番号29の顧客Cを更新しようとすると、顧客番号29の列が2行があるため、両方を一度修正する必要があります。1行だけを更新すると、データに矛盾が生じてしまいます。
3.タプル削除時異状
伝票番号1001のタプルを削除すると、顧客番号11の情報も消えてしまいます。そのため顧客情報が保持できなくなります。
■推移的関数従属性
関係Rの異なる属性または属性の集合であるX、Y、Zについて、X→Y、Y (not)→X、Y→Zの三つの制約が成立している関数従属性です。

この関係は、「Xが決まるとYが決まる」、「Yが決まるとZが決まる」、「Yが決まってもXは決まらない」という関係です。
■第3正規形
第2正規形を第3正規形にするために、推移的関数従属性を排除します。
具体的には、X→Y→Zの関係において、Y→Zを別の関係とします。またYの元関係にも外部キーとして残しておきます。
第3正規形にした関係“伝票”
伝票番号 | 顧客番号 |
1001 | 11 |
1002 | 13 |
1003 | 29 |
1004 | 29 |
第3正規形にした関係“顧客”
顧客番号 | 顧客名 |
11 | 顧客A |
13 | 顧客B |
29 | 顧客C |
■まとめ
1.第3正規形では、すべての非キー属性に推移的な関係従属性が存在しない。
2.第3正規形にするために、〇→△→□といった形の推移的関数従属性を排除する。
Comments