如何将 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 之间并且:

我会将 (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 需要可以为空,并且此设计失去了每个培训师只属于一个团队的约束。你可以用触发器来解决这个问题。呸

由于没有理想的方法来实现关系基数的上限,大多数数据建模者会采用与您相同的方法,并将其留给数据库客户端(通常是应用程序逻辑)来强制执行该限制。