我有一个MVC4应用程序,员工可以订购午餐。然后,购物清单可供当天去超市的人使用。管理员可以用工资结算每个月的成本。中央订单模型如下所示:
public class Order
{
public int OrderId { get; set; }
public int ProductId { get; set; }
public decimal UnitPrice { get; set; }
public int Quantity { get; set; }
public int UserId { get; set; }
public DateTime Date { get; set; }
public bool IsConfirmed { get; set; }
public bool IsSettledWithSalary { get; set; }
public virtual Product Product { get; set; }
public virtual User User { get; set; }
}
此表存储订购的每个产品的订单。订单确实具有人们订购多个产品的数量,但一般来说,它会成为订单和产品的长表。
可以看出,此表中有两个布尔值。 IsConfirmed
和IsSettledWithSalary
属性。IsConfirmed=false
和IsSettledWithSalary=false
属性。这是因为人们可以下订单(IsConfirmed=true
,IsSettledWithSalary=false
),然后可以使用超市中的可用商品和实际价格(IsConfirmed=true
,IsSettledWithSalary=true
进行检查)最后,管理员(Transaction
,Transaction
)可以通过工资结算相同的订单。
现在最后一步包括添加名为public class Transaction
{
public int TransactionId { get; set; }
public DateTime Date { get; set; }
public List<Order> Orders { get; set; }
public decimal TransactionAmount { get; set; }
public virtual Order Order { get; set; }
}
的产品并将价格设置为负值,以便用户的余额返回0并将其存储在另一个{{1}}表中像这样:
{{1}}
这给出了概述。
我确实从项目开始考虑了存储负面交易产品的想法,但回顾过去我认为可能会有更优雅的解决方案。
一位朋友建议我应该使用多个表作为订单。或者使用将两个不同表链接在一起的表。
我不清楚如何做到这一点,并考虑到事实并非如此慢,并且它有效,我很乐意听到您对数据库结构的看法,并接受有关如何使用的建议继续进行。
答案 0 :(得分:1)
您目前的情况只允许每个订单购买一种Product
。这是你不想要的东西。您应该考虑在两者之间添加一个表:
顺序
List<OrderDetails>
订单明细
OrderToOrderDetails
实质上,这意味着额外的1-N表将跟踪订单中的产品。由于Transaction
,OrderDate
,PaidDate
之类的内容都可以存储在ReceivedDate
(或Order
中,因此可能不再需要单独的OrderDetails
课程如果你想单独发送订单,那么。