Table of Content
Introduction
foreign key adalah pengenal unik atau kombinasi pengenal unik yang menghubungkan dua tabel atau lebih dalam suatu database.
Secara umum, foreign key biasa digunakan sebagai penanda hubungan antar tabel. Tabel pertama memiliki peran utama sehingga disebut sebagai primary key di dalamnya, dan tabel kedua merupakan foreign key yang biasa disebut dengan kunci asing.
Suatu tabel dapat dikatakan asing jika terdapat kolom yang merupakan rujukan terhadap tabel utama. Selain itu, ada beberapa fungsi foreign key yang akan dijelaskan di bawah ini.
- Foreign key berfungsi untuk membuat database menjadi konsisten dalam mempertahankan integritas referensi. Maka dari itu, database dapat memonitor setiap data yang akan dimasukkan.
- Ketika kamu telah menetapkan primary key pada tabel utama dan meletakkan foreign key pada tabel kedua, maka akan memudahkanmu untuk melihat rancangan fisik database dengan komponen yang saling terkait. Sehingga, kamu tidak perlu membuat rancangan database secara manual.
- Kolom dalam tabel yang digunakan sebagai foreign key akan memudahkan kamu untuk melakukan pengolahan dari setiap data yang tersimpan dalam database karena data tersebut sudah saling terkait satu sama lain.
- Membangun hubungan antar baris yang memiliki peran penting dalam normalisasi relasional database. Pada tahap ini, foreign key berfungsi untuk mengakses tabel lain dan menyortir database.
Kesimpulannya, foreign key adalah sebuah atribut atau gabungan atribut yang terdapat dalam suatu tabel yang digunakan untuk menciptakan hubungan atau relasi antara dua tabel.
Referensi : kumparan.com
Migrations
Sebagai contohnya saya membuat table likes yang terhubung dengan 2 table. table users dan cards. Perlu diingat bila table yang ingin kita hubungkan harus berada diatas. Kita ingin menghubungkan table likes dengan table cards. Pastikan posisi file migrations cards diatas table likes. Secara logika, akan error bila kita ingin menghubungkan table A ke table B yang belum dibuat.
$table->increments('id_like');
$table->unsignedInteger('id_card');
$table->unsignedInteger('id_user');
$table->integer('id_author');
$table->timestamps();
$table->foreign('id_card')->references('id_card')->on('cards');Notes
Ketika saya ingin menghapus salah satu data di table cards, saya mengalami error seperti berikut. Ini artinya parent row tidak bisa dihapus karena ada child row.
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`zenku`.`likes`, CONSTRAINT `likes_id_card_foreign` FOREIGN KEY (`id_card`) REFERENCES `cards` (`id_card`)) (SQL: delete from `cards` where `id_card` = 8)Solusinya tambahkan ->onDelete(‘cascade’) di child rows
- Parent : cards
- Child : likes
Sehingga ketika cards.id_card 8, likes.id_card 8 ikut berpengaruh
$table->foreign('id_card')
->references('id_card')
->on('cards')
->onDelete('cascade');