達人に学ぶDB設計徹底指南書 感想記事
こんにちは。Web開発の学習の一環で「達人に学ぶDB設計 徹底指南書」を読みましたので、こちらの感想をまとめたいと思います。
ざっくり感想
この書籍は、タイトルにある通りDB設計の基礎と設計の知識について幅広く触れており、実務に生かせそうなノウハウや考え方に触れることができる内容となっております。
論理設計と物理設計、どちらの要素にも触れていますが、その重要性から論理設計について特に詳しく解説されていました。
私は本書を読む前に、まずは基礎として「スッキリわかるSQL入門」(感想記事) を学習していました。こちらの書籍でもDB設計の基礎は学ぶことができます。
その上で、本書を読んで特に私が印象に残った学習項目は、以下の内容です。
- 物理設計の基礎(RAID等ストレージの冗長構成例、バックアップ設計、リカバリ設計)
- 正規化を行う欠点と、あえて非正規化を行うノウハウ
- インデックス設計のノウハウ
- 論理設計のバッドノウハウ、グレーノウハウ
- 木構造を用いた論理設計
本書でも、DB設計の基礎を解説しつつ、さらに一方踏み込んで実務レベルのノウハウについて解説をする内容にも触れております。実務でDBを触る際にあらかじめ知っておくべき内容を多く含んでおりました。
本書の印象的なワードとして、頻繁に「トレードオフ」という言葉が登場します。何かを得るには何かを捨てなければならないという趣旨の言葉ですね。
本書で紹介されていたDBの「トレードオフ」の例として、正規化はデータの整合性を保つために重要である一方で、SQLを実行する際にテーブルの結合(JOIN)が必要となるため、検索のパフォーマンスが落ちる、という事象が挙げられていました。
正規化は可能な限り高次にするべきであるということは大前提の上で、それでもなお検索のパフォーマンス向上のために非正規化を行うこともある、と筆者は述べています。
正規化は論理設計を行う上では必ず取り組まなければならないと思っていたので、この内容は意外に感じました。
一方で非正規化を行うと、当然更新のパフォーマンス低下やデータのリアルタイム性の低下、改修コストの増大がデメリットとして発生するので、その塩梅も考慮しながら非正規化を検討する必要があります。難しいですね、、
この他にも「トレードオフ」の関係にある2者のメリット・デメリットを双方考慮しながらDB設計を行う必要性を本書では紹介されており、DB設計の難しさ、そして奥深さを感じました。
この本の良かった点
この本はDB設計のバッドノウハウについて具体例を交えて紹介されており、これがためになる内容でした。
DB設計における避けるべき内容についてだけではなく、どうしてその設計がダメなのか、その設計手法ではどこに問題が生じるのか、詳しく解説がされているので、DB設計初心者でも理解がしやすかったです。
解説を読むと当たり前と思いつつ、油断するとついやってしまいそうなバッドノウハウも紹介されており、気をつけようと思いました。。
バッドノウハウの例として紹介されている単一参照テーブル (※コード値などのエンティティに複数種類の意味合いを持たせて管理しているテーブル) は、業務上のACCESSで目撃したことがあるので、複雑な気持ちになりました😇
また、メリットとデメリットが混在するグレーノウハウについても同様に紹介されております。例として配列型のデータを表現するために添字の数だけ列を作る「列持ちテーブル」などが挙げられていました。
1見使ってはいけなさそうな内容でも、デメリットを理解した上で運用が視野に入るノウハウもあるところがDB設計の難しさであると思いました。
(コーディングなど他の技術要素においても同様の難しさはあると思いますが)
この本の難しかった点
本書ではデータベースのパフォーマンス向上のためにB-treeインデックスに関する設計方針の紹介がされている部分がありましたが、正直この部分は実際のDBMSを触らないとイメージが湧きにくいという印象を受けました。
他にも論理設計のモデル例として木構造を扱う手法について紹介されていましたが、こちらも概要はわかったもののピンとこない部分ではありました。
実際にDBMSでインデックスを設定するという場面等、本書で紹介されていた手法を活用する場面に出会ったときに、本書をもう一度読み返したいと思います。
まとめ
要所要所では難しいと感じる部分がありつつも、実例を交えて丁寧にノウハウを紹介しているので、DB設計初心者の私でも趣旨を理解しやすい内容でした。
本書では最初にソフトウェア開発についてDOA(データ中心アプローチ)が主流であることを説明されており、「データベースを制するものがシステムを制す」と筆者は言い切っています。
DB設計がその後のシステム開発に影響を受ける事例もいろいろ紹介されており、その設計をよく考えて行う重要性を本書を通して学びました。
本書を通してDB設計の重要性、そして思想を知ることができたのは良かったと思います!