Open10

達人に学ぶDB設計を読む

tunatuna

はじめに

  1. 論理設計
  2. 物理設計
  3. 実装設計

DBのジャンルは主に上記3つに分けられる

論理設計

正規化とかERとかモデル設計についてのこと

物理設計

サーバーやストレージとかハードウェア系のこと

実装設計

MySQLとかPostgreSQLとかのこと

この本で扱うのは1と2らしい

tunatuna

1章

基本的に初心者向けがつらつらと。知ってる人は読み飛ばしてOK。

アプローチ

  • DOA(Data Oriented Approach)
    データ中心アプローチ
    今の主流

  • POA(Process Oriented Approach)
    プロセス中心アプローチ
    今は使われてない

3層スキーマ

  • 外部スキーマ
    外部モデル=ビューの世界
    ユーザーから見たデータベース
    テーブル(SELECTされた)やビュー

  • 概念スキーマ
    論理データモデル=テーブルの世界
    開発者から見たデータベース
    テーブル定義

  • 内部スキーマ
    物理データモデル=ファイルの世界
    DBMSから見たデータベース
    データの物理的配置

tunatuna

コラムでOSI参照モデルとかWeb三層構造とかも

tunatuna

2012年発売だから当たり前なんだけど所々古さを感じる
でも古いと言っても変わらないこともあるのも読み取れる
特に抽象化の概念は昔から今に至るまで重要な要素だと思う

tunatuna

2章

設計順序

原則としてDB設計は論理設計が物理設計に先立つ

論理設計ステップ

  1. エンティティの抽出
  2. エンティティの定義
  3. 正規化
  4. ER図の作成

物理設計ステップ

  1. テーブル定義
  2. インデックス定義
  3. ハードウェアサイジング
  4. ストレージ冗長構成決定
  5. ファイル物理配置決定

memo

物理設計に置いてDBはディスクI/Oが性能問題の大半を占める
性能要件=処理時間+スループット(Transaction Per Second)
冗長化=RAID

RAIDは少なくとも5、余裕があれば6や10

DBに格納されるファイル

  • データファイル
  • インデックスファイル
  • システムファイル
  • 一時ファイル
  • ログファイル

バックアップ方法

  • フルバックアップ
  • 差分バックアップ
  • 増分バックアップ
tunatuna

物理サーバーが主の話だけど今はクラウド主流だからこの辺気にする人も減ってそう

tunatuna

3章

  • テーブルについて
  • テーブル構成について
  • 正規化、正規形について
    • 第一正規系
      • 一つのセルに一つの値(スカラ値という。scalarは単一のという意味)
    • 第二正規系
      • 部分関数従属を完全関数従属にする
    • 第三正規系
      • {A, B} → {C} → {D} の従属が成り立つ分解。推移的関数従属。
        ※AとBで一意になるCがあり、さらにそのCによってDが一意になる。
    • ボイスコッド正規系
      • 説明割愛
    • 第四正規系
      • 1つのエンティティに複数の関連をいれないこと。
    • 第五正規系
      • 関連エンティティを1対1に作っていくこと。
        ※実務で使うのは第2、第3までがほとんど

memo

  • 正規化
    データの冗長性を排除し一貫性と効率性を保持する
  • 関数従属性
    Y=f(x)のように入力xに対してyを一つに決めること。YはXに従属している。
  • 部分関数従属
    主キーの一部の列に対して従属する列がある場合
  • 完全関数従属
    主キーの全ての列に従属性がある場合
  • 無損失分解
    結合後に可逆性のある分解
  • 高次正規系
    第3より上の正規系のこと
tunatuna

正規化に関しては当たり前じゃん的なことをしっかり文字と図にした感じ。逆に何も考えずにこれが当たり前にできてるからよかった。
まとめにも書いてあるけど当たり前なことを改めて整理することが大事とのこと。