Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Indeks komposit untuk tabel hubungan

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih record aktif codeigniter, gabung kiri, hitung

  2. Solusi di mysql untuk Indeks parsial atau Indeks yang difilter?

  3. Cara Keluar dari Kutipan Tunggal, Karakter Khusus di MySQL

  4. Memperbaiki kesalahan PHP PEAR

  5. Cara Menggunakan Peran yang Telah Berubah di MySQL 8.0