テクノロジー
2018年12月28日テーブルの正規化を学ぼう
今回は、データ管理の基本的な手法の一つであるテーブルの正規化について解説をします。
データの無駄を省くテーブルの正規化を学ぼう
今回は、データ管理の基本的な手法の一つであるテーブルの正規化について解説をします。
効果的に学習を進めるためのお役に立つことができましたら、幸いです。
テーブルの 正規化
とは 余計なデータを取り除いた状態
にすることです。
余計なデータとは 同じデータが重複
していることを指します。
テーブルに関して何も手をつけていない状態を 非正規形
といい、そこから 第一正規形
第二正規形
第三正規形
と言います。
テーブルの正規化をするメリットは 管理をしやすくする
ことです。
今回は以下のようなテーブルを例に正規化を行っていきます。
(取引テーブル
)
trans | name | live | product_name | product_price | product_name | product_price | |
---|---|---|---|---|---|---|---|
1 | aaa@hoge.com | aaa | 埼玉県 | 扇風機 | 20000 | ケトル | 3500 |
2 | bbb@hoge.com | bbb | 東京都 | 掃除機 | 30000 | 扇風機 | 20000 |
3 | ccc@hoge.com | ccc | 東京都 | ケトル | 3500 | テレビ | 60000 |
4 | ddd@hoge.com | ddd | 東京都 | 掃除機 | 30000 | テレビ | 60000 |
第一正規化
第一正規化とは テーブルの列に関するムダの取り除き
をした形のことです。
この例だと product_name
と product_price
というカラムが重複しています。
それを防ぐため以下のようにします。
(取引テーブル
)
id | name | live | product_name | product_price | |
---|---|---|---|---|---|
1 | aaa@hoge.com | aaa | 埼玉県 | 扇風機 | 20000 |
2 | aaa@hoge.com | aaa | 埼玉県 | ケトル | 3500 |
3 | bbb@hoge.com | bbb | 東京都 | 掃除機 | 30000 |
4 | bbb@hoge.com | bbb | 東京都 | 扇風機 | 20000 |
5 | ccc@hoge.com | ccc | 東京都 | ケトル | 3500 |
6 | ccc@hoge.com | ccc | 東京都 | テレビ | 60000 |
7 | ddd@hoge.com | ddd | 東京都 | 掃除機 | 30000 |
8 | ddd@hoge.com | ddd | 東京都 | テレビ | 60000 |
これによって product_name
と product_price
が重複しないようになりました。
第二正規化
第二正規化とは 主キーに関する部分を別テーブルに切り出し
た形のことです。
この例だと、transというキーはユーザと商品を取りまとめる役割を持っています。
そのためユーザと商品は別のテーブルに切り出すことで、重複を防ぐことができます。
具体的には以下のように切り出します。
(カスタマーテーブル
)
id | name | live | |
---|---|---|---|
1 | aaa@hoge.com | aaa | 埼玉県 |
2 | bbb@hoge.com | bbb | 東京都 |
3 | ccc@hoge.com | ccc | 東京都 |
4 | ddd@hoge.com | ddd | 東京都 |
(商品テーブル
)
id | name | price |
---|---|---|
1 | 扇風機 | 20000 |
2 | ケトル | 3500 |
3 | 掃除機 | 30000 |
4 | テレビ | 60000 |
(取引テーブル
)
id | user_id | product_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
4 | 2 | 1 |
5 | 3 | 2 |
6 | 3 | 4 |
7 | 4 | 3 |
8 | 4 | 4 |
第三正規化
第三正規化とは 主キー以外に関する部分を別テーブルに切り出し
た形のことです。
この例だと、カスタマーテーブルの live
というカラムに重複があるのを確認できると思います。
ここを 都道府県
テーブルとして切り出します。
(カスタマーテーブル
)
id | name | prefecture_id | |
---|---|---|---|
1 | aaa@hoge.com | aaa | 2 |
2 | bbb@hoge.com | bbb | 1 |
3 | ccc@hoge.com | ccc | 1 |
4 | ddd@hoge.com | ddd | 1 |
(都道府県テーブル
)
id | name |
---|---|
1 | 東京都 |
2 | 埼玉県 |
3 | 千葉県 |
以上でテーブルの正規化に関しての説明を終了します。
いかがでしょうか?
データの正規化は「データベースを管理する上で、必要な項目を整理・管理をしやすくする事」を目的に行います。
テーブルを扱う上で必須とも言える知識ですので、ぜひご理解をお深めください。