假设我有 2 个数据库表user
和topic
个。
用户可以有多个主题,一个主题可以有多个与之关联的用户。这是一种多对多的关系。
我在user
表中有一个user_id
PK,在topic
表中有一个topic_id
PK。
我知道我可以通过使用第三个子表(称为linking_table
(来强制执行多对多关系,该表对user_id
有一个 FK,对topic_id
有一个 FK。
假设我可以随意创建用户,但我不希望有人能够在不与用户关联的情况下创建主题。换句话说,我希望主题行永远不存在,而链接表中没有将用户链接到该主题的行。另一方面,我也不希望用户和尚不存在的主题之间linking_table
行。
似乎我希望您不能在不同时将一行插入linking_table
的情况下在主题中插入一行。
这种约束是否可能,甚至合理?如果没有此约束,则可以插入到主题表中,而根本不会在linking_table
中创建链接。
编辑:
我想到了什么。主题是否已创建且未与用户关联并不重要。我只会通过用户访问后端数据,链接表是将用户链接到主题的内容,因此即使理论上有主题未连接到用户,从任何实际角度来看都无关紧要。它类似于分离的链表节点。由于它没有被引用,所以它是否存在并不重要,假设我对表进行了某种清理并删除了任何孤立的主题。
关于您的陈述: 换句话说,我希望主题行永远不会存在,而链接表中没有将用户链接到该主题的行。 --> 这是不可能的,因为不可能同时插入两个表。
关于您的陈述:"另一方面,我也不希望用户和尚不存在的主题之间linking_table行。 --> 您可以在引用"主题表"的"topic_id"PK 列的"linking_table"中添加外键。