樹形結構的數據庫的存儲


      程序設計過程中,我們常常用樹形結構來表征某些數據的關聯關系,如企業上下級部門、欄目結構、商品分類等等,通常而言,這些樹狀結構需要借助於數據庫完成持久化。理想中樹形結構應該具備如下特征:數據存儲冗余度小、直觀性強;檢索遍歷過程簡單高效;節點增刪改查CRUD操作高效。

      列舉了一個食品族譜的例子進行講解,通過類別、顏色和品種組織食品,樹形結構圖如下:

       1,對樹形結構最直觀的分析莫過於節點之間的繼承關系上,通過顯示地描述某一節點的父節點,從而能夠建立二維的關系表,則這種方案的Tree表結構通常設計為:{Node_id,Parent_id}
 
      2,在基於數據庫的一般應用中,查詢的需求總要大於刪除和修改。為了避免對於樹形結構查詢時的“遞歸”過程,基於Tree的前序遍歷設計一種全新的無遞歸查詢、無限分組的左右值編碼方案,來保存該樹的數據。
      至於上述兩種方法的具體介紹和實現以及優缺參考: 樹形結構的數據庫表Schema設計
      其實我們最重要的數據是這個樣子的:
      {Catagory:"Food",FoodCategory:"Fruit",color:"Red",Name:"Cherry"}
      {Catagory:"Food",FoodCategory:"Fruit",color:"Yellow",Name:"Banana"}
      {Catagory:"Food",FoodCategory:"Meat",Name:"Beef"}
      {Catagory:"Food",FoodCategory:"Meat",Name:"Pork"}
      ……
      其實我覺得這種關系型數據庫可以用MongoDb來存儲(Json的數據格式),這樣用非關系數據庫的思想解決這個問題豈不是更好?這種可以不通過遞歸過程不斷地訪問數據庫,每次數據庫IO都會有時間開銷;也避免了第二種節點的添加、刪除及修改代價較大,將會涉及到表中多方面數據的改動。是不是萌萌噠?一家之言,歡迎拍磚!
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM