サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

SQL アンチパターン (Bill Karwin,和田卓人,和田省二,児島修 オライリージャパン)

免責

この本を読んだことがない人が、このノートから本の内容を脳内に展開することはできません。見出し部分は Amazon などで「目次」の内容として公開されている範囲にとどまります。

この本を買うかどうか悩んでいる人は是非購入しましょう。これは価値のある本です。

本の紹介

SQL つまり RDBMS を使ったアプリケーション開発や運用の中で遭遇する「アンチパターン」についてまとめられている本です。出版年を見ると歴史が古いことがわかりますが、Amazon で見ると最近も非常に人気があるロングセラーであることがわかります。読んでみると、それは確かに納得のいくものでした。

アンチパターン、つまり「やらない方がよい手法」を集めたものですが__多くの人が共感してくれると思いますが__よくやってしまう手法でもありました。なんとなく「まずいんじゃないかな〜」と思って(ついつい)やっていること(あるいは賢明にも避けたこと)に対して名称を付け、するべきではない理由、あえて採用する場合の基準などを明確に説明してあります。この本は RDBMS を扱う仕事をする人の道しるべなのです。

ノート

これは本をまるごと1冊、見開き2ページにまとめてみました。

全体は3つの部に分かれています。それぞれのパターンの見出しを箇条書きのようにまとめてみました。実際の業務にあたっては、この見開きだけを参考にして進めていくことができます。簡単なチェックリストにもなります。

本と違えたところ

この本を持っている人の中には「見出しが違うな」と気づいた方もいるかもしれません。これは自分でわかりやすい形に書き換えました。最初に断っておくと、翻訳が気に入らないということではありません。実際、この本の翻訳はすばらしいと思います。そうではなく自分が経験した業務にはなじみのない表現であったり、この方が自分が思い出しやすいなど、現実に使いやすくあることを念頭に作ったノートです。

追加したもの

また「この本の中にない見出しがあるぞ」と気づいた方もいるかもしれません。別の書籍で記されているアンチパターンや Web で調べて見つけたりしたものを追加してあります。いずれも、この本に収められていても不思議ではない知見です。これからも見つけ次第、追記してきます。ノートは、こうして成長していくのです。

それぞれの出自を記します。

とりあえず削除フラグ

訳者の方がネット上に公開しているスライドです。詳細はリンク先をご覧下さい。

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」

論理削除フラグという名の死亡フラグ - @ledsun blog

これほど明確で的確な命名はありません。シビれます。

買い物リストとカートの中身

これは「 理論から学ぶデータベース実践入門 」という別の書籍に書かれていたアンチパターンです。検索性能を上げるために別のカラムなどから導き出される結果をフラグにして持っておくなどの冗長設計をして、そのメンテナンスを怠るといった内容です。その書籍にはキャッチーな名前が付いていなかったと思いますので、自分で勝手に名前をつけました。

スーパーで買い物をするとき買い物リストを持っていきますが、売り場の順序とリストに書かれている順番は違います。カートに入れた商品に対して買い物リストにチェックを入れ忘れると、売り場を回っているうちに「あれ?これはカートに入れたっけ?」とわからなくなります。そうなるとカートの中に入ったたくさんの商品をかき回して調べなければいけません。そんなイメージです。

単語帳

これは「 楽々 ERD レッスン 」という書籍から引用し、私が設計上のアンチパターンとして名前をつけてノートに記しました。

ビジネス上のコード__例えば社員番号や商品コード__をテーブルの主キーにする設計手法を指します(やっている人は多いのではないでしょうか?)。

学生がよく使っている単語帳は一見すると単語それ自体が主キーになりそうですが、同じ単語で複数の意味を持つ場合に、カードを分けたい場合があります。そのようなイメージです。

ビジネス上のコードはビジネス上のルールに則っています。ビジネスルールである以上、ビジネスルール自体が目的を持ち、しかもそれはシステムの寿命やスコープと一致するわけではありません。ビジネス上のコードはシステムの都合ではなくビジネスの都合によって決められ、そして頻繁に変更されます 1

その他、どのような場合に問題が発生するかは「 楽々 ERD レッスン 」自体をご参照ください。これもいい本です。


  1. 頻繁というのは相対的な言葉ですが、ここでは「システムの寿命と比較してはるかに」という意味です。ユーザーは「ごく稀に変更がある」という程度の認識でしょう。ユーザーの「滅多に無い」という言葉を「システム上のレアケース」とは思わない方が良いです。