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

第6章のはじめに

6.1.2 商品エンティティの見直し

例題4 商品に対する値引きをモデルで表す

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

受注時、顧客が、次のような要求をしたとします。

  1. 「注文全体でx%値引きしてくださいよ!」
  2. 「商品単価当たりy円値引きしてくれませんか?」
  3. 「これだけたくさん買ったんだから割引してくれてもいいんじゃない?」

また、夏物バーゲンとして7/20-8/20まで夏物全品×%OFFなどという企画もあります。
値引きを単に属性として管理すると、その項目の値を値引き「金額」で表したり、「割引率」で表したりすることになってしまいます。
また、その商品で「3.」のような値引きをする場合に、企業としてあらかじめ「シャツ10枚以上だったらいくら引く」といったルールがあるならば、エンティティとして「値引きルール」を作成しておくと、さまざまなケースに対応できます。

現在実施されている値引きルールを洗い出してみると、以下のルール、またはルールの組み合わせで値引きが行われていることがわかりました。

  • 全額による値引き
  • %による値引き
  • 単価ごとの値引き
  • 全体からの値引き
  • ある金額以上のまとめ買い時の値引き(商品に関係なく)
  • ある個数以上のまとめ買い時の値引き(商品に関係する)
  • 期間を区切ったバーゲン

問題

企業で、バーゲンなどの企画として設定する値引きに対応できるよう、受注の際の値引きをモデルに反映してください。
また、大量受注に対するルールも管理できるようにして、受注の際の値引きに対応できるようにしてください。

ヒント

値引きの単位は受注単位、受注明細単位の両方で起きる可能性があるため、「受注」エンティティ、「受注明細」スーパータイプエンティティに値引きに必要な属性を追加します。
値引きは受注明細の種類には関係ないため、サブタイプではなく、スーパータイプに追加します。

解答

値引きルール 1.
*ルール番号  
 コメント  
10  商品に関係なく受注伝票全体から一定額値引き
20  商品による、単価ごとの一定額値引き
30  商品ごとのまとめ買いによる一定額単価値引き
110  全体から%引き
120  単価で%引き
130  商品ごとのまとめ買いによる単価%引き
 
値引き詳細 2.
*値引き詳細番号  
 ルール番号(FK1) 
 値引き名前  
 全体値引き時、合計金額下限 (全体値引きの際に使用)
 全体値引き時、合計金額上限 (全体値引きの際に使用)
 値引き商品コード(FK2)(単価値引きの際に使用)
 値引き商品個数下限値 (まとめ買いの際に使用)
 値引き商品個数上限値 (まとめ買いの際に使用)
 値引き期間開始日付 (期間限定の際に使用、単価でも全体でも)
 値引き期間終了日付 (期間限定の際に使用、単価でも全体でも)
 値引き額  
 値引きパーセント  
 値引きルールコメント  
 
受注
*受注注文番号  
 客先注文番号  
 受注日付  
 受注顧客コード(FK1) 
 受注社員コード(FK2) 
 値引き承認社員コード(FK3) 
 受注部門コード(FK4) 
 値引き詳細番号(FK5)3.
 消費税額(導出) 
 税抜受注金額合計(導出) 
 納入希望日  
 摘要  
 
スーパータイプ:受注明細
*受注注文番号(FK1) 
*商品コード(FK2) 
 値引き詳細番号(FK3)4.
 消費税額(導出) 
 税抜金額(導出) 
 予定納期日付  
 受注数量  
 変更後最終受注数量  
 ステータス  

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

  1. 「値引きルール」エンティティは、値引きルールの種類を管理するエンティティとして作成し、具体的な値引きの値を「値引き詳細」エンティティで管理できるように設計しました 値引きの種矩は、要件より以下のような項目、またはその組み合わせを考えます その結果、「値引きルール」では、一意識別子が1桁~2桁の場合は金額による値引きを、3桁の場合は%による値引きを表し、考えられる組み合わせをルールとして作成しました  
    • 金額による値引き
    • %による値引き
    • 単価ごとの値引き
    • 全体からの値引き
    • ある金額以上のまとめ買い時の値引き(商品に関係ない値引き)
    • ある個数以上のまとめ買い時の値引き(商品に関係する値引き)
    ルールが追加される場合には、この「値引きルール」エンティティに新しいルールのオカレンスを追加するだけで対応でき、拡張性を考慮した設計になっています
  2. 「値引き詳細」エンティティには、「値引きルール」に対応した具体的な値を設定し、「値引き詳細」に設定された値引きの種類を選択できるようにしています
  3. 受注の単位で全体からの値引きをする場合、「受注」エンティティの属性「値引き詳細」に適切な値引き詳細オカレンスを選択します。この場合、注意しなければならないことは、受注明細の商品ごとに売上計上日が異なる場合です。売上計上日が、経理上の締め日をまたがってしまう場合を想定して、値引き額を商品ごとの売上比率で割る、または売上計上日が同一の商品のみ同一伝票に起票するなどの業務上のルールを決めておく必要があります
  4. 「受注明細」の商品単位で値引きをする場合、「受注明細」スーパータイプに「値引き詳細」への外部キーをもたせます

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

解説トレーナー

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

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

■認定・受賞

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

Page Top