Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据库中的分层树-不同的数据库服务器类型_Sql_Hierarchical Data - Fatal编程技术网

SQL数据库中的分层树-不同的数据库服务器类型

SQL数据库中的分层树-不同的数据库服务器类型,sql,hierarchical-data,Sql,Hierarchical Data,我必须将层次结构树存储到SQL数据库中。在网站上搜索之后,我找到了一些解决方案,但我仍然需要一些帮助 简而言之,我有“输入”,必须根据输入信号的类型、在树中的位置和时间路由到输出 为了使它更复杂一点,我要求它应该与MSSQL server 2005、MySQL和SQL lite一起工作。也许我可以在某个时候放弃SQLLite需求,但现在我必须处理它 对树执行的最常见操作是,我必须从下到上搜索根节点,以查找附加了一些信息的节点 在我看来,实现这一点的最简单方法似乎是创建一个表,其中引用了父节点,并

我必须将层次结构树存储到SQL数据库中。在网站上搜索之后,我找到了一些解决方案,但我仍然需要一些帮助

简而言之,我有“输入”,必须根据输入信号的类型、在树中的位置和时间路由到输出

为了使它更复杂一点,我要求它应该与MSSQL server 2005、MySQL和SQL lite一起工作。也许我可以在某个时候放弃SQLLite需求,但现在我必须处理它

对树执行的最常见操作是,我必须从下到上搜索根节点,以查找附加了一些信息的节点

在我看来,实现这一点的最简单方法似乎是创建一个表,其中引用了父节点,并首先选择底部节点,检查信息是否附加到它;如果没有,请选择父项并重复

虽然简单且不需要任何特殊的数据库功能,但它需要许多查询。节点嵌套最多有6个级别,预计最多14个级别

附加到节点的信息包含某种类型的输入和我必须查找的输出之间的时间(天/周)相关链接。下面是一个例子;当“节点4”上的输入1被激活时,我想发现输出应为“4”,如果在同一节点上激活输入8,则输出应为“0”

我需要寻找更多关于这种结构的背景信息,或者有人知道如何为这个问题设计数据库结构吗


编辑:


根据小鲍勃的回答,我将做一个测试。但是,如果有人想让我在一个查询中为父对象重复选择(…),等等,我非常感兴趣。

我建议您阅读Joe Celko关于嵌套集的工作。有关讨论和有用的链接,请参见

谢谢。我以前已经找到了那个帖子。但这篇文章有很多选择、链接和建议。对我来说,这有点太多了,让我来监督该往哪个方向走。你有具体的解决方案吗?最好在这里解释一下。基本上,每个节点都有一个父节点,它也有一个“左”和“右”字段。这些值最初是通过按顺序遍历树的最左侧和最下方来按顺序分配的,因此root.Left为1,node1.Left为2,以此类推,最后为root.Right=(节点数)*2。如果子节点的左值介于(祖先)节点的左值和右值之间,则节点是子节点的祖先(父节点、父节点等)。最近的祖先具有最大的左值-因此不涉及多个联接或迭代。我应该补充…这种方法提供了非常快速的查找。缺点是每当层次结构更改时,必须更新整个树中的左值和右值,如果树非常大且频繁更改,这可能是一个问题。谢谢,我要做个测试。我现在明白了这个原则。测试必须告诉我更新是否足够快。更新1M记录并不频繁,但似乎是一个非常缓慢的操作。