在更新时维护链接数据实体的完整性的最佳做法是什么?
我的方案
我的问题
谢谢,
答案 0 :(得分:0)
您需要做的就是让桌子保持原样。您是对的,您应该将客户信息存储在发票中,以便记录物品运往何处。如果更改,您不应更新此信息,除了尚未发货的任何发票。要维护此类信息,您需要在customer表上触发一个触发器,该触发器会查找尚未发送的发票并自动更新这些地址。
如果要保存客户端信息的历史版本,正确的过程是创建审计表并通过触发器填充它。
在这种情况下,数据完整性只需通过客户ID的外键即可。 id本身不应该被用户改变或允许改变,并且应该是代理号,例如整数。因此,您不应该更改实际发票中的地址信息(除非它已经发货,在这种情况下您最好更改它或产品将被运送到错误的地方),这足以保持数据的完整性。这也允许您查看实际发货的位置,但仍然可以通过使用外键查找有关客户端的当前信息。
如果您有更改的客户(其他公司购买的比较),您可以在服务器上运行一个进程来更新旧记录的客户ID,或者创建一个表结构,显示哪些客户ID属于当前父ID。如果你不是在谈论改变数百万条记录,那么第一个更容易做到。
答案 1 :(得分:0)
“这是一个商业案例,其中数据必须被非规范化以保存所发送内容的历史记录。他的设计不正确。”
很抱歉将此添加为新回复,但“添加评论”按钮仍然无法显示。
“他的设计”确实不正确......因为它正常化了!!!
这是标准化的,因为对应于发票的地址在任何时候都不是真正依赖于客户ID。
所以:正常化,是的,我确实这么认为。不是规范化是这里涉及的唯一问题。
答案 2 :(得分:-3)
我对你所得到的内容并不完全清楚,但我认为你想阅读关于规范化的内容,可以在很多关于关系数据库和SQL的书中找到。我认为你最终得到的是两张由外键连接的表格,但也许每句前面的一些反省将帮助你澄清你的想法。