Delen via


entiteitssleutel

Een entiteitssleutel is een eigenschap of een set eigenschappen van een entiteitstype die worden gebruikt om de identiteit te bepalen. De eigenschappen waaruit een entiteitssleutel bestaat, worden gekozen tijdens het ontwerp. De waarden van eigenschappen van entiteitssleutels moeten een exemplaar van het entiteitstype uniek identificeren binnen een entiteit die tijdens de runtime is ingesteld . De eigenschappen waaruit een entiteitssleutel bestaat, moeten worden gekozen om de uniekheid van exemplaren in een entiteitsset te garanderen.

Hier volgen de vereisten voor een set eigenschappen die een entiteitssleutel moeten zijn:

  • Er kunnen geen twee entiteitssleutels binnen een entiteitsset identiek zijn. Voor twee entiteiten binnen een entiteitsset kunnen de waarden voor alle eigenschappen die een sleutel vormen, dus niet hetzelfde zijn. Sommige (maar niet alle) waarden waaruit een entiteitssleutel bestaat, kunnen echter hetzelfde zijn.

  • Een entiteitssleutel moet bestaan uit een set niet-nullable, onveranderbare, primitieve typeeigenschappen.

  • De eigenschappen waaruit een entiteitssleutel voor een bepaald entiteitstype bestaat, kunnen niet worden gewijzigd. U kunt niet meer dan één mogelijke entiteitssleutel toestaan voor een bepaald entiteitstype; surrogaatsleutels worden niet ondersteund.

  • Wanneer een entiteit betrokken is bij een overnamehiërarchie, moet de hoofdentiteit alle eigenschappen bevatten waaruit de entiteitssleutel bestaat en moet de entiteitssleutel worden gedefinieerd op het type hoofdentiteit. Zie Entity Data Model: Overname voor meer informatie.

Opmerking

In het onderstaande diagram ziet u een conceptueel model met drie entiteitstypen: Book, Publisheren Author. De eigenschappen van elk entiteitstype waaruit de entiteitssleutel bestaat, worden aangeduid met '(Key)'. Houd er rekening mee dat het Author entiteitstype een entiteitssleutel heeft die bestaat uit twee eigenschappen en Name Address.

Example model with three entity types

De ADO.NET Entity Framework maakt gebruik van een domeinspecifieke taal (DSL) genaamd conceptuele schemadefinitietaal (CSDL) om conceptuele modellen te definiëren. In de onderstaande CSDL wordt het Book entiteitstype gedefinieerd dat in het bovenstaande diagram wordt weergegeven. Houd er rekening mee dat de entiteitssleutel wordt gedefinieerd door te verwijzen naar de ISBN eigenschap van het entiteitstype.

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

De ISBN eigenschap is een goede keuze voor de entiteitssleutel omdat een International Standard Book Number (ISBN) een boek uniek identificeert.

In de onderstaande CSDL wordt het Author entiteitstype gedefinieerd dat in het bovenstaande diagram wordt weergegeven. Houd er rekening mee dat de entiteitssleutel bestaat uit twee eigenschappen en Name Address.

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

Het gebruik Name en Address voor de entiteitssleutel is een redelijke keuze, omdat twee auteurs van dezelfde naam waarschijnlijk niet op hetzelfde adres wonen. Deze keuze voor een entiteitssleutel garandeert echter niet absoluut unieke entiteitssleutels in een entiteitsset. Het toevoegen van een eigenschap, zoals AuthorId, die kan worden gebruikt om een auteur uniek te identificeren, wordt in dit geval aanbevolen.

Zie ook