推 cyclone350:如果是想提供api的話,可以用不定長度引數的method 07/17 14:05
→ cyclone350:來generate SQL達到麵包屑查詢,但還是要寫程式XD 07/17 14:07
→ NullLife:感謝各位大大,已有方法解決~ 07/17 18:51
推 cyclone350:可以提供方法嗎? (敲碗) 07/17 19:11
推 pupuliao:要是我 我會選擇直接建二維表下去... 07/17 21:08
二維表是...?
→ swpoker:這樣不行喔~既然想到了~那要分享一下才可以阿~ 07/18 09:29
其實最主要還是透過 yyc1217 板大的方法,將上面階層攤平成一個字串
因為表的巢狀不太深,頂多3~5層,每層名字也不會太多頂多2~6個字
然後我實際的情況會像是那一張表存放N多個公司的處部狀況,
有多個根,可能處部完全重複,僅公司不同,例如:
seq | name | parent | company
1 aa 甲
2 bb 1 甲
3 cc 2 甲
4 dd 1 甲
5 ee 4 甲
6 ff 5 甲
7 gg 甲
8 hh 7 甲
9 ii 8 甲
10 aa 乙
11 bb 10 乙
12 cc 11 乙
13 dd 10 乙
14 ee 11 乙
15 ff 14 乙
...
麻煩是在有需求下distinct,找出所有所有處部情況
因為這張表最早開給user自己去維護他們的分類,
不過內部討論過後,決定不開給USER自行維護(避免太深等問題)
由我們系統維護人員來幫客戶進行修改新增等
因此分類表就可以獨立出來不跟公司掛勾,變成如下表:
seq | name | parent | parentStratum
1 aa
2 bb 1 aa
3 cc 2 aa/bb
4 dd 1 aa
5 ee 4 aa/dd
6 ff 5 aa/dd/ee
7 gg
8 hh 7 gg
9 ii 8 gg/hh
...
如此一來就不會有過多重複的 parentStratum
也不用全查資料後下distinct找出所有分類情況,
因為獨立出來的表就直接是結果了,
然後在公司的表上面JoinTable來記該公司擁有哪些分類節點
當然每家公司的分類情況必定存在分類表裡,
如果沒有的話,就是新增某個支線之後,將他LINK給該公司
所以想查Aa/Ba/Ca/Db...的時候,只要將分類串起來用like去找就好,
因為分類表資料已經大幅縮減了,因此速度上會較之前設計的表快,
然後公司若要調整分類結構,也不會像之前設計的表,非常難維護,
只要變更LIKE表的結構,及調整完成。
以上就是我們最後決定出來的模式,感謝各位。
PS:
常常會很想說我要找出完美的設計,結果事實並不然,
所以就只能在幾個方案中根據系統情況來使用較佳的方案 >"<
※ 編輯: NullLife (125.227.157.211), 07/18/2014 10:43:42
→ swpoker:parentStratum可以在異動的時候產生就可以了 07/18 11:58
→ swpoker:怎麼覺得好像跟JAVA無關~是資料庫設計有關的阿 07/18 12:01
→ swpoker:我還是比較喜歡使用java爬資料 XD 07/18 12:02
→ NullLife:好吧,對不起QQ 因為我一開始是想說JAP是否有相關機制 07/18 12:45
→ NullLife:可以做到我想要的結果,所以上來問 07/18 12:45
→ swpoker:結果還是SQL!!! XD 07/18 15:22