【发布时间】:2020-01-14 05:35:32
【问题描述】:
数据库正在从流中提取数据,满足外键约束所需的所有行可能会延迟或永远不会到达。
这可以通过使用另一个数据存储来完成,一个没有外键约束的数据存储,然后当所有需要的数据都可用时,读入具有 fk 约束的数据库。但是,这会增加复杂性,我想避免它。
我们正在研究创建“占位符”行以将外键指向的解决方案。当真实数据进来时,占位符被替换为真实值。同样,这增加了复杂性,但这是我们迄今为止找到的最佳解决方案。
人们通常如何解决这个问题?
编辑:一些可能有助于解释问题的示例数据:
假设我们有这些表:
CREATE TABLE order (
id INTEGER NOT NULL,
order_number,
PRIMARY KEY (id),
UNIQUE (order_number)
);
CREATE TABLE line_item (
id INTEGER NOT NULL,
order_number INTEGER REFERENCES order(order_number),
PRIMARY KEY (id)
);
如果我先下单,没问题!但假设我尝试:
INSERT INTO line_item (order_number) values (123) 在插入订单 123 之前。这当然会使 fk 约束失败。但这可能是我获取数据的顺序,因为它是从从多个来源收集这些数据的流中读取的。
另外,为了解决@philpxy 的问题,我在这方面并没有真正找到太多。提到的一件事是deferred constraints。这是一种在事务结束时等待执行 fk 约束的机制。但是,我认为在我的情况下不可能这样做,因为这些插入语句将在收到数据时随机运行。
【问题讨论】:
-
您能否添加一些有助于解释问题的示例数据?
-
您的研究表明了什么? How to Askhelp center
-
@TimBiegeleisen 我在问题中添加了一个示例。
-
如果你不是在事务结束时寻找一致性,那么什么时候(什么时候)数据应该处于一致状态?
标签: postgresql foreign-keys referential-integrity data-ingestion