代码之家  ›  专栏  ›  技术社区  ›  Keith Palmer Jr.

实现数据库记录哈希以跟踪记录是否已更改

  •  6
  • Keith Palmer Jr.  · 技术社区  · 15 年前

    我有一个集成项目的数据库模式,在这个项目中我需要能够查询 改变 ,请 但只基于一组给定的字段 在那张唱片里。

    例如,这里有一个示例表:

    客户

    • 身份证件
    • 名字
    • 电话
    • 传真
    • 平衡

    我需要查询以获取名称、电话或传真字段已更改的记录。但是,其他字段不应考虑在内,即 只是平衡场的变化

    2 回复  |  直到 15 年前
        1
  •  2
  •   Cade Roux    15 年前

    这很难。您仍然需要表扫描(或索引扫描),因为您必须计算新哈希并将其与存储的旧哈希进行比较。

    如果触发器由于跨平台问题而不可能实现,则可以让数据库引擎计算当前哈希(即持久化计算列——实际上类似于触发器)。不过,这也是跨平台问题!然后,如果对当前哈希和哈希进行索引,则搜索相对容易。

    您至少可以使用时间戳字段来减少需要检查的哈希数吗?

    另一件要记住的事情是,没有完美的哈希函数,因此您可能会有错误的否定(不经意的哈希冲突导致未检测到更改)。那(天文数字上的小)风险值得承担吗?

        2
  •  0
  •   KM.    15 年前

    我将标准化应用程序检查差异的方式,而不是数据库实现差异的方式。尝试使用具有表示更改的特定列的视图。然后使用在每个数据库中实现的适当技巧使该视图成为现实。依赖于检查这种差异的代码将是相同的,使用相同的视图和列。