テクノロジー

2018年12月28日

テーブルの正規化を学ぼう

データの無駄を省くテーブルの正規化を学ぼう

今回は、データ管理の基本的な手法の一つであるテーブルの正規化について解説をします。
効果的に学習を進めるためのお役に立つことができましたら、幸いです。

テーブルの 正規化 とは 余計なデータを取り除いた状態 にすることです。
余計なデータとは 同じデータが重複 していることを指します。
テーブルに関して何も手をつけていない状態を 非正規形 といい、そこから 第一正規形 第二正規形 第三正規形 と言います。
テーブルの正規化をするメリットは 管理をしやすくする ことです。

今回は以下のようなテーブルを例に正規化を行っていきます。

(取引テーブル)

trans email 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_nameproduct_price というカラムが重複しています。
それを防ぐため以下のようにします。

(取引テーブル)

id email 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_nameproduct_price が重複しないようになりました。

第二正規化

第二正規化とは 主キーに関する部分を別テーブルに切り出し た形のことです。
この例だと、transというキーはユーザと商品を取りまとめる役割を持っています。
そのためユーザと商品は別のテーブルに切り出すことで、重複を防ぐことができます。

具体的には以下のように切り出します。

(カスタマーテーブル)

id email 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 email 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 千葉県

以上でテーブルの正規化に関しての説明を終了します。

いかがでしょうか?
データの正規化は「データベースを管理する上で、必要な項目を整理・管理をしやすくする事」を目的に行います。
テーブルを扱う上で必須とも言える知識ですので、ぜひご理解をお深めください。

DIVE INTO CODEのことをもっと知ってみませんか?