株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

書籍:SQLアンチパターンのご紹介

SQLアンチパターン O\'Reilly Japan - SQLアンチパターン via kwout

@t_wadaさん こと 和田卓人 さんが監訳された書籍SQLアンチパターンのレビューに参加させていただきました。

専門家とは、極めて狭い領域で、起こりうるすべてのミスを経験した人のことである。 ニールス・ボーア(デンマークの理論物理学者)

引用した文章は、最初の章「はじめに」のエピグラフとして書かれていた文章です。 私はOracle Databaseの専門家であり、これからも専門家であり続けたいと思っている人間ですが、 この文章の言わんとすることには非常に頷かされる部分があります。

ITシステムを構築しなければならない立場の人から見れば、RDBMSは「道具」です。 当然ながら「道具」には、適切な使用方法があり、適用できない範囲が存在しますが、 「非専門家」が簡単に把握できるものではありません。

このため、「顧客」が「専門家」に求めるものは、「道具」であるRDBMSを適切に使うこと、 すなわち「ベストプラクティス」の提供です。さらに、それが許容可能な期間で提供されることを期待します。

一方で、ITシステムを構築ために必要となる「道具」の種類は増え、全ての「道具」について「専門家」であることがなかなか難しくなってきています。 この書籍が提供するアンチパターンを理解することで、本来であればミスを経験したものだけが知っている落とし穴を疑似体験から理解できます。これにより、完全な「ベストプラクティス」とはいえないまでも、「ベタープラクティス」を提案できるのではないでしょうか。「ベストプラクティス」をご要望のかたは、ご利用のRDBMSの専門家にお声がけください。もちろん、Oracle Databaseの場合は弊社へ。 😉

日本語版でのSQLアンチパターンでは、以下の25のアンチパターンが紹介されています。

  1. ジェイウォーク(信号無視)
  2. ナイーブツリー(素朴な木)
  3. IDリクワイアド(とりあえずID)
  4. キーレスエントリ(外部キー嫌い)
  5. EAV(エンティティ・アトリビュート・バリュー)
  6. ポリモーフィック関連
  7. マルチカラムアトリビュート(複数列属性)
  8. メタデータトリブル(メタデータ大増殖)
  9. ラウンディングエラー(丸め誤差)
  10. サーティワンフレーバー(31のフレーバー)
  11. ファントムファイル(幻のファイル)
  12. インデックスショットガン(闇雲インデックス)
  13. フィア・オブ・ジ・アンノウン(恐怖のunknown)
  14. アンビギュアスグループ(曖昧なグループ)
  15. ランダムセレクション
  16. プアマンズ・サーチエンジン(貧者のサーチエンジン)
  17. スパゲッティクエリ
  18. インプリシットカラム(暗黙の列)
  19. リーダブルパスワード(読み取り可能パスワード)
  20. SQLインジェクション
  21. シュードキー・ニートフリーク(疑似キー潔癖症)
  22. シー・ノー・エビル(臭いものに蓋)
  23. ディプロマティック・イミュニティ(外交特権)
  24. マジックビーンズ(魔法の豆)
  25. 砂の城

どれも有益な内容ですが、私のお気に入りのパターンは、「サーティワンフレーバー(31のフレーバー)」です。 RDBMSには多くの機能があります。機能の存在を知ると、できる限りRDBMSの機能で問題を解決したくなります。しかし、RDBMSの機能、特に製品固有の機能については、熟知していない開発者が多いので、運用フェーズのことを考えると、RDBMSの機能での解決が適切でない場合もあります。バランス感覚が求められるともいえるでしょう。

また、「リーダブルパスワード(読み取り可能パスワード)」については、基本的な注意点ですが、必ず理解しておいていただきたい点です。(データベースに平文でパスワードを保管することを法律で禁じてくれないですかね・・・)

著名なMySQLエンジニアである奥野幹也さんによる「砂の城」も、ぜひ一読していただきたいアンチパターンです。ITシステムは適切に運用できて意味があります。できる限り、運用フェーズを見越して発生事象を想定し、想定できない事象については柔軟に対応できるような仕組みをつくっておく必要があります(かならず、本番環境とは別にテスト環境を作りましょう!)。

本書をお勧めします。私が「本書への称賛の声」に寄稿した文章を以下に記載します。

適切なデータベース設計を行うためには、様々な観点で考慮が必要であり、経験がものをいう部分がありました。 本書を読むことで、データベース設計に関わる他者の経験を自分の学びの糧にすることができます。データベース設計に関わる実務者にとってきわめて有益な書籍であるため、是非一読をお勧めします。

渡部 亮太 株式会社コーソル プリンシパル・エンジニア Japan Oracle User Group 共同設立者、ボードメンバー

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