发票和发票行:您如何存储客户地址信息?

elv*_*o79 5 database-design invoices

嗨,我正在开发一个发票应用程序.

所以一般的想法是有两个表:

Invoice (ID, Date, CustomerAddress, CustomerState, CustomerCountry, VAT, Total);

InvoiceLine (Invoice_ID, ID, Concept, Units, PricePerUnit, Total); 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这种基本设计会导致大量重复记录,其中客户端将具有相同的地址,状态和国家/地区.

所以另一种方法是拥有一个地址表,然后建立一个地址<-Invoice.

但是我认为发票是不可变的文件,应该按照它最初制作的方式存储.有时,客户会更改其地址或状态,如果它来自地址目录,该目录将更改以前制作的所有发票.

那你的经历是什么?

客户地址如何存储在发票中?在发票表中?地址表?或者是其他东西?

您能否提供指向书籍,文章或文档的指南,以便进一步详细讨论?

Uri*_*Uri 8

我强烈建议不要在发票中存储任何客户详细信息.

相反,我会有一个像这样的结构:

客户表,主键为id

客户地址表(因为每个客户可能随时间具有不同的地址),客户ID为外键

发票表,其地址字段是客户地址表的外键.

顺便说一句,我会考虑为每个订单项添加增值税字段.有些国家/地区的不同项目类型的增值税税率不同.

  • @elviejo,可以说你是对的,但你必须评估你是否要反复存储相同的信息,或者你是否只是将foriegn密钥存储到所使用的地址.如果您存储了一个foriegn密钥,那么它应该意味着一旦发票被链接到您就不能更改旧地址,而是任何更改都必须成为新的地址记录,并且您只需在地址表上保留一个标志,表明地址是否有效. (2认同)