标签: hierarchical-data

处理数据库中的层次结构数据

我很想知道处理层次结构的最佳方法(最佳实践)是关于数据库设计的.这是我通常如何处理它们的一个小例子.

节点表

NodeId int PRIMARY KEY
NodeParentId int NULL
DisplaySeq int NOT NULL
Title nvarchar(255)
Run Code Online (Sandbox Code Playgroud)

祖先表

NodeId int
AncestorId int
Hops int
Run Code Online (Sandbox Code Playgroud)

使用NodeId上的索引,AncestorId,Hops

表格如下所示:

节点表

NodeId    NodeParentId    DisplaySeq    Title
1         NULL            1             'Root'
2         1               1             'Child 1'
3         1               2             'Child 2'
4         2               1             'Grandchild 1'
5         2               2             'Grandchild 2'
Run Code Online (Sandbox Code Playgroud)

祖先表

NodeId    AncestorId    Hops
1         NULL          0
1         1             0
2         1             1
2         2             0
3         1             1
3         3             0
4         1             2
4         2 …
Run Code Online (Sandbox Code Playgroud)

sql hierarchical-data

7
推荐指数
3
解决办法
2494
查看次数

将数据库结果转换为数组

我刚刚为这个幻灯片共享中的第70页所示的组织查询分层数据的"Closure表"方法做了更新/添加/删除部分:http://www.slideshare.net/billkarwin/sql-antipatterns-strike -背部

我的数据库看起来像这样:

表分类:

ID         Name
1          Top value
2          Sub value1
Run Code Online (Sandbox Code Playgroud)

表类别树:

child     parent     level
1          1         0
2          2         0  
2          1         1  
Run Code Online (Sandbox Code Playgroud)

但是,我有一个问题是将完整的树从单个查询中作为多维数组返回.

这是我想要回来的:

 array (

 'topvalue' = array (
                     'Subvalue',
                     'Subvalue2',
                     'Subvalue3)
                     );

 );
Run Code Online (Sandbox Code Playgroud)

更新: 找到此链接,但我仍然很难将其转换为数组:http: //karwin.blogspot.com/2010/03/rendering-trees-with-closure-tables.html

Update2: 我现在可以为每个类别添加深度,如果可以提供任何帮助的话.

php mysql tree hierarchical-data

7
推荐指数
2
解决办法
5601
查看次数

将平面数组转换为多维数组

我有一个带有树数据的数组(通过父ID).我想将其转换为多维数组.实现这一目标的最佳方法是什么?那有什么短暂的功能吗?

源数组:

