Open10
達人に学ぶDB設計を読む
はじめに
- 論理設計
- 物理設計
- 実装設計
DBのジャンルは主に上記3つに分けられる
論理設計
正規化とかERとかモデル設計についてのこと
物理設計
サーバーやストレージとかハードウェア系のこと
実装設計
MySQLとかPostgreSQLとかのこと
この本で扱うのは1と2らしい
1章
基本的に初心者向けがつらつらと。知ってる人は読み飛ばしてOK。
アプローチ
-
DOA(Data Oriented Approach)
データ中心アプローチ
今の主流 -
POA(Process Oriented Approach)
プロセス中心アプローチ
今は使われてない
3層スキーマ
-
外部スキーマ
外部モデル=ビューの世界
ユーザーから見たデータベース
テーブル(SELECTされた)やビュー -
概念スキーマ
論理データモデル=テーブルの世界
開発者から見たデータベース
テーブル定義 -
内部スキーマ
物理データモデル=ファイルの世界
DBMSから見たデータベース
データの物理的配置
2章
設計順序
原則としてDB設計は論理設計が物理設計に先立つ
論理設計ステップ
- エンティティの抽出
- エンティティの定義
- 正規化
- ER図の作成
物理設計ステップ
- テーブル定義
- インデックス定義
- ハードウェアサイジング
- ストレージ冗長構成決定
- ファイル物理配置決定
memo
物理設計に置いてDBはディスクI/Oが性能問題の大半を占める
性能要件=処理時間+スループット(Transaction Per Second)
冗長化=RAID
RAIDは少なくとも5、余裕があれば6や10
DBに格納されるファイル
- データファイル
- インデックスファイル
- システムファイル
- 一時ファイル
- ログファイル
バックアップ方法
- フルバックアップ
- 差分バックアップ
- 増分バックアップ
物理サーバーが主の話だけど今はクラウド主流だからこの辺気にする人も減ってそう
3章
- テーブルについて
- テーブル構成について
- 正規化、正規形について
- 第一正規系
- 一つのセルに一つの値(スカラ値という。scalarは単一のという意味)
- 第二正規系
- 部分関数従属を完全関数従属にする
- 第三正規系
- {A, B} → {C} → {D} の従属が成り立つ分解。推移的関数従属。
※AとBで一意になるCがあり、さらにそのCによってDが一意になる。
- {A, B} → {C} → {D} の従属が成り立つ分解。推移的関数従属。
- ボイスコッド正規系
- 説明割愛
- 第四正規系
- 1つのエンティティに複数の関連をいれないこと。
- 第五正規系
- 関連エンティティを1対1に作っていくこと。
※実務で使うのは第2、第3までがほとんど
- 関連エンティティを1対1に作っていくこと。
- 第一正規系
memo
- 正規化
データの冗長性を排除し一貫性と効率性を保持する - 関数従属性
Y=f(x)のように入力xに対してyを一つに決めること。YはXに従属している。 - 部分関数従属
主キーの一部の列に対して従属する列がある場合 - 完全関数従属
主キーの全ての列に従属性がある場合 - 無損失分解
結合後に可逆性のある分解 - 高次正規系
第3より上の正規系のこと
正規化に関しては当たり前じゃん的なことをしっかり文字と図にした感じ。逆に何も考えずにこれが当たり前にできてるからよかった。
まとめにも書いてあるけど当たり前なことを改めて整理することが大事とのこと。