y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

『SQL アンチパターン』 を読んでいます

先日、『SQL アンチパターン』という本を購入しました。毎日の通勤時間にちょこちょこと読んでいます。

17.5.3 節に書かれている、CASE と SUM の組み合わせで条件付き集約を行う方法は、目的が行数を数えることなら、次のような書き方もできることを最近知りました。

COUNT(b.status = 'FIXED' OR NULL) AS count_fixed

COUNT(expr) が NULL の行を除外することを利用した書き方ですね。それまで、行数を数えるのに SUM を使うのは何か違うよなぁ・・・と感じながら書いていたので、この書き方はすっかり気に入ってしまいました。

この本の全体的な感想ですが、アンチパターンとして挙げられている題材自体は、わりと初歩的な内容が多いかなあと感じました。普段からデータベースを触っている人なら、「解決策」に書かれている内容の方が常識になっていることも多いのではないでしょうか。その点では、この本を読むことで日常の業務にすぐに生かせるような新たな知見が得られるかというと、それほど・・・というのが正直なところです。

この本の面白さは、アンチパターンを使ってしまうと何が悪いのか、ということが丁寧に説明されているところにあると思いました。そもそも、それがアンチパターン本の価値なのかもしれません。以前、テクニカルエンジニアの試験を受けてみようなどと思って教科書を読んだことがあるのですが、はじめから第三正規形ありきで、そうすることのメリットは何か、そういう設計をしないとどういう点でつまづくのか、という説明はあまり書かれていなかったように思います。「解決策」の方を当たり前だと思っている人にとっては、その感覚の正しさを再確認できる本だと思います。