達人に学ぶDB設計徹底指南書(ミック)
書籍情報
- 著者:ミック(著)
- 発行日:2012-03-15
- ISBN:9784798124704
- URL:https://www.shoeisha.co.jp/book/detail/9784798124704
書籍目次
- はじめに
- 第1章 データベースを制する者はシステムを制す
- 1-1 システムとデータベース
- データ処理としてのシステム
- データと情報
- 1-2 データベースあれこれ
- データベースの代表的なモデル
- DBMSの違いは設計に影響するか?
- 1-3 システム開発の工程と設計
- システム開発の設計工程
- 設計工程と開発モデル
- 1-4 設計工程とデータベース
- DOAとPOA
- 3層スキーマ
- 概念スキーマとデータ独立性
- 演習問題
- 1-1 システムとデータベース
- 第2章 論理設計と物理設計
- 2-1 概念スキーマと論理設計
- 論理設計のステップ
- エンティティの抽出
- エンティティの定義
- 正規化
- ER図の作成
- 2-2 内部スキーマと物理設計
- 物理設計のステップ
- テーブル定義
- インデックス定義
- ハードウェアのサイジング
- ストレージの冗長構成
- ファイルの物理配置
- 2-3 バックアップ設計
- バックアップの基本分類
- 完全/差分/増分
- フルバックアップ
- 差分バックアップ
- 増分バックアップ
- バックアップ方式にもトレードオフがある
- どんなバックアップ方式を採用すべきか?
- 2-4 リカバリ設計
- リカバリとリストア
- リストアとロールフォワード
- 演習問題
- 2-1 概念スキーマと論理設計
- 第3章 論理設計と正規化 ~なぜテーブルは分割する必要があるのか?
- 3-1 テーブルとは何か?
- 二次元表≠テーブル
- 3-2 テーブルの構成要素
- 行と列
- キー
- 制約
- テーブルと列の名前
- 3-3 正規化とは何か?
- 正規形の定義
- 3-4 第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-1 テーブルとは何か?
- 第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 冗長性とパフォーマンスのトレードオフ
- 更新時のパフォーマンス
- データのリアルタイム性
- 改修コストの大きさ
- 演習問題
- 5-1 正規化の功罪
- 第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 統計情報
- オプティマイザと実行計画
- 統計情報の設計指針
- 演習問題
- 6-1 データベースのパフォーマンスを決める要因
- 第7章 論理設計のバッドノウハウ
- 7-1 論理設計の「やってはいけない」
- 7-2 非スカラ値(第1正規形未満)
- 配列型による非スカラ値
- スカラ値の基準は何か?
- 7-3 ダブルミーニング
- この列の意味は何でしょう?
- テーブルの列は「変数」ではない
- 7-4 単一参照テーブル
- 多すぎるテーブルをまとめたい?
- 単一参照テーブルの功罪
- 7-5 テーブル分割
- テーブル分割の種類
- 水平分割
- 垂直分割
- 集約
- 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 各モデルのまとめ
- 演習問題
- 9-1 リレーショナルデータベースのアキレス腱
- 付録 演習問題の解答
- 第1章 解答
- 演習1-1 DBMSの情報確認
- 演習1-2 アプリケーション改修のタイプとコスト
- 第2章 解答
- 演習2-1 データベースサーバーのクラスタリング構成
- 演習2-2 ハードウェアリソースの情報取得
- 演習2-3 サーバーCPUの机上サイジング
- 第3章 解答
- 演習3-1 正規形の次数
- 演習3-2 関数従属性
- 演習3-3 正規化
- 第4章 解答
- 演習4-1 ER図
- 演習4-2 関連エンティティ
- 演習4-3 多対多の関連
- 第5章 解答
- 演習5-1 正規化されたテーブルに対するSQL
- 演習5-2 非正規化によるSQLチューニング
- 第6章 解答
- 演習6-1 ビットマップインデックスとハッシュインデックス
- 演習6-2 インデックスの再編成
- 第7章 解答
- 演習7-1 パーティションの特徴
- 演習7-2 マテリアライズドビューの機能
- 第8章 解答
- 演習8-1 ビジネスロジックの実装方法の検討
- 演習8-2 一時テーブル
- 第9章 解答
- 演習9-1 木構造を扱うモデルの正規形
- 演習9-2 実数のデータ型
- 第1章 解答
- 索引
- COLUMN
- Web3層モデル
- クラウドとスケーラビリティ
- RAID6
- 関係(リレーショナル)とは何か?
- 正規化を学ぶことに対する的外れな批判について
- 損失分解
- shardingとカラムベース
- バッドノウハウのどこが悪いのか?
- 主キーはなぜ必要か?
- バックアップとレプリケーション
- 入れ子集合とフラクタル