t-wadaさんに聞く!『SQLアンチパターン第2版』 全27章まとめて紹介のトップ画像

t-wadaさんに聞く!『SQLアンチパターン第2版』 全27章まとめて紹介

投稿日時:
和田 卓人のアイコン

タワーズ・クエスト株式会社 / 取締役社長

和田 卓人

Xアカウントリンク

本記事では、2025年7月28日に開催され、約1,500名が申し込んだイベント「t-wadaさんに聞く!SQLアンチパターン第2版 - 全27章まとめて紹介!」の内容をお届けします。イベントでは、書籍『SQLアンチパターン 第2版 ―データベースプログラミングで陥りがちな失敗とその対策』の出版を記念して、監訳者であるt-wada(和田卓人)さんをお招きし、本書の魅力についてご講演いただきました。ぜひ本編のアーカイブ動画とあわせてご覧ください。


t-wada:

本日は『SQLアンチパターン 第2版』という本についてお話しします。第2版も私が監訳しています。本日の講演では、先日の「Developers Summit 2025 Summer」で講演した内容をより厚く、各章の内容に踏み込んで説明します。

はじめに

時は2025年、世界はバイブコーディングの炎に包まれました。

AIと一緒にコードを書くにとどまらず、AI「が」コードを書く、システムを作る時代になり、多くの人が自然言語で指示してシステム開発をするようになってきました。皆さんもバイブコーディングやAIエージェントと一緒にコードを書くことを体験し、日々活用している方も多いと思います。

このバイブコーディングのトレンドには良いところもあれば、気をつけるべき点もあります。バイブコーディングを含むAIエージェントを使ったプログラミングは「投機的プログラミング」、揶揄して「ガチャ」とも呼ばれます。うまくいかなければ作り直しやコードを再生成する、そんな側面があります。

ですが、データベースはそうはいきません。UIは「作り直せば済む」場合もありますが、いったんデータベースに入ったデータは戻せません。将来に向けて一貫性のある構造でデータを保護・保持するにはどうするか、ここが難しいところです。

後からどうにかなるもの、挽回できるけど大変なもの、挽回できないもの――このあたりを見分けて温度差をつけていくのが、設計者としての腕が問われるところだと思います。

その意味で、データベース設計は後から挽回しにくいジャンルです。だからこそ、失敗しにくくするには他の人の失敗から学ぶのが近道です。すでに知られた落とし穴があるのなら、わざわざ同じ落とし穴に落ちにいく必要はありません。

そこで、落とし穴に名前を付けて回避していきましょう。これが『SQLアンチパターン』のテーマの1つです。

書籍『SQLアンチパターン』

書籍『SQLアンチパターン』

まずはここに初版『SQLアンチパターン』の説明文を持ってきました。

本書はDB設計やSQL記述の際に避けるべき事柄を1章で1つ、25個紹介する書籍です。

リレーショナルデータベースを中心に据えたシステム開発には、様々な場面で陥りやすい失敗(アンチパターン)があります。

本書はデータベース論理設計、データベース物理設計、クエリの記述、アプリケーション開発という4つのカテゴリに分かれて、それぞれの分野におけるアンチパターンを紹介し、失敗を避けるためのより良い方法を紹介します。

このアンチパターン形式はとても優れていて、私自身も原書を読んで翻訳企画をオライリー・ジャパンに持っていきました。本書は2013年1月発売で、(2025年時点で)12年前になります。以来、ありがたいことに多くの方に評価いただき、読んでいただきました。

第2版の全体像

第2版(2025年7月発売)は48ページ増の全400ページ。新章が3つ加わり、多くの章末に短い「ミニ・アンチパターン」計15本が追加されました。
書籍『SQLアンチパターン第2版』

削減された章

実は減った章もあります。初版では、Active Record パターンがアンチパターン扱いされていました。第24章「マジック・ビーンズ」で、Rails/Laravelでよく使われるいわゆるActive Record パターンはアンチパターンである、と記されており、議論を呼びました。

ですが、第2版ではこの章はなくなりました。Active Record パターンはアンチパターンとは言い切れない、という扱いになったわけです。この12年で、Rails/LaravelなどのActive Record 系 ORMが設計のシンプルさで価値を発揮し、事業を支えてきた結果、“Active Record パターンの採用=アンチパターンではない”という整理に変わったと考えられます。

既存の章の改善内容と構成

既存の章も大幅改訂されています。本文もかなり改訂されていて、監訳時に原文の変更箇所をマークしていくのですが、その数は400〜450カ所ほどありました。コード例も、PHPからPythonに刷新されています。これは、Pythonを読める人のほうが多いと踏んでの変更ではないかと思っています。

大きな構成は初版から変わらず、4部構成です。論理設計、物理設計、クエリ、アプリケーション開発のアンチパターンという4つの部がメインパートです。

この本は『SQLアンチパターン』という書名なので、SQLの書き方のアンチパターンの本だと受け取る人が多いです。翻訳書はタイトルを変えられないので『SQLアンチパターン 第2版』としていますが、実はテーブル設計や物理設計、インデックス設計、SQLインジェクションやパスワード、スケールを伴うアプリケーションのアンチパターンも紹介しています。書名から受ける“SQLのアンチパターン”は、第3部のクエリのアンチパターンだけなんですね。

世の中で評価が最も高いのは、実は第Ⅰ部、データベースの論理設計のアンチパターンで、テーブル設計を間違うと後々まで痛手になる、という点を教えてくれていることが、多くの方に評価いただいた理由だと思っています。

第Ⅰ部 データベース論理設計のアンチパターン

第Ⅰ部、データベース論理設計のアンチパターンです。コードを書き始める前に、データベースに格納する情報を見極め、データの構成や関連付けを最善の方法で実現するための設計を行う必要があります。
第Ⅰ部 データベース論理設計のアンチパターン

12年で大きく変わった「ナイーブツリー」の内容

第2章の「ジェイウォーク」=交差テーブルを避けてカンマ区切りで入れてしまう、第3章の「ナイーブツリー」=ペアレントIDを持つ隣接リストでツリー構造を格納してしまう、といった章があります。ちなみに「ナイーブツリー」については、12年前の当時はCTE(Common Table Expression)による再帰SQLは標準化こそされていたものの、実装状況はベンダーごとにまちまちでした。そのため、ペアレントIDを持つ隣接リストによるツリー格納はアンチパターンとされていましたが、いまではほとんどのリレーショナルデータベースがCTEを実装しているため、第3章「ナイーブツリー」の内容は大きく更新されています。

かつては隣接リストはアンチパターンだったものの、CTEの普及により、現在は必ずしもアンチパターンとは限らない、という記述になっています。12年で大きく変わった点ですね。ほかにもIDや外部キーの扱いなどをこの章で取り上げています。

この記事のつづきを読もう
新規登録/ログインしたらできること
  • すべての記事を制限なく閲覧可能
  • 限定イベントに参加できます
  • GitHub連携でスキルを可視化
ログイン
アカウントをお持ちでない方はこちらから新規登録