guri3.dev
Published on

SQLアンチパターン

SQLアンチパターン』を読んだ。

データベースを用いた設計やアプリケーションの開発におけるアンチパターンについて書かれている本。
内容は付録を除いて4部25章に分けて書かれている。

各部の内容は

  • データベース論理設計のアンチパターン
  • データベース物理設計のアンチパターン
  • クエリのアンチパターン
  • アプリケーション開発のアンチパターン

となっている。

総じてとても良い本だった。個人的に特に良いなと思ったのはアンチパターンが上記のように分類されていることで、今まで感覚的に理解していた辛みが何起因で起きるものなのか?というのを改めて理解できたところ。 今後 DB の設計やなんとなく違和感や辛さを感じるシステムに触れた時に、辞書的に参照しつつ問題の整理を進めていくための手助けとして読んでいきたい本だと思った。

この本を読んだことで初めて知ったことや特に面白かったところ

  • 3章 ナイーブツリー
    • DB で木構造を表現するためのアルゴリズム
    • 自分で一から実装することはほとんどなかったので面白かった
    • 複雑さを DB 側に持たせるのか、アプリケーション側に持たせるのかというトレードオフは難しいけど面白いところ
  • 8章 メタデータトリブル
    • 『メタデータへのデータの混入』というコラムが面白かった
      • EAV とポリモーフィック関連はデータへのメタデータの混入であるのに対して、メタデータトリブルはメタデータへのデータの混入であるという説明を見てなるほどなぁとなった
  • 10章 サーティワンフレーバー
    • 値の制約をアプリケーションに持たせがちなので気をつけようと思った
  • 11章 ファントムファイル
    • 最近は外部のクラウドストレージにファイルを置くことも多いと思うけど、その場合はどうするのが良いかなぁなど考えつつ読んでいた
  • 16章 プアマンズ・サーチエンジン
    • パフォーマンスが問題になるほど大規模なデータの検索を実装したことはないけど、ベンダーごとのツールが紹介されていて、今後の参考になりそう
  • 23章 ディプロマティック・イミュニティ
    • DB のドキュメントについて
      • 最近、構造はテーブルを見ることでわかるけどその設計の意図は見ただけでは伝わらないよなと考えることがあったのでタイムリーだった
      • テーブルの物理設計は最近の IDE の機能などですぐに調べられるから良いけど、その設計でやりたいことは何なのか?という部分はやはりドキュメントで補足するべきだなと感じた
  • 24章 マジックビーンズ
    • 最近コードを書くときにすごく意識しているところだった
    • モデルと DAO を分離することでビジネスロジックのテストが書きやすくなる
    • モデルと DAO を密結合にしたときの個人的な辛さはモデルに書かれたロジックがどの機能を実現するために書かれたものなのか?というのが見てすぐにわからないところにある