我将使用d3js制作网络应用程序。它将有关于某事的树图,并且能够由用户添加/删除。我想知道如何在数据库上保存树数据。 数据可能是
var treeData = [
{
"name": "Top Level",
"parent": "null",
"children": [
{
"name": "Level 2: A",
"parent": "Top Level",
"children": [
{
"name": "Son of A",
"parent": "Level 2: A"
},
{
"name": "Daughter of A",
"parent": "Level 2: A"
}
]
},
{
"name": "Level 2: B",
"parent": "Top Level"
}
]
}
];
或
source,target
A1,A2
A2,A3
A2,A4
实际上,我使用哪种结构并不重要,因为数据可以将自己保存在我的mysql数据库中作为" TEXT"。但我想分析数据库中的树数据,如
select * from treemap where secondChildren = 'stackoverflow';
select * from treemap where root = 'c++' and lastChildren = 'java';
由于我的树形图将由用户动态制作,因此我无法创建与子节点一样多的字段。你们有什么想法吗? :)
答案 0 :(得分:2)
树关系很难存储在rdbms中。查看图表数据库。这些是专门用于表示数据库上的图形。这些应该是可扩展的,因为树也是一个图表,这可能是一个很好的选择。我最近去了一个关于图形数据库 - Neo4j的讨论 - 它非常有趣。它(或任何其他图形数据库)相对于rdbms的主要优点是它可以在图形中存储关系,并提供一种干净的语言来指定关系并对它们进行查询。
答案 1 :(得分:0)
正如Neo M Hacker所说,neo4j非常适合这类事情。
您使用mySQL进行了标记,因此,如果您仍然使用关系数据库,那么我所见过的最佳解决方案就是拥有一个"祖先"列,用于存储树上祖先ID的描述列表。这样你就可以一次找到整个子树或祖先列表。在ruby中,ancestry
gem是如何解决这个问题的一个很好的例子: