如何在数据库erd中建立菱形多对多关系模型

xa9qqrwz  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(683)



图例:
pk(蓝色):主键
fk(绿色):外键
pfk(蓝色):主键和外键同时使用
如何建立菱形(如果术语正确)关系模型?最好用一个简单的例子来解释:
organization , item 以及 tag 实体。
我的目标是:
tag 它本身是唯一的,属于一个组织。
item 它本身是唯一的,属于一个组织。
项有许多标记(使用m2m表连接)和相关的 tag / item 对必须属于同一组织(i、 e.组织a的项目不能与组织b的标记配对)
我画了两个备选方案,但没有一个使我满意。
图1第三个目标: items 以及 tags 是独一无二的 id 作为主键,但没有什么可以阻止插入对 item_tag 属于不同的组织。
图2没有断裂,但弯曲了第一和第二目标: organization_id 作为主键和外键添加到 item 以及 tag 表和 item_tag.organization_id 列引用两者。这可以防止来自不同组织的配对。 tag.id 以及 item.id 列现在是不必要的复合主键的一部分,因为实际上是单个主键 id 列表示 item 以及 tag .
如何正确地建模这些需求?

4dc9hkyq

4dc9hkyq1#

要强制引用完整性,您必须。。。
包括 organization_id 在所有表格中
创建逻辑冗余 UNIQUE (或pk)约束 (organization_id, id) 在两个表中 tag 以及 item 在中有多列fk约束 item_tag 匹配那些列 UNIQUE 约束条件。
如果你不包括 organization_id (逻辑上是冗余的)没有什么可以阻止您链接来自不同组织的项和标记(错误地)。
这就是你的图表2。但是你真的需要数据类型吗 uuid 为了标签? bigint 甚至 int 应该足够了,同时要小一点,快一点。
与postgresql代码示例密切相关的案例:
强制约束“两表之隔”

相关问题