データ設計の進め方
正規化とか、正規形って何?
という方でも、第三正規形のデータ構造を作成できる設計方法をご紹介します。
- 個体を認知する(エンティティの抽出)
- 個体を識別する(マスタ、トランの分類)
- 関係を確認する(エンティティ間の関係)
- マスタ−トラン(1対多)
- マスタ-マスタ
- トラン-トラン
- マスタ-トラン(多対多)
- 周延を確認する(サブセット)
この手順で設計を進めると難しいことを考えなくても、第3正規系まで作れますよ。
嘘っぽいですが、本当なのです。
1. 個体を認知する(エンティティの抽出)
ID、番号、キーとつくものをキー項目として、エンティティを作っていきます。
ただし、区分番号や種別キーなどはキー項目にはなり得ません。
大事なのは、勝手にキーを作ってエンティティを増やさないこと。
2. 個体を識別する(マスタ、トランの分類)
1で作ったエンティティをマスタとトランに分類します。
日付が項目に入るものはトラン、そうでないものはマスタとします。
受注エンティティには受注日が入るのでトラン、製品には製品日というものが入らないのでマスタといった感じ。
3. 関係を確認する(エンティティ間の関係)
ここがキモです。
1. マスタ-トラン(1対多)
マスタのキー項目をトランのキー項目に加えます。それだけです。
2. マスタ−マスタ
1対1、1対多、多対多などどんな関係でも、間に新たにエンティティを作り、両方のキー項目を新たエンティティのキー項目としましょう。
3. トラン-トラン
前後関係があるはずなので、前のエンティティのキー項目を後ろのエンティティのキー項目として加えます。
ただし、多対1、多対多の場合は間に新たなエンティティを作り、両方のキー項目をキー項目とします。
4. マスタ-トラン(多対多)
トランがヘッダー-ディテール構造になっているべきものと思われます。
商品と受注のようなものです。
トラン全体を管理するエンティティと明細を管理するエンティティに分け、明細とマスタを関係させると1対多になります。
4. 周延を確認する(サブセット)
ここは意見が分かれるのでどこまで書くかですが・・・
区分や種別とつく項目がある場合、マスタから切り出して新たなエンティティを作ります。
区分やキー項目は新しく作るエンティティ名にします。
キー項目は元のマスターのキー項目です。
※区分や種別はキーにはしません。
そうすることで区分や分類をなくすことができます。
区分や種別によって項目が変わる場合、新しいエンティティ側に持っていくと、nullを排除できます。
こんな感じで設計してみると、気がつけば第3正規形になってますよ。
50分くらいかけて講義する内容を端折ってるので、わかりにくい部分も多いと思います。
わからないことはなんでも聞いてくださいね〜。