正在更新外键记录更改时的主键记录



我和Postgres有一对多的关系。主键实体LUT依赖于其子实体。我正在寻找一种将外键实体中的更改级联到主实体并更新其LUT的方法。

由于可能会有很多变化,所以采用某种去抖动的解决方案会更好。

示例结构:主要实体表:

建筑物

名称bbbccc[/tr>
id 地址更新日期
1 xxxxx aaa 2022-08-26 09:23:57.768+00
2 qqq2022-08-27 10:20:57.768+00
3 wwwwwww2022-08-27 09:20:57.768+00

您基本上有两个选项:

  1. 在构建和开发触发器时保留updated_at列,以便在buildingfloor表之间同步update_at列。这是您当前拥有的流程
    优点:Updated_at列可通过简单的直接查询轻松访问建筑
    缺点:需要额外的代码,可能相当复杂,才能从地板表中选择正确的updated_at。考虑一下,初始楼层入口包含错误的building_id。更正触发器时需要执行什么操作。从地板上删除怎么样;是否包含当前建筑updated_at

  2. 不要将updated_at列实际存储在建筑表上。相反,创建一个从floors表派生最新updated_at列的视图
    优点:DML操作不需要进一步的操作(代码(。buildingsUpdated_at列始终显示最新楼层更新值(如果有(
    缺点:不能直接针对building发布DML,因为它是一个视图(保持相同的名称(,因为基础表有不同的名称。这将需要触发器来更新实际的表,或者每个开发人员都了解底层表。

IMHO选项2是迄今为止最好的。它遵循的基本关系模型规定,不存储可派生的。它没有问题吗?显然不是,您可能想要构建instead of触发器。可能还有其他人。请参阅此处包含每个选项的简短示例。

确保您的外键关系指定了ON UPDATE CASCADE,并且外键将自动更新以匹配主键。

最新更新