0

私は在庫システムを開発しており、以下の要件に従って、製品 (アイテム) テーブルの設計を支援する必要があります。

  1. 一部のアイテムには、2 つのアイテムを取得すると 1 つが無料になるなどのプロモーションがあります。
  2. 同社は、1 回の請求で 100 ドル以上の販売から 2% の割引を提供します。
  3. プロモーション: 誰かが 10 パックを購入すると、同社は一部のユニットを含む 1 パックを提供します。また、誰かが 10 カートンのタバコ (10 箱のタバコを含む) を購入した場合、会社は 1 カートンと 5 箱のタバコを無料で提供するとします。

私の質問は、これをどのように処理できますか? これらすべての種類のプロモーションに対して個別のテーブルを作成する必要がありますか?それとも同じテーブルですべてを処理できますか?

4

1 に答える 1

0

まず、ここで説明したのは動作であり、データ ストレージではありません。したがって、これをデータベースにどのように保存するかは重要ですが、主な関心事は、これのコードをどのように記述するかです。

C#の例として

public class Product {
    public string Name { get; set; }
    public decimal UnitCost { get; set; }
    public List<IPromotion> { get; set; }
}

public interface IPromotion {
    decimal CalculateTotalDiscount(Product p, int quantity);
}

public class BuyAndGetFreePromotion : IPromotion  {
    public int QuantityRequiredToGetPromotion { get; set; }
    public int NumberOfUnitsFree { get; set; }

    public decimal CalculateTotalDiscount(Product p, int quantity) {
        if (QuantityRequiredToGetPromotion == quantity) {
            return (p.UnitCost * quantity) - (p.UnitCost * NumberOfUnitsFree );
        }
        return 0;
}

これで、テーブル クラス階層またはクラスごとのテーブルのいずれかを実行できます。これは、使用している ORM に大きく依存します。

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/inheritance.html http://my.safaribooksonline.com/book/web-development/ruby/9780132480345/advanced-active-record /ch09lev1sec5#title-ID0EBYHK

質問は。2% の割引がプロモーションとして保存されるとは思いませんが、請求書/請求書の責任となります。したがって、複数のテーブルを用意するかどうかの決定は、代わりに、利用可能なさまざまなタイプのプロモーションと、モデル化して単一のテーブルに一貫して格納できるかどうかに基づいて行う必要があります。プロモーションの例は他にもありますか?現在のところ、1 つのテーブルで十分です。

于 2013-09-24T20:33:36.757 に答える