SQL-アンチパターン斜め読み
①Jaywalking(信号無視)
1対多または多対多の関係テーブル間のid管理において、
varchar等のカラムを用意して「1,2,3,4,5」のように区切り文字で区切った値を代入すること
②Native Trees(素朴な木)
親子関係を持つテーブル間のid管理において、
中間テーブルを用意せずにparent_idのようなIDを意味するカラムを用意して代用すること
③ID Required(とりあえずID)
どのようなテーブルにもidという名前のPRIMARY_KEYを用意するだけで一意性を保てると容易に考えること
④キーレスエントリ(外部キー嫌い)
外部キーを全く使おうとしないこと
☆⑤EAV(エンティティ・アトリビュート・バリュー)
汎用的な値を管理するためにattributeテーブルを使うこと
☆⑥ポリモーフィック関連
1対多関係の複数テーブルのうち子テーブル側に親テーブルのprimaryなidをもたせ、
拡張性を持たせたいがために親テーブルの種別(将来増える可能性がある)をテキスト等で持たせること
⑦マルチカラムアトリビュート
柔軟性の無い可読性の低いスキーマ構造を定義してしまうこと
⑧メタデータトリブル(メタデータ大増殖)
「2012年の売り上げの」の「2012年の」に当たるようなメタな情報をカラム名に持たせてしまうこと
⇒そういうデータは増殖しALTERTABLEの必要性やSELECTの難化をもたらす
⑨ラウンディングエラー(丸め誤差)
正確さが求められる場面でFLOAT型を使うこと
☆⑩Flavors
変化する可能性があるデータをCHECK制約やENUM型などで表現し柔軟性を失うこと
⑪Phantom Files(幻のファイル)
データベース内にBLOBでファイルを保持する方法もあると考えることを忌避し、
そもそも検討しないこと
⑫Index Shotgun(闇雲インデックス)
インデックスを使用する際クエリの計測やクエリ・スキーマ・インデックスの最適化、インデックスのメンテナンス等を怠ること
参考URL