gpt4 book ai didi

core-data - 对于一对多关系,每个级联删除选项的所有副作用是什么?

转载 作者:行者123 更新时间:2023-12-01 08:05:34 32 4
gpt4 key购买 nike

假设我有两张 table ,部门员工 .每个员工正好有一个部门。每个部门都有一名或多名员工。

我可以使用级联删除选项的任何组合来强制执行此规则而无需编写特殊代码吗?

换句话说,这里有两个规则:

  • 一个部门只有在没有员工时才能删除。
  • 当部门中的最后一个员工被删除时,该部门应该被删除。

  • 如果不是,那么我应该使用哪个集合来帮助我最大程度地执行此业务逻辑?

    最佳答案

    假设在每个场景运行之前,我们在表中有以下数据:

    Sales (Department)
    Amy (Employee)
    Bob (Employee)

    场景 1:级联/无效
    Employee --(Cascade)--> Department
    Department --(Nullify)--> Employee
    删除员工 :
    删除 Bob 将导致 Sales 被删除,Amy 的部门将变为 NULL。
    Amy
    删除部门 :
    如果我们这次重新开始并删除 Sales,Amy 和 Bob 将在数据库中留下 NULL 部门。
    Amy
    Bob

    场景 2:级联/拒绝
    Employee --(Cascade)--> Department
    Department --(Deny)--> Employee
    删除员工 :
    删除 Bob 将引发异常: The operation couldn’t be completed. (Cocoa error 1600.) .
    删除部门 :
    如果我们这次重新开始并删除Sales,我们会得到异常: The operation couldn’t be completed. (Cocoa error 1600.) .

    场景 3:级联/级联
    Employee --(Cascade)--> Department
    Department --(Cascade)--> Employee
    删除员工 :
    删除 Bob 将导致 Sales 被删除。结果,艾米也被删除了。
    (empty DB)
    删除部门 :
    如果我们这次重新开始删除Sales,也会导致所有员工也被删除。
    (empty DB)

    场景 4:无效/无效
    Employee --(Nullify)--> Department
    Department --(Nullify)--> Employee
    删除员工 :
    删除 Bob 不会改变数据库的其余部分。
    Sales
    Amy
    现在删除 Amy 将导致 Sales 没有任何员工。
    Sales
    删除部门 :
    如果我们这次重新开始并删除 Sales,这将导致 Amy 和 Bob 的部门为 NULL。
    Amy
    Bob

    场景 5:无效/拒绝
    Employee --(Nullify)--> Department
    Department --(Deny)--> Employee
    删除员工 :
    删除 Bob 不会改变数据库的其余部分。
    Sales
    Amy
    现在删除 Amy 将导致 Sales 没有任何员工。
    Sales
    删除部门 :
    这次如果我们重新开始,删除Sales,会引发异常: The operation couldn’t be completed. (Cocoa error 1600.) .

    场景 6:无效/级联
    Employee --(Nullify)--> Department
    Department --(Cascade)--> Employee
    删除员工 :
    删除 Bob 不会改变数据库的其余部分。
    Sales
    Amy
    现在删除 Amy 将导致 Sales 没有任何员工。
    Sales
    删除部门 :
    如果我们这次重新开始并删除Sales,它将删除所有员工。
    (empty DB)

    场景 7:拒绝/无效
    Employee --(Deny)--> Department
    Department --(Nullify)--> Employee
    删除员工 :
    删除 Bob 会导致异常: The operation couldn’t be completed. (Cocoa error 1600.) .
    删除部门 :
    如果我们这次重新开始并删除 Sales,这将导致 Amy 和 Bob 的部门为 NULL。
    Amy
    Bob

    场景 8:拒绝/拒绝
    Employee --(Deny)--> Department
    Department --(Deny)--> Employee
    删除员工 :
    删除 Bob 会导致异常: The operation couldn’t be completed. (Cocoa error 1600.) .
    删除部门 :
    这次如果我们重新开始,删除Sales,会引发异常: The operation couldn’t be completed. (Cocoa error 1600.) .

    场景 9:拒绝/级联
    Employee --(Deny)--> Department
    Department --(Cascade)--> Employee
    删除员工 :
    删除 Bob 会导致异常: The operation couldn’t be completed. (Cocoa error 1600.) .
    删除部门 :
    如果我们这次重新开始并删除Sales,它将删除所有员工。
    (empty DB)

    结论:
    因此,似乎最好使用场景 5(Nullify/Deny),您将不得不编写自定义代码在删除最后一个员工后删除部门。此方案还将确保您不会过早地意外删除部门。

    关于core-data - 对于一对多关系,每个级联删除选项的所有副作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17266980/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com