2

我正在尝试在 SQL 中存储分层数据并已决定使用

经过相当多的研究,封闭表似乎很适合我的需求。然而,我一直在阅读的一件事是,如果您想查询特定节点的直接祖先/后代 - 那么您可以使用depth闭包表中的列(参见上面链接中的幻灯片 68)。我需要这个depth专栏来促进这种确切类型的查询。这一切都很好,但首先关闭表的主要吸引力之一是人们可以轻松查询和修改其中包含的数据。添加一depth似乎完全破坏了关闭表的易用性可以修改数据(想象添加一个新节点并偏移树的整个分支)。

所以-我正在考虑修改我的闭包表以仅定义节点与其直接祖先/后代之间的关系。这使我仍然可以轻松地遍历树。查询数据似乎相对容易。修改数据不像原始的没有depth字段的闭包表那么容易,但比有depth字段的要容易得多。这似乎是一个公平的妥协(几乎在闭包表​​和邻接表之间)。

我是否忽略了什么?通过这种方式,我是否失去了闭包表的主要优势之一?有没有人看到这样做的任何内在风险可能会在以后困扰我?

4

1 回答 1

4

我相信你失去的关键优势是,如果你想知道一个节点的所有后代或祖先,你现在必须做更多的遍历。

例如,如果您从以下简单树开始:A->B->C->D

要获得 A 的所有后代,您必须先 A->B 然后 B->C 然后 C->D。因此,三个查询,而不是遵循正常模式的单个查询。

于 2013-05-03T20:18:08.157 回答