Javadream

          A long way and a dream.
          鏈接: http://forum.javaeye.com/viewtopic.php?t=15829

          這是一個(gè)很有趣的東西,無限分類問題。

          這里涉及到沉余數(shù)據(jù)的問題,如果不這樣做,我們沒法很快的對數(shù)據(jù)進(jìn)行搜索。

          我的方法是,在表中加入layerpath,用特別的符號分隔id;加入parentlayer,用來標(biāo)記父節(jié)點(diǎn);加入level,用來表示這是第幾層(這個(gè)可以不要,實(shí)際應(yīng)用中幾乎沒用,反而加大了修改layer的難度)。

          這樣做的優(yōu)點(diǎn)是把搜索的重任交給了數(shù)據(jù)庫,比如說查找某個(gè)節(jié)點(diǎn)下的所有子節(jié)點(diǎn),包括繼承子節(jié)點(diǎn),我們就可以用一刀切的方式取得,而不用遍歷樹的方法,比如我的layerpath的格式如下:
          |1|3|7|8|
          我要查找id為1的所有子節(jié)點(diǎn)及繼承子節(jié)點(diǎn):
          SQL:select * from craft where layerpath like '%|1|%';

          而修改一個(gè)節(jié)點(diǎn)的上下文關(guān)系時(shí),僅僅只要修改一個(gè)parentlayer就行,當(dāng)然,我們要在修改更新時(shí)檢查節(jié)點(diǎn)的繼承關(guān)系(這是最重要的)。

          當(dāng)然,這樣的設(shè)計(jì)也會(huì)有缺點(diǎn),當(dāng)類別數(shù)據(jù)量太多時(shí),就會(huì)讓數(shù)據(jù)庫吃不消,就比如電信的電子黃頁,就有一千多個(gè)類別,至少四層,特別是在搜索時(shí),系統(tǒng)的很容易掛掉。解決方法唯有是用緩存。
          主站蜘蛛池模板: 松桃| 定西市| 阳曲县| 鹿邑县| 平潭县| 镇坪县| 堆龙德庆县| 新巴尔虎左旗| 筠连县| 綦江县| 英德市| 田东县| 许昌县| 高邮市| 辽宁省| 交城县| 库尔勒市| 饶平县| 泽州县| 马关县| 辽宁省| 神农架林区| 枞阳县| 巴塘县| 辽阳市| 翁源县| 桐乡市| 株洲县| 武隆县| 波密县| 富川| 介休市| 澎湖县| 宁河县| 双桥区| 全南县| 高淳县| 晋州市| 江永县| 高密市| 张家港市|