sql - 在 SQL 中对固定深度树建模

标签 sql postgresql database-design tree

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

如果这棵树的深度是固定的,那么通过将树的每一层建模为一张表来设计应用程序是否更好?还是考虑任意深度(例如邻接列表或嵌套集)来处理它会更好?

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

最佳答案

使用具有众所周知的层次结构 (node_id, parent_id) 和附加列 depth 的单个表。该列在理论上是多余的,但在查询特定树级别时非常有帮助。当然,这样的结构使得使用递归查询从上到下遍历树变得容易(反之亦然)。

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

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

关于sql - 在 SQL 中对固定深度树建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489124/

相关文章:

sql - 在 postgres 中两个表之间的联接、聚合和转换

sql - 是否可以在多个更新中使用 WITH 子句而不将其复制到每个更新中?

database-design - 审计表数据库设计 : Does creating Audit Tables for Join Tables make sense

mysql - 功能依赖性澄清

python - Postgres : Retrieve records Sequentially at 5 seconds interval

ruby-on-rails - 用于 ruby​​ on Rails 开发的数据库建模 mac 应用程序

java - 装箱实体字段后强制 JPA 删除 NOT NULL 标志

sql - PIVOT SQL 数据和填空

sql - PK、FK约束设计

sql - 别名在 sql server 2008 r2 上不起作用