📖

達人に学ぶDB設計徹底指南書第2版・読んだまとめpart1

2024/11/25に公開

はじめに

以前、ミックさんの著書『おうちで学べるデータベースのきほん 第2版』を読ませていただきました。
私は本を読むのが苦手なので、こういった参考書のようなものも、なかなか読了したものは少ない・・ですが、ミックさんの説明がわかりやすく、たった数日でサクッと読み終わることができました!
『達人に学ぶDB設計徹底指南書 第2版』も、データベース設計を深く学びたいエンジニアにとってのバイブルと言われています。
本記事では、第1章を読んで得られた学びや感想をまとめました。

第1章の目次

データベースを制するものはシステムを制する
1ー1 システムとデータベース
1ー2 データベースあれこれ
1ー3 システム開発の工程と設計
1ー4 設計工程とデータベース

習得したこと

⚫︎「DBMS」と「データベース」は意味が違う
データベースとはデータの集まりを指すための言葉。
そのデータベースを管理するためのシステムをDBMS(Database Management System)と呼ぶ。

⚫︎データベースの代表的なモデル
・リレーショナルデータベース(Relational Database : RDB)
・オブジェクト指向データベース(Object Oriented Database : OODB)
・XMLデータベース(XML Database : XMLDB)
・キー・バリュー型ストア(Key-Value Store : KVS)

⚫︎ドキュメント型データベース
・階層型データベース

⚫︎DBMS(PostgreSQLやMySQLやOracle Database)が異なっても、基本的には設計の方法は影響を受けない

⚫︎設計工程にはDOAとPOAがある
・DOA(Data Oriented Approach):データ中心アプローチ
・POA(Process Oriented Approach):プロセス中心アプローチ

DOA:データ→プログラム
POA:プログラム→データ

DOAはPOAの欠点を克服するために登場した。
データの意味や形式が先に決まっていれば、複数のプログラムで共用することが容易になる。
業務要件の仕様変更にも柔軟に対応できるというメリットがある。

システム開発においては、プログラム設計に先立ってまずデータ設計が優先される。
データベースを制する者がシステムを制す。
データベースはシステムの中心であると同時に、システム開発の中心でもある。

⚫︎3層スキーマモデル
①外部スキーマ(外部モデル)=ビュー(画面やデータ)←ユーザー
②概念スキーマ(論理データモデル)=テーブル(データの要素やデータ同士の関係)←開発者
③内部スキーマ(物理データモデル)=ファイル(テーブルやインデックスの物理的定義)←DBMS

感想

リレーショナルデータベース(RDB)はよく聞くのでなんとなく知っていたが、
それ以外のデータベースの種類は聞いたことがありませんでした。。

最近、「ドキュメント型データベース」という名をGCPの勉強をしているとき、耳にしました。

Cloud Firestore は NoSQL ドキュメント指向データベースです。SQL データベースとは違い、テーブルや行はありません。代わりに、データは「ドキュメント」に格納し、それが「コレクション」にまとめられます。
各「ドキュメント」には、一連の Key-Value ペアが含まれています。Cloud Firestore は、小さなドキュメントからなる大きなコレクションを格納するために最適化されています。

ドキュメント型データベースの代表は、JSON(JavaScript Object Notation)。
JavaScriptのオブジェクトを定義するためのデータ構造だそうで、今私が実際に業務で使用しているのはPostgreSQLなのでこれに当たりますかね。

3層スキーマモデルに関しては、②の概念スキーマはなんのためにあるのか?
もし①の外部スキーマと②の内部スキーマだけの「2層スキーマ」だったら、システムの規模が大きくなればなるほど変更に対する柔軟性がなくなるからでした。

もし、概念スキーマがなかったら、ユーザーが「データの見え方を変えたい」と思ったら、外部スキーマは変更が必要になりますが、それだけでなく、内部スキーマまで変更の必要が出てくることがあります。
これと反対に、内部スキーマに変更を行う場合にも、外部スキーマが影響を受けてしまうことが起こります。
2層スキーマでは、スキーマ同士の独立性が低く(=依存性が高く)なり、変更に弱いシステムができあがってしまうのです。
つまり、概念スキーマというのは、外部スキーマと内部スキーマの間に位置することで、両者の変更が互いに影響し合わないようにするための、緩衝材の役割を果たしているのです。

未経験者の私は、基礎の知識は特になく、
現在はデータベース設計がすでにある状況で、テストコードやテストデータを作成したり、
実装の修正を手伝ったりしているだけですが、
こういった基本的な設計知識を習得するのは、徐々にパズルができていっている感覚です。
この本は第9章まであるので、引き続き読み進めます。
以上。

Discussion