库存促销/折扣表结构

时间:2013-09-24 19:25:57

标签: database-design

我正在开发一个库存系统,根据以下要求,我需要帮助设计产品(项目)表。

  1. 有些物品有促销活动,比如拿两件物品并免费获赠。
  2. 公司为单笔账单提供超过100美元的2%折扣。
  3. 促销活动:如果有人购买10包,该公司提供1包,包括一些单位。另外,如果有人购买了10箱香烟(包含10盒香烟),那么公司就可以免费提供1箱纸箱和5箱香烟。
  4. 我的问题是我该如何处理?我应该为所有这些类型的促销创建单独的表,还是在同一个表中我可以处理所有这些表?

1 个答案:

答案 0 :(得分: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%的折扣会被存储为促销,但宁愿是发票/账单的责任。因此,是否具有多个表的决定应该基于可用的不同类型的促销以及它们是否可以在单个表中一致地建模和存储。你有更多促销活动的例子吗?我现在说单桌是完全可以接受的。