【问题标题】:The Integrity of linked data entities on update更新时链接数据实体的完整性
【发布时间】:2010-01-24 15:26:26
【问题描述】:

在更新时保持链接数据实体完整性的最佳做法是什么?

我的场景

  1. 我有两个实体“客户和 发票”。[客户是定义和 发票即交易]。
  2. 在向 客户碰巧客户 信息需要更改 例如“他的帐单地址/位置 更改或公司名称...等”。
  3. 用户必须是正常的 能够更新客户端 信息以保持完整性 系统中的数据。
  4. 发票中的“交易实体” 我不只存储客户 ID,而是 以及所有与此相关的客户信息 发票,例如“客户姓名、地址、 联系”,这是众所周知的 存储数据的方法 交易实体。
  5. 如果用户创建了新发票 新客户信息将 一起存储在发票记录中 具有相同的客户端 ID(非常 很明显!)。

我的问题

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

谢谢,

【问题讨论】:

    标签: mysql database-design data-binding transactions definitions


    【解决方案1】:

    您需要做的是让桌子保持原样。您是对的,您应该将客户信息存储在发票中,以了解物品运往何处的历史记录。当它发生变化时,您不应更新此信息,但尚未发货的任何发票除外。要维护此类信息,您需要在 customer 表上使用触发器来查找尚未发货的发票并自动更新这些地址。

    如果您想保存客户信息的历史版本,正确的过程是创建一个审计表并通过触发器填充它。

    在这种情况下,数据完整性只是通过客户 ID 的外键来实现。 id 本身不应该改变或被用户允许改变,它应该是一个代理数字,例如一个整数。因为您不应该更改实际发票中的地址信息(除非它尚未发货,在这种情况下您最好更改它,否则产品将被运送到错误的地方),这足以保持数据完整性。这也使您可以查看这些东西的实际发货地点,但仍然可以通过使用外键查找有关客户的当前信息。

    如果您的客户发生变化(被其他公司收购的公司),您可以在服务器上运行一个进程来更新旧记录的客户 ID,或者创建一个表结构来显示哪些客户 ID 属于当前父 ID。如果您不是在谈论更改数百万条记录,第一个更容易做到。

    【讨论】:

    • 谢谢,这让我深深地朝着正确的方向前进;)
    【解决方案2】:

    “这是一个商业案例,其中必须对数据进行非规范化以保留运送到哪里的历史记录。他的设计没有错误。”

    很抱歉将此添加为新回复,但“添加评论”按钮仍未显示。

    “他的设计”确实没有错……因为它被规范化了!!!

    这是规范化的,因为与发票对应的地址在功能上仅取决于客户 ID 并不总是正确的。

    所以:标准化,是的,我确实这么认为。不是标准化是这里涉及的唯一问题。

    【讨论】:

    • 老兄,实际上我将如何通过规范化技术解决问题!!!到目前为止我所理解的指出审计和规范化之间存在权衡。那么在这里谈论标准化作为概念有什么意义呢?我正在寻找解决方案而不是数据建模课程。
    【解决方案3】:

    我并不完全清楚你在做什么,但我认为你想阅读规范化,在许多关于关系数据库和 SQL 的书籍中都可以找到。我想你最终会得到两个通过外键连接的表,但也许对前面的句子进行一些反省会帮助你理清思路。

    【讨论】:

    • 标准化!我不这么认为。请阅读整个问题。
    • 这是一个商业案例,其中必须对数据进行非规范化以保留运送到哪里的历史记录。他的设计没有错。
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多