8

我正在制作一个发票软件,我希望它可以保存每张发票。

用户通过选择客户来创建发票,以及向客户计费的许多项目。鉴于大多数发票都会有多个项目,将它们保存到数据库而不是令人难以置信的冗余的最佳方法是什么?如果需要,我愿意重新排列我的整个数据库。

我的表如下所示:

客户表:

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
4

2 回答 2

11

您需要另一个表来存储发票(您Invoices现在所说的实际上是存储发票项目)。

Customer
    id
    name
    etc.

Item
    id
    name
    etc.

Invoice
    id
    cust_id
    date

InvoiceItem
    id
    inv_id
    item_id

这是使用联结表(即)建模多对多关系的经典方法。InvoiceItem

于 2012-04-25T23:52:55.280 回答
2

看起来你实际上想要第四张桌子加入他们。要规范化您的数据,请仅在每一行保留该发票特定的内容

发票表

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

发票项目表

InvoiceId
ItemId
于 2012-04-25T23:53:43.940 回答