Delen via


Sleutelconcepten voor entiteitsgegevensmodel

Het EDM (Entity Data Model) gebruikt drie belangrijke concepten om de structuur van gegevens te beschrijven: entiteitstype, koppelingstype en eigenschap. Dit zijn de belangrijkste concepten bij het beschrijven van de structuur van gegevens in elke implementatie van de EDM.

Entiteitstype

Het entiteitstype is de fundamentele bouwsteen voor het beschrijven van de structuur van gegevens met het Entiteitsgegevensmodel. In een conceptueel model worden entiteitstypen samengesteld op basis van eigenschappen en worden de structuur van concepten op het hoogste niveau beschreven, zoals klanten en orders in een bedrijfstoepassing. Op dezelfde manier dat een klassedefinitie in een computerprogramma een sjabloon is voor exemplaren van de klasse, is een entiteitstype een sjabloon voor entiteiten. Een entiteit vertegenwoordigt een specifiek object (zoals een specifieke klant of bestelling). Elke entiteit moet een unieke entiteitssleutel hebben binnen een entiteitsset. Een entiteitsset is een verzameling exemplaren van een specifiek entiteitstype. Entiteitssets (en koppelingssets) worden logisch gegroepeerd in een entiteitscontainer.

Overname wordt ondersteund met entiteitstypen: dat wil gezegd: het ene entiteitstype kan worden afgeleid van een ander. Zie Entity Data Model: Overname voor meer informatie.

Koppelingstype

Een koppelingstype (ook wel een koppeling genoemd) is de fundamentele bouwsteen voor het beschrijven van relaties in het Entiteitsgegevensmodel. In een conceptueel model vertegenwoordigt een koppeling een relatie tussen twee entiteitstypen (zoals Klant en Order). Elke koppeling heeft twee uiteinden die de entiteitstypen opgeven die betrokken zijn bij de koppeling. Elk koppelingseindeinde geeft ook een multipliciteit aan die het aantal entiteiten aangeeft dat aan dat einde van de koppeling kan zijn. Een koppelingseinde multipliciteit kan een waarde hebben van één (1), nul of één (0,.1) of veel (*). Entiteiten aan het ene uiteinde van een koppeling kunnen worden geopend via navigatie-eigenschappen of via refererende sleutels als ze worden weergegeven op een entiteitstype. Zie refererende sleuteleigenschap voor meer informatie.

In een toepassing vertegenwoordigt een instantie van een koppeling een specifieke koppeling (zoals een koppeling tussen een exemplaar van klant en exemplaren van order). Koppelingsexemplaren worden logisch gegroepeerd in een koppelingsset. Koppelingssets (en entiteitssets) worden logisch gegroepeerd in een entiteitscontainer.

Eigenschappen

Entiteitstypen bevatten eigenschappen die hun structuur en kenmerken definiëren. Een entiteitstype Klant kan bijvoorbeeld eigenschappen hebben, zoals CustomerId, Name en Address.

Eigenschappen in een conceptueel model zijn vergelijkbaar met eigenschappen die zijn gedefinieerd in een klasse in een computerprogramma. Op dezelfde manier als de eigenschappen van een klasse de vorm van de klasse definiëren en informatie over objecten bevatten, definiëren eigenschappen in een conceptueel model de vorm van een entiteitstype en bevatten informatie over instanties van entiteitstypen.

Een eigenschap kan primitieve gegevens bevatten (zoals een tekenreeks, een geheel getal of een Booleaanse waarde) of gestructureerde gegevens (zoals een complex type). Zie Entiteitsgegevensmodel: Primitieve gegevenstypen voor meer informatie.

Representaties van een conceptueel model

Een conceptueel model is een specifieke weergave van de structuur van sommige gegevens als entiteiten en relaties. Een manier om een conceptueel model weer te geven, is met een diagram. Het volgende diagram vertegenwoordigt een conceptueel model met drie entiteitstypen (Book, Publisheren ) en Authortwee koppelingen (PublishedBy en WrittenBy):

Diagram showing a conceptual model with three entity types.

Deze weergave heeft echter enkele tekortkomingen als het gaat om het overbrengen van enkele details over het model. Informatie over het eigenschapstype en de entiteitsset worden bijvoorbeeld niet overgebracht in het diagram. De rijkdom van een conceptueel model kan duidelijker worden overgebracht met een domeinspecifieke taal (DSL). De ADO.NET Entity Framework maakt gebruik van een OP XML gebaseerde DSL die de conceptuele schemadefinitietaal (CSDL) wordt genoemd om conceptuele modellen te definiëren. Hier volgt de CSDL-definitie van het conceptuele model in het bovenstaande diagram:

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

Zie ook