嗨我正在开发一个发票应用程序。发票和发票行:您如何存储客户地址信息?
所以总的想法是有两个表:
发票(ID,日期,CustomerAddress,CustomerState,CustomerCountry,增值税,合计); InvoiceLine(Invoice_ID,ID,Concept,Units,PricePerUnit,Total);
正如你所看到的,这个基本的设计会导致很多记录的重复,客户端将拥有相同的地址,州和国家。
因此,替代方法是有一个地址表,然后建立关系地址<-发票。
但是,我认为发票是不可变的文件,应该按照它最初制定的方式存储。有时客户会更改他们的地址或状态,以及是否来自地址目录,这些地址目录会更改所有先前制作的发票。
那么你有什么经验?
客户地址如何存储在发票中?在发票表中?地址表?或者是其他东西?
您能提供指向书籍,文章或文档的指针吗?
您不觉得发票表几乎就像历史表一样,因此关于发票最初打印的信息的重复信息是否有效? – elviejo79 2010-06-02 00:43:40
@elviejo,可以证明你是正确的,但你必须评估你是否想要一遍又一遍地存储相同的信息,或者只是将一个foriegn密钥存储到所使用的地址。如果您存储了foriegn密钥,那么它意味着一旦发票链接到它就不能更改旧地址,相反,任何更改都必须成为新的地址记录,并且只需在地址表上维护一个标志,以指示地址是否有效。 – slugster 2010-06-02 00:58:42
@elviejo您也可以在不必为客户更改整个地址维护过程的情况下执行此操作。当订单成为发票时,您可以链接到一个客户实体和一个“匿名”地址实体(可能是账单到发货的角色),它们只包含发票时的地址。您查看所有地址栏并获取代理键。这个“地址”历史从不更新,只能插入。之前的地址只是重复使用。因此,您可以获得时间点数据,而无需改变您的整个客户维护设计。 – 2010-06-02 02:00:26