Klíčové koncepty modelu Entity Data Model

Model Entity Data Model (EDM) používá tři klíčové koncepty k popisu struktury dat: typ entity, typ přidružení a vlastnost. Jedná se o nejdůležitější koncepty popisující strukturu dat v jakékoli implementaci EDM.

Typ entita

Typ entity je základním stavebním blokem pro popis struktury dat pomocí modelu Entity Data Model. V konceptuálním modelu se typy entit vytvářejí z vlastností a popisují strukturu konceptů nejvyšší úrovně, jako jsou zákazníci a objednávky v obchodní aplikaci. Stejně jako definice třídy v počítačovém programu je šablona pro instance třídy, typ entity je šablona pro entity. Entita představuje konkrétní objekt (například konkrétního zákazníka nebo objednávku). Každá entita musí mít jedinečný klíč entity v sadě entit. Sada entit je kolekce instancí konkrétního typu entity. Sady entit (a sady přidružení) se logicky seskupují do kontejneru entit.

Dědičnost je podporována u typů entit: to znamená, že jeden typ entity může být odvozen od jiného. Další informace najdete v tématu Entity Data Model: Dědičnost.

Typ přidružení

Typ přidružení (označovaný také jako asociace) je základním stavebním blokem pro popis relací v modelu Entity Data Model. V konceptuálním modelu přidružení představuje vztah mezi dvěma typy entit (například Zákazník a Objednávka). Každé přidružení má dva konce přidružení , které určují typy entit, které jsou součástí přidružení. Každý konec přidružení také určuje násobnost konce přidružení , která označuje počet entit, které mohou být na konci přidružení. Koncová násobnost přidružení může mít hodnotu 1, nula nebo jednu (0,,1) nebo mnoho (*). Entitám na konci asociace lze přistoupit prostřednictvím navigačních vlastností nebo pomocí cizích klíčů, pokud jsou odkryty u daného typu entity. Další informace naleznete v tématu vlastnost cizího klíče.

Instance přidružení v aplikaci představuje konkrétní přidružení (například přidružení mezi instancí zákazníka a instancemi objednávky). Instance přidružení jsou logicky seskupeny v sadě přidružení. Sady přidružení (a sady entit) se logicky seskupují do kontejneru entit.

Vlastnictví

Typy entit obsahují vlastnosti , které definují jejich strukturu a vlastnosti. Například typ entity Zákazník může mít vlastnosti, jako je CustomerId, Name a Address.

Vlastnosti v konceptuálním modelu jsou podobné vlastnostem definovaným ve třídě v počítačovém programu. Stejně jako vlastnosti třídy definují tvar třídy a přenášejí informace o objektech, vlastnosti v konceptuálním modelu definují tvar typu entity a přenášejí informace o instancích typu entity.

Vlastnost může obsahovat primitivní data (například řetězec, celé číslo nebo logickou hodnotu) nebo strukturovaná data (například komplexní typ). Další informace naleznete v tématu Entity Data Model: Primitivní datové typy.

Reprezentace konceptuálního modelu

Koncepční model je specifická reprezentace struktury některých dat jako entit a relací. Jedním ze způsobů, jak znázorňovat koncepční model, je diagram. Následující diagram představuje koncepční model se třemi typy entit (Book, Publishera ) a Authordvěma přidruženími (PublishedBy a WrittenBy):

Diagram znázorňující koncepční model se třemi typy entit

Tato reprezentace ale má určité nedostatky, pokud jde o vyjádření některých podrobností o modelu. Například informace o typu vlastnosti a sadě entit nejsou v diagramu předávány. Bohatost konceptuálního modelu lze srozumitelněji vyjádřit jazykem specifickým pro doménu (DSL). ADO.NET Entity Framework k definování konceptuálních modelů používá DSL založený na JAZYCE XML označovaný jako jazyk CSDL (Conceptual Schema Definition Language). Následuje definice CSDL konceptuálního modelu v diagramu výše:

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

Viz také