这是我使用sqlite的架构,我不确定这是否是在sql中创建树结构的好方法,因为我必须遍历很多时间来获取整个树,而不是基于顶层注释提取整个树基础并在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;
答案 0 :(得分:2)
您的示例是在关系数据库中表示分层数据的正确方法。您应该使用Recursive Common Table Expressions(R CTE)来查询表。
过去,您必须使用嵌套集或物化路径,但R CTE是专门用于修复其缺陷的,所以请使用它。
SQLite支持递归CTE,它是SQL:1999标准的一部分。
以下是一个示例查询:
http://blog.databasepatterns.com/2014/02/trees-paths-recursive-cte-postgresql.html
答案 1 :(得分:0)
由于数据结构在关系数据库中没有自然表示,因此有几种方法可以根据用例和数据库来存储它们。
在this presentation中,从幻灯片48开始,描述了两种方法。
我最喜欢的是materialized path,这非常简单且有能力。
希望它有所帮助。
答案 2 :(得分:0)
是的,在关系数据库中表示树的传统方法与在示例中一样:让树中的每个节点都有一个ID和一个parent_ID。在两者上创建索引以便快速检索。
RDB中树的问题不是创建它们,而是有效地检索它们。标准SQL中没有查询将检索整个树或子树。你必须写一个循环。