Open7

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

snunsu:<esnunsu:<e

特に気になるところをメモ!

  1. 順番が前後するかもしれません
  2. ほとんど殴り書きです※後で整理するつもりだけはあります
snunsu:<esnunsu:<e

バッドノウハウについて

非正規化はトレードオフを理解している限りバッドノウハウではない

論理設計の代表的なバッドノウハウは

  1. 非スカラ値
  • 1つの値>1列の状態

情報は可能な限り分割して保存するのが良い。ただし意味を壊してはいけない。

  1. ダブルミーニング
  • 列の意味>1列の状態
  1. 単一参照テーブル
  • テーブルの意味>1テーブルの状態
  • 構造が同じものを1テーブルにまとめてしまうやり方
    | メリット | デメリット |
    | ---- | ---- |
    | ER図やスキーマがシンプル| データの宣言が最大値に合わせる必要がある |
    | コード検索のSQLを共通化できる|レコード数が多くなる|
    | コード検索のSQLを共通化できる| 間違えて指定してもエラーになることがないため、バグに気付きにくい |
    | | ER図が厳密に言うと正確でない状態になる |
    | | ER図の可読性が下がる |
  1. テーブル分割
  • 水平分割
  • 例えば、年度ごとにテーブルを分けること
  1. 不適切なキー
  • コロコロ変わりそうな値はキーに不適切

可変長文字列は不変性がないためキーには不向き。

  1. ダブルマスタ
  • 元々は別システムだったものが一緒になる場合に起こりうる
  • データのクレンジング(精査が必要)
snunsu:<esnunsu:<e

主キーについて

  • なるべく「自然キー」で
  • 代理キーで解決するシチュエーションもあるがなるべく自然キーで解決できないかを考える
  • なぜなら、人工キーはデータ設計を一見しても意味がわからないから
  • 一見しただけでどんなことをしたいかがわかるデータ が理想的らしい(ハードル高い)

ジョー・セルコは「オートナンバーを主キーに使うことは、データモデルを欠いている証拠だ」
達人に学ぶDB設計 徹底指南書 (p.230). Kindle 版.

  • という言葉があるくらいらしい..
  • タイムスタンプとインターバルでどうにかできないかを考えるのも一つの手
  • タイムスタンプはYYYY年など
  • インターバルは2つのカラムを使いYYYY年~YYYY年を表してみたりする方法
snunsu:<esnunsu:<e

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

snunsu:<esnunsu:<e

RDBは木構造の形が苦手

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