相关疑难解决方法(0)

将平台解析成树的最有效/优雅的方法是什么?

假设您有一个存储有序树层次结构的平面表:

Id   Name         ParentId   Order
 1   'Node 1'            0      10
 2   'Node 1.1'          1      10
 3   'Node 2'            0      20
 4   'Node 1.1.1'        2      10
 5   'Node 2.1'          3      10
 6   'Node 1.2'          1      20
Run Code Online (Sandbox Code Playgroud)

这是我们所拥有的图表[id] Name.根节点0是虚构的.

                       [0] ROOT
                          /    \ 
              [1] Node 1          [3] Node 2
              /       \                   \
    [2] Node 1.1     [6] Node 1.2      [5] Node 2.1
          /          
 [4] Node 1.1.1

您将使用什么简约方法将其输出为HTML(或文本,就此而言)作为正确排序,正确缩进的树?

进一步假设你只有基本的数据结构(数组和散列图),没有带有父/子引用的花哨对象,没有ORM,没有框架,只有你的双手.该表表示为结果集,可以随机访问.

伪代码或普通英语是可以的,这纯粹是一个概念性的问题.

额外问题:在RDBMS中存储这样的树结构是否有根本更好的方法?


编辑和补充

回答一个评论者(Mark Bessey的)问题:根节点不是必需的,因为它永远不会被显示.ParentId = 0是表示"这些是顶级"的惯例.Order列定义了如何对具有相同父节点的节点进行排序.

我所谈到的"结果集"可以被描绘成一组哈希图(保留在该术语中).因为我的例子意味着已经存在.有些答案会加倍努力并首先构建它,但那没关系.

树可以任意深.每个节点可以有N个子节点.不过,我并没有考虑到"数百万条目".

不要将我选择的节点命名('Node 1.1.1')误认为是依赖的东西.节点同样可以称为"Frank"或"Bob",不暗示命名结构,这只是为了使其可读. …

sql algorithm tree recursion hierarchical-data

508
推荐指数
8
解决办法
11万
查看次数

关系数据库设计模式?

设计模式通常与面向对象的设计有关.
是否有用于创建和编程关系数据库的设计模式
许多问题肯定必须有可重复使用的解决方案.

示例包括表格设计,存储过程,触发器等模式......

是否有类似于martinfowler.com的此类模式的在线存储库?


模式可以解决的问题示例:

  • 存储分层数据(例如,具有类型的单个表与具有1:1密钥和差异的多个表...)
  • 存储具有可变结构的数据(例如,通用列vs xml vs分隔列...)
  • 非规范化数据(如何以最小的影响做到这一点......等等)

rdbms database-design design-patterns

273
推荐指数
6
解决办法
10万
查看次数

如何创建MySQL分层递归查询

我有一个MySQL表,如下所示:

id | name        | parent_id
19 | category1   | 0
20 | category2   | 19
21 | category3   | 20
22 | category4   | 21
......
Run Code Online (Sandbox Code Playgroud)

现在,我想要一个MySQL查询,我只提供id [例如说'id = 19']然后我应该得到它的所有子id [即结果应该有id',21,22']. ...而且,孩子们的等级不知道它可以变化....

另外,我已经有了使用for循环的解决方案.....如果可能的话,让我知道如何使用单个MySQL查询来实现相同的功能.

mysql sql recursive-query hierarchical-data

237
推荐指数
9
解决办法
25万
查看次数

树数据结构的数据库结构

在数据库中实现可自定义(意味着具有未知级别的树结构)树数据结构的最佳方法是什么?

在使用带有外键的表之前,我已经完成了这一次.

你能看到其他什么实现,这种实现是否有意义?

sql tree database-design

148
推荐指数
3
解决办法
14万
查看次数

什么类型的NoSQL数据库最适合存储分层数据?

什么类型的NoSQL数据库最适合存储分层数据?

比方说,我想存储具有树结构的论坛的帖子:

original post
 + re: original post
 + re: original post
   + re2: original post
     + re3: original post
   + re2: original post
Run Code Online (Sandbox Code Playgroud)

database tree hierarchical-data nosql

69
推荐指数
4
解决办法
5万
查看次数

什么时候不应该使用关系数据库?

除了google/bigtable场景之外,什么时候不应该使用关系数据库?为什么不,你应该用什么?(你学到了'艰难的道路'吗?)

sql database relational-database nosql

67
推荐指数
6
解决办法
2万
查看次数

如何在数据库中存储目录/层次结构/树结构?

如何在数据库中存储目录/层次结构/树结构?即MSSQL Server.

@olavk:看起来你没看过我自己的答案.我使用的方式比递归查询更好:)

pps 这是要走的路!

sql-server database-design sql-server-2005 tree-structure

59
推荐指数
3
解决办法
5万
查看次数

如何在SQL中表示数据树?

我正在编写一个由Tree和TreeNode组合而成的数据树结构.树将包含数据的根和顶级操作.我正在使用UI库以窗体形式呈现树,我可以将树绑定到TreeView.

我需要在DB中保存这个树和节点.保存树并获得以下功能的最佳方法是什么:

  1. 直观的实施.
  2. 轻松绑定.很容易从树移动到DB结构并返回(如果有的话)

我有两个想法.第一种是将数据序列化为表格中的单行.第二种是保存在表中,但是当移动到数据实体时,我将在更改的节点上松开表上的行状态.

有任何想法吗?

sql tree hierarchical-data

44
推荐指数
6
解决办法
4万
查看次数

在关系数据库中存储树结构的已知方法有哪些?

有一个"把FK放到你的父母"的方法,即每个记录指向它的父母.
这是一个难以阅读的操作,但很容易维护.

然后有一个"目录结构键"方法:

0001.0000.0000.0000 main branch 1
0001.0001.0000.0000 child of main branch one
etc
Run Code Online (Sandbox Code Playgroud)

这是超级易读,但难以维护.
有什么其他方式和他们的利弊/专业人士?

mysql tree design-patterns relational-database

41
推荐指数
3
解决办法
4万
查看次数

文件系统中目录的分层/树数据库

我想将存在于磁盘上的目录存储到数据库中,同时保持其层次结构/树结构.

这是一个无花果,

                         (ROOT)
                       /        \ 
                    Dir2        Dir3
                   /    \           \
                 Dir4   Dir5        Dir6
                 /          
               Dir7

我正在使用SQLite数据库.

  • 请建议我在SQLite数据库中存储上述结构的sql查询.

  • 和一个查询,以便在我选择一个目录时检索目录的完整路径.

即假设我选择Dir6然后我会得到像ROOT/Dir2/dir3/dir7这样的完整路径

sql sqlite tree path hierarchical-data

32
推荐指数
1
解决办法
1万
查看次数