プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】正規化(第3正規化) -36-

www.pon-x.jp

前回の続き

今回は、第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回にわたり正規形の説明でした。