Mysql 更新时链接数据实体的完整性
更新时维护链接数据实体完整性的最佳实践是什么 我的场景Mysql 更新时链接数据实体的完整性,mysql,database-design,data-binding,transactions,definitions,Mysql,Database Design,Data Binding,Transactions,Definitions,更新时维护链接数据实体完整性的最佳实践是什么 我的场景 我有两个实体“客户和 发票”。[客户是定义和 发票为[交易记录] 向客户开具多张发票后 客户机客户机 信息需要改变 e、 g.“他的账单地址/位置 更改名称或企业名称等” 用户必须是 能够更新客户端 保持信息完整性的信息 系统中的数据 发票中的“交易实体” 我不只是存储客户id,而是 以及所有与 发票,如“客户名称、地址、, “接触”,这是众所周知的 将数据存储在数据库中的方法 交易实体 如果用户创建了新发票 新的客户信息将被删除 存储在发
谢谢,我不太清楚你在说什么,但我想你想读一读关于规范化的书,在很多关于关系数据库和SQL的书中都可以找到。我想你最终会得到两个由外键连接的表,但也许前一句话中的一些自我反省会帮助你澄清你的想法。 您需要做的是保持表的原样。您是正确的,您应该将客户信息存储在发票中,以便记录项目的发货地点。当信息发生变化时,您不应该更新此信息,但尚未发货的发票除外。要维护此类型的信息,您需要一个触发器客户表上的ger,用于查找尚未发货的发票并自动更新这些地址 如果要保存客户端信息的历史版本,正确的过程是创建审核表并通过触发器填充它 在这种情况下,数据完整性只是通过客户id的外键实现的。id本身不应更改,也不允许用户更改,应该是一个替代数字,如整数。因为您不应更改实际发票中的地址信息(除非尚未发货,在这种情况下,您最好对其进行更改,否则产品将发货到错误的位置),这足以保持数据完整性。这还允许您查看实际发货的位置,但仍然可以通过使用外键查找有关客户机的当前信息
如果您有更改的客户机(其他公司购买的公司),您可以在服务器上运行一个进程来更新旧记录的客户id,或者创建一个表结构来显示哪些客户id属于当前的父id。如果您不想更改数百万条记录,那么第一个更容易做到。“这是一个商业案例,必须对数据进行非规范化,以保留在何处装运的历史记录。他的设计没有错误。” 很抱歉将此添加为新的响应,但“添加评论”按钮仍不显示 “他的设计”确实是正确的…因为它是规范化的 它是标准化的,因为与发票相对应的地址在功能上并不总是完全依赖于客户ID
所以:规范化,是的,我确实这么认为。并不是说规范化是这里涉及的唯一问题。规范化!我不这么认为。请阅读整个问题。这是一个商业案例,数据必须进行非规范化,以保存装运地的历史记录。他的设计没有错误。谢谢,这真的深深地打动了我在正确的方向上;)老兄,实际上我将如何通过规范化技术来解决问题!!!到目前为止我所理解的是,审计和规范化之间存在着权衡。那么,在这里谈论规范化作为概念的意义是什么呢?我在寻找一种解决方案,而不是数据建模课程。