DB設計指南3、4、5章
3章論理設計と正規化
テーブル名は英語ならば複数形/複数名詞で書ける。そうでなければそのテーブルにはどこか間違いがあります。
テーブルの構成要素
キー
以下の2つが特に重要です 1. 主キー 2. 外部キー
主キー 主キー、またはプライマルキーと呼びます。その値を指定すれば必ず1行のレコードを特定できるような列の組み合わせのことです。
よって、テーブルには重複レコードは存在しません。
また、複数行を組み合わせて作るキーを複合キーと呼びます。
外部キー 2つのテーブルの間の列同士で設定するものです。
これはテーブルに対して制約を課します。
外部キーが削除された場合あわせて子のテーブルも削除する動作をカスケードと呼びます。
制約 1. NOT NULL制約 2. 一意制約 3. CHECK制約 * ある列の取りうる値の範囲を制限するための制約です。
正規化とは何か
正規化の定義 正規化とは、データベースで保持するデータの冗長性を排除し、一貫性と効率性を保持するためのデータ形式です。
また、正規化には第1〜第5正規形があります。これは数字が増えるほど正規化のレベル(字数)が上がっていきます。
通常業務では第3正規形までを考えることが多いです。
第1正規形
そもそもRDBは第1正規形を満たす形になっています。
第1正規形の定義 1つのセルの中には1つの値しか含まないというのが定義です。
第2正規形
部分関数従属 主キーの一部の列に対して従属する列がある 完全関数従属 主キーを構成するすべての列に従属性がある
第2正規化を行うことは、テーブルを分割すること。
第3正規形
推移的関数従属 テーブル内部の段階的な従属関係のこと
第3正規化を行うことは、小テーブルに親テーブルのレコードのidを格納するカラムを追加すること。
4章ER図
ER図 E : Entity(実体)のことで、つまりテーブルを表す R : Relation(関係性)のことで、文字通りテーブル同士の関連を表す
IE表記法 通称「鳥の足」という名前でも知られています。これは初心者向きの記法です。
テーブルの関連のパターン
- 1対1
- 1対多
- 多対多
1対1は同じテーブルにすれば済むのであまり見かけません。 少なくとも正規化をすればこの形は現れません。
1対多は最もよくある関連のタイプです。
多対多は少し特殊で、通常は関連実体を用いて1対多にします。
5章論理設計とパフォーマンス
正規化のデメリット
- 実用に堪えないレベルでSQLが遅くなります。特に検索が遅くなります。
- 改修コストが大きくなる
原則として非正規化は許さない あくまで非正規化は最後の手段 論理設計には物理設計の知識が必要