【问题标题】:Multiple parents hierarchy recursion多父层次递归
【发布时间】:2011-10-31 11:12:59
【问题描述】:
Master Table
===========
ID NAME
1   A
2   B
3   C
4   D
5   E

具有多个父级的层次结构表(请注意,由于重复值,两者都不能是主列):

Relations Table
================
ChildID ParentID  
   3        1
   3        2
   4        3
   4        2
   5        4

层次结构变得像(它可能并不总是这样线性):

  1         2
  |         |
  3         3
  |         |
  4         4
  |         |
  5         5

出于报告目的,我需要递归层次结构格式的数据,以便我可以深入了解它。如果我可以从现有数据本身获得下钻功能,我没有得到(似乎不可行,因为由于重复值,我无法创建递归父子关系)。

你有什么想法吗?我的目标是最终将此结构用作 SSAS 中的一个维度,如果表具有自主键-子键关系,它会自动向下钻取。

【问题讨论】:

    标签: sql database-design ssas


    【解决方案1】:

    使用您的示例数据,我实际上得到了一棵不同的树...

    Relations Table            Tree
    ================          =======
    ChildID ParentID           1   2
       3        1               \ /|
       3        2                3 |
       4        3                 \|
       4        2                  4
       5        4                  |
                                   5
    

    你真的想要两棵独立的树吗?如果是这种情况,您可以引入一个额外的字段,例如树 id...

    Relations Table              Tree1     Tree2
    =======================      =====     =====
    TreeID ParentID ChildID        
       1     NULL      1           1         2
       1      1        3           |         |
       1      3        4           3         3
       1      4        5           |         |
       2     NULL      2           4         4
       2      2        3           |         |
       2      3        4           5         5
       2      4        5
    

    如果没有一些额外的信息,您总是会遇到分支拆分和合并的问题,而没有一组非常完善的约束。例如,如果您想要两个 1-3-4-5 和 2-3-4-6 的线性树,那么您当前的模型将具有这个...

    Relations Table            Tree
    ================          =======
    ParentID ChildID           1   2
       1        3               \ /
       2        3                3 
       3        4                |
       4        5                4
       4        6               / \
                               5   6
    

    您现在遇到的问题是,有四个线性路径...
    - 1-3-4-5
    - 1-3-4-6
    - 2-3-4-5
    - 2-3-4-6

    您可能需要描述一个真实世界的情况,确切地说您想要从中得到什么,以及您不希望从中得到什么。


    我的典型经验是,出于报告目的,树中的任何节点都应该只有一个父节点,但可能有很多子节点。这意味着当你爬上一棵树时,你只有一条路线,而当爬下一棵树时,数据会分成子节点。

    拥有许多父母和许多孩子会形成一张网而不是一棵树。无论您穿过树的哪个方向,您都有多条路线。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2013-11-22
      相关资源
      最近更新 更多