在核心数据中,大多数时间关系都是双向建模的。但the docs say在另一个地方:
通常只对模型有意义 一对一的关系 方向。
答案 0 :(得分:5)
在核心数据中,您应始终使用双向关系,除非您有极端情况。如果您使用单向关系,那么您将在核心数据本身内产生性能损失,并且存在参照完整性问题。
除非你明确知道为什么需要单向关系,否则你应该始终建立双向关系;规则很简单。
虽然弗朗西的答案很有意思,但我不得不反对。即使在他提供的例子中,你也应该有双向关系。存在几乎没有的情况,其中单向关系将更适合。
答案 1 :(得分:1)
答案取决于您要强制执行的参照完整性要求。如果更新或删除任一侧的对象会影响关系另一侧的对象,则需要双向。但是,如果更新/删除一侧的对象不会影响另一方的对象,那么单向是更好的模型。
以一个具有0..n : 1
基数的父子模型为例(我更喜欢1 : 0..n
表示,但为了论证,让我们反过来)。添加新子项,更新现有子项或删除子项对父对象没有影响,因此父项无需明确了解所有子项(除非需要支付大学学费)。但是,删除父对象会对子对象产生负面影响,因为它们需要被删除或重新替换,否则将成为孤立状态并处于无效状态。因此,最好将其建模为单向关系。另一个例子是库存 - 零件目录关系,再次使用0..n : 1
基数。
答案 2 :(得分:1)
这是一个所有权问题:通常,双向关系没有意义,因为一个实体在概念上拥有另一个。
想想一些例子。如果您的结构中有用户,并且用户可以拥有与他关联的简单银行帐户。如果您将关系设为双向,则表示用户拥有帐户,但帐户拥有用户。
这是有道理的,因为您不想在删除帐户时删除用户。这就是为什么通常你不需要双向的:因为它是一个不需要的额外约束,因为大多数时候你会有一个实体拥有另一个但反之亦然。
答案 3 :(得分:1)
我认为您阅读了有关您在问题中引用的关系的整个文档。
该文档还描述了使用单向关系的所有缺点,并且只有在极少数情况下才能创建单向关系。
作为一般规则,我强烈建议您创建双向关系,除非您确切知道为什么不这样做。