6.1 【設問】受発注(1/3)
例題3 受発注エンティティ間にリレーションを引く
まず、業務の現状を説明します。
それを把握した上で、続く問題に答えなさい。
受注のうち、倉庫で在庫引当ができなかった分については、仕入先に発注します。
発注時に数量と納期を決めます。
仕入先から注文講書が到着した時点で、納期確定となります。
仕入時に使用する発注伝票は、受注時に使用する注文伝票と同じ内容のものを使用します。
商品ごとに仕入先は1箇所だけという前提でモデルを考えてください。
ヒント
まず、「発注」エンティティを「受注」エンティティと同様、正規化してください。
その際、「発注」エンティティ、「発注明細」エンティティの一意識別子と、オカレンスが何を示しているかを確認してください。
その上で、「発注」エンティティヘのリレーションシップが、「受注」側のどのエンティティとの間に引かれるかを考えてください。
また、その際、どちらのオカレンスが時系列で先に発生するかを考えて、オブショナリティを設定してください。
参考
本記事では、属性名で使用する「番号」と「コード」を使い分けています。
「番号」は意味をもたない順序番号などを想定しており、「コード」は何らかの意味のある場合に用います。
このような命名規則なども、ドキュメントとして残すことによって、管理すべき名前を整理することができます。
解答
受注 | |||
* | 受注注文番号 | ||
客先注文番号 | |||
受注日付 | |||
受注顧客コード | (FK1) | ||
受注社員コード | (FK2) | ||
値引き承認社員コード | (FK3) | ||
受注部門コード | (FK4) | ||
全体値引き額 | |||
消費税額 | (導出) | ||
税抜受注金額合計 | (導出) | ||
納入希望日 | |||
摘要 | |||
スーパータイプ:受注明細 | |||
* | 受注注文番号 | (FK1) | |
* | 商品コード | (FK2) | |
値引き額 | |||
消費税額 | (導出) | ||
金額 | (導出) | ||
予定納期日付 | |||
受注数量 | |||
変更後最終受注数量 | |||
ステータス | |||
サブタイプ:在庫引当 | |||
* | 受注注文番号 | (FK1) | |
* | 商品コード | (FK2) | |
* | 倉庫コード | (FK3) | |
引当数量 | |||
サブタイプ:発注分 | |||
* | 受注注文番号 | (FK1) | |
* | 商品コード | (FK2) | |
* | 発注注文番号 | (FK3) | |
発注商品コード | (FK4) | ||
不足分数量 | 3. | ||
発注 | |||
* | 発注注文番号 | ||
発注日付 | |||
仕入先コード | (FK1) | ||
発注社員番号 | (FK2) | ||
発注金額合計 | (導出) | ||
受注注文番号 | (FK3) | ||
倉庫コード | (FK4) | ||
全体値引き額 | |||
消費税額 | (導出) | ||
税込発注金額合計 | (導出) | ||
納入希望日付 | 3. | ||
発注明細 | |||
* | 発注注文番号 | (FK1) | |
* | 商品コード | (FK2) | |
発注数量 | 3. | ||
値引き額 | |||
消費税額 | (導出) | ||
発注金額計 | (導出) | ||
受注注文番号 | (FK3) | ||
確定納期日付 | 3. | ||
社員エンティティ | |||
* | 社員コード | ||
社員氏名 | |||
所属部門コード | (FK) | ||
部門エンティティ | |||
* | 部門コード | ||
部門名前 | |||
部門住所 | |||
部門電話番号 | |||
部長社員コード | (FK1) | ||
倉庫エンティティ | |||
* | 倉庫コード | ||
倉庫名前 | |||
倉庫住所 | |||
倉庫電話番号 | |||
在庫エンティティ | |||
* | 倉庫コード | ||
* | 商品コード | ||
日付 | |||
現在庫数 | |||
出荷引当可能量 |
解説
(注:番号は解答中の番号と対応します。番号が記載されていない解説は全体に当てはまります)
1. 「発注」エンティティの正規化については、「受注」エンティティの考え方と同じです
2. 商品ごとに、仕入先が1箇所に決まっていることから、「受注」1件に対し、複数の商品在庫に不足があった場合、「発注」が複数対応する場合が考えられます
「発注」エンティティは、受注時の在庫不足による発注だけではなく、計画発注も含まれます
これらから、「受注」と「発注」の間のリレーションは、1対多で「受注側」のオブショナリティは任意となります
3. 「発注明細」とリレーションをもつのは、「受注明細」の「発注分」サブタイプになります
不足した各受注商品明細ごとに「発注明細」1行が対応します
正規化をした場合、それぞれの属性がどこで管理されるかを下記に示します
- 商品ごとの発注数皇:「発注明細」の「発注数量」
- 不足分の発注数量:「受注明細」の「発注分」サブタイプの「不足分数量」
- 納期確定:受注確定の条件の中で、「発注分」サブタイプとリレーションをもつ「発注明細」エンティティの「確定納期日付」に値が入った状態です
- 納入希望日付:「発注」の「納入希望日付」
- 確定納期日付:「発注明細」の「確定納期日付」
- 「社員」「部門」「倉庫」などのマスタ系のエンティティは、必要最小限の属性のみ抽出しています
- 「在庫」エンティティについては、6.1.2「商品エンティティの見直し」で詳細に分析します
解説トレーナー