在一个表中维护多个树有哪些问题?
拥有多个树的动机是在一开始插入节点时避免对所有节点进行过多更新。每棵树都是完全独立的实体。
示例表:
tree_id | id | lft | rgt | parent_id | various fields . . .
---------------------------------------------------------------------
1 | 1 | 1 | 4 | NULL | ...
1 | 2 | 2 | 3 | 1 | ...
2 | 3 | 1 | 4 | NULL | ...
2 | 4 | 2 | 3 | 3 | ...
在一个表中存储多个树是很常见的,只需确保组成一个树的值存储正确,否则会导致数据完整性问题,如无意义的树构造。
假设我们有一个二叉树(就像您的例子中的那个)。如果一棵树有5英尺深。(2^n)-1)=(2^5-1)个节点将存在或数据库中的31行,这是微不足道的。即使在10英尺深的地方,它仍然是一小排,但会是一棵相当巨大的树。因此,如果有多个树,X,就会有X((2^n)-1)=行。。。在数据库中,这还不错。因此,一张表中可能存在一百棵树,并且只有10万行,这相对较小。
此外,假设构建的每一棵新树都存储在自己的表中,那么很快,随着时间的推移,数据库就会充满相当多的表,以匹配现有的树的数量。而且,制作不需要的额外表似乎不是一个好主意,这会在代码端增加不必要的复杂性,从而不得不访问这些多个表。
详细地看一下您的表,它在列方面看起来不太正确,但我相信这个表示例只是快速抛出的东西,向我们展示了您的意思。
tree_id, node_id, left_node_id, right_node_id, various_fields...
嗯,一定要索引那些_id字段。