我正在开发一个库存系统,我需要帮助设计一个产品(项目)表,按照以下要求。
- 有些物品有促销活动,比如拿两件免费送一件。
- 该公司为单张账单超过 100 美元的销售额提供 2% 的折扣。
- 促销:如果有人购买10包,公司赠送1包,包括一些单位。另外,假设有人购买了 10 箱香烟(包含 10 盒香烟),那么公司将免费提供 1 盒和 5 盒香烟。
我的问题是我该如何处理?我应该为所有这些类型的促销创建单独的表,还是在同一个表中我可以处理所有这些?
我正在开发一个库存系统,我需要帮助设计一个产品(项目)表,按照以下要求。
我的问题是我该如何处理?我应该为所有这些类型的促销创建单独的表,还是在同一个表中我可以处理所有这些?
首先,您在这里描述的是行为而不是数据存储。因此,虽然您如何将其存储在数据库中,但您的主要关注点应该是如何为此编写代码。
所以作为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% 的折扣会被存储为促销活动,而是由发票/账单负责。因此,是否有多个表的决定应该基于不同类型的可用促销以及它们是否可以一致地建模和存储在单个表中。您是否有更多促销示例,因为目前我会说一张桌子是完全可以接受的。