TABLE RELATIONSHIP
Contoh berikut ini memperlihatkan cara membuat foreign key pada pembuatan tabel
Wishlist.
CREATE TABLE Wishlist
( id INT NOT NULL AUTO_INCREMENT,
Id_product VARCHAR(10) NOT NULL,
Description TEXT,
PRIMARY KEY (id),
CONSTRAINT fk_wishlist_products
FOREIGN KEY (id_product) REFERENCES products (id)
) ENGINE = InnoDB;
Perintah SHOW CREATE TABLE Wishlist akan memperlihatkan query foreign key
sebagai berikut.
85
6.3.2. Menambah Foreign Key
Jika tabel sudah dibuat, foreign key bisa ditambahkan ke dalam tabel dengan perintah
sebagai berikut:
Menambah Foreign Key
86
6.3.5. Penggunaan Behavior Foreign Key untuk Menghapus Data Berelasi
Seperti yang sebelumnya dibahas, ketika menghapus data yang berelasi, maka secara
otomatis MySQL akan menolak operasi delete tersebut. Misalnya ketika menghapus kolom id pada
tabel referensi, akan ditolak oleh MySQL karena kolom id tersebut menjadi foreign key di tabel
lain. Fitur ini bisa diubah jika diperlukan, ada banyak hal yang bisa dilakukan ketika data berelasi
dihapus, defaultnya memang akan ditolak (RESTRICT).
Behavior foreign key secara default adalah restrict, yaitu secara otomatis MySQL menolak
perintah delete dan update pada foreign key. Jika menggunakan behavior Cascade, MySQL akan
menerima perintah update dan delete yang dilakukan pada kolom referensi foreign key dan juga
akan melakukan perintah yang sama terhadap tabel yang menggunakan foreign key tersebut.
Apabila menggunakan behavior No Action, MySQL akan menerima perintah delete dan update
pada kolom referensi dan akan membiarkan saja data pada foreign key sehingga ini beresiko data
pada tabel yang menggunakan foreign key jadi berantakan. Jika menggunakan behavior Set Null,
data pada tabel foreign key akan menjadi null ketika data pada tabel referensi dihapus atau di-
update. Behavior ini hanya bisa digunakan jika foreign key tidak diset Not Null.
Perintah untuk mengubah Behavior foreign key dapat dilihat pada contoh berikut. Behavior
yang digunakan adalah Cascade.
ALTER TABLE Wishlist
ADD CONSTRAINT fk_wishlist_produk
FOREIGN KEY (id_produk) REFERENCES produk (id)
ON DELETE Cascade ON UPDATE Cascade;
87
6.4. Join
MySQL mendukung query SELECT langsung ke beberapa tabel secara sekaligus. Untuk
itu, perlu dilakukan JOIN di SQL SELECT yang dibuat. Untuk melakukan JOIN, perlu
menentukan tabel mana yang merupakan referensi ke tabel lain. Join cocok sekali dengan foreign
key, walaupun di MySQL tidak ada aturan kalau JOIN harus ada foreign key. Join di MySQL bisa
dilakukan untuk lebih dari beberapa tabel. Tapi ingat, semakin banyak JOIN, maka proses query
akan semakin berat dan lambat, jadi harap bijak ketika melakukan JOIN. Idealnya melakukan JOIN
jangan lebih dari 5 tabel, karena itu bisa berdampak ke performa query yang lambat.
Perintah berikut adalah contoh cara melakukan join tabel Wishlist dengan tabel Products
dimana kolom id_product dijadikan sebagai foreign key di tabel wishlist.
Jika hanya ingin menampilkan beberapa kolom saja, misalnya kolom id dan kolom nama
dari tabel products, serta kolom description dari tabel wishlist, perintah yang digunakan adalah
sebagai berikut.
SELECT wishlist.id, products.id, products.name, wishlist.description FROM wishlist
JOIN products ON (products.id = wishlist.id_product);
Untuk menyingkat penulisan nama tabel dapat digunakan perintah Alias (AS) sehingga lebih
sederhana. Contoh penggunaan alias pada bagian ini adalah sebagai berikut.
SELECT w.id AS ‘Id Wishlist’, p.id AS “Id Products’, p.name, w.description
FROM wishlist AS w
JOIN products AS p ON (p.id = w.id_product);
88
6.4.2. Membuat Relasi Baru ke Table
Untuk menambahkan relasi baru ke tabel yang sudah dibuat adalah dengan terlebih dahulu
membuat kolom foreign key di salah satu tabel. Berikut adalah contoh menambahkan relasi baru
dari tabel Wishlist ke tabel Customer. Penambahan relasi dari wishlist ke customers dapat
memberikan informasi wishlist bagi customer. Pertama, ditambahkan kolom id_customer ke tabel
wishlist, kemudian dijadikan sebagai foreign key.
ALTER TABLE wishlist
ADD COLUMN id_customer INT;
89
6.4.3. Melakukan JOIN Multiple Table
Berikut ini adalah contoh melakukan join multiple table yaitu tabel products, tabel
customers, dan tabel wishlist. Join tiga tabel ini akan memberikan informasi product yang menjadi
wishlist seorang customer.
SELECT c.id AS ‘ID Customer’, c.email, p.id AS ‘ID Product’, p.name, w.description
FROM wishlist AS w
JOIN products AS p ON (p.id = w.id_product)
JOIN customers AS c ON (c.id = w.id_customer);
One to One relationship adalah relasi antar tabel yang paling sederhana. Artinya tiap data
di sebuah tabel hanya boleh berelasi ke maksimal 1 data di tabel lainnya. Tidak boleh ada relasi
lebih dari 1 data. Contoh misal, dalam membuat aplikasi toko online yang terdapat fitur wallet,
dimana 1 customer hanya boleh punya 1 wallet.
90