SQL Server中的新資料類型:HierarchyId

來源:互聯網
上載者:User
對於關係型資料庫來說,表現樹狀的階層始終是一個問題。微軟在Sql Server 2005中首次嘗試瞭解決這個問題,那就是被稱之為通用資料表運算式(Common Table Expressions,CTE)的實現方式。

儘管CTE在現有的資料庫結構描述中運行良好,微軟找到了一種將此類階層作為頭等概念來使用的方式。因此為了實現這種效果,他們在SQL Server 2008中提出了一種“HierarchId”資料類型。

在傳統的階層中,一條記錄僅僅儲存了一個指向它父記錄的引用,這使得一條記錄能夠獲得它在階層中的相對位置,而不是絕對位置。改變某條記錄的父資料行引用是一個原子更新操作,它不會影響到該記錄的任何子記錄。

一個HierarchyId類型的欄位儲存了記錄在階層中的準確位置。Denny Cherry提供了一個例子,其中展示了0x、0x58以及0x5AC0三個值,它們的字串表現形式分別為“/”,“/1/”和“/1/1/”。這就引發了有關一致性和效能方面的問題,尤其是父記錄被改變的時候。Ravi S.Maniam建議在改變父記錄操作不頻繁的情況下使用這種設計方式。

與HierarchyId類型同時出現的還有一系列函數。GetAncestor和GetDescendant方法可以用來遍曆樹。ToString和Parse方法用於HierarchyId類型二進位與字串表現形式之前的轉換。有些古怪的是,隨之而來的還有用於支援BinaryReader與BinaryWriter的一些方法。

再來回頭看看GetDescendant,這是一個有些古怪的方法。它實際上不返回那些子記錄,而是返回那些潛在的子節點的位置。向樹中插入一個新的記錄時,我們必需調用GetDescendant方法來獲得指定父記錄的最後一個子節點的位置,然後才能獲得緊跟著該位置之後的空隙。

迄今為止還沒有使用T-SQL來獲得樹狀結構的合適樣本。事實上,與它有關的所有東西都更像是一些命令,而不是基於基於集合的操作。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.