0

我在使用 PostgreSQL 的项目中遇到了问题。

假设有两个表A和,B两者都有一个名为 的(唯一)字段。table的列被声明为主键,而 table 的列被声明为指向 table 的外键。ABIDIDAIDBA

我的问题是每次我们将新数据输入数据库时​​,表中的值B往往会先于表中的值更新A(这个问题无法避免,因为项目是这样设计的)。A所以我必须修改和之间的关系B

我的目标是实现这样一种情况,即我可以在启用该子句的同时将数据分别插入A和插入。更重要的是,INSERT 和 DELETE 查询可能同时发生。BON DELETE CASCADE

有什么建议么?

4

1 回答 1

0

如果你不能使用延迟约束,听起来你的项目设计得很糟糕。您的基本问题是您无法保证数据的内部一致性,因为可能会发生不会将数据从一种一致状态移动到另一种状态的事务。

老实说,这是我会做的:

  1. 目录受影响的键。

  2. 删除受影响的键约束。

  3. 编写一个查找孤立行的定期作业。使用 LEFT JOIN 因为反连接在 PostgreSQL 中表现不佳。

第三个表的问题是它不能解决您的基本问题,即写入不是原子一致的。一旦你牺牲了很多事务控制,就会消失。

从长远来看,项目需要重写。

于 2013-10-27T02:27:25.167 回答