Open2

SQLアンチパターン

hamaguchihamaguchi

1章 ジェイウォーク(信号無視)

多対多を表現するために一つのフィールドに複数の値を入れること

  • 検索時にマッチを使うのでインデックスが使われない
  • 値の変更のSQLが複雑化する
  • 結合処理が複雑になり、インデックスも使えない
  • 集計関数を使うとき工夫が必要

などのデメリットがある

多対多を表現するためにフィールドを配列的に使用するとかありえへんやろ〜と思ったが、
「多対多であれば中間テーブルを使う」とRailsチュートリアルか何かで学んだから思いつかなかっただけ。

hamaguchihamaguchi

2章 ナイーブツリー

アンチパターン

組織図やニュースサイトのコメント欄などのある程度・制限のない深さがある階層構造を表現するために隣接リストを使用すること

デメリット

  • 深い構造を取得するために多重の再帰呼び出しが必要
    • 再帰をサポートする関数があるが全てのベンダーで実装されているわけではない
  • データのメンテナンスコストが高い

アンチパターンを使用しても良い場合

  • 構造が深くない・深さが決まっている
  • ノードの直近の要素の取得が主なタスクである場合

など、要件によってはベストな選択肢となりうる