Help us understand the problem. What is going on with this article?

誰でもできるデータ設計の進め方

データ設計の進め方

正規化とか、正規形って何?
という方でも、第三正規形のデータ構造を作成できる設計方法をご紹介します。

  1. 個体を認知する(エンティティの抽出)
  2. 個体を識別する(マスタ、トランの分類)
  3. 関係を確認する(エンティティ間の関係)
    1. マスタ−トラン(1対多)
    2. マスタ-マスタ
    3. トラン-トラン
    4. マスタ-トラン(多対多)
  4. 周延を確認する(サブセット)

この手順で設計を進めると難しいことを考えなくても、第3正規系まで作れますよ。
嘘っぽいですが、本当なのです。

1. 個体を認知する(エンティティの抽出)

 ID、番号、キーとつくものをキー項目として、エンティティを作っていきます。
ただし、区分番号や種別キーなどはキー項目にはなり得ません。
 大事なのは、勝手にキーを作ってエンティティを増やさないこと。

2. 個体を識別する(マスタ、トランの分類)

 1で作ったエンティティをマスタとトランに分類します。
 日付が項目に入るものはトラン、そうでないものはマスタとします。
 受注エンティティには受注日が入るのでトラン、製品には製品日というものが入らないのでマスタといった感じ。

3. 関係を確認する(エンティティ間の関係)

ここがキモです。

1. マスタ-トラン(1対多)

 マスタのキー項目をトランのキー項目に加えます。それだけです。

2. マスタ−マスタ

 1対1、1対多、多対多などどんな関係でも、間に新たにエンティティを作り、両方のキー項目を新たエンティティのキー項目としましょう。

3. トラン-トラン

 前後関係があるはずなので、前のエンティティのキー項目を後ろのエンティティのキー項目として加えます。
 ただし、多対1、多対多の場合は間に新たなエンティティを作り、両方のキー項目をキー項目とします。

4. マスタ-トラン(多対多)

 トランがヘッダー-ディテール構造になっているべきものと思われます。
 商品と受注のようなものです。
 トラン全体を管理するエンティティと明細を管理するエンティティに分け、明細とマスタを関係させると1対多になります。

4. 周延を確認する(サブセット)

 ここは意見が分かれるのでどこまで書くかですが・・・
 区分や種別とつく項目がある場合、マスタから切り出して新たなエンティティを作ります。
 区分やキー項目は新しく作るエンティティ名にします。
 キー項目は元のマスターのキー項目です。
  ※区分や種別はキーにはしません。
 そうすることで区分や分類をなくすことができます。
 区分や種別によって項目が変わる場合、新しいエンティティ側に持っていくと、nullを排除できます。

こんな感じで設計してみると、気がつけば第3正規形になってますよ。

50分くらいかけて講義する内容を端折ってるので、わかりにくい部分も多いと思います。

わからないことはなんでも聞いてくださいね〜。

chiwaCF
データから業務を読み解くことを生業にするデータアーキテクト。 データベースは楽しいです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした