创建数据库约束,强制一次插入2个表

时间:2017-07-08 04:38:59

标签: sql database postgresql foreign-keys constraints

假设我有2个数据库表usertopic

用户可以拥有多个主题,主题可以包含多个与之关联的用户。这是一个多对多的关系。

user_id表中有user PK,topic_id表中有topic PK。

我知道我可以通过使用第3个子表(称之为linking_table)强制执行多对多关系,该表具有user_id的FK和topic_id的FK。

假设我可以随意创建用户,但我不希望有人能够在没有与用户关联的情况下创建主题。换句话说,我希望它不会存在主题行,如果链接表中没有一行将用户链接到该主题。另一方面,我也不希望在用户和主题之间linking_table之间存在一行尚未存在的行。

似乎我希望它不会在没有同时在linking_table中插入行的情况下在主题中插入行。

这种约束是可能的还是合理的?如果没有此约束,则可以插入主题表,而不是在linking_table中创建链接。

编辑:

我发生了一些事情。如果创建主题并且不与用户相关联则无关紧要。我将只通过用户访问后端数据,链接表将用户链接到主题,因此即使理论上有与用户无关的主题,从任何实际角度来看都无关紧要。它类似于分离的链表节点。由于它没有被引用,如果存在它并不重要,假设我在桌面上进行某种清理并删除任何孤立的主题。

1 个答案:

答案 0 :(得分:0)

关于你的陈述:换句话说,我希望它不会存在主题行,如果链接表中没有一行将用户链接到该主题。 - >这是不可能的,因为无法同时在两个表中插入。

关于你的陈述:“另一方面,我也不希望在一个用户和一个尚不存在的话题之间的linked_table中有一行。” - >您可以在引用“主题表”的“topic_id”PK列的“linking_table”中添加外键。