参考書を読んだメモ : 達人に学ぶDB設計 徹底指南書 3章

達人に学ぶDB設計 徹底指南書

論理設計と正規化

  • RDBにおけるテーブルとは同じ種類のものの集合のこと
  • キーとはある情報を引き出すための鍵。特に最も重要なのが主キー
  • 正規化はデータの冗長性をなくしていく作業。目的は更新時のデータの不整合を防止する
  • 正規化を進めていくほど検索性能が劣化する。通常は第三正規形までで十分

テーブルとは何か

  • テーブルとは共通点を持ったレコードの集合
  • テーブル名は英語なら複数形/複数名詞で書ける。そうでなければそのテーブルにはどこか間違いがある

テーブルの構成要素

  • テーブルの行と列はレコードとカラムとも呼ぶ
  • キーはあるレコードを特定するための列の組み合わせ
  • 主キー
    • プライマリキー
    • 主キーはその値を指定すれば必ず1行のレコードを特定できるような列の組み合わせ
    • 一意に識別するともいう
    • テーブルには重複行は存在できない
    • 複数列を組み合わせて作るキーを複合キーと呼ぶ
  • 外部キー
    • 2つのテーブル間の列同士で設定するキー
    • 他のテーブルから参照しテーブルに存在しないデータの登録を防ぐ
    • 参照整合性制約
    • 外部キーは親子関係と同じ
    • 外部キーが設定されている場合、データの削除は子から順に操作する

制約

  • NOT NULL
    • 空欄のデータは登録できない
    • テーブル定義において列は可能なかぎりNOT NULL制約を付加する
  • 一意制約
    • ある列の組において一意性を求める。主キーと違い何個でも設定できる
  • CHECK制約
    • 値の範囲に制限を付ける

正規化とは何か?

  • 正規形を作る方法
  • 正規形とはデータベースで保持するデータの冗長性を排除し、一貫性と効率性を保持するためのデータ形式

第一正規形

  • 1つのセルの中には1つの値しか含まない
  • 一つのセルに一つだけの値が含まれている時の値をスカラ値と呼ぶ
  • スカラ値だけなら主キーは各列を一意に決めることができる
  • ある値が決まれば列が一つに決まる。これを関数従属性と呼ぶ

第二正規形

  • 主キーの一部の列に対して従属する列がある関係を部分関数従属という
  • 主キーを構成する全ての列に従属性がある場合を完全関数従属という
  • 第二正規形は部分関数従属を解消することで得られる
  • 部分関数従属を解消する手段はテーブルの分割

第三正規形

  • テーブルないに存在する段階的な従属関係のことを推移的関数従属と呼ぶ
  • これを解消することで実現する

ボイスーコッド正規形

  • これ以降の正規形は一般的な業務では必要はない
  • 3.5正規形とも呼ばれる
  • 非キーからキーへの関数従属を解消する

第四正規形

  • 関連するエンティティに含まれる関連は1つのテーブルに一つ

第五正規形

  • 関連がある場合はそれに対応するテーブルを作る