我正在创建一个SQL模式来表示类似树的层次结构,但我知道这个树永远不会超过N级深度(其中N在应用程序的设计中是已知的,最有可能约4或5)。
如果修改了这棵树的深度,那么通过将树的每个级别建模为一个表来设计应用程序会更好吗?或者以任意深度(例如邻接列表或嵌套集)来处理它会更好吗?
我纯粹是从可查询性角度提问,例如报告树的各个层面。
答案 0 :(得分:1)
使用具有众所周知的层次结构(node_id, parent_id)
的单个表和另一列depth
。该列在理论上是多余的,但在查询特定树级别时非常有用。当然,这样的结构可以使用递归查询轻松地从上到下(或反之亦然)遍历树。
create table a_tree(
node_id int primary key,
parent_id int,
depth int
-- other columns
);
作为奖励,您可以在SO上找到许多此类表格的现成解决方案。