Compartilhar via


Conceitos de chave do modelo de dados de entidade

O EDM (Modelo de Dados de Entidade) usa três conceitos principais para descrever a estrutura de dados: tipo de entidade, tipo de associação e propriedade. Esses são os conceitos mais importantes na descrição da estrutura de dados em qualquer implementação do EDM.

Tipo de entidade

O tipo de entidade é o bloco de construção fundamental para descrever a estrutura de dados com o Modelo de Dados de Entidade. Em um modelo conceitual, os tipos de entidade são construídos a partir de propriedades e descrevem a estrutura de conceitos de nível superior, como clientes e pedidos em um aplicativo de negócios. Da mesma forma que uma definição de classe em um programa de computador é um modelo para instâncias da classe, um tipo de entidade é um modelo para entidades. Uma entidade representa um objeto específico (como um cliente ou pedido específico). Cada entidade deve ter uma chave de entidade exclusiva em um conjunto de entidades. Um conjunto de entidades é uma coleção de instâncias de um tipo de entidade específico. Conjuntos de entidades (e conjuntos de associação) são agrupados logicamente em um contêiner de entidade.

A herança tem suporte com tipos de entidade: ou seja, um tipo de entidade pode ser derivado de outro. Para obter mais informações, consulte o Modelo de Dados da Entidade: Herança.

Tipo de associação

Um tipo de associação (também chamado de associação) é o bloco de construção fundamental para descrever relações no Modelo de Dados de Entidade. Em um modelo conceitual, uma associação representa uma relação entre dois tipos de entidade (como Cliente e Ordem). Cada associação tem duas extremidades de associação que especificam os tipos de entidade envolvidos na associação. Cada final de associação também especifica uma multiplicidade de fim de associação que indica o número de entidades que podem estar no final da associação. Uma multiplicidade de fim de associação pode ter um valor de um (1), zero ou um (0,.1) ou muitos (*). As entidades na extremidade de uma associação podem ser acessadas por meio de propriedades de navegação ou de chaves estrangeiras se forem expostas em um tipo de entidade. Para obter mais informações, consulte propriedade de chave estrangeira.

Em um aplicativo, uma instância de uma associação representa uma associação específica (como uma associação entre uma instância do cliente e instâncias do pedido). As instâncias de associação são agrupadas logicamente em um conjunto de associações. Conjuntos de associações (e conjuntos de entidades) são agrupados logicamente em um contêiner de entidade.

Propriedade

Os tipos de entidade contêm propriedades que definem sua estrutura e características. Por exemplo, um tipo de entidade cliente pode ter propriedades como CustomerId, Name e Address.

As propriedades em um modelo conceitual são análogas às propriedades definidas em uma classe em um programa de computador. Da mesma forma que as propriedades em uma classe definem a forma da classe e carregam informações sobre objetos, as propriedades em um modelo conceitual definem a forma de um tipo de entidade e carregam informações sobre instâncias de tipo de entidade.

Uma propriedade pode conter dados primitivos (como uma cadeia de caracteres, um inteiro ou um valor booliano) ou dados estruturados (como um tipo complexo). Para obter mais informações, consulte o modelo de dados da entidade: tipos de dados primitivos.

Representações de um modelo conceitual

Um modelo conceitual é uma representação específica da estrutura de alguns dados como entidades e relações. Uma maneira de representar um modelo conceitual é com um diagrama. O diagrama a seguir representa um modelo conceitual com três tipos de entidade (Book, Publisher e Author) e duas associações (PublishedBy e WrittenBy):

Diagrama mostrando um modelo conceitual com três tipos de entidade.

Essa representação, no entanto, tem algumas deficiências quando se trata de transmitir alguns detalhes sobre o modelo. Por exemplo, as informações do tipo de propriedade e do conjunto de entidades não são transmitidas no diagrama. A riqueza de um modelo conceitual pode ser transmitida mais claramente com uma DSL (linguagem específica do domínio). O ADO.NET Entity Framework usa uma DSL baseada em XML chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. Veja a seguir a definição de CSDL do modelo conceitual no diagrama acima:

  <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>

Consulte também