でぶねこ.log

プログラミングやAIなどについてマイペースに書いていきます。

【読了】SQLアンチパターン

お久しぶりです、でぶねこです。2019年もすでに2ヶ月がすぎ、平成の終わりも近づいています。次の元号は一体何になるのでしょうね。技術書を読んだので久々にブログを更新します。2019年初記事です。

対象本:SQLアンチパターン

知る人ぞ知るテスト駆動開発の伝道師、和田卓人(@t_wada)さんが監訳された良書です。DBやSQLでやりがちな過ちをまとめてあり、それらに対する解決策を提示してくれています。

SQLアンチパターン

SQLアンチパターン

結論:良書です。

とても読みやすく、面白かったです。オライリーの本は他にもいくつか読んだことがありますが、訳がひどかったり、内容が難しかったりして、読みにくい印象が強かったです。しかし、この本の訳に違和感はなく、内容もDBを使ってシステム開発をしたことがある人なら「あーあるある」といったことがほとんどだと思いますので、とても読みやすかったです。25章ありますが休日にまとまった時間を取って2-3日で読み終えることができました。

きっかけ

そもそも数年前に購入していましたが、一度も読まずずっと本棚に立ててありました(おい)。お陰で背表紙が日焼けしていました。。TwitterでフォローしているYama@採用するエンジニア(@yama_92x) ‏さんの以下のツイートを見て、読まねば!と思った次第です。

結果:私のアンチぶりはそこそこ。

前職でDBを使う機会が多かったですが、「うわー全滅だー」となるかと思いきや、意外と解決策に記載されていたことを無意識のうちにできており、逆に驚きました。前職の上司や先輩方にはDBやSQLが得意な人が多く、その人達と一緒に作業していたお陰かもしれません。以下に簡単にまとめてみました。

No. アンチパターン 私の結果
1 ジェイウォーク(信号無視) ○:交差テーブルを使用していた
2 ナイーブツリー(素朴な木) (当該経験なし)
3 IDリクワイアド(とりあえずID) ☓:マスタテーブルとかにとりあえずIDつけていた
4 キーレスエントリー(外部キー嫌い) ○:外部キーは全てつけていた
5 EAV(エンティティ・アトリビュート・バリュー) ☓:まさにこの仕様で機能をつくっていた
6 ポリモーフィック関連 (当該経験なし)
7 マルチカラムアトリビュート(複数列属性) ☓:やっていたような。。
8 メタデータトリブル(メタデータ大増殖) (当該経験なし)
9 ラウンディングエラー(丸め誤差 ○:OracleでNumber型を使用していた
10 サーティワンフレーバー(31のフレーバー) ○:限定する値をデータで指定していた
11 ファントムファイル(幻のファイル) (当該経験なし)
12 インデックスショットガン(闇雲ショットガン) (当該経験無し)
13 フィア・オブ・ジ・アンノウン(恐怖のunkown) ☓:そういうバグを仕込んだ気がする。。
14 アンビギュアスグループ(曖昧なグループ) ☓:やりがち
15 ランダムセレクション (当該経験なし)
16 プアマンズ・サーチエンジン(貧者のサーチエンジン (当該経験なし)
17 スパゲッティクエリ ☓:やりがち
18 インプリシットカラム(暗黙の列) ○:調査の時などの一時的に使用するSQL以外はアスタリスクは使用していなかった
19 リーダブルパスワード (当該経験なし)
20 SQLインジェクション ○:プリペアードステートメントを使用していた
21 シュードキー・ニートフリーク(擬似キー潔癖症 ○:欠番に対して特に何もしていなかった
22 シー・ノー・エビル(臭いものに蓋) △:プログラムで構築するSQLは最終的にプリントして確認していたり、例外処理は入れていたが、やりがち
23 ディプロマティック・イミュニティ △:DBについて文書化されていたが、あまりメンテナンスされておらず、自動テストもやっていなかった
24 マジックビーンズ(魔法の豆) ☓:ドメインモデルについて無知なので、できていなかった
25 砂の城 (当該経験なし。というかインフラよりのことはほとんど関わっていなかった)

おすすめです。

DBを使ってシステムを開発している方、SQLを日常的に書いているという方はぜひご一読ください。上司やチームメンバーのDBに対する知見やスキルをこの書籍で確認できるかもしれません。もし上司やチームリーダーの方針がアンチパターンだらけだったら、あなたがこの本でDBについて勉強して伝道師となるか、そのチームで学べることはないと見切りをつけ転職を検討するのもありかもしれませんね。。

久々にブログをかけてすっきりしました〜(^ω^)東海地方は今日はあいにくの雨ですが、残る休日をごゆっくりお過ごしください。ではでは。