SQL Foreign Key: Jenis-jenis, Manfaat, Cara Membuat

Berikut jenis-jenis, manfaat, dan cara membuat SQL Foreign Key. Yuk, simak!
Bobby Christian
April 6, 2023
5
min read

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
DAFTAR FULL PROGRAMCOBA COURSE GRATIS

Overview

Sebuah foreign key dalam sebuah tabel merupakan kolom target yang direferensikan oleh sebuah primary key pada tabel referensi lainnya. Primary key dan foreign key ini adalah istilah yang digunakan untuk menggambarkan relasi antar tabel pada database. 

Pada artikel SQL - Primary Key, kita telah membahas mengenai apa itu sebuah primary key, bagaimana cara menggunakannya ketika kita membuat sebuah tabel baru, ataupun bagaimana cara memodifikasinya seperti menambahkan atau menghapus pada tabel yang sudah ada pada database

Ketika kita bicara mengenai primary key, biasanya tidak terlepas dari istilah yang disebut dengan foreign key pada suatu tabel pada database

Apa itu SQL Foreign Key?

Dikutip dari W3School, foreign key adalah sebuah kolom ataupun bisa banyak kolom, yang digunakan untuk mengidentifikasi data pada tabel yang direferensikan oleh primary key pada tabel lain. 

Hubungan Foreign Key dan Primary Key

Hubungan antara primary key dan foreign key biasanya digambarkan dalam sebuah diagram yang disebut dengan entity relationship diagram atau dikenal dengan ERD. Perhatikan contoh ERD berikut ini: 

Pada ERD di atas, kita menggunakan contoh hubungan antar tabel. PK merupakan singkatan dari primary key sedangkan FK merupakan singkatan dari foreign key. Garis hubung yang menghubungkan antar table schema memiliki bentuk yang beragam.

Contoh di atas menggunakan hubungan one-to-one, di mana hubungan antar tabel berupa 1 PK dengan 1 FK. 

Pada tabel criminal_info, kita memiliki sebuah primary key yaitu criminal_id yang memuat informasi ID dari seorang pelaku tindak kriminal. Untuk dapat melihat catatan kejahatannya, kita perlu memanggil ID milik pelaku di tabel lain yang memuat catatan kejahatan, yaitu kolom facts pada tabel criminal_records

ID dari kriminal tersebut ada pada tabel criminal_info, sedangkan informasi yang ingin kita peroleh berada pada tabel criminal_records pada kolom facts. Untuk dapat menghubungkan kedua tabel ini, pada diagram di atas telah digambarkan hubungan antara PK dan FK kedua tabel. 

Pertama, kita mengacu kepada PK criminal_id pada kolom criminal_info, di mana kolom ini berisikan data kriminal yang kita miliki. Kita akan memasangkan data criminal_id ini dengan data pada arrest_id, di mana pada definisinya, sebuah FK atau foreign key merupakan kolom yang direferensikan oleh PK. 

Karena sifatnya direferensikan, sudah pasti data pada kolom criminal_id ini sama dengan arrest_id. Apabila ada data yang tidak match pada kedua kolom ini, maka query akan mengembalikan NULL values. Setelah data pada kedua kolom tersebut match, maka kita bisa memanggil kolom yang ada pada tabel criminal_records

Kita juga dapat melihat hubungan antara tabel criminal_records dengan officer_info. Tabel officer_info memiliki informasi petugas yang berada pada kota tersebut, termasuk nama dan juga license negaranya. 

Di sini, kita ingin mengetahui siapa petugas yang bertanggung jawab untuk menangani kasus kriminal yang ada pada tabel criminal_records. Oleh karena itu, PK pada tabel officer_info -> officer_id, akan dipasangkan pada FK di tabel target yang adalah criminal_records, pada kolom officer_id

Pada praktiknya, hubungan relasi antar tabel ini diaplikasikan pada sebuah query dalam SQL, yaitu join, yang akan dijelaskan pada artikel terpisah. 

Ketika kita melakukan perintah join pada dua atau lebih tabel yang ada, primary key dan foreign key pada kedua tabel dijadikan acuan untuk menghubungkan kedua tabel tersebut dengan join

Cara Membuat dan Contoh Foreign Key di SQL

Cara penentuan sebuah foreign key ketika melakukan query hampir mirip dengan bagaimana kita menentukan sebuah primary key. Kita akan mengambil contoh untuk membuat hubungan primary key - foreign key menggunakan basis ERD yang sudah kita buat sebelumnya. 

Perhatikan contoh cara pembuatan foreign key pada tabel berikut: 

Pada contoh di atas, kita membuat ulang tabel criminal_info dan criminal_reason, sama seperti pada contoh di artikel SQL - Primary Key. Berdasarkan informasi yang ada pada ERD, kita mengetahui bahwa arrest_id pada tabel criminal_reason merupakan sebuah foreign key dari primary key criminal_id yang ada pada tabel criminal_info

Maka, pada tabel criminal_reason, kita menuliskan FOREIGN KEY(<column_name>) REFERENCES <reference_table_name>(<reference_column_name>). Sebuah foreign key tidak akan muncul pada table editor, namun pada tabel tersebut, kita telah menentukan hubungan relasi antar tabel criminal_info dengan criminal_reason

Pada ERD sebelumnya, criminal_reason juga memiliki hubungan relasi antar tabel dengan tabel officer_info, oleh karena itu kita akan membuat ulang tabel officer_info, perhatikan contoh berikut ini:

Pada contoh di atas, kita membuat ulang tabel officer_info, lalu kita sekaligus mengubah constraint pada tabel criminal_reason agar memiliki foreign key yang terhubung dengan tabel officer_info yang kita buat. 

Untuk menambah constraint foreign key pun caranya sama seperti kita menambahkan constraint primary key pada tabel yang sudah ada, dengan format query: 

ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>) REFERENCES <references_table_name>(<references_column_name>)

Apabila kita ingin mengecek constraint yang telah kita buat sebelumnya, kita dapat menggunakan query SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE. Perhatikan contoh berikut ini:

Walaupun constraint_name tidak muncul ketika kita membuat constraint untuk sebuah foreign key, namun ketika kita melihat CONSTRAINT_COLUMN_USAGE, maka kita dapat menemukan beberapa constraint foreign key yang kita buat sebelumnya. 

{{COMPONENT_IDENTIFIER}}

Sama seperti pada halnya primary key, sebuah constraint foreign key pun dapat kita hapus dari sebuah tabel. Pada contoh setelah ini, kita akan mencoba untuk menghapus constraint foreign key dari tabel criminal_reason. Perhatikan contoh berikut:

Cara untuk menghapus constraint foreign key pun sama seperti kita menghapus constraint primary key, yaitu dengan memanggil query ALTER TABLE <column_name> DROP CONSTRAINT <constraint_name>

Setelah kita memanggil query ini, kita tidak bisa mengecek foreign key pada index dalam table editor. Karena itu, kita akan mencoba mengambil data constraint dari tabel CONSTRAINT_COLUMN_USAGE lagi untuk membandingkan dengan gambar sebelumnya. Perhatikan gambar berikut ini: 

Perhatikan perbedaan jumlah data pada gambar di atas dengan gambar tabel constraint sebelumnya. Pada tabel constraint sebelumnya, kita memiliki lima data, di mana ada dua data foreign key pada tabel criminal_reason

Ketika kita melakukan DROP CONSTRAINT pada tabel criminal_reason, maka constraint foreign key yang telah kita buat akan dihapus. Namun sama seperti pada SQL - Primary Key, walaupun kita tidak menentukan foreign key pada tabel criminal_reason, bukan berarti kita tidak bisa menentukan hubungan antara tabel officer_info sebagai references dan criminal_reason

Ketika kita melakukan sebuah operasi query yang menentukan relasi antar tabel, contohnya operasi join, kita tetap bisa memanggil kolom officer_id pada tabel criminal_reason sebagai target kolom yang kita tuju sebagai foreign key

Penutup

Sebuah foreign key dalam sebuah tabel merupakan kolom target yang direferensikan oleh sebuah primary key pada tabel referensi lainnya. Primary key dan foreign key ini adalah istilah yang digunakan untuk menggambarkan relasi antar tabel pada database

Karena merupakan sebuah istilah untuk penggambaran relasi, maka kita bisa saja tidak menentukan constraint tersebut dalam tabel, asalkan programmer tersebut mengetahui konsep dari primary key dan foreign key, dan tahu bagaimana cara menggunakannya.

Terutama untuk menentukan relasi antar banyak tabel yang mungkin digunakan untuk pengambilan informasi pada database.

Bobby Christian
Bobby is a BI Analyst at FnB company. Is an enthusiast in the Data Industry, having some experience in Data Scientist, Data Engineer, and BI Analyst.

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!

Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)

Artikel Lainnya

Mau belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
Menu

Mulai karirmu dalam

Data Analytics

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

