正規化(第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 | 剣道部 |