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中的维度,如果表具有自已的主键-子键关系,该结构将自动向下钻取。
使用您的示例数据,我实际上得到了另一棵树...
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
可能需要您描述一个现实世界的情况,确切地描述您想要的,以及您不想要的实际情况。
我的典型经验是,出于报告目的,树中的任何节点都应该只有一个父节点,但是可能有很多子节点。这意味着,当爬上一棵树时,您只有一条路线,而当爬下一棵树时,数据将分成子节点。
有许多父母和许多孩子制作的是网而不是树。无论您沿着树的哪个方向行驶,都有多条路线。