MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          樹的一種特殊設計(轉(zhuǎn))

          Posted on 2007-09-12 13:37 leekiang 閱讀(236) 評論(0)  編輯  收藏 所屬分類: oracle
          不考慮極端的情況,通常組織機構(gòu)有個10幾個層次就是頂天了。 所有,可以用一個字段存儲下所有祖先的信息,例如varchar2(300),其中可以用 '.'隔開。 我的設想是這樣的:
          id name Nodecode
          1 a 1
          2 b 1.2
          3 c 1.3
          4 d 1.2.4
          5 e 1.2.5
          6 f 1.2.5.6

          從6可以直接看到它的上級脈絡是6.5.2.1 。當然這里考慮的是級別不多的。但是除非你是很極端的應用,我想還是可以滿足的。在插入和更新的時候注意維護nodecode即可。
          如果要照到祖先,則只要解析一下nodecode即可。
          同理如果要照后代,例如2的后代,則馬上可以通過Like的方式獲得.

          另一篇:
          因為TreeKey是個字符串,而1.10會排到1.2, 1.3之前,很顯然,這不是我們要的結(jié)果。要解決其實也很簡單,在編號前面補0,比如,1.10就寫成0001.0010,1.2就寫成0001.0002,這樣排序就不會有問題了。

          這讓我想起很早前看的微軟的一個有關樹的軟件代碼,就看到他們是以000x.000x這種方式進行處理的,當時我還感覺他們怎么這么麻煩,現(xiàn)在想來,才發(fā)現(xiàn)是自己無知了,呵呵。


          主站蜘蛛池模板: 山东| 山西省| 镇赉县| 司法| 高平市| 铅山县| 札达县| 兴城市| 临海市| 宜良县| 墨竹工卡县| 安阳县| 无棣县| 西昌市| 叙永县| 望城县| 宁津县| 阜阳市| 克拉玛依市| 景宁| 扶风县| 黎川县| 宿迁市| 永平县| 台前县| 温泉县| 平武县| 柳河县| 京山县| 民和| 西华县| 新平| 盘山县| 武陟县| 察隅县| 海门市| 石狮市| 松溪县| 上饶县| 苍山县| 长泰县|