다음을 통해 공유


엔터티 데이터 모델 키 개념

EDM(엔터티 데이터 모델)은 세 가지 주요 개념인 엔터티 형식, 연결 형식속성의 데이터 구조를 설명합니다. 이러한 개념은 EDM 구현에서 데이터의 구조를 설명하는 데 가장 중요한 개념입니다.

엔터티 형식

엔터티 형식은 엔터티 데이터 모델을 사용하여 데이터의 구조를 설명하기 위한 기본 구성 요소입니다. 개념적 모델에서 엔터티 형식은 속성 에서 생성되며 비즈니스 애플리케이션의 고객 및 주문과 같은 최상위 개념의 구조를 설명합니다. 컴퓨터 프로그램의 클래스 정의가 클래스 인스턴스에 대한 템플릿인 것과 동일한 방식으로 엔터티 형식은 엔터티에 대한 템플릿입니다. 엔터티는 특정 개체(예: 특정 고객 또는 주문)를 나타냅니다. 각 엔터티에는 엔터티 집합 내에 고유한 엔터티 키가 있어야 합니다. 엔터티 집합은 특정 엔터티 형식의 인스턴스 컬렉션입니다. 엔터티 집합(및 연결 집합)은 엔터티 컨테이너에서 논리적으로 그룹화됩니다.

상속은 엔터티 형식에서 지원됩니다. 즉, 한 엔터티 형식을 다른 엔터티 형식에서 파생할 수 있습니다. 자세한 내용은 엔터티 데이터 모델: 상속을 참조하세요.

연결 유형

연결 형식(연결이라고도 함)은 엔터티 데이터 모델의 관계를 설명하기 위한 기본 구성 요소입니다. 개념적 모델에서 연결은 두 엔터티 형식(예: Customer 및 Order) 간의 관계를 나타냅니다. 모든 연결에는 연결과 관련된 엔터티 형식을 지정하는 두 개의 연결 끝이 있습니다. 또한 각 연결 끝은 연결의 해당 끝에 있을 수 있는 엔터티 수를 나타내는 연결 끝 곱셈을 지정합니다. 연결 끝 곱셈은 1, 0 또는 1(0..1) 또는 다(*)의 값을 가질 수 있습니다. 연결의 한쪽 끝에 있는 엔터티는 탐색 속성을 통해 또는 엔터티 형식에 노출되는 경우 외신 키를 통해 액세스할 수 있습니다. 자세한 내용은 외래 키 속성을 참조하세요.

애플리케이션에서 연결 인스턴스는 특정 연결(예: Customer 인스턴스와 Order 인스턴스 간의 연결)을 나타냅니다. 연결 인스턴스는 연결 집합에서 논리적으로 그룹화됩니다. 연결 집합(및 엔터티 집합)은 엔터티 컨테이너에서 논리적으로 그룹화됩니다.

재산

엔터티 형식 에는 해당 구조와 특성을 정의하는 속성 이 포함되어 있습니다. 예를 들어 고객 엔터티 형식에는 CustomerId, Name 및 Address와 같은 속성이 있을 수 있습니다.

개념적 모델의 속성은 컴퓨터 프로그램의 클래스에 정의된 속성과 유사합니다. 클래스의 속성이 클래스의 모양을 정의하고 개체에 대한 정보를 전달하는 것과 동일한 방식으로 개념적 모델의 속성은 엔터티 형식의 모양을 정의하고 엔터티 형식 인스턴스에 대한 정보를 전달합니다.

속성은 기본 데이터(예: 문자열, 정수 또는 부울 값) 또는 구조화된 데이터(예: 복합 형식)를 포함할 수 있습니다. 자세한 내용은 엔터티 데이터 모델: 기본 데이터 형식을 참조하세요.

개념적 모델의 표현

개념적 모델은 일부 데이터의 구조를 엔터티 및 관계로 특정하게 표현한 것입니다. 개념적 모델을 나타내는 한 가지 방법은 다이어그램을 사용하는 것입니다. 다음 다이어그램은 세 개의 엔터티 형식(, Book및) 및 두 개의 연결(PublisherAuthorPublishedByWrittenBy)이 있는 개념적 모델을 나타냅니다.

세 가지 엔터티 형식의 개념적 모델을 보여 주는 다이어그램

그러나 이 표현은 모델에 대한 몇 가지 세부 정보를 전달할 때 몇 가지 단점이 있습니다. 예를 들어 속성 형식 및 엔터티 집합 정보는 다이어그램에 전달되지 않습니다. 개념적 모델의 풍요로움은 DSL(도메인별 언어)을 사용하여 보다 명확하게 전달할 수 있습니다. ADO.NET Entity FrameworkCSDL(개념 스키마 정의 언어)이라는 XML 기반 DSL을 사용하여 개념 모델을 정의합니다. 다음은 위의 다이어그램에서 개념적 모델의 CSDL 정의입니다.

  <Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
          Namespace="BooksModel" Alias="Self">
    <EntityContainer Name="BooksContainer" >
      <EntitySet Name="Books" EntityType="BooksModel.Book" />
      <EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
      <EntitySet Name="Authors" EntityType="BooksModel.Author" />
      <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Publisher" EntitySet="Publishers" />
      </AssociationSet>
      <AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
        <End Role="Book" EntitySet="Books" />
        <End Role="Author" EntitySet="Authors" />
      </AssociationSet>
    </EntityContainer>
    <EntityType Name="Book">
      <Key>
        <PropertyRef Name="ISBN" />
      </Key>
      <Property Type="String" Name="ISBN" Nullable="false" />
      <Property Type="String" Name="Title" Nullable="false" />
      <Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
      <NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
                          FromRole="Book" ToRole="Publisher" />
      <NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
                          FromRole="Book" ToRole="Author" />
    </EntityType>
    <EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>
    <EntityType Name="Author">
      <Key>
        <PropertyRef Name="Name" />
        <PropertyRef Name="Address" />
      </Key>
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="String" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
                          FromRole="Author" ToRole="Book" />
    </EntityType>
<Association Name="PublishedBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
    </Association>
    <Association Name="WrittenBy">
      <End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
      <End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
    </Association>
  </Schema>

참고하십시오