『達人に学ぶDB設計徹底指南書』から学んだこと

学んだこと

実際この本からは、理屈や知識よりは、自力で正規化したり、ER図を書くことを学んだ
これができるようになったことがとても大きい進歩

一般的な話

RAIDのことが書かれているけど、いまはもうSSDが主流だと思う
AWSなどにはスナップショットが取れる機能があり、それを使えばいい

差分バックアップ増分バックアップがややこしい
差分バックアップは、フルの後の差分を積み上げたものをいう
増分バックアップは、フルの後の1回ずつの個別にバックアップしたものをいう(積み上げてない)

冗長というのは、同じデータを複数の場所で保管すること
理論設計では、エンティティの抽出、エンティティの定義、正規化、ER図を書くという順番でやる
外部キーが参照できなくなる時があるので、先に参照元を削除してから、参照先を削除する
テーブル名やカラム名は、日本語ではなく英語で書く
テーブル名は小文字から始まって、複数形

正規化とER図

第1正規化は、一つのセルに一つの値
第2正規化は、主キーに対する部分的関数従属を取り除く
第3正規化は、間接的な、関数従属を取り除く
1対1の関係であれば、同じテーブルに書くのであんまりない
多対多の関係は2つの1対多に分けて、中間テーブルを作る
ER図には色々規格があるけど、書き方にそんなに差はない
0以上か1以上かは意識して、分ける必要がある
あえて、正規化を崩して、SQLを簡素にして、パフォーマンスを上げる事ができる(けど、自分はまだ控えておきたい)
インデックスや統計情報で、パフォーマンスをアップすることができる

やってはいけないアンチパターン

一つのセルに複数の値をいれる(第1正規化に反する)
一つのカラムに2つ以上意味を持たせて、何処かで切り替わる
主キーと他のカラムの構造が同じだから、違うテーブルを一つのテーブルにまとめる
テーブルを縦か横に分割すること(テーブル設計の構造の方を優先することが大事)
主キーや外部キーの方を揃えない
マスタテーブルが複数あって、統一されない

グレーゾーンの設計

主キーの役割を果たすものがないので、代理キーとしてカラムを作る(idはこれに当てはまるので、自分はこれはいいと思う)
繰り返しの列を持つテーブル(これは正規化して、複数のレコードで表せばいい)
その場しのぎで思いついたようなカラムを追加すること(あとでややこしくなる、ちゃんとしたテーブルかビューを作る)
多段ビュー(負荷が重くなったり、人間が見てややこしくなる)

良かったところ

アンチパターンやグレーパタンが載っていて、やらないようにしようと思った
実際練習して正規化やER図の作成ができるようになった

難しかったところ

パフォーマンスの話があるけど、自分がまだそこ到達してないので頭に入らなかった
なぜ木をDBに収納しようとするのかよくわからなかった

まとめ

一つ前に『スッキリわかるSQL入門』を使ってSQLの構文を詳しく学んだが、 その後この本で設計について学ぶと、 ER図を書いたり、正規化したりすることができるようになり、 実際のサービスのDBを設計できるようになる

また、アンチパターンやグレーゾーンの設計が載っており、
それを知ることで、より正しいDB設計ができるようになる

自力でDBを設計できるようになったのは大きな進歩
ビジネスをDBに落とし込むのにまだ練習が必要だと思う