代码之家  ›  专栏  ›  技术社区  ›  Scott

是什么使这个数据库的级联删除循环?

  •  1
  • Scott  · 技术社区  · 14 年前

    小贩

    -身份证

    展台

    (主键) -身份证
    fk-级联删除(如果删除供应商)
    姓名

    项目


    供应商ID- (fk-如果供应商被删除,则级联删除)
    姓名

    不可用项

    (fk-删除项时级联删除)
    -标准ID-

    上面的数据库代表一个体育场。

  • 每个供应商都有多个展台(Bob's Pizza Concourse A,Bob's Pizza Concourse B…)
  • 项目由供应商配置,因为特定供应商的所有代表都以相同的价格提供相同的项目
  • 展台可能会用完某个特定的项目,因此UnavailableItems表会为给定展台上变得不可用的每个项目提供一条记录(使用ItemId和StandId的复合主键)

    在添加最后一个列出的外键(FK\u UnavailableItem\u StandId\u StandId)和删除规则之前,我可以创建一切

    SQL Compact 3.5(使用VS 2010 Server Explorer)报告以下错误:

    我知道,如果我在UnavailableItem表中有一条记录,并且它的供应商被删除,它将尝试被删除两次:

  • 一次是因为它的引用站被删除了。

    然而,这在我看来并不是周期性的。级联删除分支分为两条路径(已删除的支架和已删除的项目),这两条路径都以同一条正在删除的记录结束。。。但事情到此为止。在那之后没有无限的级联删除循环。是我遗漏了什么,还是这是我使用的工具的局限性?

    谢谢你的帮助!

  • 2 回复  |  直到 14 年前
        1
  •  2
  •   HLGEM    14 年前

    不能通过两个分支级联删除,这是该工具的一个限制。但是级联删除通常对可怜的无辜数据库是一件坏事。从下表中删除并上移。这样,如果底部有10000000000条记录,则可以成批执行这些记录以提高性能。级联删除可能会导致性能问题。

        2
  •  1
  •   pascal    14 年前

    假设SSCE不允许沿两条路径进行级联删除,则可以删除的级联删除UnavailableItem.StandId不可用.

    至少,当供应商或项目被删除时,它仍然会层叠。