外键约束阻止在空DB中创建任何新记录

时间:2016-05-18 16:50:20

标签: database postgresql

我在PostegreSQL中有一个非常简单的DB,由下表组成:

  • 代理商
  • 银行帐户
  • 辅助
  • 所有者

这是合乎逻辑的方案:

代理商( ID ,地址,子公司

银行帐户( ID 代理商

子公司( id ,城市,

人( id ,姓名,姓氏,子公司代理商

所有者( ID 银行帐户

粗体中,您可以看到每个表的主键;在斜体中,您可以看到外键,特别是:

  • agency.subsidiary参考subsidiary.id
  • bank account.agency references agency.id
  • subsidiary.head references person.id
  • person.subsidiary references subsidiary.id
  • person.agency references agency.id
  • owner.bank帐户参考银行account.id

问题在于,如果我想从带有这些表的干净DB开始,由于外键约束,不能插入单个新记录!

例如,如果我想创建一个新的子公司,我必须已经在Person中有一个尚未被设置为另一个子公司的负责人的记录。

如果我想创建一个新人来指定我想要在不久后创建的新子公司的负责人,也会发生同样的事情。不可能,因为我需要在子公司和代理机构中预先存在的记录。

其他表格的名单也在继续。

一种解决方案是在每个表的外键上允许空值,但在这种情况下,例如,我可以创建一个没有头的子公司(这是可以接受的,因为它刚刚被制作)。但在这种情况下,我需要在我的网络应用程序中进行另一项操作,专门为一个新成立的子公司指定一个人。

我错过了什么吗?

0 个答案:

没有答案