数据库正在从流中提取数据,并且满足外键约束所需的所有行都可能迟到或永远不会到达。
这很可能可以通过使用另一个没有外键约束的数据存储来实现,然后在所有需要的数据都可用时,将其读入具有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约束的机制。我认为在这种情况下是不可能的,因为每当接收到数据时,这些insert语句都会在随机时间运行。