$source = array(
    '0' => array(
            'Menu' => array(
                    'id' => 45
                    'name' => 'Home'
                    'parent_id' => 1
            )
    )
    '1' => array(
            'Menu' => array(
                    'id' => 47
                    'name' => 'Get started'
                    'parent_id' => 1
            )
    )
    '2' => array(
            'Menu' => array(
                    'id' => 72
                    'name' => 'Attributes'
                    'parent_id' => 71
            )
    )
    '3' => array(
            'Menu' => array(
                    'id' => 73
                    'name' => 'Headings'
                    'parent_id' => 71
            )
    )
    '4' => array(
            'Menu' => array( …
Run Code Online (Sandbox Code Playgroud)

php arrays nested multidimensional-array hierarchical-data

7
推荐指数
1
解决办法
5016
查看次数

以最佳方式存储分层数据:NoSQL 或 SQL

我正在处理分层数据,如树结构。我想知道将它们存储在数据库中的最佳方式是什么。

我从 MySQL 中的邻接表开始。但随着数据的增加,性能似乎会下降。我有大约 20,000 行存储在具有父子关系的 MySQL 表中,并且将来还会增加。获取数据需要很长时间,因为我必须根据树的深度编写许多自连接。

所以我正在寻找存储此类数据的最佳方法。在一次地方,我发现嵌套集比邻接列表更好。然后我被建议考虑 NoSQL,如果这能解决我的问题。所以我现在很困惑是继续使用 SQL 还是进入 No SQL,或者是否有其他最好的方法来处理此类数据。

那么有人可以建议我什么是最好的方法吗?

mysql nested-sets adjacency-list hierarchical-data nosql

7
推荐指数
1
解决办法
7675
查看次数

这些SQL闭包表示例有什么区别?

我在围绕SQL闭包表时遇到了一些困难,并希望在理解我找到的一些示例时提供一些帮助.

假设我有一个sample_items带有以下分层数据的表:

id   name                   parent_id
1    'Root level item #1'   0
2    'Child of ID 1'        1
3    'Child of ID 2'        2
4    'Root level item #2'   0
Run Code Online (Sandbox Code Playgroud)

树结构应该是这样的:

id
| - 1 
|   | - 2
|       | - 3
| - 4
Run Code Online (Sandbox Code Playgroud)

为了便于查询树(例如找到特定id的所有后代),我有一个表,sample_items_closure使用Bill Karwin在这个优秀的SO帖子中描述的方法.我还使用可选path_length列来在需要时查询直接子或父.如果我正确理解这个方法,我的闭包表数据将如下所示:

ancestor_id   descendant_id   path_length
1             1               0
2             2               0
1             2               1
3             3               0
2             3               1
1             3               2
4             4               0
Run Code Online (Sandbox Code Playgroud)

sample_items …

mysql tree recursion hierarchical-data transitive-closure-table

7
推荐指数
1
解决办法
1337
查看次数

从Laravel上的数据库中检索所有父/子记录(分层数据)

对于类似遗留票证的系统,我有以下简化的数据库表结构.

messages
  id         INT
  parent_id  INT
  content    TEXT
  answer     TEXT
  ...
Run Code Online (Sandbox Code Playgroud)

在列表中,我显示所有消息.单击消息时,我会显示其答案等.

问题是:现在我需要所有的表结构的父母孩子的关系到这条消息,以及这个消息在树中的位置.我怎样才能从数据库中检索它们?

我正在使用Laravel,但原始SQL也可以帮助我找到方向.


例:

?????????????????????????????????????????????????????????????
? id ? parent_id ?        content         ?     answer      ?
?????????????????????????????????????????????????????????????
?  1 ? NULL      ? Hi, I have a problem   ? I can't help    ?
?  2 ? 1         ? The problem persists   ? Ok, what is it? ?
?  3 ? 2         ? Nevermind, I got this  ? Oh, well.       ?
?  4 ? 3         ? Problem is …

php mysql hierarchy hierarchical-data laravel

7
推荐指数
1
解决办法
3550
查看次数

层次结构数据移位

在运行递归函数以获取员工/经理家族树之后 - 进一步要求保留整体经理结构.

所以我想象输入数组看起来像这样

[["Employee A", "1000", "Employee B", "1001", "Employee C", "1002"],
["Employee D", "1003", "Employee C", "1002"]]
Run Code Online (Sandbox Code Playgroud)

并且输出数组需要看起来像这样

[["Employee A", "1000", "Employee B", "1001", "Employee C", "1002"],
["Employee D", "1003", null, null, "Employee C", "1002"]]
Run Code Online (Sandbox Code Playgroud)

需要以这种方式对层次结构进行排序,以表明员工C始终保留高级经理的角色

public void refactorArray(String jsonData) throws Exception {
    JSONArray array = new JSONArray(jsonData);
    for (int i = 0; i < array.length(); i++) {

        //flag previous position of grandfather manager and name/id

        // if previous position does not match current position - do logic …
Run Code Online (Sandbox Code Playgroud)

java hierarchical-data

7
推荐指数
1
解决办法
225
查看次数

r - 来自子/父关系的分层数据帧

我有一个子 - 父数据.我想要转换为一个包含所有级别和级别编号的完整分层列表.下面的示例数据分为三个级别,但可能更多.我可以使用什么功能来转换数据?

资源:

data.frame(name = c("land", "water", "air", "car", "bicycle", "boat", "balloon",
  "airplane", "helicopter", "Ford", "BMW", "Airbus"), parent = c(NA, NA, NA, 
  "land", "land", "water", "air", "air", "air", "car", "car", "airplane"))

         name   parent
1        land     <NA>
2       water     <NA>
3         air     <NA>
4         car     land
5     bicycle     land
6        boat    water
7     balloon      air
8    airplane      air
9  helicopter      air
10       Ford      car
11        BMW      car
12     Airbus airplane
Run Code Online (Sandbox Code Playgroud)

目的地:

data.frame(level1 = c("land", "water", "air", "land", "land", "water", "air", …
Run Code Online (Sandbox Code Playgroud)

r hierarchy hierarchical-data

7
推荐指数
2
解决办法
2795
查看次数

sql选择父子递归在一个字段中

我不知道如何选择查询递归..

 id     idparent    jobNO
--------------------------------
  1         0         1
  2         1         2
  3         1         3
  4         0         4
  5         4         5
  6         4         6
Run Code Online (Sandbox Code Playgroud)

如何使用SqlServer这样的结果

 id     idparent    jobNO   ListJob
----------------------------------------
  1         0         1        1
  2         1         2        1/2
  3         1         3        1/3
  4         0         4        4
  5         4         5        4/5
  6         5         6        4/5/6
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursive-query hierarchical-data

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

MySQL Recursive从父级获取所有子级

我有这种情况使用Mysql上的递归查询在一个表上找到lv 2和lv3子...
我正在使用的数据库结构:

id name parent
1    A    0
2    B    0
3    C    0
4    D    1
5    E    1
6    F    2
7    G    2
8    H    3
9    I    3
10   J    4
11   K    4
Run Code Online (Sandbox Code Playgroud)

我期望的结果,当过滤数据时,id = 1,它将产生我期待的结果.

id name parent
4   D     1
5   E     1
10  J     4
11  K     4
Run Code Online (Sandbox Code Playgroud)

或者这就是例证. 插图

我一直在寻找各地,并阅读这个http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,但我没有找到我正在寻找的结果..
任何帮助将不胜感激, 谢谢

mysql hierarchy recursive-query hierarchical-data

7
推荐指数
3
解决办法
2万
查看次数