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



假设我有 2 个数据库表usertopic个。

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

我在user表中有一个user_idPK,在topic表中有一个topic_idPK。

我知道我可以通过使用第三个子表(称为linking_table(来强制执行多对多关系,该表对user_id有一个 FK,对topic_id有一个 FK。

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

似乎我希望您不能在不同时将一行插入linking_table的情况下在主题中插入一行。

这种约束是否可能,甚至合理?如果没有此约束,则可以插入到主题表中,而根本不会在linking_table中创建链接。

编辑:

我想到了什么。主题是否已创建且未与用户关联并不重要。我只会通过用户访问后端数据,链接表是将用户链接到主题的内容,因此即使理论上有主题未连接到用户,从任何实际角度来看都无关紧要。它类似于分离的链表节点。由于它没有被引用,所以它是否存在并不重要,假设我对表进行了某种清理并删除了任何孤立的主题。

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

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

最新更新