Klausa ‘ON DELETE CASCADE’ pada SQL merupakan salah satu cara untuk menjaga integritas data ketika data di tabel induk (tabel yang memuat primary key) dihapus. Ketika ON DELETE CASCADE pada tabel anak (tabel yang membuat foreign key) tidak didefinisikan, maka kita tidak bisa menghapus data di tabel induk. Catatan ini adalah tentang bagaimana menambahkan klausa ON DELETE CASCADE pada tabel yang sudah terdefinisi foreign key-nya. Di sini digunakan Oracle database.
Anggap kita memiliki 2 tabel s_departments dan s_employees. Di sini s_departments memiliki department_id dan diacu oleh s_employees. Satu employee terdaftar di satu department. SQL untuk kedua tabel tersebut beserta datanya adalah sebagai berikut :
CREATE TABLE s_departments ( dep_id number(2) constraint depid_sdeptartments_pk PRIMARY KEY, dep_name varchar2(20) ) INSERT INTO s_departments VALUES(1,'HRD') INSERT INTO s_departments VALUES(2,'SCM') CREATE TABLE s_employees ( emp_id number(2) constraint empid_semployees_pk PRIMARY KEY, emp_name varchar2(30), dep_id number(2), CONSTRAINT depid_sdepartments_fk FOREIGN KEY(dep_id) REFERENCES s_departments(dep_id) ) INSERT INTO s_employees VALUES(10,'Anang',1) INSERT INTO s_employees VALUES(11,'Benny',2)
Dari statement di atas maka perintah DELETE berikut tidak akan bisa dijalankan.
DELETE FROM departments WHERE department_id=1
Di sini kita perlu menambahkan ‘ON DELETE CASCADE’ pada tabel yang sudah ada, dalam hal ini s_employees, supaya ketika ada data department yang dihapus, data employee yang mengacu ke data department tersebut ikut terhapus. Salah satu caranya adalah dengan men-DROP foreign key yang ada di tabel s_employees dan membuatnya lagi dengan cara memodifikasi s_employees menggunakan klausa ALTER sebagai berikut:
ALTER TABLE s_employees DROP CONSTRAINT depid_sdepartments_fk ALTER TABLE s_employees ADD CONSTRAINT depid_sdepartments_fk FOREIGN KEY(dep_id) REFERENCES s_departments(dep_id) ON DELETE CASCADE;
Pernyataan di atas akan menghapus foreign key sesuai dengan namanya (depid_sdepartments_fk), kemudian menambahkan constraint foreign key dengan nama yang sama dengan sebelumnya, ditambahkan ON DELETE CASCADE pada akhir pendefinisiannya.
Selamat mencoba !