■ 正規化
正規化とは
冗長性を排除することでデータの更新時異状を防ぐことを目的として、
1つの事実を1箇所(1 fact in 1 place)で記録することを原則とする。
非正規形
- 属性値に繰り返しを持つような属性が存在する。
[注文]
注文番号 | 顧客コード | 氏名 | 商品番号 | 商品名 | 単価 | 数量 | 合計金額 |
---|---|---|---|---|---|---|---|
00001 | U001 | 大阪 太郎 | C0001 C0002 C0003 |
消しゴム ボールペン コンパス |
100 200 300 |
1 1 1 |
600 |
00002 | U002 | 東京 次郎 | C0002 | ボールペン | 200 | 2 | 400 |
00003 | U003 | 福岡 花子 | C0002 C0003 |
ボールペン コンパス |
200 300 |
3 2 |
1200 |
第1正規形
- 属性値に繰り返しを持つような属性が存在しない。
- 導出項目(単価 × 数量 = 合計金額)を排除する。
[注文]
注文番号 | 顧客コード | 氏名 | 商品番号 | 商品名 | 単価 | 数量 |
---|---|---|---|---|---|---|
00001 | U001 | 大阪 太郎 | C0001 | 消しゴム | 100 | 1 |
00001 | U001 | 大阪 太郎 | C0002 | ボールペン | 200 | 1 |
00001 | U001 | 大阪 太郎 | C0003 | コンパス | 300 | 1 |
00002 | U002 | 東京 次郎 | C0002 | ボールペン | 200 | 2 |
00003 | U003 | 福岡 花子 | C0002 | ボールペン | 200 | 3 |
00003 | U003 | 福岡 花子 | C0003 | コンパス | 300 | 2 |
第2正規形
- 候補キーに部分関数従属する属性を排除する。
[注文]
注文番号 | 顧客コード | 商品番号 | 数量 |
---|---|---|---|
00001 | U001 | C0001 | 1 |
00001 | U001 | C0002 | 1 |
00001 | U001 | C0003 | 1 |
00002 | U002 | C0002 | 2 |
00003 | U003 | C0002 | 3 |
00003 | U003 | C0003 | 2 |
[商品]
商品番号 | 商品名 | 単価 |
---|---|---|
C0001 | 消しゴム | 100 |
C0002 | ボールペン | 200 |
C0003 | コンパス | 300 |
[顧客]
顧客コード | 氏名 |
---|---|
U001 | 大阪 太郎 |
U002 | 東京 次郎 |
U003 | 福岡 花子 |
第3正規形
- 候補キーに推移的関数従属する属性を排除する。
- 被決定項として非キー属性のみを対象とする。
- データ整合性を保障する。
[注文]
注文番号 | 顧客コード |
---|---|
00001 | U001 |
00002 | U002 |
00003 | U003 |
[注文明細]
注文番号 | 商品番号 | 数量 |
---|---|---|
00001 | C0001 | 1 |
00001 | C0002 | 1 |
00001 | C0003 | 1 |
00002 | C0002 | 2 |
00003 | C0002 | 3 |
00003 | C0003 | 2 |
[商品]
商品番号 | 商品名 | 単価 |
---|---|---|
C0001 | 消しゴム | 100 |
C0002 | ボールペン | 200 |
C0003 | コンパス | 300 |
[顧客]
顧客コード | 氏名 |
---|---|
U001 | 大阪 太郎 |
U002 | 東京 次郎 |
U003 | 福岡 花子 |
ボイスコッド正規形
- 被決定項としてキー属性を対象とする。
- 関数従属性の保存が出来ない場合や、参照整合性が失われる場合がある。
【試験対策】
- 各正規形の条件を理解する。
- 色々な表を正規化してみる。