簡単な本の紹介
今回紹介する「SQLアンチパターン」は、データベースの論理設計や物理設計などで陥りやすい失敗をアンチパターンとして紹介し、失敗を避けるための対策や解決策を紹介している書籍である。
全体の構成としては
- データベース論理設計のアンチパターン
- データベース物理設計のアンチパターン
- クエリのアンチパターン
- アプリケーション開発のアンチパターン の4部構成になっており、その中でさらにいくつかの章に分かれている。
基本的に各章ごとに、1つのアンチパターンを取り上げて
アンチパターン(好ましくない例) → アンチパターンの見つけ方・対策 → アンチパターンを用いてもよい例(例外など) → 解決策
という流れで、具体的な出来事やSQLなどのコードを踏まえながら話が進む。
読む前や読み始めは難しそう・とっつきにくそうという印象であったが、読みすすめてみるとよくありそうな身近なテーマについて触れていて、1章の長さも長くなく、比較的すぐに読めた。 少しの隙間時間にも読める良い本である。
なお、今回は去年出版された第2版を紹介するが、12年前に出版された第1版に一部追加・刷新された形で出版されている。 基本的な内容自体はほとんど変わっていないらしいので、第1版を読んだ人は改めて読む必要は少ないのではないかと感じた。
第1版はPHP、第2版はPythonで書かれている。ただ、例文のコードの8~9割くらいはSQLなので、Pythonが苦手な方もあまり気にしなくてもよいだろう。
もしPythonに自信がなく、PHPに慣れている方であれば、第1版を読むのも良いかもしれない。
オライリー本は日本語翻訳されていても読みにくいものが多い印象だが、この本はかなり読みやすいように感じた。
業務に関連しそうなこと
業務に参考になりそうな話や、過去に自分が悩んだことのある内容がいくつかあったので、印象に残った点を紹介する。
- タグやIDなどの複数IDをカンマ区切りで保存する
- 後から条件追加・集計・参照整合性の確保がほぼ不可能になるため要注意
- 多対多の関係では、連関エンティティ(中間テーブル)を用いて設計するのがよい。中間テーブルには、仕様変更に耐えられるように(後から属性が増えそうか、履歴が必要かなど)意識して設計する必要がある。
- 開発環境と本番環境のMySQLバージョンなどの違いによる動作不良に注意が必要
- 1つのカラムに複数の意味を混在させないほうがよい。適切なカラム分け、データ分けが必要
- インデックスをまったく貼らない、あるいはカーディナリティなどを考慮せずにやみくもに貼るのは共にパフォーマンスが悪くなる原因となる。
- なるべくどこがボトルネックになっているかを計測し、効果が見込める箇所にインデックスを追加するのがよい
- 1つのSQL文に長すぎる責務を持たせないほうがよい
- 1文でまとめようとすると不必要に難易度が上がるので、適度に分割するのがよい。必要に応じて、ウィンドウ関数などの機能を活用するのも有効
基本的な内容が多いので、今リリースしているシステムでは上記のアンチパターンを採用していることはほとんどないかもしれないが、参考になれば幸いである。
ちなみに、自分がハッカソンや勉強等でGPTにコードやDB設計を書かせたときは、上記のほとんどすべてのアンチパターンを採用していたことがある。
今後、業務でAIを使う際は、チェックやレビューで特に注意が必要な内容かもしれない。
気になった内容を簡単に紹介したが、他にもいろいろ書いてあったので、興味を持った方はぜひ読んでみてほしい。
関連記事
Reactの状態管理を理解する
状態管理という言葉が何を指しているのか、なぜ必要になるのかを自分なりに整理する。