DAFTAR FULL PROGRAM

Mau Belajar

Data Analytics

?

SQL Foreign Key: Jenis-jenis, Manfaat, Cara Membuat

Berikut jenis-jenis, manfaat, dan cara membuat SQL Foreign Key. Yuk, simak!
Bobby Christian
April 6, 2023
5
min read

Overview

Sebuah foreign key dalam sebuah tabel merupakan kolom target yang direferensikan oleh sebuah primary key pada tabel referensi lainnya. Primary key dan foreign key ini adalah istilah yang digunakan untuk menggambarkan relasi antar tabel pada database. 

Pada artikel SQL - Primary Key, kita telah membahas mengenai apa itu sebuah primary key, bagaimana cara menggunakannya ketika kita membuat sebuah tabel baru, ataupun bagaimana cara memodifikasinya seperti menambahkan atau menghapus pada tabel yang sudah ada pada database

Ketika kita bicara mengenai primary key, biasanya tidak terlepas dari istilah yang disebut dengan foreign key pada suatu tabel pada database

Apa itu SQL Foreign Key?

Dikutip dari W3School, foreign key adalah sebuah kolom ataupun bisa banyak kolom, yang digunakan untuk mengidentifikasi data pada tabel yang direferensikan oleh primary key pada tabel lain. 

Hubungan Foreign Key dan Primary Key

Hubungan antara primary key dan foreign key biasanya digambarkan dalam sebuah diagram yang disebut dengan entity relationship diagram atau dikenal dengan ERD. Perhatikan contoh ERD berikut ini: 

Pada ERD di atas, kita menggunakan contoh hubungan antar tabel. PK merupakan singkatan dari primary key sedangkan FK merupakan singkatan dari foreign key. Garis hubung yang menghubungkan antar table schema memiliki bentuk yang beragam.

Contoh di atas menggunakan hubungan one-to-one, di mana hubungan antar tabel berupa 1 PK dengan 1 FK. 

Pada tabel criminal_info, kita memiliki sebuah primary key yaitu criminal_id yang memuat informasi ID dari seorang pelaku tindak kriminal. Untuk dapat melihat catatan kejahatannya, kita perlu memanggil ID milik pelaku di tabel lain yang memuat catatan kejahatan, yaitu kolom facts pada tabel criminal_records

ID dari kriminal tersebut ada pada tabel criminal_info, sedangkan informasi yang ingin kita peroleh berada pada tabel criminal_records pada kolom facts. Untuk dapat menghubungkan kedua tabel ini, pada diagram di atas telah digambarkan hubungan antara PK dan FK kedua tabel. 

Pertama, kita mengacu kepada PK criminal_id pada kolom criminal_info, di mana kolom ini berisikan data kriminal yang kita miliki. Kita akan memasangkan data criminal_id ini dengan data pada arrest_id, di mana pada definisinya, sebuah FK atau foreign key merupakan kolom yang direferensikan oleh PK. 

Karena sifatnya direferensikan, sudah pasti data pada kolom criminal_id ini sama dengan arrest_id. Apabila ada data yang tidak match pada kedua kolom ini, maka query akan mengembalikan NULL values. Setelah data pada kedua kolom tersebut match, maka kita bisa memanggil kolom yang ada pada tabel criminal_records

Kita juga dapat melihat hubungan antara tabel criminal_records dengan officer_info. Tabel officer_info memiliki informasi petugas yang berada pada kota tersebut, termasuk nama dan juga license negaranya. 

Di sini, kita ingin mengetahui siapa petugas yang bertanggung jawab untuk menangani kasus kriminal yang ada pada tabel criminal_records. Oleh karena itu, PK pada tabel officer_info -> officer_id, akan dipasangkan pada FK di tabel target yang adalah criminal_records, pada kolom officer_id

Pada praktiknya, hubungan relasi antar tabel ini diaplikasikan pada sebuah query dalam SQL, yaitu join, yang akan dijelaskan pada artikel terpisah. 

Ketika kita melakukan perintah join pada dua atau lebih tabel yang ada, primary key dan foreign key pada kedua tabel dijadikan acuan untuk menghubungkan kedua tabel tersebut dengan join

Cara Membuat dan Contoh Foreign Key di SQL

Cara penentuan sebuah foreign key ketika melakukan query hampir mirip dengan bagaimana kita menentukan sebuah primary key. Kita akan mengambil contoh untuk membuat hubungan primary key - foreign key menggunakan basis ERD yang sudah kita buat sebelumnya. 

