首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

拋棄外部資料字典:打造 SQL Server 內建自描述資料庫

     編輯:關於SqlServer

動機:從組件元資料想到資料庫自描述

.NET 組件擁有豐富的中繼資料,實現「自描述」,開發體驗極佳。反觀資料庫,結構描述、欄位用途、業務含義往往散落在 Excel、Word、Wiki 等外部文件,維護成本高、易脫節、版本難控。SQL Server 內建擴充屬性與完整的系統目錄檢視,完美支援將描述資訊內嵌於資料庫物件中,隨備份/還原/分離附帶遷移,實現真正的自描述。

方案架構:兩個核心檢視表

1. 欄位層級描述檢視:DOC_vwColumns

利用 SSMS 設計表時即可填寫的「描述」屬性(對應 MS_Description 擴充屬性),結合 INFORMATION_SCHEMA.COLUMNS 系統檢視:

CREATE VIEW [dbo].[DOC_vwColumns] AS
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';

查詢此檢視即可獲得所有資料表欄位的型別、長度、允許空值及說明,支援 WHERE 篩選特定資料表。

2. 物件層級描述檢視:DOC_vwObjects

針對資料表、檢視表、預存程序、函數等物件,建立完成後在 SSMS 物件總管 → 右鍵屬性 → 擴充屬性,新增名為 ObjectDescription 的屬性記錄業務說明:

CREATE VIEW [dbo].[DOC_vwObjects] AS
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]
   AND P.NAME = 'ObjectDescription';

操作流程與優勢

  1. 建模階段:設計表時同步填寫欄位描述;建立程式碼物件後補齊物件描述。
  2. 開發/維護階段:直接查詢檢視表獲取最新文件,或透過報表工具生成文件。
  3. 部署/遷移:描述資料隨資料庫檔案走,無需額外打包文件。
  4. 匯出需求:若需 Excel 版資料字典,SELECT * FROM DOC_vwColumns 複製貼上即得。

進階擴充建議

  • 為擴充屬性建立標準化名稱字典(如 BusinessDomain, DataSensitivity, OwnerTeam),支援資料治理。
  • 結合 sys.schemas、sys.indexes、sys.foreign_keys 擴充檢視,涵蓋索引、外鍵、檢查約束說明。
  • 開發簡易 UI 工具(WinForm/Web),讓非技術人員也能維護描述,降低門檻。
  • 納入 CI/CD 流程,自動檢查關鍵物件是否缺少描述,強制文件化。

總結

善用 SQL Server 內建擴充屬性與系統目錄,以極低成本構建自描述資料庫,解決「文件與代碼脫節」的經典難題。這不僅提升團隊協作效率,更為資料治理、合規稽核奠定堅實基礎。從今天開始,將描述寫進資料庫,讓文件活起來!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved