Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新时链接数据实体的完整性_Mysql_Database Design_Data Binding_Transactions_Definitions - Fatal编程技术网

Mysql 更新时链接数据实体的完整性

Mysql 更新时链接数据实体的完整性,mysql,database-design,data-binding,transactions,definitions,Mysql,Database Design,Data Binding,Transactions,Definitions,更新时维护链接数据实体完整性的最佳实践是什么 我的场景 我有两个实体“客户和 发票”。[客户是定义和 发票为[交易记录] 向客户开具多张发票后 客户机客户机 信息需要改变 e、 g.“他的账单地址/位置 更改名称或企业名称等” 用户必须是 能够更新客户端 保持信息完整性的信息 系统中的数据 发票中的“交易实体” 我不只是存储客户id,而是 以及所有与 发票,如“客户名称、地址、, “接触”,这是众所周知的 将数据存储在数据库中的方法 交易实体 如果用户创建了新发票 新的客户信息将被删除 存储在发

更新时维护链接数据实体完整性的最佳实践是什么

我的场景

  • 我有两个实体“客户和 发票”。[客户是定义和 发票为[交易记录]
  • 向客户开具多张发票后 客户机客户机 信息需要改变 e、 g.“他的账单地址/位置 更改名称或企业名称等”
  • 用户必须是 能够更新客户端 保持信息完整性的信息 系统中的数据
  • 发票中的“交易实体” 我不只是存储客户id,而是 以及所有与 发票,如“客户名称、地址、, “接触”,这是众所周知的 将数据存储在数据库中的方法 交易实体
  • 如果用户创建了新发票 新的客户信息将被删除 存储在发票记录中 使用相同的客户端id(非常 很明显
  • 我的问题

  • 绑定数据实体可以吗 来自不同地点的“客户” 用于插入和更新? [说明:如果我遵循 从步骤1-4开始,我必须 从客户端绑定客户端实体 创建新客户机时的客户机表 发票,但如果 更新/打印我的发票 要从中绑定客户端实体,请执行以下操作: 发票表中的数据无效 不会是一致的或整数…所以 如何保持数据的完整性 没有在中创建意大利面代码 DAL将处理此定制 数据绑定的要求??]
  • 我通过了一个 保存所有以前版本的 更新前的实体数据 “保存所有版本的历史记录”。 如果我想用同样的方法 如何避免自定义绑定 在数据库设计方面做到这一点 “使用MYSQL”?[说明:一些 使用版本1.0创建的发票 客户端然后是客户端信息 更新后,其版本变为1.1 以及使用上次创建的新发票 版本…那么遵循它好吗 这种方法?我应该怎么做 设计我的实体/表格以满足实体的要求 版本控制和绑定
  • 请提供任何书籍或参考资料 那可以踢我的右脚 方向

  • 谢谢,

    我不太清楚你在说什么,但我想你想读一读关于规范化的书,在很多关于关系数据库和SQL的书中都可以找到。我想你最终会得到两个由外键连接的表,但也许前一句话中的一些自我反省会帮助你澄清你的想法。

    您需要做的是保持表的原样。您是正确的,您应该将客户信息存储在发票中,以便记录项目的发货地点。当信息发生变化时,您不应该更新此信息,但尚未发货的发票除外。要维护此类型的信息,您需要一个触发器客户表上的ger,用于查找尚未发货的发票并自动更新这些地址

    如果要保存客户端信息的历史版本,正确的过程是创建审核表并通过触发器填充它

    在这种情况下,数据完整性只是通过客户id的外键实现的。id本身不应更改,也不允许用户更改,应该是一个替代数字,如整数。因为您不应更改实际发票中的地址信息(除非尚未发货,在这种情况下,您最好对其进行更改,否则产品将发货到错误的位置),这足以保持数据完整性。这还允许您查看实际发货的位置,但仍然可以通过使用外键查找有关客户机的当前信息


    如果您有更改的客户机(其他公司购买的公司),您可以在服务器上运行一个进程来更新旧记录的客户id,或者创建一个表结构来显示哪些客户id属于当前的父id。如果您不想更改数百万条记录,那么第一个更容易做到。

    “这是一个商业案例,必须对数据进行非规范化,以保留在何处装运的历史记录。他的设计没有错误。”

    很抱歉将此添加为新的响应,但“添加评论”按钮仍不显示

    “他的设计”确实是正确的…因为它是规范化的

    它是标准化的,因为与发票相对应的地址在功能上并不总是完全依赖于客户ID


    所以:规范化,是的,我确实这么认为。并不是说规范化是这里涉及的唯一问题。

    规范化!我不这么认为。请阅读整个问题。这是一个商业案例,数据必须进行非规范化,以保存装运地的历史记录。他的设计没有错误。谢谢,这真的深深地打动了我在正确的方向上;)老兄,实际上我将如何通过规范化技术来解决问题!!!到目前为止我所理解的是,审计和规范化之间存在着权衡。那么,在这里谈论规范化作为概念的意义是什么呢?我在寻找一种解决方案,而不是数据建模课程。