ERD中如何定义两个0-1关系为OR逻辑的强制1对1关联规则
ERD中定义Brand互斥强制关联约束的正确方法
这种要求实体必须且只能关联多个可选关联中的一个的规则,在ER/EER模型中属于互斥强制参与(XOR)约束,可按以下方式定义:
- 基础关联设置:先保留
Brand到Organization、Brand到Brand Group的两个0-1关联,两个关联的基数都设置为0..1(表示单个Brand最多关联对应实体的一个实例) - 标注互斥规则:在两个关联线靠近
Brand实体的一侧,用弧形把两条关联线连接起来,在弧形旁标注XOR(或标注互斥OR),表示这两个关联是互斥的,单个Brand不能同时关联两个实体 - 标注强制参与规则:将
Brand对这两个关联的整体参与度设置为强制总参与,可以用双线绘制Brand和弧形之间的关联段,也可以额外标注约束说明:Brand必须参与且仅参与两个关联中的一个
如果是使用UML类图绘制数据模型,可直接在两个关联的Brand侧端点添加{xor}约束注解,同时补充OCL规则明确约束边界:context Brand inv: self.organization->size() + self.brandGroup->size() = 1
如果需要对应到可落地的数据库层约束,可在Brand实体的逻辑设计中补充校验规则:
新增
parent_type枚举字段,可选值为Organization/Brand Group,同时设置表级约束:(parent_type = 'Organization' AND organization_id IS NOT NULL AND brand_group_id IS NULL) OR (parent_type = 'Brand Group' AND brand_group_id IS NOT NULL AND organization_id IS NULL)
内容的提问来源于stack exchange,提问作者Seba
相关产品推荐
相关产品推荐

