1

小贩

(PK) - ID
名称

站立

(PK) - Id
VendorId - fk - 如果 Vendor 被删除,则级联删除)
名称

物品

(PK) - Id
VendorId - (fk - 级联删除,如果供应商被删除)
名称
价格

不可用项目

(PK) - ItemId - (fk - 如果删除 Item 则级联删除)
(PK) - StandId - (fk - 如果删除 Stand 则级联删除)

上面的数据库代表一个运动场。

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

    问题:

    在添加最后一个列出的外键 (FK_UnavailableItem_StandId_Stand_Id) 和删除规则之前,我可以创建所有内容:级联

    SQL Compact 3.5(使用VS 2010 Server Explorer)报如下错误: 引用关系会导致循环引用,不允许。

    我了解如果我在 UnavailableItem 表中有一条记录,并且它的 Vendor 被删除,它将尝试被删除两次:

  • 一次是因为其引用的项目已被删除。
  • 曾经因为其引用的立场被删除。

    但是,这对我来说似乎不是周期性的。级联删除分支成两条路径(已删除的立场和已删除的项目),它们都以被删除的同一记录结尾......但它在那里结束。之后没有级联删除的无限循环。我是否遗漏了什么,或者这是我使用的工具的限制?

    感谢您提供任何帮助!

  • 4

    2 回答 2

    2

    你不能通过两个分支级联删除,这是工具的限制。但是无论如何,级联删除对于你可怜的无辜数据库来说通常是一件坏事。从底部表格中删除并向上移动。这样,如果您在底部有 100000000000 条记录,您可以分批执行它们以提高性能。级联删除可能会导致性能问题。

    于 2010-09-17T21:07:02.100 回答
    1

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

    至少,当一个供应商或一个项目被删除时,它仍然会级联。

    如果 UnavailableItem 仍然包含已删除 Stands 的行,则至少在将 UnavailableItem 与 Stand 连接时,在构建补货订单时,它们可以被过滤掉......

    于 2010-09-21T04:19:51.370 回答