我有一个具有ClientName属性的Clients表,该属性也是主键。
我有一个Iterations表,它有一个ClientName的外键和另一个名为IterationId的属性。对(ClientName,IterationId)是此表的主键。
必须存在第三个表,具有以下特征:
由于需求2意味着还使用了Iterations表的ClientName属性的外键,因此第三个表应至少具有3个属性,即(ClientName1,ClientName2,IterationId),其中ClientName1是外键的客户端表和(ClientName2,IterationId)是迭代表的外键。此外,我需要始终保证ClientName1 == ClientName2。
是否有正确的方法对这3个表进行建模以保证刚刚描述的所有要求?
编辑: 在面向对象的世界中,我可以通过以下方式轻松建模:
public class Client{
public List<Iteration> Iterations;
public List<Entity3> ListOfEntity3;
}
public class Iteration{
public List<Entity3> ListOfEntity3;
[NotNull]
public Client ClientReference;
}
public class Entity3 {
[NotNull]
public Client ClientReference;
public Iteration IterationReference;//this can be null.
}
对于Entity3的每个实例,如果I.IterationReference!= null,则I.IterationReference.ClientReference == I.ClientReference。
如何在关系世界中实现这一目标?
答案 0 :(得分:0)
你不需要将一个外键映射回到table3中的table1,因为你在table3中有一个外键映射回Table2而Table2有一个外键映射回到Table1,在你的第三个表中你需要的只是一个外键映射回Table2和表3中的一些代理键,因此您可以将多个C引用回表2中的一条记录。