更改数据库结构

时间:2013-11-26 17:10:46

标签: c# database-design

我有一个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; }
}

此表存储订购的每个产品的订单。订单确实具有人们订购多个产品的数量,但一般来说,它会成为订单和产品的长表。

可以看出,此表中有两个布尔值。 IsConfirmedIsSettledWithSalary属性。IsConfirmed=falseIsSettledWithSalary=false属性。这是因为人们可以下订单(IsConfirmed=trueIsSettledWithSalary=false),然后可以使用超市中的可用商品和实际价格(IsConfirmed=trueIsSettledWithSalary=true进行检查)最后,管理员(TransactionTransaction)可以通过工资结算相同的订单。

现在最后一步包括添加名为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}}

这给出了概述。

我确实从项目开始考虑了存储负面交易产品的想法,但回顾过去我认为可能会有更优雅的解决方案。

一位朋友建议我应该使用多个表作为订单。或者使用将两个不同表链接在一起的表。

我不清楚如何做到这一点,并考虑到事实并非如此慢,并且它有效,我很乐意听到您对数据库结构的看法,并接受有关如何使用的建议继续进行。

1 个答案:

答案 0 :(得分:1)

您目前的情况只允许每个订单购买一种Product。这是你不想要的东西。您应该考虑在两者之间添加一个表:

顺序

  • 日期
  • List<OrderDetails>
  • ...

订单明细

  • OrderDetailsId
  • 的OrderId
  • 产品编号
  • 单价
  • 数量

OrderToOrderDetails

  • 的OrderId
  • OrderDetailsId

实质上,这意味着额外的1-N表将跟踪订单中的产品。由于TransactionOrderDatePaidDate之类的内容都可以存储在ReceivedDate(或Order中,因此可能不再需要单独的OrderDetails课程如果你想单独发送订单,那么。