前言
無限分類其專業的命名就是存儲樹形結構,這是一個很常見的問題,但是有很多種解決方案。由于在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
版權聲明:原創作品,歡迎轉載,轉載時請務必以超連結形式标明文章原始位址、作者資訊和本聲明。