2013-11-26 185 views
0

我有一個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=false,IsSettledWithSalary=false),然後可以使用超市中的可用物品和實際價格(IsConfirmed=true,IsSettledWithSalary=false)進行檢查,最後可以通過管理員用工資結算相同的訂單(IsConfirmed=true,IsSettledWithSalary=true)。

這最後一步,現在由添加了一個名爲Transaction的產品和價格設定爲負值,使得用戶的餘額變爲0,並將其存儲在另一個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; } 
} 

這給出了一個概述。

我確實從存儲負面交易產品的想法入手了該項目,但回過頭來看,我認爲可能會有更優雅的解決方案。

一位朋友建議我應該使用多個訂單表。或者使用將更多兩個不同表格鏈接在一起的表格。

我不清楚如何做到這一點,並考慮到它並不慢,它的工作原理,我很想聽聽你對數據庫結構的想法,並接受關於如何做到這一點的建議。繼續。

回答

1

您目前的情況只允許爲每個訂單購買一種類型的Product。這是不太可能的,這是你想要的東西。你應該看看之間添加一個表:

訂購

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

訂單明細

  • OrderDetailsId
  • 的OrderId
  • 產品編號
  • 單價
  • 數量

OrderToOrderDetails

  • 的OrderId
  • OrderDetailsId

在本質上,這將意味着額外的1-N表將跟蹤產品的訂單內。一個單獨的Transaction類可能不再需要了,因爲諸如OrderDatePaidDate,ReceivedDate之類的東西都可以存儲在Order(或OrderDetails,如果您希望單獨發送訂單)。

+0

那麼額外的「中間表」(或「koppeltabellen」,因爲它們被稱爲您的語言)如何?你有沒有看到實施這些機會或優勢? –

+0

或者是這個OrderOverview表完全一樣嗎? :) –

+0

是的,這就是我的意思:「實際上,這意味着一個額外的1-N表格將跟蹤訂單內的產品。」你將需要這樣一個表來保存這兩個字段:'OrderId'和'OrderDetailsId'(這裏應該有一個主鍵,爲了清楚起見,我會對其進行編輯)。 –