公司須要作一個組織機構管理的系統,可是現有的數據庫中存儲的方式,機構之間的關聯只是經過parent_id關聯的,這樣在查詢的時候須要不斷的遞歸查詢表數據,性能不好,邏輯也不清晰。因此在網上找到了幾種針對這種樹狀結構存儲,查詢插入的優化方法html
1.發現幾種樹結構數據庫存儲方案java
2.聊聊樹狀結構如何在數據庫中存儲數據庫
3.組織機構樹設計 post
1.2兩種有點複雜了,第三個鏈接有一位答主介紹了一種快捷查詢的方法性能
1 很麻煩的作法。 2 簡單的只須要在原表裏加一列就好了: 3 4 組織機構簡潔字段設計: 5 6 (ogran_code是組織機構惟一代碼,真正的系統裏都會有這東西的) 7 8 id,name,ogran_code,parent_id 9 10 快速查詢字段設計: 11 12 id,name,ogran_code,parent_id,code_link 13 14 (code_link是從根到該機構的整個code鏈條,例如: "root_code"+"first_code"+"child_code") 15 分隔符自定義便可 16 添加編輯機構時只關注該機構的父機構,在父機構的link上添加本機構的部分: "pareat_code_link"+"local_code" 17 18 任何查詢均可以經過這個字段快速完成。 19 20 1,某機構全部子機構,查詢全部包含某機構CODE的CODE_LINK便可。能夠使用like,超級簡單。 21 2,查詢Level,拆分該字段便可。 22 23 總之,很方便記錄的一個鏈路LINK,能夠作到任意須要遞歸才能夠完成的查詢。
用圖表分析了一下優化
id code_linkurl
1 0_null_nullspa
id code_link.net
1 0_null_2設計
2 1_null_null
id code_link
1 0_null_2,3
2 1_null_null
3 1_null_null
id code_link
1 0_null_2,3
2 1_null_4
3 1_null_null
4 1_2_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_null
4 1_2_null
5 1_2_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6
4 1_2_null
5 1_2_null
6 1_3_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_null
5 1_2_null
6 1_3_null
7 1_3_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8,9
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
9 1_2,4_null
id code_link
1 0_null_2,3
2 1_null_4,5
3 1_null_6,7
4 1_2_8,9
5 1_2_null
6 1_3_null
7 1_3_null
8 1_2,4_null
9 1_2,4_10
10 1_2,4,9_null
至此,查詢一個機構的子機構只需查詢root_code和first_code中含有此節點id的數據
例如,查詢(2上海分公司)的子機構,則爲4,5,8,9,10
查詢(4徐匯辦事處)的子機構,則爲8,9,10