Javadream

          A long way and a dream.
          鏈接: 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就行,當然,我們要在修改更新時檢查節點的繼承關系(這是最重要的)。

          當然,這樣的設計也會有缺點,當類別數據量太多時,就會讓數據庫吃不消,就比如電信的電子黃頁,就有一千多個類別,至少四層,特別是在搜索時,系統的很容易掛掉。解決方法唯有是用緩存。
          主站蜘蛛池模板: 新乡县| 清苑县| 榕江县| 永和县| 乌恰县| 荆州市| 集安市| 临湘市| 兰州市| 松阳县| 开封县| 水城县| 永福县| 孟津县| 周宁县| 万年县| 龙江县| 手机| 凭祥市| 汉川市| 襄城县| 会同县| 准格尔旗| 图木舒克市| 贵德县| 宝丰县| 上高县| 射洪县| 贵溪市| 屯门区| 北宁市| 松阳县| 天等县| 探索| 乾安县| 佛冈县| 盐津县| 陕西省| 西藏| 循化| 鸡西市|