なぜ正規化するのか
データの整合性を保つため
同じデータはを2重に持たない=2重に持たないので矛盾した事実が存在することはない=1カ所変更すればよい
導出データシステム
オリジナルのソースから再生成できる
キャッシュ
第1正規形
リレーションがスカラ値のみで構成されている=反復列が含まれていない
=リレーショナル演算で扱える形になっている
更新時異常が生じる可能性がある
表顧客名 | 商品名 | 数量 | 単価 | 金額 |
A商店 | テレビ | 3 | 198000 | 594000 |
Bマート | テレビ | 10 | 198000 | 1908000 |
Bマート | 洗濯機 | 5 | 59800 | 299000 |
C社 | 餅つき器 | 1 | 29800 | 29800 |
更新時異常
タップル挿入時異常
電子レンジを加えるとき -, 電子レンジ, -, 74800, -
電子レンジが74800というデータを挿入できない
タップル削除時異常
C社からの注文がキャンセルになったとき削除すると、 餅つき器, 29800
という情報が消える
タップル修正時異常
1
テレビの単価が変更になったとき2つのタップルを変更しなければならない
2
C社の注文が餅つき器からテレビになったとき、餅つき器の価格の情報が失われる
リレーションを分割する
第2正規形
第1正規形かつ主キーに依存する列のみを含んでいる
まだ更新時異常が生じる可能性がある
表 社員番号 | 社員名量 | 給与 | 所属 | 勤務地 |
0650 | 鈴木一郎 | 50 | K55 | 神奈川 |
1508 | 浜崎アユ | 40 | K41 | 東京 |
0231 | 宇多田ヒカル | 60 | K41 | 東京 |
2034 | 別所幸治 | 40 | K55 | 神奈川 |
2100 | 森虎丸 | 40 | K58 | 静岡 |
更新時異常
タップル削除時異常
2100 森虎丸 40 K58 静岡
が削除されると - - - K58 静岡
の情報がなくなる
タップル更新時異常
1
K41が東京から千葉にうつったとする
2
森がK55の神奈川勤務になったとき K58 静岡
の情報が消える
所属 -> 勤務地の関数従属性が存在する
推移的関数従属性である
第3正規形
第2正規形かつ過渡的にも依存していない列のみが含まれている
意味的制約としての関数従属性が保存されない場合ある
第4正規形
第5正規形
どこまで正規化すれば良いか
>「第3正規化止まりにするのが良いのではにか」という共通認識ができている。
経験則から
サロゲートキー