Condividi tramite


chiave di entità

Una chiave di entità è una proprietà o un set di proprietà di un tipo di entità usato per determinare l'identità. Le proprietà che costituiscono una chiave di entità vengono scelte in fase di progettazione. I valori delle proprietà della chiave di entità devono identificare in modo univoco un'istanza del tipo di entità all'interno di un set di entità in fase di esecuzione. Le proprietà che costituiscono una chiave di entità devono essere scelte per garantire l'univocità delle istanze in un set di entità.

Di seguito sono riportati i requisiti per un set di proprietà come chiave di entità:

  • Nessuna chiave di entità all'interno di un set di entità può essere identica. Ovvero, per due entità all'interno di un set di entità, i valori per tutte le proprietà che costituiscono una chiave non possono essere uguali. Tuttavia, alcuni (ma non tutti) dei valori che costituiscono una chiave di entità possono essere uguali.

  • Una chiave di entità deve essere costituita da un insieme di proprietà di tipo primitivo non nullable e immutabili.

  • Impossibile modificare le proprietà che costituiscono una chiave di entità per un determinato tipo di entità. Non è possibile consentire più di una chiave di entità possibile per un determinato tipo di entità; le chiavi surrogate non sono supportate.

  • Quando un'entità è coinvolta in una gerarchia di ereditarietà, l'entità radice deve contenere tutte le proprietà che costituiscono la chiave di entità e la chiave di entità deve essere definita nel tipo di entità radice. Per altre informazioni, vedere Entity Data Model: Ereditarietà.

Esempio

Il diagramma seguente illustra un modello concettuale con tre tipi di entità: Book, Publishere Author. Le proprietà di ogni tipo di entità che costituiscono la relativa chiave di entità sono indicate con "(Key)". Si noti che il tipo di entità Author ha una chiave di entità costituita da due proprietà, Name e Address.

Modello di esempio con tre tipi di entità

Il ADO.NET Entity Framework usa un linguaggio specifico del dominio (DSL) denominato linguaggio CSDL (Conceptual Schema Definition Language) per definire modelli concettuali. Il file CSDL seguente definisce il Book tipo di entità illustrato nel diagramma precedente. Si noti che la chiave di entità viene definita facendo riferimento alla ISBN proprietà del tipo di entità.

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

La ISBN proprietà è una buona scelta per la chiave di entità perché un numero isBN (International Standard Book Number) identifica in modo univoco un libro.

Il file CSDL seguente definisce il Author tipo di entità illustrato nel diagramma precedente. Si noti che la chiave di entità è costituita da due proprietà e NameAddress.

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

L'uso Name di e Address per la chiave di entità è una scelta ragionevole, perché è improbabile che due autori dello stesso nome si trovino nello stesso indirizzo. Tuttavia, questa scelta per una chiave di entità non garantisce assolutamente chiavi di entità univoca in un set di entità. In questo caso, è consigliabile aggiungere una proprietà, ad esempio AuthorId, che potrebbe essere usata per identificare in modo univoco un autore.

Vedere anche