嗨,我正在开发发票应用程序。
因此,一般的想法是拥有两个表:
Invoice (ID, Date, CustomerAddress, CustomerState, CustomerCountry, VAT, Total);
InvoiceLine (Invoice_ID, ID, Concept, Units, PricePerUnit, Total);
如您所见,此基本设计导致许多记录的重复,其中客户将具有相同的地址,州和国家/地区。
因此,替代方法是拥有一个地址表,然后建立一个地址
但是,我认为发票是不可变的文档,应按照最初制作的方式进行存储。有时,客户更改他们的地址或状态,并且如果它来自“地址”目录,则该目录将更改所有先前制作的发票。
那么您的经验是什么?
客户地址如何存储在发票中?在发票表中?地址表?或者是其他东西?
您能否提供指向书籍,文章或文档的指针,并在其中进行更详细的讨论?
最佳答案
我强烈建议您不要在发票中存储任何客户详细信息。
相反,我将有一个类似的结构:
客户表,主键为ID
客户地址表(随着时间的推移,每个客户可能会有不同的地址),其中客户ID为外键
发票表,其地址字段是客户地址表的外键。
顺便说一句,我会考虑为每个订单项添加一个VAT字段。在某些国家/地区,不同商品类型的增值税率不同。
关于database-design - 发票和发票行: How do you store customer address information?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2954233/