Kerangka Entitas - Hubungan
Dalam database relasional, hubungan adalah situasi yang ada antara tabel database relasional melalui kunci asing. Kunci Asing (FK) adalah kolom atau kombinasi kolom yang digunakan untuk menetapkan dan menegakkan tautan antara data dalam dua tabel. Diagram berikut berisi tiga tabel.
- Student
- Course
- Enrollment
Pada diagram di atas, Anda dapat melihat semacam asosiasi / hubungan antar tabel. Ada tiga tipe hubungan antar tabel dan hubungan antara tabel berbeda bergantung pada bagaimana kolom terkait ditentukan.
- Hubungan Satu-ke-Banyak
- Hubungan Banyak ke Banyak
- Hubungan Satu-ke-Satu
Hubungan Satu-ke-Banyak
Hubungan satu-ke-banyak adalah jenis hubungan yang paling umum.
Dalam jenis hubungan ini, baris dalam tabel A dapat memiliki banyak baris yang cocok dalam tabel B, tetapi baris dalam tabel B hanya dapat memiliki satu baris yang cocok dalam tabel A.
Kunci asing ditentukan dalam tabel yang mewakili banyak ujung hubungan.
Misalnya, dalam diagram di atas tabel Siswa dan Pendaftaran memiliki hubungan satu-tomany, setiap siswa mungkin memiliki banyak pendaftaran, tetapi setiap pendaftaran hanya dimiliki oleh satu siswa.
Dalam kerangka entitas, hubungan ini juga dapat dibuat dengan kode. Berikut adalah contoh kelas Mahasiswa dan Pendaftaran yang terkait dengan hubungan satu ke banyak.
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
public class Enrollment {
public int EnrollmentID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public Grade? Grade { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
Pada kode di atas, Anda dapat melihat bahwa kelas Siswa berisi kumpulan Pendaftaran, tetapi kelas Pendaftaran memiliki satu Objek Siswa.
Hubungan Banyak ke Banyak
Dalam hubungan banyak-ke-banyak, baris dalam tabel A dapat memiliki banyak baris yang cocok dalam tabel B, dan sebaliknya.
Anda dapat membuat hubungan seperti itu dengan menentukan tabel ketiga, yang disebut tabel persimpangan, yang kunci utamanya terdiri dari kunci asing dari tabel A dan tabel B.
Misalnya, tabel siswa dan kursus memiliki hubungan banyak ke banyak yang ditentukan oleh hubungan satu ke banyak dari setiap tabel ini ke tabel pendaftaran.
Kode berikut berisi kelas Kursus dan dua kelas di atas, yaitu, Student dan Enrollment.
public class Course {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CourseID { get; set; }
public string Title { get; set; }
public int Credits { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
Anda dapat melihat bahwa kelas Kursus dan kelas Siswa memiliki koleksi objek Pendaftaran yang membuat hubungan banyak-ke-banyak melalui kelas persimpangan Pendaftaran.
Hubungan Satu-ke-Satu
Dalam hubungan satu-ke-satu, baris dalam tabel A tidak dapat memiliki lebih dari satu baris yang cocok dalam tabel B, dan sebaliknya.
Hubungan satu-ke-satu dibuat jika kedua kolom terkait adalah kunci utama atau memiliki batasan unik.
Dalam hubungan satu-ke-satu, kunci utama bertindak sebagai kunci asing dan tidak ada kolom kunci asing terpisah untuk tabel mana pun.
Jenis hubungan ini tidak umum karena sebagian besar informasi yang terkait dengan cara ini semuanya ada dalam satu tabel. Anda dapat menggunakan hubungan satu-ke-satu untuk -
- Bagilah tabel dengan banyak kolom.
- Pisahkan bagian dari tabel untuk alasan keamanan.
- Menyimpan data yang berumur pendek dan dapat dengan mudah dihapus hanya dengan menghapus tabel.
- Simpan informasi yang hanya berlaku untuk subset dari tabel utama.
Kode berikut untuk menambahkan nama kelas StudentProfile yang berisi id email siswa dan password.
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
public virtual StudentProfile StudentProfile { get; set; }
}
public class StudentProfile {
public StudentProfile() {}
public int ID { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public virtual Student Student { get; set; }
}
Anda dapat melihat bahwa kelas entitas siswa berisi properti navigasi StudentProfile dan StudentProfile berisi properti navigasi siswa.
Setiap siswa hanya memiliki satu Email dan kata sandi untuk login di domain universitas. Informasi ini dapat ditambahkan ke tabel Siswa tetapi untuk alasan keamanan dipisahkan ke tabel lain.