【发布时间】:2022-01-03 15:34:32
【问题描述】:
假设我有一个带有主键和一些数据的 psql 表:
pkey | price
----------------------+-------
0075QlyLvw8bi7q6XJo7 | 20
(1 row)
但是,我想保存它的历史更新,而不会丢失将其他表中的键引用为外键的功能。
我正在考虑做某种修订号+时间戳的方法,其中每个“更新”都是一个新行,例如:
pkey | price | rev_no
----------------------+-------+--------
0075QlyLvw8bi7q6XJo7 | 20 | 0
----------------------+-------+--------
0075QlyLvw8bi7q6XJo7 | 15 | 1
(2 rows)
然后创建一个视图,该视图始终采用表的最高修订号并从该视图中引用键。
但是,对于我认为应该相当普遍的任务而言,这项工作似乎有点过于繁重。有什么我想念的吗?对于这些我不知道的问题,您有更好的解决方案还是有一个众所周知的范例?
【问题讨论】:
-
您可以将旧值移动到历史表中,以便您的主表只包含最新版本。这可以例如在触发器中完成
-
这并没有错。您应该只考虑 1)哪些操作需要快速 2)您要保留多少修订版 3)如何摆脱旧数据。确切的解决方案将取决于这些。
-
数据修订是许多业务应用程序的核心功能,但它并未作为数据库级别的预定义解决方案实现。您必须根据自己的需求来实施它,它可能比您当前考虑的解决方案复杂得多。
标签: postgresql database-design