2

比如说,我们有 2 个实体:父母孩子

删除父级时,所有级也将被删除。

伟大的。

现在我们有了一个叫做情人的实体。

每个人都可以“爱”许多其他人,并被许多人所爱。

如果一个人被删除会怎样?

是否级联删除:

  1. 根本不工作?
  2. 当最后一个爱你的人被删除时,删除你?

要不然是啥?

4

1 回答 1

1

我认为,您不应该以这种方式将级联与 to-many 一起使用,因为当它删除您删除的对象的所有情人时,它可能会越走越远并删除整个数据库。

因此,对您来说更好的方法是拥有一个中间(“加入”)实体,例如loverInfo。这是Apple根据朋友关系建议您如何执行此操作的方法。

最初被建模为与自身相反的多对多关系的一个常见示例是“朋友”。虽然不管他们喜不喜欢你是你表弟的表弟,但你不一定是你朋友的朋友。对于这种关系,您应该使用中间(“连接”)实体。中间实体的一个优点是您还可以使用它向关系中添加更多信息——例如,“FriendInfo”实体可能包含一些带有“排名”属性的友谊强度指示。这在此处进行了说明

图 3

在此示例中,Person 与 FriendInfo 有两个对多的关系:friends 表示源人员的朋友,befriendedBy 表示将源视为其朋友的人。FriendInfo 代表关于一个友谊的信息,“在一个方向上”。一个给定的实例会注明来源是谁,以及他们认为是他们朋友的一个人。如果感觉是相互的,那么就会有一个相应的实例,源和朋友互换。处理此类模型时还有其他几个注意事项:

  • 要在一个人与另一个人之间建立友谊,您必须创建一个 FriendInfo 实例。如果两个人都喜欢对方,则必须创建两个 FriendInfo 实例

  • 要破坏友谊,您必须删除 FriendInfo 的相应实例。

  • 从 Person 到 FriendInfo 的删除规则应该是级联的。如果一个人从商店中删除,那么 FriendInfo 实例将变为无效,因此也必须删除。
  • 作为推论,从 FriendInfo 到 Person 的关系不能是可选的——如果源或朋友为空,则 FriendInfo 的实例无效。
于 2012-06-20T06:44:19.317 回答