前言
當業務中遇到樹形結構時,比如選單,省市區,部門等時如何設計資料庫。一種設計可以通過每個字段帶有parent id 來遞迴獲取所有的節點 ,也可以通過另一種方法來獲取某個節點的子節點
使用level記錄當前節點的父節點code
新增乙個輔助的varchar欄位level,欄位的邏輯是多個部門的id使用.來連線,假設首層使用0表示,每乙個層級使用上一層的level拼接上.再拼接父級部門id來表示
idlevel
parent10-
020-1-13
0-1-2-
2當查詢id為2 的子節點時
select l.* from (select level from table
where id = 2 )as le,
table l
where l.`level` like concat(le.level,'%')
使用union包括該節點下面這種不行,因為如果查某個根節點(0-)則會查出所有根節點,如果有company id 也可
select id, level from res_location where level like concat((select level from res_location where id = 233),'%')
小結 :
references
資料庫儲存樹形結構的資料
最近接觸樹形結構資料非常的多,幾乎超過了過去8年多,開發所有系統的總和.本來嘛,一般的遞迴就可以解決了,可是這個系統中總是需要頻繁的訪問樹結點,及父結點,子結點,動不動就要遞迴,且樹的使用非常之多,做的多了搞的人都要嘔吐了,下面在網上找到幾篇比較有用的資料,記錄彙總一下.首先,資料庫不一定要用傳統的...
資料庫設計技巧
1.設計資料庫之前 需求分析階段 1 理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。2 了解企業業務可以在以後的開發階段節約大量的時間。3 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...
資料庫設計技巧
1.設計資料庫之前 需求分析階段 1 理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。2 了解企業業務可以在以後的開發階段節約大量的時間。3 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...