BLOG | eabil-PLC

Profile

Bil'ticle

Artikel 5: Menjaga Integritas Data dengan Constrained Foreign Keys - Perwira Learning Center

By nabil alifah rahman • Maret 15, 2026

A. Latar Belakang

Bayangkan kamu punya toko online. Suatu hari admin tidak sengaja menghapus kategori "Elektronik" dari database. Padahal ada 200 produk yang masuk kategori itu. Hasilnya? 200 produk tersebut sekarang punya category_id yang menunjuk ke data yang sudah tidak ada. Aplikasi pun error.

Kejadian seperti ini disebut data rusak atau orphaned data — data anak yang kehilangan induknya. Dan ini adalah masalah nyata yang sering dialami developer pemula karena lupa mengatur aturan di database.

Kabar baiknya, Laravel menyediakan cara yang sangat mudah untuk mencegah hal ini terjadi, yaitu dengan Foreign Key Constraint. Cukup tambahkan beberapa baris di migration, database akan otomatis menjaga data tetap aman.

B. Pengertian Integritas Data dan Foreign Key Constraint

Analogi Mudah

Bayangkan database seperti sebuah gedung apartemen.

• Tabel categories = lantai/blok apartemen
• Tabel products = penghuni di tiap lantai
• Kolom category_id = nomor kamar yang dihuni produk

Foreign Key Constraint = peraturan gedung yang bilang:
"Penghuni tidak boleh tercatat di nomor kamar yang tidak ada!"
Dan "Lantai tidak boleh dihancurkan kalau masih ada penghuni di dalamnya!"

Secara teknis, Foreign Key Constraint adalah aturan di database yang memastikan nilai di kolom category_id pada tabel products selalu merujuk ke baris yang benar-benar ada di tabel categories.

C. Konsep dan Pembahasan

3 Pilihan Perilaku Saat Data Induk Dihapus

Ketika sebuah kategori dihapus, kita perlu menentukan: apa yang terjadi pada produk-produk di dalamnya? Ada 3 pilihan utama:

 

D. Alat dan Bahan

 

E. Praktik Implementasi

Kita akan belajar 3 cara menjaga integritas data dari yang paling dasar.

1. Menambahkan Foreign Key di Migration

Langkah paling penting dan paling dasar. Buka file migration tabel products  (dari Artikel 1), pastikan ada baris foreignId seperti ini:

 


Setelah mengubah migration, jalankan ulang: 


2. Coba Buktikan Constraint Bekerja

Sekarang kita buktikan bahwa database benar-benar menolak data yang tidak valid. Gunakan Laravel Tinker — seperti kalkulator interaktif untuk Laravel.

# Buka tinker di terminal php artisan tinker


 Sekarang coba buktikan efek CASCADE (jika kamu memilih pilihan 1 tadi):


 

3. Menambahkan Validasi di Controller (Lapisan Kedua)

Foreign key constraint bekerja di level database. Tapi pesan errornya teknikal dan tidak ramah pengguna. Sebaiknya kita juga tambahkan validasi di Controller agar pesan error bisa kita kontrol.

Contoh: sebelum menghapus kategori, cek dulu apakah masih ada produk di dalamnya:

 


Kenapa Perlu Dua Lapisan?
Database constraint = penjaga terakhir, selalu aktif, tidak bisa dilewati
Validasi di Controller = penjaga pertama, memberikan pesan error yang ramah pengguna

Ibaratnya seperti satpam di pintu depan (Controller) dan brankas yang terkunci (Database). Dua-duanya tetap dibutuhkan.

Rangkuman: Mana yang Harus Dipilih?

 

F. Kesimpulan

Menjaga integritas data tidak harus rumit. Bagi pemula, cukup fokus pada 3 hal utama yang sudah kita pelajari:

  • Foreign Key Constraint di Migration — cukup tambahkan constrained() saat membuat kolom foreign key. Database otomatis menolak data yang tidak valid.
  • Validasi di Controller — cek apakah data induk masih memiliki anak sebelum dihapus, dan tampilkan pesan error yang ramah pengguna.
  • Soft Delete — tambahkan use SoftDeletes di model jika kamu tidak mau data hilang permanen.

Dengan tiga langkah di atas, data di aplikasi kamu sudah terlindungi dari kesalahan yang umum terjadi. Setelah memahami ini, kamu bisa lanjut mempelajari konsep yang lebih dalam seperti Model Events dan Database Transaction.

G. Daftar Pustaka

  1. Laravel Documentation. (2024). Database: Migrations — Foreign Key Constraints. https://laravel.com/docs/10.x/migrations#foreign-key-constraints
  2. Laravel Documentation. (2024). Eloquent: Soft Deleting. https://laravel.com/docs/10.x/eloquent#soft-deleting
  3. MySQL Documentation. (2024). FOREIGN KEY Constraints. https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
  4. Otwell, T. (2023). Laravel: Up & Running. O'Reilly Media.
  5. Elmasri, R., & Navathe, S. (2016). Fundamentals of Database Systems, 7th Ed. Pearson.