Open7
達人に学ぶDB設計に指南書のメモ

特に気になるところをメモ!
- 順番が前後するかもしれません
- ほとんど殴り書きです※後で整理するつもりだけはあります

バッドノウハウについて
非正規化はトレードオフを理解している限りバッドノウハウではない
論理設計の代表的なバッドノウハウは
- 非スカラ値
- 1つの値>1列の状態
情報は可能な限り分割して保存するのが良い。ただし意味を壊してはいけない。
- ダブルミーニング
- 列の意味>1列の状態
- 単一参照テーブル
- テーブルの意味>1テーブルの状態
- 構造が同じものを1テーブルにまとめてしまうやり方
| メリット | デメリット |
| ---- | ---- |
| ER図やスキーマがシンプル| データの宣言が最大値に合わせる必要がある |
| コード検索のSQLを共通化できる|レコード数が多くなる|
| コード検索のSQLを共通化できる| 間違えて指定してもエラーになることがないため、バグに気付きにくい |
| | ER図が厳密に言うと正確でない状態になる |
| | ER図の可読性が下がる |
- テーブル分割
- 水平分割
- 例えば、年度ごとにテーブルを分けること
- 不適切なキー
- コロコロ変わりそうな値はキーに不適切
可変長文字列は不変性がないためキーには不向き。
- ダブルマスタ
- 元々は別システムだったものが一緒になる場合に起こりうる
- データのクレンジング(精査が必要)

主キーについて
- なるべく「自然キー」で
- 代理キーで解決するシチュエーションもあるがなるべく自然キーで解決できないかを考える
- なぜなら、人工キーはデータ設計を一見しても意味がわからないから
- 一見しただけでどんなことをしたいかがわかるデータ が理想的らしい(ハードル高い)
ジョー・セルコは「オートナンバーを主キーに使うことは、データモデルを欠いている証拠だ」
達人に学ぶDB設計 徹底指南書 (p.230). Kindle 版.
- という言葉があるくらいらしい..
- タイムスタンプとインターバルでどうにかできないかを考えるのも一つの手
- タイムスタンプはYYYY年など
- インターバルは2つのカラムを使いYYYY年~YYYY年を表してみたりする方法

ビューは便利だけど二重にSELECTしてると言うことを肝に銘じて使うこと

RDBは木構造の形が苦手
- 例えば、ある会社の組織図などをRDBで表すことが苦手
- 円で捉えることもできるが、管理が複雑(直感的でもない)
- 経路列挙 と言う方法もある→その人までの経路を愚直に格納