6.1 【設問】受発注(1/3)

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

< 前へ | 6.1 【設問】受発注(1/3) | 次へ >

解説トレーナー

Oracle / 上流工程 担当 中村 才千代

データベース設計、システム構築の上流~下流工程全般のインストラクターです。SE時代の経験を生かし「業務を知るエンジニアこそDB設計に関わるべき」「DB設計に携わるエンジニアは業務を知る人に知恵を貸してもらう」ことを伝えたいと思っています。

■認定・受賞

2000年 Oracle University「Best Instructor of the Year」受賞
2002年 Oracle University「Best Instructor of the Year」受賞

Page Top