達人に学ぶDB設計 徹底指南書を読んだ感想


はじめに

 DB設計の学習として「達人に学ぶDB設計 徹底指南書」を読んだので、感想をまとめました。

良かったところ

 本書は論理設計と物理設計の知識に加え、DB設計がシステムの品質を左右する重要な要素であることを理解できたことが良かったと感じました。
 また、各章の先頭に記載されている「学習のポイント」と、抑えるべき重要な箇所についてまとめられている「勘どころ」は要点が簡潔にまとめられており、とてもわかりやすいと感じました。

学んだこと

正規化がもたらすデメリットについて

 本書を読む前は、論理設計におけるテーブルの正規化に関し、正規化を繰り返すことでデータの冗長性がなくなり、更新時の不整合を防ぐことができるメリットの部分しか理解していませんでしたが、正規化によるデメリットを学ぶことができました。
 正規化を繰り返すことにより、テーブルの数が増えるため、データの検索時にテーブルの結合処理を行う必要があります。しかし、SQLによる結合処理はシステムに高い負荷をかける処理であるため、システムのパフォーマンスが落ちるというデメリットがあると学びました。そのため、パフォーマンス向上のためにあえて正規化を低次なものに留める設計が採用されることがあります。
 しかし正規化は可能な限り高次にすることが大原則のため、実務における論理設計では、正規化と検索SQLのパフォーマンスには強いトレードオフの関係があることを考慮し、非正規化をしなければならないケースを慎重に判断できるようになる必要があります。 

論理設計のバッドノウハウとグレーノウハウについて

 著者が開発現場で遭遇してきたバッドノウハウ(内容は下記参照)から、DB設計をするにあたり避けなければならないことを学ぶことができました。
 また、節度ある利用に留める限り有効に作用するが、無闇に使うことを避けるべきグレーノウハウ(内容は下記参照)から、メリットとデメリットを併せ持つ技術は扱いに注意する必要があることを学びました。

バッドノウハウ

  • 非スカラ値(値に配列型を利用すること)
  • ダブルミーニング(列が途中で値の意味が変わること)
  • 単一参照テーブル(あらゆるタイプマスタテーブルを一つのテーブルにまとめること)
  • テーブル分割(レコード単位または列単位でテーブルを分割すること)
  • 主キーや外部キーに可変長文字列を使うこと
  • 可変長文字列と固定長文字列を混同させること
  • ダブルマスタ(同じ役割を果たすマスタテーブルが2つ存在すること)

グレーノウハウ

  • 代理キー(主キーが決められない場合などに「代理」として新しく追加するキー)
  • 列持ちテーブル(配列型を使わずに配列の表現をする論理設計)
  • アドホックな集計キー
  • 多段ビュー

難しかったこと

 木構造の内容がかなり難しくあまり理解ができませんでした。木構造の論理設計を行う機会がきたときに再度読み直したいと思います。

まとめ

 本書ではDB設計方法の詳細だけでなく、SQLのパフォーマンス問題についても多く記入されており、DB設計によって生じる様々なトレードオフを考えることの重要性も学ぶことができました。実務でDB設計に携わる機会がある人は必読であると感じました。