我必须在关系数据库中表示以下结构。有五个层次结构级别:A、B、C、D。层级之间的关系总是一对多的,所以A有很多B,但是每个B都属于某个A。这同样适用于B,C,D,E。到目前为止, B有A作为外键,C有B作为外键,依此类推。
A 1
/ |
B 1 2
/ | |
C 1 2 3
/| | |
D 1 2 3 4
事情变得复杂的地方是我必须从B向下表示实例。对于某个B,我可以有许多不同的实例。所有实例都有不同的数据,但下面的树结构相同。
假设我有MyB
instancefo
和 instance ba
。现在fo
并且ba
必须有相同数量的孩子,他们的孩子也必须有相同数量的孩子。在一种情况下,子树将具有某些值,而在另一种情况下,子树将具有不同的值,但子树具有相同的结构。
因为可以有很多B,所以可以有很多子树结构,但是树的深度总是限制为四个。
A 1
/ | \
B 1 2fo 2ba
/ | | |
C 1 2 3 4
/| | |\ |\
D 1 2 3 4 5 6 7
如果2fo
有一个孩子和两个孙子2ba
也必须有一个孩子和两个孙子。
如何在关系数据库中干净地映射此结构?
编辑
比评论中更详细地回答X-Zeros 问题。如果有人将一个节点添加到 C2,然后再添加到 C3,则结果必须如下所示:
A 1--------
/ | |
B 1 2fo 2ba
/ | | |
C 1 2 3---- 4----
/| | |\ | |\ |
D 1 2 3 4 5 9 6 7 10