如何在sql中存储树结构?

2024-06-01 20:47:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我使用sqlite的模式,我不确定这是否是在sql中创建树结构的好方法,因为我必须遍历很多次才能获得整个树,而不是基于top comment提取整个树并用python构建树。有人能给我一些建议吗。在

BEGIN;
CREATE TABLE "tree_comment" 
    ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
     "text" text NOT NULL, 
     "parent_id" integer NULL REFERENCES "tree_comment" ("id"));
CREATE INDEX "tree_comment_6be37982" ON "tree_comment" ("parent_id");

COMMIT;

Tags: 方法textidtreesqlitesqltopcreate
3条回答

您的示例是在关系数据库中表示分层数据的正确方法。您应该使用Recursive Common Table Expressions(rcte)来查询表。在

在过去,您必须使用嵌套集或物化路径,但rcte是专门为修复其缺陷而构建的,所以请使用它。在

SQLite支持递归CTE,它是SQL:1999标准。在

下面是一个查询示例:

http://blog.databasepatterns.com/2014/02/trees-paths-recursive-cte-postgresql.html

由于数据结构在关系数据库中没有自然的表示,根据用例和数据库,有几种方法可以存储它们。在

在第48张幻灯片的this presentation中,描述了两种方法。在

我最喜欢的是materialized path,它非常简单而且功能强大。在

希望有帮助。在

是的,在关系数据库中表示树的传统方法与您在示例中所做的一样:让树中的每个节点都有一个ID和一个父节点标识,并在这两个节点上创建索引以快速检索。在

RDB中树的问题不是创建它们,而是高效地检索它们。标准SQL中没有查询可以检索整个树或子树。你必须写一个循环。在

相关问题 更多 >