程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 甩掉數據字典,讓Sql Server數據庫也來一個自描述

甩掉數據字典,讓Sql Server數據庫也來一個自描述

編輯:關於SqlServer

我們學、用.Net的都知道,程序集(Assembly)的一個很大的優點就是它有元數據,可以“自描述”。在我們體驗這種優勢的同時,我們是否想過什麼時候數據庫中的信息也是自描述的該多好?

我想Sql Server中有擴展屬性,並且SQL Server的“元數據”,其實都可以通過一些系統表、系統視圖等中查到,所以我想為何不利用一下這些擴展屬性,讓數據庫中的表、視圖、字段等也來一個自我描述,省去手工維護那些Excel格式之類的外部數據字典的麻煩?

以下是我的初步實踐,可能並不完美,希望可以給大家一個拋磚引玉的效果就好。

首先,對於數據表中字段,因為在你用SSMS給一個表添加字段的時候,就有一個屬性可以填寫一個描述,因此獲取這些描述信息自然是非常簡單的,我實現了如下視圖:

CREATE VIEW [dbo].[DOC_vwColumns]
AS
-- 數據表字段的說明
-- 作者:RickyLin, http://Ricky81317.cnblogs.com/
SELECT T.Table_Name, C.Column_Name, C.Data_Type, C.Character_Maximum_Length, C.Is_Nullable, P.[Value] AS ColumnDescription
FROM INFORMATION_SCHEMA.Tables T
INNER JOIN INFORMATION_SCHEMA.Columns C ON C.Table_Name = T.Table_Name
LEFT JOIN Sys.Extended_PropertIEs P ON P.Major_ID = Object_ID(T.Table_Name) AND P.Minor_ID = C.Ordinal_Position AND P.[Name] = 'MS_Description'
WHERE T.Table_Type = 'BASE TABLE'
--ORDER BY T.Table_Name, C.Ordinal_Position

 

通過查詢這個視圖,就可以得到各個數據表中的字段的說明,而且因為是一個視圖,所以可以通過添加Where條件,從這個視圖中篩選出你需要的個別表的字段信息

 

對於數據庫中的表、視圖、存儲過程、函數等,在你創建的時候,並沒有一個明顯的可以填寫“描述”的地方,但是,當你創建這些數據庫對象完成之後,可以現在SSMS中選中這個對象,然後右鍵-->屬性,就可以在屬性對話框的左邊的找到“擴展屬性”,然後在擴展屬性中增加一條,用來描述對象的信息。我是使用ObjectDescription這個名字添加的擴展屬性,添加完成之後,點擊確定。然後可以利用以下視圖進行查詢:

CREATE VIEW [dbo].[DOC_vwObjects]
AS
-- 數據庫對象的說明
-- 作者:RickyLin, http://Ricky81317.cnblogs.com/
SELECT T.[Object_ID] AS ObjectID, T.[Name] AS ObjectName, T.[Type] AS ObjectType, P.[Value] AS ObjectDescription
FROM Sys.Objects T
LEFT JOIN Sys.extended_propertIEs P ON P.Major_ID = T.[Object_ID]
WHERE P.[Name] = 'ObjectDescription'

是不是很簡單?

通過這種方法,可以為我們的數據庫建立起一個自描述的方式,可以用比較方便的方法,維護和查詢說明信息,並且在無論我們備份還是分離數據庫,這些描述信息都是在數據庫裡面隨著數據庫文件走(這也是自描述的優勢啊),不需要額外的附帶著其他文件性質說明文檔。就算要一份最新的Excel格式的數據庫字典,也只需要查詢出結果,然後復制、粘貼到Excel裡面就行了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved