0

我正在尝试实现一个多级库。只有单个父节点:

Parent1
   - Child1
   - Child2
Parent2
   - Child1
   - Child2

我首先使用链接表来实现它

LibraryItem -< LibraryItemLink (FkParentId)
            -< LibraryItemLink (FkChildId)

这很好,而且功能强大,因为它允许多父节点和多子节点。但是,我在尝试删除父库项目时遇到了困难。理想情况下,应该在两个约束上放置“级联删除”以覆盖父节点或子节点删除,但 SQL Server 不喜欢这样,因为它认为可能会发生循环删除。所以我想知道我是否让自己的生活变得棘手,而是应该使用自引用关联到 LibraryItem。

LibraryItem -< LibraryItem(Children)

这会更容易实现吗,尤其是从 MVC3/EF5 世界中的 CRUD 角度来看?

最后一个选项是 2 个级别的 2 个表,这更容易,但更有限。

非常感谢的想法。

4

1 回答 1

1

我会在LibraryItem表中使用 PARENT_ID 列,允许 NULLS 和 FK 返回到同一张表的 PK。

对于您的级联删除问题,我会INSTEAD OF DELETE在该表上使用触发器;

  1. 删除 PARENT_ID 是被删除行的 PK 的所有记录
  2. 然后删除父本身的记录。
于 2013-08-08T14:57:58.427 回答