数据库
首页 > 数据库> > c#-数据库设计集思广益:销售价格

c#-数据库设计集思广益:销售价格

作者:互联网

我需要创建一个数据库解决方案以提供产品折扣.

当前表:

Products
Columns: ProductId, ProductTypeId, ReleaseDate

ProductPrices
Columns: ProductPriceId, ProductPriceTypeId (one product may have n prices), ProductId, Price

我们希望能够按ProductId和/或ProductTypeId和/或ProductPriceTypeId和/或ReleaseDate打折.

销售示例:

>打折单个ProductId.
>折扣具有指定ProductTypeId的所有产品和
ProductPriceTypeId.
>使用指定的ProductTypeId折扣所有产品
上个月内的ReleaseDate.

#2具有挑战性的方面不是字面上的示例,而是在将来添加新字段的情况下考虑长期可伸缩性.

由于ReleaseDate,我很困惑如何处理#3.

下面是我意识到自己需要进入Stackoverflow之前脑海中的思考.您会看到,由于明确包含了列,因此刚性结构将不允许良好的可伸缩性-如果将来我们添加新条件,则需要将这些列添加到表中-更不用说它甚至不能处理ReleaseDate要求.

新表:

ProductPriceDiscounts
Columns: ProductPriceDiscountId, ProductPriceId, ProductTypeId, ProductPriceTypeId, Discount, DiscountTypeId (1 for percentage, 2 for fixed)

然后,我可以使用类似这样的方法来获取价格:

from p in Products
join pp in ProductPrices on p.ProductId equals pp.ProductId
let ppd = (
    from ppd in ProductPriceDiscounts
        .WhereIf(ppd.ProductPriceId != null, ppd.ProductPriceId == pp.ProductPriceId)
        .WhereIf(ppd.ProductTypeId != null, ppd.ProductTypeId == pp.ProductTypeId )
        .WhereIf(ppd.ProductPriceTypeId != null, ppd.ProductPriceTypeId == pp.ProductPriceId)
    select ppd).FirstOrDefault()
where p.ProductId = productId
select new 
{
    ...,
    Price = pp.Price,
    Discount = pp.Discount,
    DiscountedPrice = 
        (ppd.DiscountTypeId == 1) ? 
            (pp.Price - (pp.Price * pp.Discount)) :
            (pp.Price - pp.Discount) :
}

我仅提供了这个错误的示例,以展示最终需要如何使用此新产品折扣功能的结果.谁能提供建议来解决这种情况?谢谢.

解决方法:

我想说您需要一个单独的DiscountDetail表.就像是

   DiscountDetailID INT NOT NULL
   DiscountTypeID INT NOT NULL --(FK On Discount Types - maybe not necessary)
   DiscountProductTypeID INT NULL --(FK ON ProductType)
   DiscountProductID INT NULL --(FK ON Product)
   DiscountAmount INT NULL --(Some value related to %age reduction perhaps?)
   DiscountDateStart DATETIME NOT NULL
   DiscountDateEnd DATETIME NULL

通过一些可爱的左连接和时髦的计算,您应该能够在任何特定时间获得所有产品/类型的列表以及折扣价…

标签:database-design,linq-to-sql,e-commerce,sql,c
来源: https://codeday.me/bug/20191201/2083603.html