谁有什么好办法在我的域/数据库中为.NET应用程序建模以下场景?假设我有某些折扣可以应用于销售交易,但这些折扣应该只在一周中的特定日期和特定时间应用。因此,例如,如果销售发生在周一上午9点到中午之间,则应应用折扣,但如果销售发生在周二的这两个时段之间,则不应用折扣。我希望能够在同一天内处理多个时间段以及(即-周三从上午9点到中午和下午6点到午夜。
发布于 2009-09-02 14:26:09
我做过类似的事情。
您的SalePrice表将看起来像(该死的降价表):
SalePriceId指南,主键
ItemId指南,FK
StartTime时间跨度
EndTime时间跨度
DaysOfWeek DaysOfWeek(标志枚举)
折扣加倍
(这来自代码视图;Timespan是在SQL2008中映射的.NET类)
DaysOfWeek是包含Sun-Sat的标志枚举。
因此,要查找周二生效的商品的任何销售信息,您可以执行以下操作
select *
from SalePrice
where ItemId = @itemGuid
and StartTime <= @time
and EndTime >= @time
and DaysOfWeek & @DOW = @DOW这是基本模式。不要期望这会复制-粘贴工作(我不确定我的按位查询内容),但我正在成功地使用此模式来跟踪当前价格。
发布于 2009-09-02 14:24:01
我会简单地编写一个"GetDiscount“方法来实现您所描述的逻辑。您可以使用DateTime对象来确定当前日期和时间。
从你的描述中,不清楚为什么这种简单的解决方案对你不起作用。你到底在期待什么?
发布于 2009-09-02 14:38:30
假设您将折扣应用于完整订单,而不是单个项目,我将只创建以下两个类。
class Order
{
Guid Id;
DateTime TimeStamp;
Discount Discount;
}
class Discount
{
Guid Id;
DayOfWeek Day;
TimeSpan StartTime;
TimeSpan EndTime;
Decimal Amount;
}然后,您可以使用Order.TimeStamp.DayOfWeek和Order.TimeStamp.TimeOfDay搜索折扣列表,直到找到对处理的订单有效的Discount,并在Order对象上存储一个引用。将其映射到数据库应该非常简单- DayofWeek可以存储为整数,也可以使用DateTime和TimeSpan。
棘手的部分是约束Order和Discount之间的一对多关系。您可以尝试使用触发器或检查约束,但我建议仅在应用程序中实施此逻辑,因为在数据库级别实施此逻辑不会获得太多好处。
https://stackoverflow.com/questions/1367954
复制相似问题