我正在尝试在 SQL 中存储分层数据并已决定使用
- 一个对象表,所有主要数据都将在其中
- 和一个闭包表,定义对象之间的关系(在此处阅读更多关于闭包表的信息 [幻灯片 40 到 68])。
经过相当多的研究,封闭表似乎很适合我的需求。然而,我一直在阅读的一件事是,如果您想查询特定节点的直接祖先/后代 - 那么您可以使用depth
闭包表中的列(参见上面链接中的幻灯片 68)。我需要这个depth
专栏来促进这种确切类型的查询。这一切都很好,但首先关闭表的主要吸引力之一是人们可以轻松查询和修改其中包含的数据。添加一列depth
似乎完全破坏了关闭表的易用性可以修改数据(想象添加一个新节点并偏移树的整个分支)。
所以-我正在考虑修改我的闭包表以仅定义节点与其直接祖先/后代之间的关系。这使我仍然可以轻松地遍历树。查询数据似乎相对容易。修改数据不像原始的没有depth
字段的闭包表那么容易,但比有depth
字段的要容易得多。这似乎是一个公平的妥协(几乎在闭包表和邻接表之间)。
我是否忽略了什么?通过这种方式,我是否失去了闭包表的主要优势之一?有没有人看到这样做的任何内在风险可能会在以后困扰我?