データベース設計の流れ
- 作りたいものからデータを抽出する
- 何をデータとして保存する?
- システムで使用するもの
- ユーザーが登録するもの(ユーザー名など)
- 何をデータとして保存する?
- 表の形式を考える
- まずは全部のデータをひとつのテーブルに突っ込む
- 一つのレコードを検索するときに、一意に特定できるかチェックする。
- できない場合は主キーをつけて一意に特定できるように
- しかし、一つのカラムがList形式の場合主キーを付けても一意に特定できない例えばこれ
- 一意に特定できるようにするために、要素ごとにカラムを作りIDを割り当てると、要素が増えるためにカラムを増やさないといけない
- 主キーを2つのIDの組み合わせとみれば、主キーが各カラムの値を一意に特定できる(第一正規化)
- しかし、更新や削除を行うとき複数のレコードを更新しなければならないことがある。そのときにデータに矛盾が生じるかも?例えばこれ
- 重複をなくすためにテーブルを分割する(第二正規化)
- 一つのテーブルAに、IDとその具体的な値をもつテーブル設計の場合、登録されていないデータの登録をテーブルAでは行えない。例えばこれ
- テーブルを分割(第三正規化)
重要なポイント
- 正規形
- 一貫性と効率性を持った形でデータを保持するためのデータ形式
- 正規化
- 一貫性と効率性を持つようにデータベースを設計すること(正規形にすること)
- 第一正規化
- 一つのセルの中には一つの値しか含まない。これにより効率よく検索ができる
- 関数従属性
- $y = f(x)$: 入力$x$に対して出力$y$が決まる
- $yはxに従属する$: x → y
- 1つのセル(入力)に一つの値(出力)の方針も関数従属性
- 第二正規化
- 第一正規形から部分関数従属を排除
- 部分関数従属 = 主キーの一部に対して従属する列がある
- 第一正規形から部分関数従属を排除