データエンジニアなので「達人に学ぶDB設計 徹底指南書」を読んでみた
読んだ本
概要
データベース設計の基礎と実践について書いた本。
論理設計と物理設計の両面から論じている (とはいえ8:2くらいで論理設計に関する話)。
論理設計では正規化やインデックスなどについて。
物理設計ではraidや、バックアップ方法などについて著している。
また、論理設計におけるバッドノウハウも多く掲載されている。
学んだこと
- 差分/増分バックアップの違い
- キーに可変長文字列は使用すべきでない
- 非正規化はパフォーマンス改善の最後の手段
- 平均や個数などテーブル同士を結合すれば算出可能なサマリデータであっても、あらかじめ列として保持する方が効率的。 ただし更新や改修による手戻りの影響は大きくなるのでバランスを考える
- B-tree インデックスはバランス型
- インデックスによるIO速度向上のためには統計情報が必要。カーディナリティが大きく、分布に大きな偏りのない列についてインデックスを取得することが望ましい
- データに大きな変更があった際には統計情報を更新する必要があるが、負担の大きい処理なので利用の少ない夜間に行うのが常識。
- RDBにも配列型のデータを宣言できる
- 氏名 (姓 + 名) のようなものはできるかぎりカラムを分割して保持することが望ましい。なぜなら分割されたものを結合することは容易いが、逆は困難な場合が多いからである
- ただしテーブルは分割すべきでない
感想
概要に書いた通り、初心者でもわかりやすい話が多い。
ただし、実践ノウハウに関してはデータベース設計や運用に関わったことがないとピンとこないかもしれない。
基本的には理論設計を重視。
バッドノウハウも多く記載されているので自分が設計する時のマニュアルになりそう。
何を決めるにもトレードオフの上に成り立つので、やはりクライアントとのコミュニケーションが重要なのだろう。