前回の続き
今回は、第3正規化についてのはなしです。
第3正規化
前回まで第2正規化まで行い、以下のテーブルが得られました。
TABLE: 売上 Primary Key:注文番号、商品ID
注文番号 | 注文年月日 | 商品ID | 数量 | 顧客ID | 顧客名 | 顧客TEL | 顧客住所 |
---|---|---|---|---|---|---|---|
1001 | 2020/12/20 | K101 | 3 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1001 | 2020/12/20 | K112 | 2 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1001 | 2020/12/20 | K126 | 1 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1002 | 2020/12/21 | Y516 | 2 | P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
1002 | 2020/12/21 | Y842 | 3 | P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
TABLE: 商品 Primary Key:商品ID
商品ID | 商品名 | 単価 |
---|---|---|
K101 | うまい棒 | 10 |
K112 | がりがりくん | 60 |
K126 | チップスター | 150 |
Y516 | とまと | 90 |
Y842 | きゅうり | 30 |
前回、関数従属性の説明をしましたね。
そのことから、商品テーブルにカラムを分離させてあげたということです。
第2正規化は主キーに対いて従属しているカラムを分離させましたが、主キー以外の項目についても従属関係があるカラムがあるとき、これを推移的関数従属といい、別テーブルに切り分ける必要があります。
これを第3正規化といい、第3正規化した結果を第3正規形といいます。
推移的関数従属
上述しましたが、推移的関数従属は主キー以外のカラムで従属関係にあるカラムをテーブル分離することですが、今回のケースは売上テーブルの、顧客IDに対する、顧客名と顧客TELと顧客住所がこれにあたります。
なぜなら、顧客IDはユニークなはずなので、顧客名と顧客TELと顧客住所は一意にきまるだめです。
では、第3正規化をしてみましょう。
TABLE: 売上 Primary Key:注文番号、商品ID
注文番号 | 注文年月日 | 商品ID | 数量 | 顧客ID |
---|---|---|---|---|
1001 | 2020/12/20 | K101 | 3 | P501 |
1001 | 2020/12/20 | K112 | 2 | P501 |
1001 | 2020/12/20 | K126 | 1 | P501 |
1002 | 2020/12/21 | Y516 | 2 | P905 |
1002 | 2020/12/21 | Y842 | 3 | P905 |
TABLE: 商品 Primary Key:商品ID
商品ID | 商品名 | 単価 |
---|---|---|
K101 | うまい棒 | 10 |
K112 | がりがりくん | 60 |
K126 | チップスター | 150 |
Y516 | とまと | 90 |
Y842 | きゅうり | 30 |
TABLE: 顧客 Primary Key:顧客ID
顧客ID | 顧客名 | 顧客TEL | 顧客住所 |
---|---|---|---|
P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
これで第3正規形まで完成です。
以上、3回にわたり正規形の説明でした。