Anda di halaman 1dari 6

MODUL 6.

TABLE RELATIONSHIP

6.1. Capaian Pembelajaran


6.1.1. Mahasiswa mampu memahami konsep Table Relationship dan jenis-jenisnya
6.1.2. Mahasiswa mampu menggunakan fitur Foreign Key pada tabel yang berelasi
6.1.3. Mahasiswa mampu memahami dan menggunakan fitur-fitur Join dalam table relationship

6.2. Table Relationship


Dalam Relational DBMS, salah satu fitur andalan nya adalah table relationship, yaitu relasi
antar tabel. Kita bisa melakukan relasi dari satu tabel ke tabel lain. Dalam kehidupan nyata pun
pasti sering membuat relasi antar tabel. Misal, saat membuat aplikasi penjualan, di laporan penjualan
pasti ada data barang. Artinya tabel penjualan akan berelasi dengan tabel barang. Misal dalam
aplikasi kampus, tabel mahasiswa akan berelasi dengan tabel mata kuliah, dan tabel dosen.

6.3. Foreign Key


Saat membuat relasi tabel, biasanya akan dibuat sebuah kolom sebagai referensi ke tabel
lainnya. Misal saat membuat tabel penjualan, akan ditambahkan kolom id_product pada tabel
penjualan sebagai referensi ke tabel products. Kolom id_product pada tabel penjualan ini
merupakan primary key di tabel products. Kolom id_product pada tabel penjualan dinamakan
Foreign Key. Foreign key bisa ditambahkan satu atau lebih ke dalam sebuah tabel. Membuat foreign
key sama seperti membuat kolom biasanya, hanya saja perlu memberi tahu MySQL bahwa itu
adalah foreign key ke tabel lain. Tipe data foreign key harus sama dengan tipe data pada kolom
referensinya.

6.3.1. Membuat Table dengan Foreign Key

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

ALTER TABLE Wishlist


ADD CONSTRAINT fk_wishlist_produk
FOREIGN KEY (no_produk) REFERENCES produk (kode_barang);

6.3.3. Menghapus Foreign Key


Foreign key yang sudah dibuat atau ditambahkan pada tabel dapat dihapus menggunakan
perintah sebagai berikut.
ALTER TABLE Wishlist
DROP CONSTRAINT fk_wishlist_produk;

6.3.4. Keuntungan Menggunakan Foreign Key


Foreign key memastikan bahwa data yang dimasukkan ke kolom tersebut harus tersedia di
tabel referensi nya. Selain itu saat menghapus data di tabel referensi, MySQL akan mengecek apakah
id nya digunakan di foreign key pada tabel lain. Jika digunakan, maka secara otomatis MySQL akan
menolak proses delete data di tabel referensi tersebut. Penggunaan foreign key juga mengantisipasi
kesalahan dalam memasukkan id_produk. Secara otomatis MySQL akan menolak jika data yang
dientrikan salah. Contoh berikut memperlihatkan pesan error dari MySQL ketika dientrikan kode
‘PXXX’ yang tidak terdapat pada kolom id di tabel products.

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


Behavior ON DELETE ON UPDATE
RESTRICT Ditolak Ditolak
CASCADE Data akan dihapus Data akan ikut diubah
NO ACTION Data dibiarkan Data dibiarkan
SET NULL Diubah jadi NULL Diubah jadi NULL

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.

6.4.1. Melakukan JOIN Table

Perintah berikut adalah contoh cara melakukan join tabel Wishlist dengan tabel Products
dimana kolom id_product dijadikan sebagai foreign key di tabel wishlist.

SELECT * FROM wishlist


JOIN products ON (wishlist.id_product = products.id);

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;

ALTER TABLE wishlist


ADD CONSTRAINT fk_wishlist_customer
FOREIGN KEY (id_customer) REFERENCES customers(id);

Untuk menambahkan id_customer, gunakan perintah UPDATE – WHERE clause seperti


contoh berikut.
UPDATE wishlist
SET id_customer = 1
WHERE id = 1;

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);

6.5. Jenis-jenis Relasi antar Tabel


Untuk melakukan relasi antar tabel, bisa digunakan FOREIGN KEY. Untuk melakukan
SELECT beberapa tabel, bisa digunakan JOIN. Foreign key dan Join sangat berguna dalam
membuat relasi antar tabel. Dalam konsep relasional database, ada 3 jenis relasi antar tabel, yaitu
one to one relationship, one to many relationship, dan many to many relationships. Masing-
masingnya dijelaskan sebagai berikut.

6.5.1. One to One Relationship

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.

6.5.1.1. Diagram One to One Relationship

90

Anda mungkin juga menyukai