【達人に学ぶDB設計 徹底指南書】の感想をまとめてみる

はじめに

絶賛SQL学習中につき『スッキリわかるSQL入門』に続いて

『達人に学ぶDB設計 徹底指南書』を読んだので、まとめてみる。

 

良かった点

SQL入門本の次ステップとしてスムーズに移行できた

『スッキリわかるSQL入門』でSQL操作を一通り学んだことで、

データベースからデータを操作する手法が分かった。

ただ、Webサービスを1から立ち上げようとしたら、データベースを作る(データ設計する)側の手順が必要になる。

そうなった際に何に気をつけ、どういう手順でデータ設計すれば良いかを、本書で学ぶことができた。

また、インプットするだけでなく演習問題も付いているので、

実践練習もできた点が良かった。

 

・無駄のない構成で読みやすい

この本を読んだことがある人なら共感してもらえると思うが、

冒頭ではこの本がターゲットにしている分野や大切な観点をまとめてあったり

「勘どころ」で抑えるべきポイントが要約されていたり

図を多用しすぎず行の間隔に余裕があったり

と、内容は決して優しいものではなかったが、スラスラと読めた。

 

学んだこと

・最初にデータありき

システムの品質を決めるのは、プログラムではなく設計。

これは本書で口酸っぱく語られていることだが、

データ設計は後々変更するのは高コストなため、初めの段階でしっかり設計しておくこと。

 

・3層スキーマ

①外部スキーマ(外部モデル)= ビューの世界

②概念スキーマ(論理データモデル)= テーブルの世界

③内部スキーマ(物理データモデル)= ファイルの世界

概念スキーマは、外部スキーマと内部スキーマの緩衝材(お互いが依存関係になり、一方の変更が他方に影響を与える弱いシステムになるのを防ぐ)

 

・論理設計のステップ

1. エンティティの抽出(RDBでは、テーブル)

2. エンティティの定義(RDBでは、列)

3. 正規化(第1~3正規形まででOK)

4. ER図の作成

 

・物理設計のステップ

1. テーブル定義(論理設計で定義された概念スキーマをもとに、DDLで)

2. インデックス定義

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

4. ストレージの物理配置決定

 

・データベース設計は常にPros and Cons

データベース設計に限らずあらゆる事象には

「この手順やこの機能なら絶対大丈夫」というものはない。

「あちらを立てればこちらが立たず」の連続だが、

『あくまで正攻法、どうしようもなくなった時のみ特例措置』

 

 

難しかったところ

・内部スキーマおよび物理設計

内部スキーマ関連はファイルの世界でよりシステム内部に近い層の話だったので、

どうしても内容的に難しく理解に苦しむことが多かった。

 

おわりに

今回データベース設計を学んだので、今後実装の際に学んだことを生かして

データベース設計の経験も積んでいきたい。

 

 

 

『スッキリわかるSQL入門』を読んだ感想まとめ

はじめに

SQL学習の一発目として『スッキリわかるSQL入門』を読了したので、

まとめてみたい。

良かった点

SQL知識0でも基礎の基礎から学べる

本書の特徴として、

優しいタッチのイラストで描かれている

3人の会話ベースで進み、よくある疑問点など初心者の気持ちを代弁してくれる

ことから、SQL初心者でも挫折しないよう寄り添って書かれていた。

RDBMS製品によってSQL文を分けて紹介してくれる

SQLは、RDBMS製品(Oracle, MySQL, PostgreSQL, SQL Server etc...)によって

命令や記述方法に多少の違いが出てくるが、毎度丁寧に分けて解説してくれている。

学んだこと

SQL命令の4分類

DML

・SELECT
・INSERT
・UPDATE
・DELETE

TCL

・COMMIT
・ROLLBACK
・SET TRANSACTION
・SAVEPOINT

DDL

・CREATE
・ALTER
DROP
・TRUNCATE

DCL

・GRANT
・REVOKE

第1正規形のゴール:

テーブルの全行全列に1つずつ値が入っているべし

ステップ① 繰り返しのれつの部分を別の表に切り出す

ステップ② 切り出したテーブルの仮の主キーを決める

ステップ③ 主キー列をコピーして複合主キーを構成する

第2正規形のゴール:

複合主キーを持つテーブルの場合、非キー列は複合主キーの全体に関数従属すべし(部分関数従属の排除)

(「複合主キーの一部の列に対してのみ関数従属する列」が含まれてはいけない)

ステップ① 複合主キーの一部に関数従属する列を切り出す

ステップ② 部分関数従属していた列をコピーする

第3正規形のゴール:

非キー列は、主キー列に直接、関数従属すべし(推移関数従属の排除)

(「主キーに関数従属する列にさらに関数従属する列」は存在してはいけない)

ステップ① 間接的に主キーに関数従属する列を切り出す
ステップ② 直接的に関数従属していた列をコピーする

物理設計の手順

ステップ① 最終的なテーブル名、列名を決定
ステップ② 列の型を決定
ステップ③ 制約、デフォルト値を決定
ステップ④ インデックスを決定

おわりに

今回こちらの書籍では、「データベースからデータを取り出す」手法をメインで学んだが、
1からサービスを実装する際には「データベースを作成する」手法を学べる書籍に移りたい。