多父母层次结构递归

问题描述 投票:1回答:1
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个回答
4
投票

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

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

可能需要您描述一个现实世界的情况,确切地描述您想要的,以及您不想要的实际情况。

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

有许多父母和许多孩子制作的是网而不是树。无论您沿着树的哪个方向行驶,都有多条路线。

© www.soinside.com 2019 - 2024. All rights reserved.