2012-04-25 155 views
4

我正在製作一張發票軟件,我希望它能保存每張發票。將發票存儲在數據庫中

用戶通過選擇一個客戶來創建發票,然而許多項目正在向客戶收費。鑑於大多數發票都有多個項目,將它們保存到數據庫的最佳方式是什麼,而不會令人難以置信的冗餘?如果需要,我願意重新整理我的整個數據庫。

我的表是這樣的:

客戶表:

Id  /Primary key 
FullName 
Address 
Phone 

項目表(所提供的產品表):

Id  /Primary key 
ItemName 
Price 
Description 

發票表(保存發票):

Id  /Primary key 
CustId /Foreign key is Id in Customer table 
ItemId /Foreign key is Id in Item table 
Notes 

回答

7

您需要另一個表來存儲發票(您現在稱爲Invoices實際存儲發票項目)。

Customer 
    id 
    name 
    etc. 

Item 
    id 
    name 
    etc. 

Invoice 
    id 
    cust_id 
    date 

InvoiceItem 
    id 
    inv_id 
    item_id 

這是使用一個結合表(即InvoiceItem)建模many to many relationship的經典途徑。

+0

因此,如果用戶有多個發票項目,每一個是否作爲單獨的條目存儲在發票項目表中?所有屬於發票的項目都具有相同的InvoiceId? – 2012-04-25 23:59:50

+0

@ToddBauer正確。對於每張發票,都會有一個帶有ID的「發票」記錄。對於每個發票上的每個項目,您將創建一個將項目連接到發票的「InvoiceItem」。如果可以將多個相同的項目添加到發票中,那麼爲'InvoiceItem'設置一個'quantity'列是很常見的。 – dasblinkenlight 2012-04-26 00:30:35

+0

非常好!我也會添加一個數量行。關於主題,我想告訴你,你的解釋說得很清楚,我很感謝你的時間和精力。答:選中。繼續打好戰鬥。 – 2012-04-26 00:34:00

1

它看起來像你實際上想要一個第四表加入他們。一定要規範你的數據,僅僅保持在每行的東西,是特定於該發票

發票表

Id  /Primary key 
CustId /Foreign key is Id in Customer table 
Notes 

發票項目表

InvoiceId 
ItemId