SQL DB正規化

直ぐ忘れてしまう。

先ず、一方の値が決まると他方も決まるものを、関数従属性という。

第一正規化

一つのセルに複数のデータを持たない。

第二正規化

部分関数従属を取り除く。
部分関数従属とは、主キーの一部だけで一意に決まる列のこと。

主キーが複数あり、その内の一つだけで値が決まるものを別のテーブルにする。

第三正規化

推移的関数従属を取り除く。

推移的関数従属とは、テーブル内の段階的な関数従属のこと。
つまり、主キー以外と関数従属があること。

主キー以外の項目で、他の列の値を一意に決めるものを別テーブルにする。

例えば、(主)社員ID → 部署コード → 部署名

部署コードが決まれば部署名が決まる。当然主である社員IDと部署コードは関数従属の関係なので、
段階的な関数従属があるといえる。

部分関数従属、推移的関数従属を取り除くことの必要性。

あるテーブルの中で推移的関数従属が残っていると、間違った登録が可能。(会社コードと会社名)
また、主キーが不明の段階で登録できない。

キー| メンバー名 | 会社コード  | 会社名
1  | 太郎     | 0000   | AAA
2  | 次郎     | 0001   | AAA

テーブルの関連

1対1、1対多、多対多があるが、通常1対多のみ使う。

多対多となる場合、関連実体というテーブルを作る。ただ、通常の業務要件では、
マスタとマスタを直接関連付けることはないので、普通に考えると多対多とはならない。