Posted on 2006-07-08 10:35
oxl 閱讀(861)
評論(0) 編輯 收藏 所屬分類:
技術感語
鏈接:
http://forum.javaeye.com/viewtopic.php?t=15829
這是一個很有趣的東西,無限分類問題。
這里涉及到沉余數據的問題,如果不這樣做,我們沒法很快的對數據進行搜索。
我的方法是,在表中加入layerpath,用特別的符號分隔id;加入parentlayer,用來標記父節點;加入level,用來表示這是第幾層(這個可以不要,實際應用中幾乎沒用,反而加大了修改layer的難度)。
這樣做的優點是把搜索的重任交給了數據庫,比如說查找某個節點下的所有子節點,包括繼承子節點,我們就可以用一刀切的方式取得,而不用遍歷樹的方法,比如我的layerpath的格式如下:
|1|3|7|8|
我要查找id為1的所有子節點及繼承子節點:
SQL:select * from craft where layerpath like '%|1|%';
而修改一個節點的上下文關系時,僅僅只要修改一個parentlayer就行,當然,我們要在修改更新時檢查節點的繼承關系(這是最重要的)。
當然,這樣的設計也會有缺點,當類別數據量太多時,就會讓數據庫吃不消,就比如電信的電子黃頁,就有一千多個類別,至少四層,特別是在搜索時,系統的很容易掛掉。解決方法唯有是用緩存。