如果我首先获得了多对多的关系数据,我该如何将它们插入到我的表中?

时间:2017-03-31 07:15:32

标签: sql sqlite database-design insert entity-relationship

假设我有一个客户表,一个产品表和一个订单表来记录谁购买了什么,订单表基本上有2个外键,customer_id& PRODUCT_ID。

现在我首先收到订单信息,在其中我无法在本地数据库中找到客户信息。事实证明,这是一个新客户,其信息将来自另一个线程/队列。更糟糕的是,我从订单信息中获得的客户ID与我在本地使用的客户ID不同。我的本地客户ID是INTEGER PRIMARY KEY(我确实将“真正的客户ID”记录为另一列并在其上设置索引)

那我该怎么记录这个订单信息呢?我可以想出一些笨拙的解决方案,例如:如果我找不到联系信息,我先插入一条记录。在我获得该客户的真实信息之后,我更新了客户&订单表。但是我想知道这种情况有什么“标准”方式吗?

1 个答案:

答案 0 :(得分:1)

插入NULL值,然后稍后使用实际值进行更新很简单,并且可以正常工作(如果没有NOT NULL约束)。 您应该使用事务,以便并发用户看不到不完整的数据。

您可以使用deferred foreign key constraints

  

如果语句修改了数据库的内容以致违反了延迟的外键约束,则不会立即报告违规。在事务尝试COMMIT之前,不会检查延迟的外键约束。只要用户具有打开的事务,就允许数据库以违反任意数量的延迟外键约束的状态存在。

但是,只有在插入违反约束的值时,延迟外键约束才有用; NULL值不被视为FK违规。