Foreign Key, Relationship dan Referential Integrity di MySQL
Posted by Rozaq D' Acewell™
Ada beberapa mahasiswa saya yang bertanya, “Pak… bisa tidak di MySQL diterapkan konsep Foreign Key dan Referential Integrity seperti halnya di MS. Access?”. Memang dalam MS. Access kita bisa melakukan setting relasi antar tabel, yang menggambarkan hubungan PRIMARY KEY dan FOREIGN KEY antar tabel.
Sebagai contoh, misalkan dalam kasus pengambilan matakuliah mahasiswa. Dalam kasus ini misalkan terdapat tabel induk bernama ‘MHS’ yang di dalamnya terdapat field NIM, NAMAMHS. Tabel induk yang lain adalah ‘MK’ untuk menyimpan data matakuliah dengan field-fieldnya KODEMK, NAMAMK. Dalam hal ini field NIM dan KODEMK masing-masing adalah primary key pada tabel ‘MHS’ dan ‘MK’. Selanjutnya ada tabel lain bernama ‘AMBILMK’ dengan field NIM, KODEMK, NILAI yang digunakan untuk menyimpan data pengambilan matakuliah mahasiswa. Nah… dalam hal ini, field NIM dan KODEMK keduanya adalah bertindak sebagai FOREIGN KEY.
Selanjutnya dalam MS. Access terdapat pula fasilitas untuk mengimplementasikan referensial integrity. Misalkan, kita ubah data salah satu kode NIM mahasiswa dalam tabel induk ‘MHS’. Nah… secara otomatis proses update ini juga terjadi di tabel ‘AMBILMK’ yaitu pada data yang terkait NIM tersebut. Begitu pula pada proses penghapusan. Sebagai contoh misalkan kita hapus salah satu kode matakuliah di tabel MK, maka secara otomatis data yang terkait dengan kode matakuliah tersebut pada tabel ‘AMBILMK’ akan terhapus.
Nah.. bagaimana dengan MySQL? Kira-kira bisa tidak diterapkan kedua hal di atas seperti halnya MS. Access? Saya jawab TENTU SAJA BISA.
Yang menjadi pertanyaan adalah, “Bagaimana cara melakukannya?”.
Ya… untuk menerapkan konsep FOREIGN KEY dan REFERENTIAL INTEGRITY ini, kita harus mensetting MySQL nya bisa support untuk tabel bertipe INNODB. Biasanya ketika proses instalasi MySQL akan ditanyakan apakah databasenya support dengan INNODB? Untuk hal ini, Anda harus jawab YA. Namun.. bila proses instalasi Anda terlanjur tidak memilih support INNODB, maka cara mengaktifkan INNODB adalah buka file “my.ini” lalu cari baris perintah “skip-innodb”. Hapuslah perintah ini, lalu hentikan MySQL dan hidupkan kembali MySQL (restart MySQL).
OK… sekarang kita coba untuk studi kasus. Kita akan membuat database untuk keperluan pengambilan matakuliah mahasiswa seperti pada kasus di atas. Berikut ini, adalah perintah SQL untuk membuat tabel-tabelnya.
Perintah SQL untuk membuat tabel ‘MHS’
1.
CREATE
TABLE
mhs
2.
(
3.
nim
varchar
(8),
4.
namaMhs
varchar
(20),
5.
PRIMARY
KEY
(nim)
6.
) TYPE = INNODB;
Perintah SQL untuk membuat tabel ‘MK’
1.
CREATE
TABLE
mk
2.
(
3.
kodeMK
varchar
(3),
4.
namaMK
varchar
(20),
5.
PRIMARY
KEY
(kodeMK)
6.
) TYPE = INNODB;
Perhatikan kedua perintah SQL di atas. Karena kita akan membuat tabel bertipe INNODB, maka masing-masing perintah SQL diberikan perintah TYPE = INNODB;
Sekarang, kita lanjutkan untuk membuat tabel untuk ‘ambilMK’.
01.
CREATE
TABLE
ambilMK
02.
(
03.
nim
varchar
(8),
04.
kodeMK
varchar
(3),
05.
nilai
float
(3,2),
06.
PRIMARY
KEY
(nim, kodeMK),
07.
FOREIGN
KEY
(nim)
REFERENCES
mhs (nim)
ON
DELETE
CASCADE
ON
UPDATE
CASCADE
,
08.
FOREIGN
KEY
(kodeMK)
REFERENCES
mk (kodeMK)
ON
DELETE
CASCADE
ON
UPDATE
CASCADE
09.
) TYPE = INNODB;
Tabel di atas terdapat dua primary key yaitu NIM dan KODEMK. Sedangkan field NIM ini juga merupakan foreign key yang direferensikan dari field NIM yang ada dalam tabel MHS. Oleh karena itu tambahkan perintah “FOREIGN KEY (nim) REFERENCES mhs (nim)”. Selanjutnya apa maksud dari “ON DELETE CASCADE”? Perintah ini maksudnya bila ada data NIM yang dihapus pada tabel MHS, maka secara otomatis data NIM yang ada dalam tabel AMBILMK ini juga akan terhapus. Sedangkan “ON UPDATE CASCADE” digunakan untuk proses update otomatis pada NIM dalam tabel AMBILMK, apabila NIM yang ada di tabel MHS ini diupdate.
Hal yang sama juga kita terapkan untuk tabel AMBILMK. Dalam hal ini, KODEMK adalah sebagai foreign key yang direfensikan dari KODEMK yang ada dalam tabel MK.
Sekarang coba Anda masukkan data-data berikut ini pada tabel MHS
1.
NIM NAMAMHS
2.
M0197001 Rosihan Ari Yuana
3.
M0197002 Dwi Amalia Fitriani
4.
M0197003 Faza Fauzan
5.
M0197004 Nada Hasanah
6.
M0197005 Muh. Ahsani Taqwim
Masukkan pula data pada tabel MK
1.
KODEMK NAMAMK
2.
M01 Database
3.
M02 OOP
Nah… untuk mengecek referensial integrity, sekarang kita coba masukkan data pada tabel AMBILMK.
1.
INSERT
INTO
ambilmk
VALUES
(
'M0197001'
,
'M01'
, 3.0);
Ketika perintah SQL di atas dijalankan, data dapat dimasukkan ke tabel AMBILMK dengan sukses. Kita lihat bahwa NIM M0197001 terdapat dalam tabel MHS, begitu pula pada kode matakuliah M01 yang ada pada tabel MK.
Sehingga isi tabel AMBILMK menjadi
1.
NIM KODEMK NILAI
2.
M0197001 M01 3.0
Sekarang kita coba masukkan data berikut ini
1.
INSERT
INTO
ambilmk
VALUES
(
'M0197006'
,
'M01'
, 3.0);
Nah… perintah di atas akan menghasilkan error. Hal ini disebabkan NIM M0197006 tidak ada dalam tabel MHS.
Sekarang kita coba melakukan proses update. Kita akan mengupdate NIM M0197001 menjadi M0197010 yang ada dalam tabel MHS.
1.
UPDATE
mhs
SET
nim =
'M0197010'
WHERE
nim =
'M0197001'
;
Hasil query di atas pada tabel MHS menjadi
1.
NIM NAMAMHS
2.
M0197010 Rosihan Ari Yuana
3.
M0197002 Dwi Amalia Fitriani
4.
M0197003 Faza Fauzan
5.
M0197004 Nada Hasanah
6.
M0197005 Muh. Ahsani Taqwim
Sekarang Anda coba lihat isi tabel AMBILMK. Pastilah isinya menjadi berikut ini
1.
NIM KODEMK NILAI
2.
M0197010 M01 3.0
Selanjutnya kita coba update untuk KODEMK yang ada dalam tabel MK. Misalnya akan diubah kode mk M01 menjadi M09.
1.
UPDATE
mk
SET
kodeMK =
'M09'
WHERE
kodeMK =
'M01'
;
Hasil query di atas pada tabel MK adalah
1.
KODEMK NAMAMK
2.
M09 Database
3.
M02 OOP
Nah… bila kita lihat data di tabel AMBILMK, pastilah isinya menjadi
1.
NIM KODEMK NILAI
2.
M0197010 M09 3.0
Bagaimana dengan proses penghapusan? Kita cek aja… sekarang kita coba hapus data mahasiswa berNIM M0197010 dalam tabel MHS.
1.
DELETE
FROM
mhs
WHERE
nim =
'M0197010'
;
Hasil dari query SQL di atas pada tabel MHS adalah
1.
NIM NAMAMHS
2.
M0197002 Dwi Amalia Fitriani
3.
M0197003 Faza Fauzan
4.
M0197004 Nada Hasanah
5.
M0197005 Muh. Ahsani Taqwim
Sekarang bila kita lihat isi tabel AMBILMK, pastilah menjadi kosong karena data pengambilan matakuliah terkait dengan mahasiswa NIM M0197010 ini ikut terhapus.
OK… begitulah penjelasan ini saya tulis. Moga-moga bermanfaat bagi mahasiswaku semua… terus semangat belajar dan pantang menyerah. Indonesia sangat membutuhkanmu