2010-02-17 3 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#으로 특성을 나타낼 수도 있습니다. 다시 말하지만, 저는 이것이 과잉이라고 생각합니다.