Katakanlah kita tetap menggunakan id
Peningkatan Otomatis kolom sebagai Kunci Utama. Sekarang, kita juga perlu memastikan bahwa datanya konsisten, yaitu , tidak ada baris duplikat untuk kombinasi (student_id, course_id)
nilai-nilai. Jadi, kita perlu menangani ini dalam kode aplikasi (melakukan pemilihan setiap kali sebelum menyisipkan/memperbarui), atau kita dapat memperbaiki hal ini secara struktural dengan mendefinisikan UNIQUE
Komposit batasan pada (student_id, course_id)
.
Sekarang, Kunci Utama pada dasarnya adalah Kunci UNIK NOT NULL. Jika Anda melihat definisi tabel Anda, batasan UNIK yang baru didefinisikan ini pada dasarnya adalah Kunci Utama saja (karena bidangnya juga BUKAN NULL). Jadi, dalam kasus khusus ini, Anda tidak perlu menggunakan kunci Utama Pengganti id
.
Perbedaan overhead selama DML acak (Sisipkan/Perbarui/Hapus) akan minimal, karena Anda juga akan memiliki overhead yang sama saat menggunakan indeks UNIK saja. Jadi, Anda dapat menentukan Kunci Komposit Primer Alami (student_id, course_id)
:
-- Drop the id column
ALTER TABLE students_courses DROP COLUMN id;
-- Add the composite Primary Key
ALTER TABLE students_courses ADD PRIMARY(student_id, course_id);
Di atas juga akan memberlakukan batasan UNIK pada kombinasi (student_id, course_id)
. Selain itu, Anda akan menghemat 4 byte per baris (ukuran int
adalah 4 byte). Ini akan berguna jika Anda memiliki meja besar.
Sekarang, saat Bergabung dari students
ke students_courses
tabel, di atas Kunci Utama akan menjadi indeks yang cukup. Namun, jika Anda perlu Bergabung dari courses
ke students_courses
tabel, Anda akan memerlukan kunci lain untuk tujuan ini. Jadi, Anda dapat menentukan satu kunci lagi di course_id
sebagai berikut:
ALTER TABLE students_courses ADD INDEX (course_id);
Selain itu, Anda harus menentukan batasan Kunci Asing untuk memastikan integritas data:
ALTER TABLE students_courses ADD FOREIGN KEY (student_id)
REFERENCES students(student_id);
ALTER TABLE students_courses ADD FOREIGN KEY (course_id)
REFERENCES courses(course_id);