DB設計:正規化

エンティティ(実体)

例:美容院 予約システム

  1. 画面図などを使って、仕様を決める

  2. 画面図や仕様書を見ながら、何をデータとして保存するか列挙していく。
    列挙したデータを種類ごとに分ける。

    • 店名
    • 時間帯
    • 美容師
    • コース
    • システム側が事前に用意するもの

      • 店名
      • 美容師
    • ユーザーが登録するもの

      • 時間帯
      • コース
  3. 列挙したデータを抽象化して、エンティティとしてまとめる。

    • 店名ID:
    • 美容師No:

    • 時間帯:
    • コース:
  4. テーブル名と列名を定義し、データを入れる

クロエ(店名)テーブル
+--------+--------------+-------+
| 美容師ID|    時間帯     | コース |
+--------+--------------+-------+
| 1      | 9:00 ~ 18:00 | カット |
| 2      |10:00 ~ 19:00 | カラー |

正規化

  • DB設計の手法の1つ
  • 第1 ~ 第6正規形 まである
    • 第3正規形までを扱うことが多い
  • 冗長性を防ぐのが目的
    • 冗長性:データの重複。例:複数行が全く同じデータ。
  • 整合性を保つため
  • 無損失分解:可逆的(分解後)に元のテーブルに戻せるか考えて正規化すること

第1正規形

  • 1つのセルに、1つの値のみ入る

第2正規形

  • 関数従属性:y = f(x)。y が決まれば、x も決まる

第3正規形

  • 第2正規形から、推移的関数従属性を無くすこと
  • 推移的関数従属性:テーブル内にある段階的な関数従属性
    • 例:あるテーブルにおいて、AとBが決まると、CとDが決まる場合、
      CとDをそのテーブルから切り離して、別のテーブルを作成する。
      すると、Dの値だけが増える場合に対応しやすくなる。

ボイスコッド正規形

  • 非キーから、主キーへの関数従属性をなくすこと