このチャプターの目次
ジェイウォーク(信号無視)
- やりたい事
- 複数の値を持ちたい
- アンチパターン
- 1つのカラムに、カンマ区切りで持ってしまう
- 解法
- 交差テーブル(中間テーブル)を使用する
- 参考文献
ナイーブツリー(素朴な木)
- やりたい事
- 階層構造を表現したい
- アンチパターン
- 隣接リストを用いて、常に親にのみ依存する
- 解法
- 代替ツリーモデルを用いる(経路列挙モデル、入れ子モデル、閉包モデル、など)
- 参考文献
IDリクワイアド(とりあえずID)
- やりたい事
- 行を一意にすべく、主キーを持ちたい
- アンチパターン
- とりあえず"ID"(疑似キー)を用いる
- 解法
- 一意でNULL許容せず識別可能な属性があるなら、自然キーや複合キーを用いればよい。そうでなくても適切な名称を付けるべき。
- 参考文献
キーレスエントリ(外部キー嫌い)
- やりたい事
- 各テーブルのリレーションを設計したい
- アンチパターン
- 外部キー(参照整合性)を採用しない
- 解法
- ポカヨケを避けるため、外部キー制約を設ける
- 参考文献
EAV(エンティティ・アトリビュート・バリュー)
- やりたい事
- 将来の変更に備えて、可変的な属性をサポートしたい
- アンチパターン
- EAVを採用する(Entity/Attribute/Value)
- 解法
- サブタイプのモデリングを行う(シングルテーブル継承、具象テーブル継承、クラステーブル継承、など)
- 参考文献
ポリモーフィック関連
- やりたい事
- 複数の親を持ちたい
- アンチパターン
- ポリモーフィック関連を定義し、二重な外部キーを持つ(親同士に関連性がない事もしばしば)
- 解法
- 参照を逆にし、交差テーブルや共通の親、UNIONでの結合を行う(そもそも親子関係が逆になっている事がこのアンチパターンによくある)
- 参考文献
マルチカラムアトリビュート(複数列属性)
- やりたい事
- 単一属性に対して、複数の値を持ちたい
- アンチパターン
- 単一属性を複数列に渡って保持する(tag1,tag2,tag3,...など)
- 解法
- 従属テーブルを作成する
- 参考文献
メタデータトリブル(メタデータ大増殖)
- やりたい事
- 日々増加していくレコードをどうにかしたい
- アンチパターン
- テーブルや列を増殖させる(fy2020,fy2021,fy2022,...など)
- 解法
- 従属テーブルを作成する、パーティショニング(水平・垂直)を用いる
- 参考文献