【发布时间】:2011-09-29 01:27:38
【问题描述】:
Apple 的Relationship Delete Rules 文档简单明了。但它只谈论 一对多 关系(一对一 关系的删除规则很容易推断)。目前尚不清楚这些规则对 多对一 关系意味着什么。所以让我们在这里澄清一下。
我们使用 Apple 文档中使用的 Employees-Department 示例。尽管将这些规则应用于员工-部门关系的现实意义可能很荒谬,但作为程序员,我们在这里只讨论它们的逻辑意义。
-
拒绝
如果关系目的地有对象,则无法删除源对象。例如,如果你想删除一个员工,不管他所在部门是否还有其他员工,都必须确保先删除该部门,否则无法删除该员工。
-
无效
从目标对象的反向关系中删除源对象。 (参见@bshirley 的简明解释)例如,如果您删除一个员工,则将他从其部门的员工关系中删除。仅当部门的剩余员工数量大于所需的最小数量时,或者您确保在下一次保存操作之前为部门添加新员工时,这才有意义。
[问题:如果是最后一个员工,部门的员工关系会变成空集还是null?]
(@TechZen 回答:一对多关系总是返回一个集合对象。它从不为零。如果关系的另一端没有对象,则集合为空。) -
级联 删除关系目标处的对象。
例如,如果您删除一个员工,同时删除他的部门,即使该部门中还有其他员工。
(使用注意事项:它通常会导致“整个对象图中的菊花链删除”,正如@TechZen 在他的示例中所描述的那样。)
-
无操作
对关系目标处的对象不执行任何操作。例如,如果您删除了一名员工,请让他的部门保持原样,即使它仍然认为自己拥有该员工。
Many-to-Many关系的Delete Rules的含义可以从这里推断出来。
【问题讨论】:
-
为什么这个例子是从员工的角度思考的......如果你删除一个员工,同时删除他的部门,即使该部门还有其他员工......应该是反向的.....如果删除一个部门,同时删除所有员工,即使该部门还有员工