传奇:
- PK(蓝色):主键
- FK(绿色):外键
- PFK(蓝色):同时主键和外键
如何模拟钻石状(如果术语正确)关系?最好用一个简化的例子来解释:
有organization
,item
和tag
实体。
我的目标是建模:
- 每一个
tag
都是独一无二的,属于一个单一的组织。 - 每一个
item
都是独一无二的,属于一个单一的组织。 - 项目有许多标签(使用 M2M 表连接)并且相关
tag
/item
对必须属于同一组织。(即来自组织 A 的项目不能与来自组织 B 的标签配对)
我绘制了两个替代解决方案,但没有一个让我满意。
图1打破了第三个目标:items
并且作为主键tags
本身是唯一的id
,但是没有什么可以阻止插入item_tag
属于不同组织的对。
图 2 没有中断,但弯曲了第一个和第二个目标:organization_id
作为主键和外键添加到表和item
列引用。这可以防止来自不同组织的对。and列现在是不必要的复合主键的一部分,因为实际上单列代表 and 的唯一性。tag
item_tag.organization_id
tag.id
item.id
id
item
tag
如何正确建模这些需求?