テクノロジー
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 | 千葉県 |
以上でテーブルの正規化に関しての説明を終了します。
いかがでしょうか?
データの正規化は「データベースを管理する上で、必要な項目を整理・管理をしやすくする事」を目的に行います。
テーブルを扱う上で必須とも言える知識ですので、ぜひご理解をお深めください。