php - 具有分层数据的多棵树(左值和右值)

标签 php mysql database hierarchy nested-sets

在单个表中维护多个树有哪些相关问题?

拥有多棵树的动机是避免在开始时插入节点时对所有节点进行过多更新。每棵树都是完全独立的实体。

示例表:

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/

相关文章:

xml - 根据属性值从 SQL Server 2008 中删除 xml 节点

php - 当where子句的条件为假时,如何返回true?

php - 在 Prestashop 中的购物车摘要中显示产品功能

mysql - 如何在非阻塞环境中修复此 MySQL/Innodb 死锁问题?

MySQL 查找每组的最高结果

php - 无法使用 urldecode 从数据库获取信息

c# - 如何将数据库数据转换为 XML 文件

php - 指向支持 JBoss、Apache 和 Mysql 的云服务的指针

php - Yii2 或 Laravel5 是否弥补了 Codeigniter 中的弱点?

database - 如何将数据库字段的内容与文本文件的内容同步?