这是我使用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;
您的示例是在关系数据库中表示分层数据的正确方法。您应该使用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中没有查询可以检索整个树或子树。你必须写一个循环。在
相关问题 更多 >
编程相关推荐