不考慮極端的情況,通常組織機構有個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之前,很顯然,這不是我們要的結果。要解決其實也很簡單,在編號前面補0,比如,1.10就寫成0001.0010,1.2就寫成0001.0002,這樣排序就不會有問題了。
這讓我想起很早前看的微軟的一個有關樹的軟件代碼,就看到他們是以000x.000x這種方式進行處理的,當時我還感覺他們怎么這么麻煩,現在想來,才發現是自己無知了,呵呵。