2010-02-17 40 views
5

我認爲一些反射性管理環境(例如.NET)以屬性形式向代碼實體添加自定義元數據的能力非常強大。是否有任何機制爲數據庫做類似的事情?自定義/任意數據庫元數據

數據庫顯然已經有相當數量的可用元數據;例如,您可以獲取所有表,列和外鍵引用的列表,這些列表足以將模式圖放在一起。不過,我能想象很多用途的東西更通用的,如沿C#和DDL的這個虛構的融合線的東西:

[Obsolete("Being replaced by the ClientInteraction table")] 
create table CustomerOrder (

    [SurrogateKey] 
    MyTableId int identity(1,1) primary key 

    [NaturalKey] 
    [ForeignKey("Customer", "CustomerId")] /* Actual constraint left out for speed */ 
    ,CustomerId int not null 

    [NaturalKey] 
    [ConsiderAsNull(0)] 
    [ConsiderAsNull(-1)] 
    ,OrderId int not null 

    [Conditional("DEBUG")] 
    ,InsertDateTime datetime 
) 

的例子是有點做作,但希望讓我的問題更加清晰。我認爲反映這種元數據的能力可以使許多任務更容易實現自動化。有沒有這樣的事情?我正在使用SQL Server,但是如果有另一個DBMS的東西,那麼我仍然有興趣聽到它。

回答

5

在SQL Server 2005中,您可以使用sp_addextendedpropertyfn_listextendedproperty(以及SSMS gui)來設置和查看各種數據庫項目的描述。這裏是如何設置和查看錶格列上的說明的示例:

--code generated by SSMS to set a description on a table column 
DECLARE @v sql_variant 
SET @v = N'your description text goes here' 
EXECUTE sp_addextendedproperty N'MS_Description', @v, N'SCHEMA', N'your_schema_name_here', N'TABLE', N'your_table_name_here', N'COLUMN', N'your_column_name_here' 


--code to list descriptions for all columns in a table 
SELECT * from fn_listextendedproperty (NULL, 'schema', 'your_schema_name_here', 'table', 'your_table_name_here', 'column', default); 
0

如果您知道在哪裏查找,可以將幾乎任何與SQL Server對象關聯的任何東西拉出來。如果你需要提供更多的「屬性」,你就會用更多的「概念」來擴展問題領域,這與KISS原則背道而馳 - 關係數據庫顯然也是完美的,能夠代表與數據和你的數據的關係已經顯示。我想不出你爲什麼要將用戶提供的元數據添加到表中的原因。

但是,如果您有需要,請堅持在ORM中添加其他屬性。或者創建一個單獨的表格來描述特定問題的元數據。你也可以鏈接表格定義函數,你可以在C#中自由編寫 - 因此你可以在C#中再次表示你的屬性:我認爲這太過於誇張。