雀巽の日記帳

雀巽が綴る日常の記録

SQLアンチパターンが良書だった

8ヶ月位積読化していた SQL アンチパターンを読みました。

SQLアンチパターン

SQLアンチパターン

内容が非常に面白く、スラスラと読み進めることができました。

「この場合って確かにどうするんだろう……アンチパターンやっちゃいそう……」みたいなことや、「あ〜これ見たことあるわ〜遭遇したわ〜」みたいな内容が多く、とても楽しかったです。

リファクタリングの「コードの臭い」と同じで、「これなんか臭うな……」という嗅覚を磨けると感じました。

こういうタイプの本は読んでて楽しいし内容が入ってきやすいので好みです。

「うわ、なんかこれヤベェ……」って感じれるのは非常に重要だと思います。

印象的だった章

せっかくなので印象的だった章を幾つかピックアップしてみます。

2章 ナイーブツリー (素朴な木)

解決策のゴリゴリのアルゴリズム感にしびれました。Closure Table (閉包テーブル) が好き。

Common Table Expression を用いた再帰クエリを初めてみた時、摩訶不思議に感じた記憶が鮮明に蘇ってきました。

3章 ID リクワイアド (とりあえずID)

@t_wada さんが前書きで言っていましたが、まさに賛否両論ありそう。 実は今日、@t_wada さんにオススメしていただいた楽々 ERD レッスンという本も軽く読んでいたのですが、この本には ID を導入することの利点が載っていました。

楽々ERDレッスン (CodeZine BOOKS)

楽々ERDレッスン (CodeZine BOOKS)

ID とコードの違いや、ID の存在理由などについて、なるほどなぁと思わされたので、こちらにも目を通すと面白いかと思います。

5章 EAV (エンティティ・アトリビュート・バリュー)

RDB での継承の実装方法について学べたのが良かったです。

  • Single Table Inheritance (単一テーブル継承)
  • Concrete Table Inheritance (具象テーブル継承)
  • Class Table Inheritance (クラステーブル継承)

この辺の章は、データとメタデータについてきっちり考えろよ、というテーマだと思います。

11章 ファントムファイル (幻のファイル)

モノによっては BLOB 型が確かに使えるということに気付かされました。 ファイルの特性に応じて、アンチパターンにするかどうかをしっかり考える必要があると感じます。

13章 フィア・オブ・ジ・アンノウン (恐怖の unknown)

データ移行チームで SQL を毎日毎日書きまくってた時に、SQL が3値論理だということを知らずに少しハマった記憶が蘇ってきました。 ちなみに、上で挙げた CTE を初めてみたのもデータ移行チームで超大量のデータとスパゲッティクエリと戦ってた時です。

15章 ランダムセレクション

ランダムに値取り出したい時どうしよう!と、悩んだ記憶がこれまた蘇ってきました。 解決策で示されてた方法のどれかを使ってその時は凌いだような気がする。

16章 プアマンズ・サーチエンジン (貧者のサーチエンジン)

独立行政法人の巨大システムを作ってた時、なんかこれ使ってあいまい検索が実装されてた気がします。 フルテキスト検索専用の何かを使わないとキツイよね……。

24章 マジックビーンズ (魔法の豆)

個人的に一番印象に残りました。 アクティブレコードパターンを利用した全てのフレームワークで陥る可能性が高いので、これは気をつけたいです。

モデルをアクティブレコードの has-a (集約) で構成すれば良い、というシンプルな解決策に「確かにー!」となりました。

〜モデルはテーブルから分離させましょう〜

感想

面白いし勉強になるし素晴らしかった!