我敢肯定,很多应用程序,关键应用程序,银行等等每天都在执行此操作。
所有这些背后的想法是:
- 所有行都必须有一个历史记录
- 所有链接必须保持连贯
- 发出获取“当前”列的请求应该很容易
- 购买过时物品的客户仍应查看购买的物品,即使该产品不再属于目录
等等。
这是我想要做的,我将解释我面临的问题。
我所有的表都有这些列:
id
id_origin
date of creation
start date of validity
start end of validity
以下是CRUD操作的想法:
- create =用
id_origin
=id
,date of creation
= now,start date of validity
= now,end date of validity
= null 插入新行(=表示它是当前活动记录) - 更新=
- 读取=读取所有记录,其中
end date of validity
== null end date of validity
用end date of validity
= now 更新“当前”记录= null- 用新值创建一个新值,然后
end date of validity
= null(=表示它是当前活动记录)
- 读取=读取所有记录,其中
- delete =
end date of validity
用end date of validity
= now 更新“当前”记录= null
所以这是我的问题:与多对多关联。让我们用一个值示例:
- 表A(id = 1,id_origin = 1,开始=现在,结束=空)
- 表A_B(开始=现在,结束=空,id_A = 1,id_B = 48)
- 表B(id = 48,id_origin = 48,开始=现在,结束=空)
现在我要更新表A,记录id = 1
- 我将记录id = 1标记为end = now
我在表A中插入了一个新值,并且...该死,除非我也重复了该关系,否则我已经失去了关系A_B ...这将终止于表:
表A(id = 1,id_origin = 1,开始=现在,结束=现在+8百万)
- 表A(id = 2,id_origin = 1,开始=现在+ 8mn,结束=空)
- 表A_B(开始=现在,结束=空,id_A = 1,id_B = 48)
- 表A_B(开始=现在,结束=空,id_A = 2,id_B = 48)
- 表B(id = 48,id_origin = 48,开始=现在,结束=空)
还有……还有另一个问题:关系A_B:我是否应将(id_A = 1,id_B = 48)标记为过时(A-id = 1已过时,但不是B-48)?
怎么处理呢?
我必须进行大规模设计:产品,合作伙伴等。
您对此有何经验?你会怎么做(你做得如何)?
-编辑
我发现这篇文章很有趣,但是不能正确地解决“陈旧过时”(=我实际上要问的问题)