技術メモ

メモ代わりに使います!

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

qiita.com