2012-04-25 182 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