程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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