天天看點

php設計方案,MooPHP無限分類設計方案

前言

無限分類其專業的命名就是存儲樹形結構,這是一個很常見的問題,但是有很多種解決方案。由于在PHP開發中涉及到關系型資料的存儲,除非使用一種像XML的資料庫,否則關系資料庫中的表都不是層次結構的,他們隻是一個平坦的清單。是以你必須找到一種把層次資料庫轉化的方法。

常用樹形結構存儲方案比較:

鄰接清單模式

在SQL相關的教程文獻中關于存儲樹形結構的示例,我們最常看到的就是鄰接清單模式(Adjacency List Model)。

詳細實作方式可自行搜尋,這種也是在PHP開發中最常用到的方法。

優點:鄰接清單模型很容易了解,代碼也很簡單。

缺點:嵌套查詢SQL所耗費的時間,尤其是當分類的深度加深,查詢的次數會以級數的速度增加。

優化:通過将整個樹形結構緩存到文本來減輕資料庫存儲的壓力。

改進前序周遊樹

這種算法是目前應用較多的邏輯算法,他對分類深度和分類資料較多的屬性分類有設計上的優勢,在曾經做過的學生學分管理的項目中用過(學院分類、專業分類、班級分類、學生并且每個分類的資料都很多)。

優點:取出任意節點的樹形結構都隻需一次查詢即可實作。

缺點:資料庫存儲的資料不透明,不利于調試

MooPHP設計方案

經過權衡采用第一種和路徑優化的方式,具體實作不寫了,等完成之後寫詳細的文檔。

推薦資料

這篇文章和後面的摘要都不錯,推薦下。

http://shiningray.cn/hierarchical-data-database.html

http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html

http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html

http://xml.apache.org/xindice/

http://www.ccvita.com/315.html

http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html

[1] http://www.sitepoint.com/glossary.php?q=C#term_28

[2] http://www.sitepoint.com/glossary.php?q=X#term_3

[3] http://www.sitepoint.com/glossary.php?q=P#term_1

[4] http://www.sitepoint.com/glossary.php?q=P#term_50

[5] http://www.sitepoint.com/glossary.php?q=%23#term_72

[6] http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci537290,00.html

[7] http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html

[8] http://xml.apache.org/xindice/

[9] http://www.strath.ac.uk/IT/Docs/Ccourse/subsection3_9_5.html

版權聲明:原創作品,歡迎轉載,轉載時請務必以超連結形式标明文章原始位址、作者資訊和本聲明。