定制/任意数据库元数据

Wes*_*ill 5 database sql-server reflection metadata

我认为一些反思管理环境(例如.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
)
Run Code Online (Sandbox Code Playgroud)

这个例子有点做作,但希望我的问题更清楚.我认为反映这种元数据的能力可以使许多任务更容易实现自动化.那里有这样的东西吗?我正在使用SQL Server,但如果有其他DBMS的东西,那么我仍然有兴趣听到它.

KM.*_*KM. 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);
Run Code Online (Sandbox Code Playgroud)