在数据库中实现可定制的树数据 struct (即具有未知级别数的树 struct )的最佳方法是什么?
在使用带有外键的表之前,我曾经这样做过一次.
您还看到了哪些其他实现,这种实现有意义吗?
在数据库中实现可定制的树数据 struct (即具有未知级别数的树 struct )的最佳方法是什么?
在使用带有外键的表之前,我曾经这样做过一次.
您还看到了哪些其他实现,这种实现有意义吗?
您提到了最常用的实现方法,即邻接列表:
还有其他模型,包括materialized 路径和嵌套集:
Joe Celko写了一本关于这个主题的书,从一般SQL的Angular 来看,这是一本很好的参考书(在上面的嵌套集合文章链接中提到).
此外,伊兹克·本·甘恩在他的书《Microsoft SQL Server 2005内部:T-SQL查询》中对最常见的选项有很好的概述.
Select 模型时要考虑的主要因素是:
1) struct 变化的频率——树的实际 struct 变化的频率.一些模型提供了更好的 struct 更新特性.然而,将 struct 更改与其他数据更改分开是很重要的.例如,您可能希望对公司的组织 struct 图进行建模.有些人会将其建模为邻接列表,使用员工ID将员工链接到他们的主管.这通常是一种次优方法.一种通常效果更好的方法是将组织 struct 与员工本身分开建模,并将员工作为 struct 的一个属性进行维护.这样,当员工离开公司时,组织 struct 本身不需要改变,只需要与离开的员工建立联系.
2) 树是写重还是读重——有些 struct 在读取 struct 时工作得很好,但在写入 struct 时会产生额外的开销.
3) 你需要从 struct 中获取哪些类型的信息?有些 struct 擅长提供有关 struct 的特定类型的信息.示例包括查找 node 及其所有子 node 、查找 node 及其所有父 node 、查找满足特定条件的子 node 数等.您需要知道需要从 struct 中获取哪些信息,以确定最适合您需要的 struct .