Javadream

          A long way and a dream.

          導航

          <2006年7月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Java程序員的心聲

          搜索

          •  

          最新評論

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

          當然,這樣的設計也會有缺點,當類別數據量太多時,就會讓數據庫吃不消,就比如電信的電子黃頁,就有一千多個類別,至少四層,特別是在搜索時,系統的很容易掛掉。解決方法唯有是用緩存。
          主站蜘蛛池模板: 江安县| 离岛区| 永兴县| 禹州市| 仙游县| 德钦县| 明光市| 承德县| 罗山县| 德庆县| 镇原县| 玉田县| 建湖县| 滁州市| 仪征市| 兴化市| 镇原县| 左贡县| 古蔺县| 汝州市| 望奎县| 淮北市| 大石桥市| 龙海市| 喀喇沁旗| 六枝特区| 五原县| 碌曲县| 昌乐县| 江西省| 华阴市| 平乐县| 闵行区| 洪雅县| 昌图县| 南城县| 灌阳县| 元谋县| 湾仔区| 二手房| 固阳县|