【问题标题】:How to store a tree in SQL database如何在 SQL 数据库中存储一棵树
【发布时间】:2017-04-17 22:20:11
【问题描述】:

我必须在数据库中存储一棵树,那么最好的方法是什么?展示你使用的方法并说出它的优缺点。 (我使用的是 SQL Server 2005)

【问题讨论】:

    标签: sql sql-server tsql hierarchical-data


    【解决方案1】:

    我发现SQL Anti-patterns 中的讨论非常有帮助,因为它还侧重于每个实现的缺点。

    另外,this presentation 中的幻灯片 48-77 重申了分析。

    归根结底,没有通用树之类的东西,也没有 SQL 树的灵丹妙药。 您必须问自己有关数据的问题,选择、修改它们的方式和数量、移动分支等,并根据这些答案实施合适的解决方案。

    【讨论】:

      【解决方案2】:

      嗯,最简单的方法是让记录有一个 ParentID 列,这样它就知道哪条记录是它的父记录。这是一个非常标准的做法。例如,在线商店可能具有产品类别的层次结构。每个类别都有一个 ParentID。示例:服装数据库中的“牛仔裤”类别可能将“裤子”作为父类别。如果您想要一个记录来指示哪些是它的孩子,这会有点困难,除非您限制孩子的数量。如果你想要一个二叉树,你可以有 LeftChildID 和 RightChildID 列。如果您允许任意数量的子项,则可以有一个以逗号分隔 ID 的 Children 列(例如 1,4,72,19),但这会使查询变得相当困难。如果您的数据库允许列中的数组类型,您可能可以使用数组而不是分隔字符串,这很容易查询 - 但我不确定 MS SQL Server 是否支持。

      除此之外,这取决于您要建模的数据类型,以及您计划对这棵树执行的操作类型。

      【讨论】:

        【解决方案3】:

        我过去曾通过在 SQL 中将数据存储为 xml 来做到这一点。

        【讨论】:

          猜你喜欢
          • 2012-03-13
          • 1970-01-01
          • 2012-06-25
          • 1970-01-01
          • 1970-01-01
          • 2020-11-01
          • 2016-05-19
          • 2014-09-12
          • 2023-03-17
          相关资源
          最近更新 更多