如何为未知深度的分层数据设计数据库表?

Muh*_*our 4 sql-server database-design hierarchical-data

我想创建具有未知深度的分层数据,如下所示:

创建类别和子类别,对于这些子类别,它们还将具有子类别等等。

子类别的深度未知,只能由用户在运行时完成。

我想的是将它们全部放在一个表中,并有一个父列保存父类别的 ID,如下所示:

在此处输入图片说明

我不知道这是否是正确的方法,但我看不到任何其他方法。

我进行了快速搜索,发现与 DB 表设计没有直接关系。

我正在使用 MS SQL Server 2012

小智 5

对此有 3 种常见方法和 1 种不太常见的方法。

1. 邻接表(你的方法) Pro -易于理解,在任何地方快速插入 Con -缓慢地递归查询未知深度的树

2. 嵌套集 Pro -查询速度快 缺点 -在列表中间插入很慢

3. 路径 - 类似hierarchyid(基本上是一个二进制路径) Pro - fast Con -像hierarchyid 通常长度有限 - 我认为hierarchyid 最大约为892 字节

4. Closure table Pro -最好的嵌套集和邻接表。快速插入和选择。 缺点 -一开始有点难以理解,但如果性能是一个问题,那么值得付出努力

资料来源:SQL 反模式 - Bill Karwin