Conceitos-chave do Modelo de Dados de Entidade
O Modelo de Dados de Entidade (EDM) usa três conceitos-chave para descrever a estrutura dos dados: tipo de entidade, tipo de associação e propriedade. Estes 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 dentro de um conjunto de entidades. Um conjunto de entidades é uma coleção de instâncias de um tipo de entidade específico. Os conjuntos de entidades (e conjuntos de associações) são agrupados logicamente em um contêiner de entidade.
A herança é suportada com tipos de entidade: ou seja, um tipo de entidade pode ser derivado de outro. Para obter mais informações, consulte Modelo de dados de 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 relacionamentos 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 Pedido). Cada associação tem duas extremidades de associação que especificam os tipos de entidade envolvidos na associação. Cada extremidade de associação também especifica uma multiplicidade de extremidade de associação que indica o número de entidades que podem estar nessa extremidade da associação. Uma multiplicidade final de associação pode ter um valor de um (1), zero ou um (0..1), ou muitos (*). As entidades em uma extremidade de uma associação podem ser acessadas por meio de propriedades de navegação ou por meio de chaves estrangeiras se estiverem 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 de Cliente e instâncias de Pedido). As instâncias de associação são agrupadas logicamente em um conjunto de associações. Os conjuntos de associações (e conjuntos de entidades) são agrupados logicamente em um contêiner de entidade.
Property
Os tipos de entidade contêm propriedades que definem sua estrutura e características. Por exemplo, um tipo de entidade Customer 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 booleano) ou dados estruturados (como um tipo complexo). Para obter mais informações, consulte Modelo de dados de entidade: tipos de dados primitivos.
Representações de um Modelo Conceptual
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 entidades (Book
, , e Author
) e duas associações (PublishedBy
e WrittenBy
Publisher
):
Esta representação, no entanto, tem algumas deficiências quando se trata de transmitir alguns detalhes sobre o modelo. Por exemplo, o tipo de propriedade e as informações do conjunto de entidades não são transmitidas no diagrama. A riqueza de um modelo conceitual pode ser transmitida mais claramente com uma linguagem específica de domínio (DSL). O ADO.NET Entity Framework usa uma DSL baseada em XML chamada linguagem de definição de esquema conceitual (CSDL) para definir modelos conceituais. A seguir está a definição 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>