今回はデータの正規化について説明していきます。
プログラミングを勉強していくとよく正規化ということを耳にすることが多くなります。
正規化とはいったい何なのかについて解説していきます。
そのメリット・デメリットについても説明するので良かったら参考にしてください。
正規化とは
データベースの正規化とは、データベース設計の工程において同一テーブル内のデータの重複をなくすために、適宜データを分割・整理することです。
(例)正規化なし
注文番号 | 注文者名 | 電話番号 | 品名 | 数量 | 仕入れ先 |
---|---|---|---|---|---|
111 | 山田太郎 | 090-111-222 | きゅうり | 5 | 山田農場 |
112 | 高田玲奈 | 070-333-444 | レモン | 10 | 高田商事 |
113 | 倉敷颯太 | 080-555-666 | そうめん | 30 | 気楽製粉 |
正規化をしていない場合だと全ての情報が一つのテーブルで管理しています。
(例)正規化あり
・注文テーブル
注文番号 | 注文明細番号 | 商品名 | 数量 |
---|---|---|---|
111 | 1 | きゅうり | 5 |
112 | 2 | レモン | 10 |
113 | 3 | そうめん | 30 |
・注文者テーブル
注文番号 | 注文者 | 電話番号 |
---|---|---|
111 | 山田太郎 | 090-111-222 |
112 | 高田玲奈 | 070-333-444 |
113 | 倉敷颯太 | 080-555-666 |
・商品情報テーブル
商品番号 | 商品名 | 仕入れ先コード |
---|---|---|
1 | きゅうり | 1A |
2 | レモン | 2B |
3 | そうめん | 3C |
正規化することによってテーブルごとに情報を分けることができ、見やすくなりました。
カラムの中身を見ればそれぞれどんな情報が管理されているか何となく理解できそうですね。
正規化すること、しないことによるメリット・デメリット
正規化することへのメリット・デメリット
メリット
テーブル1つで完結するため、結合ありと比べてSQLの処理が速い
デメリット
もし値を変更(例:完了→済 など)しなければならなくなったら、全てのtodo行を更新しなければならず変更コストが高い
正規化しないことへのメリット・デメリット
メリット
もし値を変更することになってもprogressテーブルの1行だけで済み変更コストが低い
デメリット
テーブルを結合しなければならず、結合なしと比べてSQLの処理が遅い
まとめ
それぞれのメリットとデメリットを確認するとわかりますが、どちらかが良い、どちらかが悪いというわけではありません。それぞれ良さがあり、常に最適解というのがありません。
これはそれぞれのプロジェクトの規模や事情によって設計を変える必要があります。
このことを理解して実務に臨んでいきましょう。