Perhatikan contoh cara pembuatan foreign key pada tabel berikut: 

Pada contoh di atas, kita membuat ulang tabel criminal_info dan criminal_reason, sama seperti pada contoh di artikel SQL - Primary Key. Berdasarkan informasi yang ada pada ERD, kita mengetahui bahwa arrest_id pada tabel criminal_reason merupakan sebuah foreign key dari primary key criminal_id yang ada pada tabel criminal_info

Maka, pada tabel criminal_reason, kita menuliskan FOREIGN KEY(<column_name>) REFERENCES <reference_table_name>(<reference_column_name>). Sebuah foreign key tidak akan muncul pada table editor, namun pada tabel tersebut, kita telah menentukan hubungan relasi antar tabel criminal_info dengan criminal_reason

Pada ERD sebelumnya, criminal_reason juga memiliki hubungan relasi antar tabel dengan tabel officer_info, oleh karena itu kita akan membuat ulang tabel officer_info, perhatikan contoh berikut ini:

Pada contoh di atas, kita membuat ulang tabel officer_info, lalu kita sekaligus mengubah constraint pada tabel criminal_reason agar memiliki foreign key yang terhubung dengan tabel officer_info yang kita buat. 

Untuk menambah constraint foreign key pun caranya sama seperti kita menambahkan constraint primary key pada tabel yang sudah ada, dengan format query: 

ALTER TABLE <table_name> ADD CONSTRAINT <constraint_name> FOREIGN KEY (<column_name>) REFERENCES <references_table_name>(<references_column_name>)

Apabila kita ingin mengecek constraint yang telah kita buat sebelumnya, kita dapat menggunakan query SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE. Perhatikan contoh berikut ini:

Walaupun constraint_name tidak muncul ketika kita membuat constraint untuk sebuah foreign key, namun ketika kita melihat CONSTRAINT_COLUMN_USAGE, maka kita dapat menemukan beberapa constraint foreign key yang kita buat sebelumnya. 

{{COMPONENT_IDENTIFIER}}

Sama seperti pada halnya primary key, sebuah constraint foreign key pun dapat kita hapus dari sebuah tabel. Pada contoh setelah ini, kita akan mencoba untuk menghapus constraint foreign key dari tabel criminal_reason. Perhatikan contoh berikut:

Cara untuk menghapus constraint foreign key pun sama seperti kita menghapus constraint primary key, yaitu dengan memanggil query ALTER TABLE <column_name> DROP CONSTRAINT <constraint_name>

Setelah kita memanggil query ini, kita tidak bisa mengecek foreign key pada index dalam table editor. Karena itu, kita akan mencoba mengambil data constraint dari tabel CONSTRAINT_COLUMN_USAGE lagi untuk membandingkan dengan gambar sebelumnya. Perhatikan gambar berikut ini: 

Perhatikan perbedaan jumlah data pada gambar di atas dengan gambar tabel constraint sebelumnya. Pada tabel constraint sebelumnya, kita memiliki lima data, di mana ada dua data foreign key pada tabel criminal_reason

Ketika kita melakukan DROP CONSTRAINT pada tabel criminal_reason, maka constraint foreign key yang telah kita buat akan dihapus. Namun sama seperti pada SQL - Primary Key, walaupun kita tidak menentukan foreign key pada tabel criminal_reason, bukan berarti kita tidak bisa menentukan hubungan antara tabel officer_info sebagai references dan criminal_reason

Ketika kita melakukan sebuah operasi query yang menentukan relasi antar tabel, contohnya operasi join, kita tetap bisa memanggil kolom officer_id pada tabel criminal_reason sebagai target kolom yang kita tuju sebagai foreign key

Penutup

Sebuah foreign key dalam sebuah tabel merupakan kolom target yang direferensikan oleh sebuah primary key pada tabel referensi lainnya. Primary key dan foreign key ini adalah istilah yang digunakan untuk menggambarkan relasi antar tabel pada database

Karena merupakan sebuah istilah untuk penggambaran relasi, maka kita bisa saja tidak menentukan constraint tersebut dalam tabel, asalkan programmer tersebut mengetahui konsep dari primary key dan foreign key, dan tahu bagaimana cara menggunakannya.

Terutama untuk menentukan relasi antar banyak tabel yang mungkin digunakan untuk pengambilan informasi pada database.

Bobby Christian
Bobby is a BI Analyst at FnB company. Is an enthusiast in the Data Industry, having some experience in Data Scientist, Data Engineer, and BI Analyst.
Menu