組織機構樹數據庫表設計

公司須要作一個組織機構管理的系統,可是現有的數據庫中存儲的方式,機構之間的關聯只是經過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,能夠作到任意須要遞歸才能夠完成的查詢。

 

 

 用圖表分析了一下優化

 

  • 當插入(1總公司)

  id  code_linkurl

  1  0_null_nullspa

  • 在(1總公司)下插入(2上海分公司),總公司的child_code爲2,上海分公司的root_code爲1

  id  code_link.net

  1  0_null_2設計

  2  1_null_null

  • 在(1總公司)下插入(3深圳分公司),總公司的child_code爲2,3,上海分公司的root_code爲1

  id  code_link

  1  0_null_2,3

  2  1_null_null

  3  1_null_null

  • 在(2上海分公司)下插入(4徐匯辦事處),上海分公司的child_code爲4,徐匯辦事處的first_code爲2

  id  code_link

  1  0_null_2,3

  2  1_null_4

  3  1_null_null

  4  1_2_null

  • 在(2上海分公司)下插入(5閔行辦事處),上海分公司的child_code爲4,5,閔行辦事處的first_code爲2

  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

  • 在(3深圳分公司)下插入(6人事部),深圳分公司的child_code爲6,人事部的first_code爲3

  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

  • 在(3深圳分公司)下插入(7財務部),深圳分公司的child_code爲6,7,財務部的first_code爲3

  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

  • 在(4徐匯辦事處)下插入(8研發部),徐匯辦事處的child_code 爲8,研發部的first_code爲2,4(帶上徐匯辦事處的first_code 2)

  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

  • 在(4徐匯辦事處)下插入(9市場部),徐匯辦事處的child_code 爲8,9,市場部的first_code爲2,4(帶上徐匯辦事處的first_code 2)

  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

  • 在(9市場部)下插入(10市場調研小組),市場部的child_code爲10,市場調研小組的first_code爲2,4,9(帶上市場部的first_code)

  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

相關文章
相關標籤/搜索