Dela via


Nyckelbegrepp för entitetsdatamodell

Entitetsdatamodellen (EDM) använder tre viktiga begrepp för att beskriva strukturen för data: entitetstyp, associationstyp och egenskap. Det här är de viktigaste begreppen när det gäller att beskriva datastrukturen i varje implementering av EDM.

Enhetstyp

Entitetstypen är den grundläggande byggstenen för att beskriva strukturen för data med entitetsdatamodellen. I en konceptuell modell konstrueras entitetstyper utifrån egenskaper och beskriver strukturen för begrepp på toppnivå, till exempel kunder och beställningar i ett affärsprogram. På samma sätt som en klassdefinition i ett datorprogram är en mall för instanser av klassen är en entitetstyp en mall för entiteter. En entitet representerar ett specifikt objekt (till exempel en specifik kund eller beställning). Varje entitet måste ha en unik entitetsnyckel i en entitetsuppsättning. En entitetsuppsättning är en samling instanser av en viss entitetstyp. Entitetsuppsättningar (och associationsuppsättningar) grupperas logiskt i en entitetscontainer.

Arv stöds med entitetstyper: en entitetstyp kan härledas från en annan. Mer information finns i Entitetsdatamodell: Arv.

Associationstyp

En associationstyp (kallas även en association) är den grundläggande byggstenen för att beskriva relationer i entitetsdatamodellen. I en konceptmodell representerar en association en relation mellan två entitetstyper (till exempel Kund och Order). Varje association har två associationsslut som anger de entitetstyper som ingår i associationen. Varje associationsslut anger också en associationsluts multiplicitet som anger antalet entiteter som kan finnas i den änden av associationen. En association slut multiplicity kan ha ett värde på en (1), noll eller en (0..1) eller många (*). Entiteter i ena änden av en association kan nås via navigeringsegenskaper eller via sekundärnycklar om de exponeras för en entitetstyp. Mer information finns i egenskapen sekundärnyckel.

I ett program representerar en instans av en association en specifik association (till exempel en association mellan en instans av kunden och instanser av Order). Associationinstanser grupperas logiskt i en associationsuppsättning. Associationsuppsättningar (och entitetsuppsättningar) grupperas logiskt i en entitetscontainer.

Property

Entitetstyper innehåller egenskaper som definierar deras struktur och egenskaper. En kundentitetstyp kan till exempel ha egenskaper som CustomerId, Namn och Adress.

Egenskaper i en konceptmodell motsvarar egenskaper som definierats i en klass i ett datorprogram. På samma sätt som egenskaper för en klass definierar klassens form och bär information om objekt, definierar egenskaper i en konceptmodell formen på en entitetstyp och bär information om entitetstypinstanser.

En egenskap kan innehålla primitiva data (till exempel en sträng, ett heltal eller ett booleskt värde) eller strukturerade data (till exempel en komplex typ). Mer information finns i Entitetsdatamodell: Primitiva datatyper.

Representationer av en konceptmodell

En konceptuell modell är en specifik representation av strukturen för vissa data som entiteter och relationer. Ett sätt att representera en konceptmodell är med ett diagram. Följande diagram representerar en konceptmodell med tre entitetstyper (Book, , och Author) och två associationer (PublishedBy och WrittenByPublisher):

Diagram showing a conceptual model with three entity types.

Den här representationen har dock vissa brister när det gäller att förmedla viss information om modellen. Till exempel förmedlas inte egenskapstyp och entitetsuppsättningsinformation i diagrammet. En konceptmodells rikedom kan förmedlas tydligare med ett domänspecifikt språk (DSL). ADO.NET Entity Framework använder en XML-baserad DSL som kallas CSDL (Conceptual Schema Definition Language) för att definiera konceptuella modeller. Följande är CSDL-definitionen av den konceptuella modellen i diagrammet ovan:

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

Se även