gpt4 book ai didi

sql - 存储多个版本的 SQL 行数据的建议技术

转载 作者:行者123 更新时间:2023-12-02 00:26:56 27 4
gpt4 key购买 nike

我正在开发一个应用程序,需要存储以前版本的数据库表行以维护更改历史记录。我在同一个表中记录历史,但需要最新的数据可以通过一个不随新版本改变的唯一标识符访问。我对如何做到这一点有一些想法,只是在寻找一些关于这样做的最佳方式的想法,或者是否有任何理由不使用我的想法之一:

  • 为每个行版本创建一个新行,并带有一个字段来指示哪一行是当前行。这样做的缺点是新版本具有不同的主键,任何对旧版本的引用都不会返回当前版本。
  • 数据更新时,旧行版本复制到新行,新版本替换旧行。当前行可以通过相同的主键访问。
  • 添加只有一个主键的第二个表,向另一个表添加一列,该列是新表主键的外键。使用与选项 1 中描述的相同方法存储多个版本,并创建一个使用新表的主键查找当前版本的 View 。
  • 最佳答案

    PeopleSoft 使用(使用过?)“有效日期记录”。花了一点时间来掌握它的窍门,但它达到了目的。业务 key 始终由 EFFDT 列(生效日期)扩展。因此,如果您有一个表 EMPLOYEE[EMPLOYEE_ID, SALARY],它将变成 EMPLOYEE[EMPLOYEE_ID, EFFDT, SALARY]。

    要检索员工的工资:

    SELECT e.salary
    FROM employee e
    WHERE employee_id = :x
    AND effdt = (SELECT MAX(effdt)
    FROM employee
    WHERE employee_id = :x
    AND effdt <= SYSDATE)

    一个有趣的应用是 future 约会记录:从明年 1 月 1 日起,你可以给每个员工增加 10% 的工资,并在几个月前预先填好表格。当 SYSDATE 越过 1 月 1 日时,新的工资就会生效。此外,它有利于运行历史报告。您不使用 SYSDATE,而是插入过去的日期,以便查看工资(或汇率或其他),因为如果在过去的那个时间运行它们会被报告。

    在这种情况下,记录永远不会更新或删除,您只需不断添加具有新生效日期的记录。进行更详细的查询,但它起作用并开始变得(我敢说)正常。这方面有很多页面,例如: http://peoplesoft.wikidot.com/effective-dates-sequence-status

    关于sql - 存储多个版本的 SQL 行数据的建议技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8529059/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com