|
|
1
0
你要做的就是保持现状。您是正确的,您应该将客户信息存储在发票中,以记录项目的装运地点。当它发生变化时,您不应该更新此信息,除了任何尚未发货的发票。要维护这类信息,您需要在customer表上使用触发器来查找尚未发货的发票,并自动更新这些地址。 如果要保存客户机信息的历史版本,正确的过程是创建一个审计表并通过触发器填充它。 在这种情况下,数据完整性只是通过客户ID的一个外键来实现的。ID本身不应该被用户更改或允许更改,它应该是一个代理数,如整数。因为您不应该更改实际发票中的地址信息(除非它尚未发货,在这种情况下,您最好更改它,否则产品将被运到错误的位置),这足以保持数据完整性。这还允许您查看这些东西的实际发货位置,但仍然可以通过使用外键来查找客户机的当前信息。 如果您有更改的客户机(由其他公司购买的公司),您可以在服务器上运行一个进程来更新旧记录的客户ID,或者创建一个表结构来显示哪些客户机ID属于当前父ID。如果您不想更改数百万条记录,那么第一个过程更简单。 |
|
|
2
0
“这是一个业务案例,必须对数据进行非规范化,以保存装运地点的历史记录。他的设计是正确的。” 很抱歉将此添加为新答复,但“添加评论”按钮仍然不显示。 “他的设计”的确是正确的…因为它是标准化的!!!! 它是规范化的,因为在任何时候,与发票相对应的地址在功能上都不完全依赖于客户ID。 所以:正常化,是的,我确实这么认为。并不是说规范化是这里唯一涉及的问题。 |
|
|
3
-3
我不完全清楚您在做什么,但我认为您希望了解规范化,这在许多有关关系数据库和SQL的书籍中都有。我认为你最终会得到两张表,用一个外键连接起来,但是也许根据前面的句子进行一些灵魂搜索可以帮助你澄清你的想法。 |