本書は、著者である羽生 章洋さんのご自分の経験を元に、データベース設計を行う底力を教えてくれる教科書です。テーブル設計のやり方や、コード体系の考え方、経営資産としてのデータベース、RDBMSを資産活用するためのSQLの書き方など、筆者の経験を惜しみなく公開されているという感じです。
最近はデータモデリングという言葉がもてはやされています。データモデリングにも色々な流派があり、コード体系、識別子、主キーの扱い、関係の扱いなど考え方がさまざまです。僕が読んできたデータモデリングの本で、これまでで一番共感が持てる考えが本書の考え方でした。もちろん、これまで読んできた本に書かれていることも多く、同じ考えをしているところも多々あります。ただ、本書はそういった部分を筆者の経験を元に解説しているので、非常にわかりやすいのです。
本書はデータモデリングとは何か、RDBの設計の練習がしたい人、ER設計に興味がある人が読者対象です。プログラマからSE、コンサルタントまで読んでおくと必ず為になる一冊だと思います。おすすめです。
覚書
エンティティの候補
データベースを設計する上で、もっとも重要なことは 「何を記録するか」 です。記録しないもの、記録したくないものはデータベース設計は行いません。この、記録したいものを2つの種類に分類すると次のようになります。
「モノ」 に関する記録のことを 「リソース(資源)系エンティティ」、「出来事」 についての記録のことを 「イベント系エンティティ」 と読んだりします。
出てきたエンティティは、業務上のモデルと 6W3H で照らし合わせて確認することができます。
「リソース系」
- 誰に (Whom)
- 誰が (Who)
- 何を (What)
- どこへ (Where)
「イベント系」
- どのように (How)
「属性の候補」
- いつ (When)
- どれくらい (How many)
- いくら (How much)
「ビジネス上の正規化の対象となってくるもの」
- なぜ (Why)
コードとキーの違い
キーの種類
データベース上で扱われるキーには大きく3つに分けられます。
- 主キー
- 外部キー
- ユニークキー
主キーは、「候補キー」 の中から選ばれ、レコードを一意に識別することができるキーのことです。外部キーは、他のレコードを参照する際のキーのことです。ユニークキーは、他のレコードと重複が無い一意な値をもつキーのことです。
「候補キー」 は、レコードを一意に識別することができるキーの集まりのことです。例えば、シーケンシャル番号や社会保障番号、名前と生年月日の組み合わせも候補キーとして使えるかもしれません(業務による)。業務で使っている 「コード」 も候補キーの一つといえます。
コードとキーの違い
- コード体系は、ユーザがレコードに容易に到達するためのユーザインターフェースである
- コード体系は、システムの都合ではなくビジネスの都合によって決定されるものである
つまり、コードはユニークキー、さらに言えば候補キーになるということです。しかし、コードはビジネスの都合によって変えられることがあるので、主キーとしてはふさわしくありません。主キーを考えることは、レコードのID (アイデンティファイア) を考えることと同じことなのです。
アイデンティファイアは、インスタンスのライフサイクル (一般にデータライフサイクル:DLCとも呼ばれます。) を表現していると考えればいいでしょう。その集合中に属してから消滅するまでの間、特定のインスタンスであることを示す座標として機能しているわけです。
コードは、ビジネスに合わせて柔軟に変更できるべきであるが、アイデンティファイア はそのレコードが存在する間は変更されてはいけないのです。
参考
- データモデリングの一つの流派。リソースとイベントとというエンティティの分け方についてよくわかります。
- データモデリングを学ぶならはずせない一冊
- 業務知識と共にDB設計を