達人に学ぶDB設計 徹底指南書

ミック氏の著書「達人に学ぶDB設計 徹底指南書」がDB設計の参考になったので、メモしておきます。

第1章 データベースを制する物はシステムを制す

1-1 システムとデータベース

データ処理としてのシステム

データと情報

1-2 データベースあれこれ

データベースの代表的なモデル

DBMSの違いは設計に影響するか?

1-3 システム開発の工程と設計

システム開発の設計工程

設計工程と開発モデル

1-4 設計工程とデータベース

DOAとPOA

DB設計の3層スキーマ

概念スキーマとデータ独立性

Web3層モデル

第2章 論理設計と物理設計

2-1 概念スキーマと論理設計

論理設計のステップ

エンティティの抽出

エンティティの定義

正規化

ER図の作成

2-2 内部スキーマと物理設計

物理設計のステップ

テーブル定義

インデックス定義

ハードウェアのサイジング

クラウドとスケーラビリティ

ストレージの冗長構成

ファイルの物理配置

2-3 バックアップ設計

バックアップの基本分類

完全/差分/増分

フルバックアップ

差分バックアップ

増分バックアップ

バックアップ方式にもトレードオフがある

どんなバックアップ方式を採用すべきか?

2-4 リカバリ設計

リカバリとリストア

リストアとロールフォワード

第3章  論理設計と正規化~なぜテーブルは分割する必要があるのか?

3-1 テーブルとは何か?

二次元表≠テーブル

3-2 テーブルの構成要素

行と列

キー

制約

テーブルと列の名前

3-3 正規化とは何か?

正規形の定義

3-4 第1正規形

第1正規形の定義~スカラ値の原則

第1正規形を作ろう

なぜ1つのセルに複数の値を入れてはダメなのか?~関数従属性

3-5 第2正規形~部分関数従属

第2正規化を行う

第2正規形でないと何が悪いのか?

無損失分解と情報の保存

3-6 第3正規形~推移的関数従属

推移的関数従属

第3正規化を行う

3-7 ボイス-コッド正規形

3次と4次の狭間

ボイス-コッド正規化を行う

3-8 第4正規形

多値従属性~キーと集合の対応

第4正規化を行う

第4正規形の意義

3-9 第5正規形

第5正規化を行う

3-10 正規化についてのまとめ

正規化の3つのポイント

正規化は常にするべきか?

正規化を学ぶことに対する的外れな批判について

損失分解

第4章 ER図~複数のテーブルの関係を表現する

4-1 テーブルが多すぎる!

4-2 テーブル同士の関係を見抜く

1対1、1対多、多対多

4-3 ER図の描き方

テーブル(エンティティ)の表記方法

IE表記法でER図を描く

IDEF1XでER図を描く

4-4 「多対多」と関連実態

第5章 論理設計とパフォーマンス~正規化の欠点と非正規化

5-1 正規化の功罪

正規化とSQL(検索)

正規化とSQL(更新)

正規化と非正規化、どちらが正解なのか?

5-2 非正規化とパフォーマンス

サマリデータの冗長性とパフォーマンス

選択条件の冗長性とパフォーマンス

5-3 冗長性とパフォーマンスのトレードオフ

更新時のパフォーマンス

データのリアルタイム性

改修コストの大きさ

第6章 データベースとパフォーマンス

6-1 データベースのパフォーマンスを決める要因

インデックス

統計情報

6-2 インデックス設計

まずはB-treeインデックスから

B-treeインデックスの長所

B-treeインデックスの構造

6-3 B-treeインデックスの設計方針

B-treeインデックスはどの列に作れば良いか?

B-treeインデックスのテーブルの規模

B-treeインデックスとカーディナリティ

B-treeインデックスとSQL

B-treeインデックスに関するその他の注意事項

6-4 統計情報

オプティマイザと実行計画

統計情報の設計指針

第7章 論理設計のバッドノウハウ

7-1 論理設計の「やってはいけない」

7-2 非スカラ値(第1正規形未満)

配列型による非スカラ値

スカラ値の基準は何か?

7-3 ダブルミーニング

この列の意味は何でしょう?

テーブルの列は「変数」ではない

7-4 単一参照テーブル

多すぎるテーブルをまとめたい?

単一参照テーブルの功罪

7-5 テーブル分割

テーブル分割の種類

水平分割

垂直分割

集約

shardingとカラムベース

7-6 不適切なキー

キーは永遠に不変です!

同じデータを意味するキーは同じデータ型にすべし

7-7 ダブルマスタ

ダブルマスタはSQLを複雑にし、パフォーマンスを悪化させる

ダブルマスタはなぜ生じるのか

バッドノウハウのどこが悪いのか?

第8章 論理設計のグレーノウハウ

8-1 違法すれすれの「ライン上」の位置する設計

8-2 代理キー~主キーが役に立たないとき

主キーが決められない、または主キーとして不十分なケース

代理キーによる解決

自然キーによる解決

インターバル

オートナンバリングの是非

8-3 列持ちテーブル

配列型は使えない、でも配列を表現したい

列持ちテーブルの利点と欠点

行持ちテーブル

8-4 アドホックな集計キー

8-5 多段ビュー

ビューへのアクセスは「2段階」で行われる

多段ビューの危険性

8-6 データクレンジングの重要性

データクレンジングは設計に先立って行う

代表的なデータクレンジングの内容

第9章 一歩進んだ論理設計~SQLで木構造を扱う

9-1 リレーショナルデータベースのアキレス腱

木構造とは?

9-2 伝統的な解法~隣接リストモデル

9-3 新しい解法~入れ子集合モデル

入れ子集合モデルを使った検索

入れ子集合モデルを使った更新

9-4 もしも無限に資源があったなら~入れ子区間モデル

使っても使っても尽きない資源

入れ子区間モデルを使った更新

9-5 ノードをフォルダだと思え~経路列挙モデル

ファイルシステムとしての階層

経路列挙モデルによる検索

経路列挙モデルを使った更新

9-6 各モデルのまとめ

参考:

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