数据库正在从流中提取数据,满足外键约束所需的所有行可能会延迟或永远不会到达。
这可以通过使用另一个数据存储来完成,一个没有外键约束的数据存储,然后当所有需要的数据都可用时,读入具有 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 的问题,我对此并没有真正找到太多。提到的一件事是延迟约束。这是一种在事务结束时等待执行 fk 约束的机制。但是,我认为在我的情况下不可能这样做,因为这些插入语句将在收到数据时随机运行。