テーブル設計
テーブル名は英語ならば複数形/複数名詞で書ける。そうでなければそのテーブルにはどこか間違いがある。
主キー
必ず1行のレコードを特定できる列の組み合わせのことを指す。
テーブルに必ず1つだけ存在する必要がある。
複合キー
複数列を組み合わせて主キーになるものを複合キーという。
外部キー
別のテーブルの主キーになっているキー。
外部キーが設定されている場合、不整合が起こりうるのでデータの削除は子から順に操作するべき。
キーについて
キーとなる列にはコードやIDなど表記体系の定まった固定長の文字列を用いる。
正規化
データベースで保持するデータの冗長性をなくすこと。第1正規形から第5正規形まである。通常は第3正規形までを考える。
第1正規形
1つのセルの中に1つの値しか含まない状態。
配列はNG。列を増やすか、別途テーブルを切る。
第2正規形
部分関数従属をなくす。部分関数従属とは主キーの一部の列に対して従属する(一部の列が主キーの値によって決まっている)こと。
部分関数従属をなくすにはテーブルを分割する。
正規化は結合によって非正規形(分割前のテーブルの形式)に戻すことができる。
第3正規形
推移的関数従属をなくす。主キー以外の列に対して従属すること。詳細は達人に学ぶDB設計 徹底指南書の3-6を参照。
正規形の判定方法
- A: すべての属性が単一値を取る
- B: 主キーの一部に部分関数従属している属性がない→第2正規形
- C: 候補キー以外に推移的関数従属している属性が存在しない→第3正規形
| A | B | C | 正規形 |
|---|---|---|---|
| false | - | - | 非正規系 |
(A && !B && !C): 第1正規形 (A && B && !C): 第2正規形 (A && B && C): 第3正規形
概念設計 (Conceptual Design)
DBMSに依存しない純粋なデータの概念を考える。ER図を作る。
論理設計 (Logical Design)
概念モデルをDBMSで扱える構造にする。テーブルを作る。正規化はここで行う。
物理設計 (Physical Design)
DBMSに依存した設計に落とし込む。データ型を決める。DDL(CREATE TABLE...)を作る。