Conceitos chave do Modelo de Dados de Entidade
O EDM (Modelo de Dados de Entidade) usa três conceitos principais para descrever a estrutura dos dados: tipo de entidade, tipo de associação e propriedade. Esses são os conceitos mais importantes para descrever a estrutura dos dados em qualquer implementação do EDM.
Tipo de entidade
O tipo de entidade é o bloco de construção fundamental para descrever a estrutura dos dados com o Modelo de Dados de Entidade. Em um modelo conceitual, os tipos de entidade são construídos com base em propriedades e descrevem a estrutura dos 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 um pedido específico.) Cada entidade precisa 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 os conjuntos de associações) são agrupados logicamente em um contêiner de entidade.
A herança é suportada com tipos de entidade: isto é, um tipo de entidade pode ser derivado de outro. Para obter mais informações, confira 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 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 pedido). Cada associação tem duas extremidades de associação que especificam os tipos de entidade envolvidos na associação. Cada extremidade da associação também especifica uma multiplicidade de extremidades de associação, que indica o número de entidades que podem estar nessa extremidade da associação. Uma multiplicidade de extremidades de associação pode ter um valor igual a um (1), a zero ou a um (0..1) ou a 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 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.
Propriedade
Os tipos de entidade contêm propriedades que definem sua estrutura e características. Por exemplo, um tipo de entidade de 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 transportam informações sobre objetos, as propriedades em um modelo conceitual definem a forma de um tipo de entidade e transportam informações sobre as instâncias dos tipos de entidade.
Uma propriedade pode conter dados primitivos (como uma cadeia de caracteres, um número inteiro ou um valor booliano) 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 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
):
Essa representação, no entanto, tem alguns defeitos 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 transportados no diagrama. A sofisticação de um modelo conceitual pode ser transmitida mais claramente com um DSL (linguagem específica do domínio). O ADO.NET Entity Framework usa um DSL baseado em XML denominado CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. O seguinte é a definição CSDL do modelo conceitual no diagrama anterior:
<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>