gpt4 book ai didi

sql - 如何设计数据库约束,以便两个实体只有在两个字段值匹配时才能具有多对多关系?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:16 26 4
gpt4 key购买 nike

我有一个包含四个表的数据库,如下所示:

地址簿
----------------------
id
更多领域

联系方式
----------------------
id
地址簿 ID
更多领域

群组
----------------------
id
地址簿 ID
更多领域

要联系的群组
----------------------
复合键
群号
联系方式


我的关系是地址簿>联系人的一对多关系,地址簿>组的一对多关系以及联系人和组之间的多对多关系。

总而言之,我有一个地址簿。联系人和群组可以存储在其中,并且它们不能存储在多个地址簿中。此外,可以根据需要将所需的联系人添加到任意数量的组中。

我现在的问题如下。我想添加一个约束条件,即如果联系人具有相同的地址簿 ID,则他们只能是组的成员

因为我不是数据库人员,所以这让我很困惑。这是否意味着我设计的表结构有误?或者这是否意味着我必须在插入组联系表之前在某处添加支票?这对我来说似乎是错误的,因为如果他们没有相同的 ID,我希望 SQL 查询不可能将联系人链接到组。

最佳答案

您应该能够通过将 addressbook_id 列添加到您的 Group to Contact 桥接表,然后对 Contacts 使用复合外键来完成此操作Groups 表。

在 PostgreSQL 中(但很容易适应任何数据库,或者至少是任何支持复合 FK 的数据库):

CREATE TABLE group_to_contact (
contact_id INT,
group_id INT,
addressbook_id INT,
CONSTRAINT contact_fk FOREIGN KEY (contact_id,addressbook_id)
REFERENCES contacts(id,addressbook_id),
CONSTRAINT groups_fk FOREIGN KEY (group_id,addressbook_id)
REFERENCES groups(id,addressbook_id)
)

通过在两个约束中使用相同的 addressbook_id 列,您当然会强制它们在两个引用表中相同。

关于sql - 如何设计数据库约束,以便两个实体只有在两个字段值匹配时才能具有多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com