データモデルの設計のベストプラクティス
データモデルの設計のベストプラクティス
主キーを使って、データベースシステムが 1 つの行を他の行と区別できるようにする
正規化に関して
データベースの正規化により、冗長なデータを取り除く
関係 (relationship)、あるいは外部キー制約
正規化された状態から、扱いやすい非正規なテーブルから仮想テーブル (virtual table) を作成するとよい
クエリ (query) とも呼ばれる (単なる JOIN を使った SELECT のこと)
第 3 正規形 (3NF) は、既により高いレベルの正規形を満たしていることが多い
「第三正規形で十分」 という都市伝説があるが、実際にはより上位の正規形のどこに違反するかを考える必要
1 つのテーブルが複数のテーブルに関連しているときに起こりやすい
正規化は重要だが、読み取り負荷が高い環境 (データウェアハウスなど) では非正規化されていた方が良い場合もある
繰り返しグループ (repeating group) : 1 つの行に foo1、foo2、foo3 みたいな形で似た属性が複数出てくる
繰り返しグループがあるテーブルを正規化するために、UNION クエリを使える
SELECT id, foo1 AS foo FROM xxx WHERE ... UNION SELECT id, foo2 AS foo FROM xxx WHERE ...
属性 (列) には、サブジェクトを表す属性が 1 つだけ含まれる (アトミックデータ (atomic data) と呼ばれる)
列に複数のプロパティ値を格納すると、個別の値を扱いづらい (例えば人名の苗字と名前とか、住所の国や郵便番号、市区町村など)
アプリケーションがデータをどう使うか次第
計算値の格納はパフォーマンスに深刻な問題が発生する可能性
トリガ、計算列など
外部キーを明示的に使用することで、参照整合性を確保する
DRI (Declarative Referential Integrity) 制約
FOREIGN KEY 制約
参考文献
Effective SQL