我有一个包含四个表的数据库,如下所示:
地址簿
--------------------
id
更多领域
Contact
--------------------
id
地址簿 ID
更多领域
Group
--------------------
id
地址簿 ID
更多领域
联系方式组
--------------------
复合键
组号
联系方式
我的关系是地址簿 > 联系人的一对多关系、地址簿 > 组的一对多关系以及联系人和组之间的多对多关系。
总之,我有一个地址簿。联系人和群组可以存储在其中,并且不能存储在多个地址簿中。此外,可以将所需数量的联系人添加到所需数量的组中。
我现在提出的问题如下。我想添加一个约束仅当联系人具有相同的地址簿 ID 时,他们才能成为群组的成员.
由于我不是数据库人员,这让我很困惑。这是否意味着我的表结构设计错误?或者这是否意味着我必须在插入组到联系人表之前在某处添加检查?这对我来说似乎是错误的,因为我希望如果联系人没有相同的 ID,SQL 查询就不可能将联系人链接到组。
您应该能够通过添加地址簿 ID专栏到你的联系方式组桥接表,然后使用复合外键Contacts and Groups tables.
在 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)
)
通过使用相同的地址簿 ID列在两个约束中,您当然会强制它们在两个引用的表中相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)