当前位置:  开发笔记 > 编程语言 > 正文

表示在PHP中使用的深度树的最佳方法(MySQL/XML /?)

如何解决《表示在PHP中使用的深度树的最佳方法(MySQL/XML/?)》经验,为你挑选了1个好方法。

我目前正在重写一个应用程序,教师可以在线计划课程.

该应用程序指导教师完成为学生创建工作单元的过程.该工具目前在三个州使用,但我们计划比这更大.

该应用程序的主要绘图卡之一是所有学生成果都预先加载到系统中.这允许教师搜索或浏览并选择在每个工作单元中将满足哪些结果.

当我最初设计系统时,我假设所有学生成绩都遵循类似的层次结构.也就是说,有名为嵌套容器,然后是结果.

我输入的原始结果是三层.因此我的数据库具有以下结构:

=========================

粗体表格

H1

id,名字

H2

id,parent___id(h1_id),名称

H3

id,parent___id(h2_id),名称

结果

id,parent___id(h3_id),名称

=========================

除了显然无法添加n /级别的层次结构之外,此方法还使得在不递归查询数据库的情况下难以显示所有标准的列表.

一旦添加了学生成绩(及其家长类别),就没有理由以任何方式对其进行修改.主要要求是它们易于阅读且高效.

到目前为止,来自不同学校/州/国家的所有学生成绩都大致遵循了我的假设.情况可能并非总是如此.

当然,所有现有数据必须从当前数据库传输.

鉴于上述情况,我存储所有不同学生成绩的最佳方式是什么?我所拥有的一些想法如下所示.

在选择使用recusion或大量连接时,继续在数据库中使用4个表

使用嵌套集

XML(所有不同集合的全局XML文件或每个集合的XML文件)

Toby Hede.. 6

我不知道你实际上需要4个表.

如果您有一个跟踪parent_id的表和一个级别,您可以拥有无​​限级别.

结果

id,parent_id,级别,名称

您可以使用递归来跟踪任何特定元素的树(您实际上不需要级别,但使用它可以更容易查询).

替代方案是嵌套集.在这种情况下,您仍然会合并到一个表中,但使用set stuff来跟踪级别.

使用哪一个取决于您的应用程序.

读密集型:嵌套集

写密集型:父树式的东西

这是因为对于嵌套集,您可以使用单个查询检索整个树,但每次插入新节点时都需要重新排序整个树.

只跟踪parent_id时,可以单独移动或删除节点.

PS:我对XML投了反对票.您有相同的递归问题,加上解析数据的开销以及将其存储在db或文件系统中(这将导致并发问题).



1> Toby Hede..:

我不知道你实际上需要4个表.

如果您有一个跟踪parent_id的表和一个级别,您可以拥有无​​限级别.

结果

id,parent_id,级别,名称

您可以使用递归来跟踪任何特定元素的树(您实际上不需要级别,但使用它可以更容易查询).

替代方案是嵌套集.在这种情况下,您仍然会合并到一个表中,但使用set stuff来跟踪级别.

使用哪一个取决于您的应用程序.

读密集型:嵌套集

写密集型:父树式的东西

这是因为对于嵌套集,您可以使用单个查询检索整个树,但每次插入新节点时都需要重新排序整个树.

只跟踪parent_id时,可以单独移动或删除节点.

PS:我对XML投了反对票.您有相同的递归问题,加上解析数据的开销以及将其存储在db或文件系统中(这将导致并发问题).

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有