在SQL中对固定深度树进行建模

时间:2017-06-11 21:51:45

标签: sql postgresql database-design tree

我正在创建一个SQL模式来表示类似树的层次结构,但我知道这个树永远不会超过N级深度(其中N在应用程序的设计中是已知的,最有可能约4或5)。

如果修改了这棵树的深度,那么通过将树的每个级别建模为一个表来设计应用程序会更好吗?或者以任意深度(例如邻接列表或嵌套集)来处理它会更好吗?

我纯粹是从可查询性角度提问,例如报告树的各个层面。

1 个答案:

答案 0 :(得分:1)

使用具有众所周知的层次结构(node_id, parent_id)的单个表和另一列depth。该列在理论上是多余的,但在查询特定树级别时非常有用。当然,这样的结构可以使用递归查询轻松地从上到下(或反之亦然)遍历树。

create table a_tree(
    node_id int primary key, 
    parent_id int, 
    depth int
--  other columns
);

作为奖励,您可以在SO上找到许多此类表格的现成解决方案。