MooPHP无限分类设计方案
[b]前言[/b]无限分类其专业的命名就是存储树形结构,这是一个很常见的问题,但是有很多种解决方案。由于在PHP开发中涉及到关系型数据的存储,除非使用一种像XML的数据库,否则关系数据库中的表都不是层次结构的,他们只是一个平坦的列表。所以你必须找到一种把层次数据库转化的方法。
常用树形结构存储方案比较:
[b]邻接列表模式[/b]
在SQL相关的教程文献中关于存储树形结构的示例,我们最常看到的就是邻接列表模式(Adjacency List Model)。
详细实现方式可自行搜索,这种也是在PHP开发中最常用到的方法。
优点:邻接列表模型很容易理解,代码也很简单。
缺点:嵌套查询SQL所耗费的时间,尤其是当分类的深度加深,查询的次数会以级数的速度增加。
优化:通过将整个树形结构缓存到文本来减轻数据库存储的压力。
[b]改进前序遍历树[/b]
这种算法是目前应用较多的逻辑算法,他对分类深度和分类数据较多的属性分类有设计上的优势,在曾经做过的学生学分管理的项目中用过(学院分类、专业分类、班级分类、学生并且每个分类的数据都很多)。
优点:取出任意节点的树形结构都只需一次查询即可实现。
缺点:数据库存储的数据不透明,不利于调试
[b]MooPHP设计方案[/b]
经过权衡采用第一种和路径优化的方式,具体实现不写了,等完成之后写详细的文档。
[b]推荐资料[/b]
这篇文章和后面的摘要都不错,推荐下。
[url=http://shiningray.cn/hierarchical-data-database.html]http://shiningray.cn/hierarchical-data-database.html[/url]
[url=http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html]http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html[/url]
[url=http://xml.apache.org/xindice/]http://xml.apache.org/xindice/[/url]
[url=http://www.ccvita.com/315.html]http://www.ccvita.com/315.html[/url]
[url=http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html]http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html[/url]
[1] [url=http://www.sitepoint.com/glossary.php?q=C#term_28]http://www.sitepoint.com/glossary.php?q=C#term_28[/url]
[2] [url=http://www.sitepoint.com/glossary.php?q=X#term_3]http://www.sitepoint.com/glossary.php?q=X#term_3[/url]
[3] [url=http://www.sitepoint.com/glossary.php?q=P#term_1]http://www.sitepoint.com/glossary.php?q=P#term_1[/url]
[4] [url=http://www.sitepoint.com/glossary.php?q=P#term_50]http://www.sitepoint.com/glossary.php?q=P#term_50[/url]
[5] [url=http://www.sitepoint.com/glossary.php?q=%23#term_72]http://www.sitepoint.com/glossary.php?q=%23#term_72[/url]
[6] [url=http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html]http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html[/url]
[7] [url=http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html]http://www.evolt.org/article/Fou ... /17/4047/index.html[/url]
[8] [url=http://xml.apache.org/xindice/]http://xml.apache.org/xindice/[/url]
[9] [url=http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html]http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html[/url] [smi-love] :lol 学习了
页:
[1]
