Пользовательские/произвольные метаданные базы данных

Я думаю, что способность некоторых отражающих управляемых сред (например.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
задан Wesley Hill 17 February 2010 в 10:00
поделиться

2 ответа

в 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);
5
ответ дан 14 December 2019 в 19:11
поделиться

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

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

0
ответ дан 14 December 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: