我們學、用.Net的都知道,程序集(Assembly)的一個很大的優點就是它有元數據,可以“自描述”。在我們體驗這種優勢的同時,我們是否想過什麼時候數據庫中的信息也是自描述的該多好?
我想Sql Server中有擴展屬性,並且SQL Server的“元數據”,其實都可以通過一些系統表、系統視圖等中查到,所以我想為何不利用一下這些擴展屬性,讓數據庫中的表、視圖、字段等也來一個自我描述,省去手工維護那些Excel格式之類的外部數據字典的麻煩?
以下是我的初步實踐,可能並不完美,希望可以給大家一個拋磚引玉的效果就好。
首先,對於數據表中字段,因為在你用SSMS給一個表添加字段的時候,就有一個屬性可以填寫一個描述,因此獲取這些描述信息自然是非常簡單的,我實現了如下視圖:
CREATE VIEW [dbo].[DOC_vwColumns]
通過查詢這個視圖,就可以得到各個數據表中的字段的說明,而且因為是一個視圖,所以可以通過添加Where條件,從這個視圖中篩選出你需要的個別表的字段信息
對於數據庫中的表、視圖、存儲過程、函數等,在你創建的時候,並沒有一個明顯的可以填寫“描述”的地方,但是,當你創建這些數據庫對象完成之後,可以現在SSMS中選中這個對象,然後右鍵-->屬性,就可以在屬性對話框的左邊的找到“擴展屬性”,然後在擴展屬性中增加一條,用來描述對象的信息。我是使用ObjectDescription這個名字添加的擴展屬性,添加完成之後,點擊確定。然後可以利用以下視圖進行查詢:
CREATE VIEW [dbo].[DOC_vwObjects]是不是很簡單?
通過這種方法,可以為我們的數據庫建立起一個自描述的方式,可以用比較方便的方法,維護和查詢說明信息,並且在無論我們備份還是分離數據庫,這些描述信息都是在數據庫裡面隨著數據庫文件走(這也是自描述的優勢啊),不需要額外的附帶著其他文件性質說明文檔。就算要一份最新的Excel格式的數據庫字典,也只需要查詢出結果,然後復制、粘貼到Excel裡面就行了。