Konsep Kunci Model Data Entitas
Model Data Entitas (EDM) menggunakan tiga konsep utama untuk menjelaskan struktur data: jenis entitas, jenis asosiasi, dan properti. Ini adalah konsep terpenting dalam menjelaskan struktur data dalam implementasi EDM apa pun.
Jenis Entitas
Jenis entitas adalah blok penyusun dasar untuk menjelaskan struktur data dengan Model Data Entitas. Dalam model konseptual, jenis entitas dibangun dari properti dan menjelaskan struktur konsep tingkat atas, seperti pelanggan dan pesanan dalam aplikasi bisnis. Dengan cara yang sama seperti definisi kelas dalam program komputer adalah templat untuk instans kelas, jenis entitas adalah templat untuk entitas. Entitas mewakili objek tertentu (seperti pelanggan atau pesanan tertentu). Setiap entitas harus memiliki kunci entitas unik dalam set entitas. Set entitas adalah kumpulan instans dari jenis entitas tertentu. Set entitas (dan set asosiasi) dikelompokkan secara logis dalam kontainer entitas.
Pewarisan didukung dengan jenis entitas: yaitu, satu jenis entitas dapat berasal dari yang lain. Untuk mengetahui informasi selengkapnya, lihat Model Data Entitas: Pewarisan.
Jenis Asosiasi
Jenis asosiasi (juga disebut asosiasi) adalah blok pembangun dasar untuk menjelaskan hubungan dalam Model Data Entitas. Dalam model konseptual, asosiasi mewakili hubungan antara dua jenis entitas (seperti Pelanggan dan Pesanan). Setiap asosiasi memiliki dua akhir asosiasi yang menentukan jenis entitas yang terlibat dalam asosiasi. Setiap ujung asosiasi juga menentukan kardinalitas ujung asosiasi yang menunjukkan jumlah instans jenis entitas yang dapat berada di salah satu ujung asosiasi. Kardinalitas ujung asosiasi dapat memiliki nilai satu (1), nol atau satu (0,.1), atau banyak (*). Instans jenis entitas di salah satu ujung asosiasi dapat diakses melalui properti navigasi atau kunci asing jika diekspos pada jenis entitas. Untuk informasi selengkapnya, lihat properti kunci asing.
Dalam aplikasi, instans asosiasi mewakili asosiasi tertentu (seperti hubungan antara instans Pelanggan dan instans Pesanan). Instans asosiasi dikelompokkan secara logis dalam set asosiasi. Set asosiasi (dan set asosiasi) dikelompokkan secara logis dalam kontainer entitas.
Properti
Jenis entitas berisi properti yang menentukan struktur dan karakteristiknya. Misalnya, jenis entitas Pelanggan mungkin memiliki properti seperti CustomerId, Nama, dan Alamat.
Properti dalam model konseptual adalah sama dengan properti yang ditentukan pada kelas dalam program komputer. Dengan cara yang sama bahwa properti pada kelas menentukan bentuk kelas dan membawa informasi tentang objek, properti dalam model konseptual menentukan bentuk jenis entitas dan membawa informasi tentang instans jenis entitas.
Properti dapat berisi data primitif (seperti string, bilangan bulat, atau nilai Boolean), atau data terstruktur (seperti jenis kompleks). Untuk informasi selengkapnya, lihat Model Data Entitas: Jenis Data Primitif.
Representasi Model Konseptual
Model konseptual adalah representasi khusus dari struktur beberapa data sebagai entitas dan hubungan. Salah satu cara untuk mewakili model konseptual adalah dengan diagram. Diagram berikut mewakili model konseptual dengan tiga jenis entitas (Book
, Publisher
, dan Author
) dan dua asosiasi (PublishedBy
dan WrittenBy
):
Representasi ini, bagaimana pun, memiliki beberapa kekurangan dalam hal menyampaikan beberapa detail tentang model. Misalnya, jenis properti dan informasi set entitas tidak disampaikan dalam diagram. Kekayaan model konseptual dapat disampaikan lebih jelas dengan bahasa khusus domain (DSL). Entity Framework ADO.NET menggunakan DSL berbasis XML yang disebut bahasa pemrogram definisi skema konseptual (CSDL) untuk menentukan model konseptual. Berikut ini adalah definisi CSDL dari model konseptual dalam diagram di atas:
<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>