前回の続き
今回は、第2正規化についてのはなしです。
第2正規化
前回、第1正規化を行い以下のようにテーブルを設計してきました。
注文番号 | 注文年月日 | 商品ID | 商品名 | 単価 | 数量 | 顧客ID | 顧客名 | 顧客TEL | 顧客住所 |
---|---|---|---|---|---|---|---|---|---|
1001 | 2020/12/20 | K101 | うまい棒 | 10 | 3 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1001 | 2020/12/20 | K112 | がりがりくん | 60 | 2 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1001 | 2020/12/20 | K126 | チップスター | 150 | 1 | P501 | 岡氏 好男 | 0000-00-0000 | 東京都 |
1002 | 2020/12/21 | Y516 | とまと | 90 | 2 | P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
1002 | 2020/12/21 | Y842 | きゅうり | 30 | 3 | P905 | 野菜 好子 | 1111-11-1111 | 埼玉県 |
上記の形式で、リレーショナルデータベースとしては扱えるのですが、まだこれではメンテナンス効率の悪い構造ですので、引き続き正規化を進めていきます。
第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 |
以上、今回はここまで。
次回は第3正規化をやります。