在单个表中维护多个树有哪些相关问题?
拥有多棵树的动机是避免在开始时插入节点时对所有节点进行过多更新。每棵树都是完全独立的实体。
示例表:
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) = rows...,这还不错。因此,一张表中可能存在一百棵树,并且只有 10 万行,这是相对较小的。
此外,假设每棵新构建的树都存储在自己的表中,那么随着时间的推移,数据库很快就会被大量表填满,以匹配现有树的数量。制作不需要的额外表似乎不是一个好主意,这会在代码端增加不必要的复杂性以访问这些多个表。
详细查看您的表格,它在列方面看起来不太正确,但我确信表格示例只是为了向我们展示您的意思而快速抛出的东西。
tree_id, node_id, left_node_id, right_node_id, various_fields...
嗯,一定要索引那些 _id 字段。
关于php - 具有分层数据的多棵树(左值和右值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461100/