如何建模三元关系

时间:2012-11-13 04:23:20

标签: entity-framework entity-relationship entity-framework-5

将实体映射到与EF5的三元关系的最佳方法是什么?

例如,三个实体:

Bike
Crash
Person

然后会有一个三元关系知道:

  1. 那个人在坠机事件中的自行车X
  2. 参与自行车X和Y之间的碰撞X的人员
  3. 在自行车B上涉及A人的车祸
  4. 我应该如何创建我的实体? 是否有可能为三元关系创建一个新实体?

1 个答案:

答案 0 :(得分:2)

选项1

假设有Person-Bike组合可以在没有Crash es的情况下存在(感谢上帝)。因此,您可以创建一个二元关系(联结表)PersonBike,其中FK是人和自行车,假设自行车不属于特定人员。 EF可以在没有模型中的关联类的情况下处理这种多对多关系。

然后,太糟糕了,人 - 自行车组合可能会卷入崩溃。在一次崩溃中可能有两种以上的组合。基本上你可以在PersonBikes中拥有一个集合Crash。在这种情况下,模型中根本就没有关联类。但是,如果您想了解有关CrashPersonBike之间关联的更多信息,例如谁犯了崩溃,你需要一个两者之间的联结表:CrashPersonBike与FK到CrashPersonBike以及一个或多个描述关联的字段(如有罪/无)。这将需要EF模型中的关联类。

选项2

自行车有特定的所有者(人):让Person有一个Bikes集合(表格自行车有一个FK到人)。现在只需要通过所涉及的自行车来描述碰撞就足够了,因为自行车决定了这个人。因此,Crash可以拥有Bikes集合(同样:模型中没有关联类)或关联类CrashBike,其中包含更多详细信息,如上所述。

选项3

“真正的”三元关系,需要模型中的关联类(CrashPersonBike),有或没有额外的细节。

在所有情况下,您都需要业务逻辑来防止同一个人(或选项1和3中的自行车)参与一次崩溃。选项1和2还有一个额外的好处,因为该模型可以描述除了崩溃之外的人 - 自行车组合。是否应该是1或2取决于自行车人的所有权。