代码之家  ›  专栏  ›  技术社区  ›  Jawad Al Shaikh

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

  •  0
  • Jawad Al Shaikh  · 技术社区  · 16 年前

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

    我的剧本

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

    我的问题

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

    谢谢,

    3 回复  |  直到 16 年前
        1
  •  0
  •   HLGEM    16 年前

    你要做的就是保持现状。您是正确的,您应该将客户信息存储在发票中,以记录项目的装运地点。当它发生变化时,您不应该更新此信息,除了任何尚未发货的发票。要维护这类信息,您需要在customer表上使用触发器来查找尚未发货的发票,并自动更新这些地址。

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

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

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

        2
  •  0
  •   Erwin Smout    16 年前

    “这是一个业务案例,必须对数据进行非规范化,以保存装运地点的历史记录。他的设计是正确的。”

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

    “他的设计”的确是正确的…因为它是标准化的!!!!

    它是规范化的,因为在任何时候,与发票相对应的地址在功能上都不完全依赖于客户ID。

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

        3
  •  -3
  •   Peter Eisentraut    16 年前

    我不完全清楚您在做什么,但我认为您希望了解规范化,这在许多有关关系数据库和SQL的书籍中都有。我认为你最终会得到两张表,用一个外键连接起来,但是也许根据前面的句子进行一些灵魂搜索可以帮助你澄清你的想法。

    推荐文章