6.2 【設問】受発注~入出荷

6.2 【設問】受発注~入出荷

6.2.2 出荷/売上エンティティの見直し

例題10 出荷/売上の属性を見直す

まず、業務の現状と要望事項を説明します。
それを把握した上で、続く問題に答えなさい。

  • 出荷指示が出た時点で、「出荷/売上」オカレンスと「出荷/売上明細」オカレンスが同時に作成されます
    その後、「出荷確認」処理を行い、出荷先から物品受領書が返送されて、「納品確認」となります
    倉庫担当者は、このステータスを確認し、必要に応じて適切な処理を行う必要があります(たとえば、出荷確認から納品確認のステータスに移行しない出荷商品を追跡調査する、など)
  • 売上の管理としては、出荷した後、顧客側で模晶が行われた結果、返品された場合の処理をする、といった場合も考えられます。
  • また、受注を経ずに、いきなり出荷席上に対応する場合もあります
    このような場合、受注と同じ項目を出荷/売上にも用意しておけば、わざわざ受注への新規データを作成する必要はありません。

問題

上記のような要件に対応できるよう、モデルを見直してください。

解答

出荷/売上
* 出荷売上番号    
  出荷売上日付    
  出荷先顧客コード (FK1)  
  出荷売上区分   1.
  売上社員コード (FK2)  
  値引き承認社員コード (FK3)  
  売上部門コード (FK4)  
  受注注文番号 (FK5)  
  客先希望納期日付    
  営業値引き承認フラグ    
  営業値引き理由    
  営業値引き非承認理由    
  値引き詳細番号 (FK6)  
  出荷検印社員コード (FK7)  
  消費税額 (導出)  
  税抜売上全額合計 (導出) 4.
  税込売上金額合計 (導出) 4.
  売上返品元出荷売上番号 (FK8) 1.
  ステータス   5.
 
出荷/売上明細
* 出荷売上番号 (FK1)   
* 出荷売上明細番号   2.
  受注注文番号 (FK2)  
  商品コード (FK2、FK3)  
  客先希望納期日付 (FK2)  
  売上数量    
  倉庫コード (FK4) 3.
  ステータス    
  価格種別コード (FK3)  
  商品価格適用開始日 (FK3)  
  営業値引き承認フラグ    
  営業値引き理由    
  営業値引き非承認理由    
  値引き詳細番号 (FK4)  
  消費税額 (導出)  
  税抜金額 (導出)  

解説
(注:番号は解答中の番号と対応します。番号が記載されていない解説は、全体に当てはまります)

  • 受注を経ずに、いきなり注文がきて出荷/売上に対応できるようにするために、「受注」と同じ項目を「出荷/売上」にも用意しています
    これは「受注」との重複項目ではありません
    「受注」で得られる情報は、リレーションで関連づけられていますから、「受注」から取得されます
    「出荷/売上」エンティティで管理される、「受注」で管理されているのと同じ属性の値は、受注した後の出荷の場合、値をもちません。
  1. 「出荷/売上」エンティティの属性「出荷売上区分」の値によって、通常の出荷/売上か、返品か、売上情朝の変更か、といった識別を行います
    通常出荷は0、返品は1、変更は2などの値を考えます。返品の場合、次のような処理を考えることができます
    すでに出荷されているため、返品されて戻ってきたオカレンスは「出荷/売上」オカンレンスとしてすでに存在しています
    これを打ち消すために、次の処理を行います
  1. 返品用の新規「出荷/売上」オカレンスを作成し、「出荷売上区分」を1とし、商品情報を「出荷/売上明細」にもちます
    その時、1.ですでに売上が計上されていた売上計上額を取り消すための再計算が必要であるため、返品する場合の「出荷/売上」オカレンスは、「売上返品元出荷売上番号」属性に、返品の元となった「出荷/売上番号」の値を入力します
  2. 返品された商品に対して、返品のままとするのか、代替の商品を送るのか、を顧客と相談して決めます
  3. 返品分を送付しないのであれば、受注数と納品数が異なったままの状態で出荷処理完了とする必要があります
    「ステータス」属性の値として、納品完了というステータスを追加し、アプリケーション側で、強制的にステータスを変更させる処理を追加してもらいます
  4. 返品分を再送するのであれば、「出荷席上」に新規にオカレンスを追加します
    そのとき、「売上返品元出荷売上番号」に返品の元となった出荷/売上番号を入力し、最終的に処理が完了したことを確認できるようにします
  1. 受注を経ずに、いきなり出荷/売上処理ができるようにすると、必ずしも出荷/売上に対応する受注オカレンスが存在するわけではない、ということになります
    つまり、「出荷売上明細」エンティティの一意識別子の一部に「受注明細」の一意識別子を入れることはできません
    このため、出荷売上明細エンティティの一意識別子は、人工的なキー「出荷売上明細番号」を作ります
  2. 「出荷/売上明細」では、受注を経ない出荷/売上は、倉庫からの出荷のみを考慮すればよいと考えられるので、「発注」エンティティヘのリレーションはなく、「倉庫」エンティティヘのリレーションだけをもちます
  3. 「出荷/売上明細」の全板を合計して、出荷/売上金額合計をヘッダにもたせます。これは導出項目なので、但し書きをしておきます
  • ステータス属性は、「出荷/売上」にもたせます
    「出荷/売上」の単位で、次のステータスを管理します
  • 出荷指示済、出荷済、納品完了、返品処理中

< 前へ | 6.2 【設問】受発注~入出荷 | 次へ >

解説トレーナー

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

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

■認定・受賞

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

Page Top