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「商品エンティティの見直し」で詳細に分析します
解説トレーナー


