たらむblog

アウトプット用。

「達人に学ぶDB設計」を読んだ。

はじめに

本書籍はデータベース設計の考え方、
実践ノウハウ、バッドノウハウ等について説明された書籍となります。

1章 

データベースがシステムおよび開発工程において持つ重要性を、
システムにおける位置づけや、開発プロセスとの関連から説明されていた。
「データベース設計を制する者はシステムを制す」と筆者が考える理由は、
システムに合わせてデータを作るのではなく、システムがデータのフォーマットに合わせて作られるからだと言う。

2章

論理設計/物理設計、RAID、バックアップ、リカバリとリストアについて説明されていた。
論理設計には大きく分類して4つのステップが存在し、
物理設計には大きく分類して5つのステップが存在する。
それぞれのタスクの内容と、行う時に気を付けるべきポイントについて説明されていた。
RAID、バックアップ、リカバリとリストアについて、
いくつか種類があり、それぞれのメリット、デメリットについて説明されていた。

3章

正規化について説明されていた。
正規化はデータの冗長性をなくしていく作業のこと。
その目的は更新時のデータ不整合を防止することにある。
第一正規化から第五正規化まで説明されていたが、
第三正規化までを考えれば十分とのこと。

4章

E-R図に関する説明がされていた。
エンティティ(テーブル)の数が増えると、
テーブル同士の関係がわかりにくくなり、設計に支障をきたす。
この問題を解決する手段がE-R図。
IE表記法と、IDEF1Xの記述方法について説明されていた。

5章

論理設計とパフォーマンスについて。
大原則として可能な限り、高次に正規化する必要があると述べたうえで
パフォーマンスのために非正規化をすることもあると説明されていた。

6章

インデックスと統計情報という二つの観点を通して、
ハイパフォーマンスを実現する方法について説明されていた。

DBのパフォーマンスを決める主な要因は、
ディスクI/Oの分散(RAID)、結合(正規化)、インデックスと統計情報とのこと。

インデックスとはプログラミング言語的な表現をすると(x,α)という形式のキーバリュー。
xはキー値、αはそれに結びつく情報(実データ、あるいはそれへのポインタ)を意味する。

統計情報はSQLの最適なアクセスパスを見つけるために必要な地図情報のこと。
SQLに「こんなデータがほしい」と依頼したら、カーナビのように、最短と判断した経路を選んでくれる。

7章

バッドノウハウアンチパターン)と呼ばれるろくでもない設計について説明されていた。
バッドノウハウの事例と、なぜバッドノウハウは生まれるのか、バッドノウハウの何が「悪」なのかを解説。
バッドノウハウがダメな理由は、システムの品質を左右する上に後から変更することが容易ではないこと、 なぜダメ設計が生まれるかというと「何も考えていない」ためとのこと。

主なバッドノウハウとして
列の値の意味が途中で変わる「ダブルミーニング」、
あらゆるマスタテーブルを一つのテーブルに放り込んでごった煮させた「単一参照テーブル」、
顧客マスタAと顧客マスタBといった感じで、同じ役割のテーブルが二つ存在する「ダブルマスタ」が存在する。

8章

グレーノウハウについて説明されていた。
論理設計には、バッドノウハウとまでは言えないものの、きわどいライン上に位置するグレーゾーンが存在する。
主なグレーノウハウとして
代理キー、列持ちテーブル、アドホック(臨時の)な集計キー、多段ビューが存在する。

9章

RDB木構造を扱う方法について説明されていた。
木構造とフラットな二次元表は相性が悪くRDBで表現するには向かない構造らしい。
しかし、RDBもこの苦手を克服するため、
木構造を扱う方法として、隣接リストモデル、入れ子集合モデル、入れ子区間モデル、経路列挙モデルを生み出して苦手を克服しつつあるとのこと。

おわりに

私は仕事で主にバックエンドの言語を使って開発をすることが多いので、
DBに関してしっかり理解しておこうと思い本書籍を購入しました。
本書籍はDBの基本から、実際の開発で気をつけるべき点まで盛りだくさんの内容で
とても参考になりました。