Пользовательские / произвольные метаданные базы данных - PullRequest
5 голосов
/ 17 февраля 2010

Я думаю, что способность некоторых отражающих управляемых сред (например, .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, но если есть что-то для другой СУБД, мне все равно было бы интересно узнать об этом.

Ответы [ 2 ]

5 голосов
/ 17 февраля 2010

в SQL Server 2005 и выше вы можете использовать sp_addextendedproperty и fn_listextendedproperty (а также графический интерфейс SSMS) для установки и просмотра описаний различных элементов базы данных. Вот пример того, как установить и просмотреть описание в столбце таблицы:

--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 голосов
/ 17 февраля 2010

Вы можете извлечь практически все, что связано с объектом из SQL Server, если вы знаете, где искать. Если вам нужно предоставить больше «атрибутов», вы расширяете проблемную область большим количеством «концепций», и это идет вразрез с принципом KISS - также реляционная база данных, очевидно, идеально подходит для представления любых отношений, связанных с вашими данными и примером были показаны. Я не могу придумать причину, по которой вы хотели бы добавить предоставленные пользователем метаданные в таблицу.

Если, тем не менее, у вас есть необходимость, добавьте дополнительные атрибуты в ORM. Или создайте отдельную таблицу, которая описывает метаданные для вашей конкретной проблемы. У вас также есть возможность ссылаться в табличных функциях, которые вы можете свободно писать в C #, поэтому вы можете представлять свои атрибуты в C # - снова: я думаю, что это излишне.

...