如何将 Entity1---(1,1)---Relation---(1,3)---Entity2 建模为 table?
How to model Entity1---(1,1)---Relation---(1,3)---Entity2 to a table?
我想将给定的带有 (min, max) 符号的 ER 图转换为表格,但我不确定 "trainieren" 关系的主键是什么。
如果关系 R 介于 A 和 B 之间并且:
- one 到 one -> 主键是 A 或 B 的主键
- one to many -> 主键是多次参与关系的实体的主键
- many to many -> 主键是A和B的主键
我会将 (0,1) 和 (1,1) 解释为一,将 (1,3) 和 (1,*) 解释为多,因此
我的解决方案是(强文本中的主键)trainieren: {[Trainer.AkkrNr, Teams.Land]}
通常,我们尝试只使用一个或多个基数指标,因为这些指标很容易映射到 table 结构。大多数数据建模者会像您一样放弃上限以简化模型。
如果您想强制执行该限制,可通过以下几种方式实施:
- 使用你的结构和 insert/update 上的触发器来计算给定团队有多少培训师,如果超过 3 则抛出错误。
- 您可以向
trainieren
的主键添加一个位置列,并添加一个约束以将其限制为值 1、2 和 3。但是,这会强加一个不属于概念模型的顺序.
- 将
trainieren
更改为 (Teams.Land PK, Trainer1.AkkrNr, Trainer2.AkkrNr, Trainer3.AkkrNr)
。 Trainer2 和 Trainer3 需要可以为空,并且此设计失去了每个培训师只属于一个团队的约束。你可以用触发器来解决这个问题。呸
由于没有理想的方法来实现关系基数的上限,大多数数据建模者会采用与您相同的方法,并将其留给数据库客户端(通常是应用程序逻辑)来强制执行该限制。
我想将给定的带有 (min, max) 符号的 ER 图转换为表格,但我不确定 "trainieren" 关系的主键是什么。
如果关系 R 介于 A 和 B 之间并且:
- one 到 one -> 主键是 A 或 B 的主键
- one to many -> 主键是多次参与关系的实体的主键
- many to many -> 主键是A和B的主键
我会将 (0,1) 和 (1,1) 解释为一,将 (1,3) 和 (1,*) 解释为多,因此 我的解决方案是(强文本中的主键)trainieren: {[Trainer.AkkrNr, Teams.Land]}
通常,我们尝试只使用一个或多个基数指标,因为这些指标很容易映射到 table 结构。大多数数据建模者会像您一样放弃上限以简化模型。
如果您想强制执行该限制,可通过以下几种方式实施:
- 使用你的结构和 insert/update 上的触发器来计算给定团队有多少培训师,如果超过 3 则抛出错误。
- 您可以向
trainieren
的主键添加一个位置列,并添加一个约束以将其限制为值 1、2 和 3。但是,这会强加一个不属于概念模型的顺序. - 将
trainieren
更改为(Teams.Land PK, Trainer1.AkkrNr, Trainer2.AkkrNr, Trainer3.AkkrNr)
。 Trainer2 和 Trainer3 需要可以为空,并且此设计失去了每个培训师只属于一个团队的约束。你可以用触发器来解决这个问题。呸
由于没有理想的方法来实现关系基数的上限,大多数数据建模者会采用与您相同的方法,并将其留给数据库客户端(通常是应用程序逻辑)来强制执行该限制。