作記録

記憶代わり

正規化(第1正規形から第3正規形)について

正規化の目的

正規化の目的は、データの冗長性を排除すること。
データの冗長性を排除することにより、データの一貫性が保たれる。
例えば、Aテーブルの名前カラムに田中というデータが記録されており、Bテーブルの名前カラムに田中というデータが記録されている状態をデータが冗長であると表現する。田中という苗字に変更を加える際、Bテーブルの名前カラムの変更をしなかった場合、データの一貫性が失われてしまう。

第1正規形

目的

第1正規形にする目的は、あるカラムを指定すれば1つの値を特定できるようにすることである。

定義

第1正規形とは、テーブルの全ての1マスがスカラ値のみを持っている形を指す。

注意するとき

テーブルがコレクション系のカラムを持つ場合に、第1正規形ではなくなる可能性がある。
コレクション系のカラムとは、同じ種類のものが複数存在するようなカラムのことである。

下記のテーブルの例は、コレクション形のカラムを持ち かつ 第1正規形ではないテーブル。

名前 得意科目
近藤真喜雄 国語 理科 算数
真島茜 社会 理科
永井真理子 国語

下記のテーブルの例は、コレクション形のカラムを持ち かつ 第1正規形であるテーブル。

名前 得意科目
近藤真喜雄 国語
近藤真喜雄 理科
近藤真喜雄 算数
真島茜 社会
真島茜 理科
永井真理子 国語

第2正規形

目的

第2正規形にする目的は、記録が出来なくなることを避けることである。

定義

第2正規形とは、部分関数従属がない形を指す。
部分関数従属とは、主キーが複数のカラムの組み合わせの場合に、その一部の主キーのカラムと一部のカラムにだけ関数従属があることである。

注意するとき

主キーが複数のカラムの組み合わせの場合に、第2正規形ではなくなる可能性がある。

下記のテーブルは、主キーが複数のカラムの組み合わせの場合に、その一部の主キーのカラムと一部のカラムにだけ関数従属があるテーブル。
つまり、部分関数従属があり、第2正規形ではないテーブル。

下記のテーブルで1つのレコードを特定をする為には {学年、クラス、クラス名、出席番号} を指定しなければいけない。
その為 {学年、クラス、クラス名、出席番号} が主キーとなる。
しかし、学年とクラスの組み合わせとクラス名にも関数従属がある。
よって、この主キーには部分関数従属がある為、第2正規形ではないテーブルと言える。

学年 クラス クラス名 出席番号 名前
1 A 薔薇組 13 近藤真喜雄
2 C 菊組 16 真島茜
1 A 薔薇組 24 永井真理

下記のテーブルは、部分関数従属がないテーブル。
つまり、第2正規形であるテーブル。

学年 クラス 出席番号 名前
1 A 13 近藤真喜雄
2 C 16 真島茜
1 A 24 永井真理子
学年 クラス クラス名
1 A 薔薇組
2 C 菊組

第3正規形

目的

第3正規形にする目的は、第2正規形と同様に記録が出来なくなることを避けることである。

定義

第3正規形とは、推移的関数従属がない状態を指す。
推移的関数従属とは、主キーによりある特定のカラムが決まり、そのある特定のカラムが別のカラムと関数従属があることである。

注意するとき

主キーを除いて関数従属するカラムが存在する場合に、第3正規形ではなくなる可能性がある。

下記のテーブルは、主キーによりある特定のカラムが決まり、そのある特定のカラムが別のカラムと関数従属があるテーブル。
つまり、推移的関数従属があり、第3正規形ではないテーブル。

下記のテーブルでは、主キーが {学年, クラス, 出席番号} となる。
主キーが決まると {名前, 部活コード, 部活} が特定されるが、部活コードと部活に関数従属がある。
つまり、推移的関数従属がある為、第3正規形ではないテーブルと言える。

学年 クラス 出席番号 名前 部活コード 部活
1 A 13 近藤真喜雄 001 柔道部
2 C 16 真島茜 003 剣道部
1 A 24 永井真理子 003 剣道部

下記のテーブルは、推移的関数従属がないテーブル。
つまり、第3正規形であるテーブル。

学年 クラス 出席番号 名前 部活コード
1 A 13 近藤真喜雄 001
2 C 16 真島茜 003
1 A 24 永井真理子 003
部活コード 部活
001 柔道部
003 剣道部