Foreign Key, Unique, dan Check

Foreign key berguna untuk mendefinisikan kolom-kolom pada suatu tabel yang nilainya mengacu ke tabel lain. Dengan kata lain, kolom-kolom yang didefinisikan sebagai foreign key nilainya harus diambil dari nilai kolom pada tabel lain. Kolom pada tabel lain yang nilainya akan diacu harus berupa kolom primary key atau unique.

Jika Anda mencoba untuk memasukkan nilai ke dalam kolom foreign key dengan nilai yang tidak terdapat pada kolom tabel yang diacu, maka server database akan menolaknya.

Berikut ini contoh tabel yang menggambarkan bagaimana foreign key bekerja:

Tabel provinsi

wilayahID provinsi
1 Jawa Barat
2 Jawa Tengah
3 Jawa Timur

Tabel pelanggan

pelangganID nama_pelanggan wilayahID
1 Adit Cahya Ramadhan 3
2 Ilmiawan Hakiem 1
3 Priangga Budi Wiharja 2
4 Rizki Febrianto S. 3

Pada tabel di atas tampak bahwa nilai kolom 'wilayahID' pada tabel kedua (tabel pelanggan) mengacu pada nilai yang terdapat pada kolom 'wilayahID' pada tabel pertama (tabel provinsi). Dalam kasus semacam ini, kolom 'wilayahID' pada tabel kedua disebut foreign key, sedangkan kolom 'wilayahID' pada tabel pertama disebut sebagai primary key.

Perlu diperhatikan bahwa nilai yang diisikan ke dalam kolom foreign key pada suatu tabel harus diacu atau diambil dari kolom primary key pada tabel lain. Jika Anda mencoba untuk memasukkan suatu nilai ke dalam kolom foreign key dimana nilai tersebut tidak terdapat pada tabel yang diacu, maka server database akan menolak dengan cara menampilkan pesan kesalahan.

Aturan dalam pendefinisian foreign key:

  • Satu tabel dapat memiliki lebih dari satu foreign key
  • Kolom yang diacu harus didefinisikan sebagai primary key atau unique
  • Foreign key tidak bersifat unik

Unique

Fungsi unique pada dasarnya sama seperti primary key, yaitu untuk memastikan bahwa setiap baris data yang terdapat dalam suatu tabel bersifat unik (tidak sama). Perbedaanya, pada unique key Anda diizinkan untuk memasukkan nilai NULL.

Check

Jenis constraint ini berfungsi untuk membatasi nilai-nilai yang dapat dimasukkan ke dalam suatu kolom di dalam tabel. Sebagai contoh sederhana, kolom 'status_produk' nilainya dapat kita batasi misalnya hanya berupa "Ready Stock" dan "Out Stock" saja. Selain nilai tersebut server database akan menolak.

Perlu untuk diperhatikan bahwa MySQL tidak mendukung tipe constraint ini. Sebagai gantinya, kita dapat menggunakan kolom yang bertipe enumerasi untuk menangani kasus-kasus semacam ini.