Compartir a través de


Conceptos clave del modelo de datos de entidad

Entity Data Model (EDM) usa tres conceptos clave para describir la estructura de los datos: tipo de entidad, tipo de asociación y propiedad. Estos son los conceptos más importantes para describir la estructura de los datos en cualquier implementación del EDM.

Tipo de entidad

El tipo de entidad es la base fundamental para describir la estructura de datos con el Modelo de Datos de Entidad. En un modelo conceptual, los tipos de entidad se construyen a partir de propiedades y describen la estructura de conceptos de nivel superior, como clientes y pedidos en una aplicación empresarial. De la misma manera que una definición de clase en un programa de equipo es una plantilla para instancias de la clase, un tipo de entidad es una plantilla para las entidades. Una entidad representa un objeto específico (como un cliente o pedido específico). Cada entidad debe tener una clave de entidad única dentro de un conjunto de entidades. Un conjunto de entidades es una colección de instancias de un tipo de entidad específico. Los conjuntos de entidades (y los conjuntos de asociaciones) se agrupan lógicamente en un contenedor de entidades.

La herencia se admite con tipos de entidad: es decir, un tipo de entidad se puede derivar de otro. Para obtener más información, consulte Entity Data Model: Herencia.

Tipo de asociación

Un tipo de asociación (también denominado asociación) es el bloque de creación fundamental para describir las relaciones en el Entity Data Model. En un modelo conceptual, una asociación representa una relación entre dos tipos de entidad (como Customer y Order). Cada asociación tiene dos extremos de asociación que especifican los tipos de entidad implicados en la asociación. Cada extremo de asociación especifica también una multiplicidad del extremo de la asociación que indica el número de entidades que pueden estar al final de la asociación. Una multiplicidad de extremo de asociación puede tener un valor de uno (1), cero o uno (0..1) o varios (*). Es posible acceder a las entidades situadas en un extremo de una asociación mediante las propiedades de navegación o las claves externas, si estas se exponen en un tipo de entidad. Para más información, consulte la propiedad de clave externa.

En una aplicación, una instancia de una asociación representa una asociación específica (como una asociación entre una instancia de Cliente e instancias de Pedido). Las instancias de asociación se agrupan lógicamente en un conjunto de asociaciones. Los conjuntos de asociaciones (y los conjuntos de entidades) se agrupan lógicamente en un contenedor de entidades.

Propiedad

Los tipos de entidad contienen propiedades que definen su estructura y características. Por ejemplo, un tipo de entidad Customer puede tener propiedades como CustomerId, Name y Address.

Las propiedades de un modelo conceptual son análogas a las propiedades definidas en una clase de un programa de equipo. De la misma manera que las propiedades de una clase definen la forma de la clase y llevan información sobre objetos, las propiedades de un modelo conceptual definen la forma de un tipo de entidad y llevan información sobre las instancias de tipo de entidad.

Una propiedad puede contener datos primitivos (como una cadena, un entero o un valor booleano) o datos estructurados (como un tipo complejo). Para obtener más información, consulte Entity Data Model: Primitive Data Types.

Representaciones de un modelo conceptual

Un modelo conceptual es una representación específica de la estructura de algunos datos como entidades y relaciones. Una manera de representar un modelo conceptual es con un diagrama. El siguiente diagrama representa un modelo conceptual con tres tipos de entidad (Book, Publishery ) y Authordos asociaciones (PublishedBy y WrittenBy):

Diagrama que muestra un modelo conceptual con tres tipos de entidad.

Sin embargo, esta representación tiene algunas deficiencias cuando se trata de transmitir algunos detalles sobre el modelo. Por ejemplo, el tipo de propiedad y la información del conjunto de entidades no se transmiten en el diagrama. La riqueza de un modelo conceptual se puede transmitir más claramente con un lenguaje específico del dominio (DSL). El ADO.NET Entity Framework usa un DSL basado en XML denominado lenguaje de definición de esquema conceptual (CSDL) para definir modelos conceptuales. A continuación se muestra la definición de CSDL del modelo conceptual en el 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>

Consulte también