避免在多个表中重复字段

时间:2018-09-28 03:46:05

标签: database database-design

让我简要介绍一下表结构:

客户表

id | name | address_line_one | address_line_two | contact_no_one

销售发票表

id | id_Customer (Foreign Key) | invoice_no

如果必须打印销售发票,则必须使用“客户”表中的“客户”信息(例如姓名,地址)。 假设一年后,一些客户数据发生了变化(例如姓名或地址),并且我更新了客户表中的新数据。现在,如果客户要求旧发票,则将打印有新的客户数据,这在法律上是错误的。

这是否意味着我必须创建

  

name_customer

     

address_line_one_customer

     

...

以及“销售发票”表中的所有这些字段?

如果是,是否有更好的方法将数据从“客户”表中的这些字段获取到“销售发票”表中,然后编写SQL查询以获取值然后设置值?

2 个答案:

答案 0 :(得分:1)

这完全取决于您。在某些情况下,如果它是法律文档,则将保存所有详细信息,以便始终可以按创建方式进行调配。另外,如果您要生成pdf发票,请保存为100%保证。

另一种方法是创建一个CustomerHistory表,以便始终以日期范围保存过去的版本,以便您可以返回到旧版本。

这取决于用例,但这是您的主要选择。

答案 1 :(得分:0)

通过将Employee表放置为标准范式(VNF)听起来很容易解决问题。实际上,这只是2nf的一种形式,但是这样做的方式使得可以使用同一查询来查询当前数据和过去数据。

datetime参数用于提供区别。当该值设置为NOW时,返回当前数据。如果该值过去设置为特定的datetime值,则将返回该日期和时间的当前数据。

有关详细信息的简短讨论可以在here中找到。如果您认为这对您有用,那么该答案还包含指向更多信息的链接。