Cara Membuat Relasi Tabel di MySQL dengan Foreign Key

Salah satu konsep penting dalam desain database relasional adalah kemampuan untuk menghubungkan satu tabel dengan tabel lainnya. Di MySQL, hubungan antar tabel ini dibuat menggunak...

Cara Membuat Relasi Tabel di MySQL dengan Foreign Key

Salah satu konsep penting dalam desain database relasional adalah kemampuan untuk menghubungkan satu tabel dengan tabel lainnya. Di MySQL, hubungan antar tabel ini dibuat menggunakan Foreign Key. Dengan Foreign Key, Anda bisa memastikan integritas data dan mencegah data orphan (data yang tidak memiliki induk). Artikel ini akan membahas cara membuat relasi tabel di MySQL dengan Foreign Key secara lengkap.

Apa Itu Foreign Key?

Foreign Key adalah kolom atau sekumpulan kolom di sebuah tabel yang mengacu pada Primary Key di tabel lain. Foreign Key berfungsi sebagai jembatan antar dua tabel dan memastikan bahwa nilai yang dimasukkan ke kolom tersebut harus sudah ada di tabel yang direferensikan. Ini disebut Referential Integrity.

Sebagai contoh sederhana: tabel pesanan memiliki kolom id_pelanggan yang mengacu ke tabel pelanggan. Dengan Foreign Key, MySQL akan otomatis menolak jika Anda mencoba memasukkan pesanan untuk pelanggan yang tidak terdaftar.

Syarat Menggunakan Foreign Key di MySQL

  • Kedua tabel harus menggunakan storage engine InnoDB.
  • Kolom Foreign Key dan kolom yang direferensikan harus memiliki tipe data yang sama.
  • Kolom yang direferensikan harus memiliki index (biasanya Primary Key).

Membuat Tabel dengan Foreign Key

Berikut contoh membuat dua tabel yang saling berelasi: tabel pelanggan sebagai tabel induk dan tabel pesanan sebagai tabel anak.

-- Buat tabel induk (parent table)
CREATE TABLE pelanggan (
    id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    email VARCHAR(150) UNIQUE NOT NULL,
    dibuat_pada DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- Buat tabel anak (child table) dengan Foreign Key
CREATE TABLE pesanan (
    id_pesanan INT AUTO_INCREMENT PRIMARY KEY,
    id_pelanggan INT NOT NULL,
    nama_produk VARCHAR(200) NOT NULL,
    jumlah INT NOT NULL DEFAULT 1,
    total_harga DECIMAL(10, 2) NOT NULL,
    tanggal_pesan DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_pesanan_pelanggan
        FOREIGN KEY (id_pelanggan)
        REFERENCES pelanggan(id_pelanggan)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) ENGINE=InnoDB;

Pada query di atas, CONSTRAINT fk_pesanan_pelanggan adalah nama untuk constraint Foreign Key. Penamaan ini memudahkan saat Anda ingin menghapus atau memodifikasi constraint tersebut nanti.

Opsi ON DELETE dan ON UPDATE

MySQL menyediakan beberapa opsi aksi yang terjadi saat data induk diubah atau dihapus:

  • CASCADE: Perubahan/penghapusan di tabel induk akan otomatis diterapkan ke tabel anak.
  • SET NULL: Kolom Foreign Key di tabel anak akan diisi NULL jika data induk dihapus.
  • RESTRICT: Mencegah penghapusan/perubahan di tabel induk jika masih ada data terkait di tabel anak.
  • NO ACTION: Sama seperti RESTRICT di MySQL.
  • SET DEFAULT: Mengisi kolom dengan nilai default (jarang digunakan di MySQL).

Menambahkan Foreign Key ke Tabel yang Sudah Ada

Jika tabel sudah dibuat sebelumnya, Anda bisa menambahkan Foreign Key menggunakan perintah ALTER TABLE.

-- Tambahkan Foreign Key ke tabel yang sudah ada
ALTER TABLE pesanan
ADD CONSTRAINT fk_pesanan_pelanggan
FOREIGN KEY (id_pelanggan)
REFERENCES pelanggan(id_pelanggan)
ON DELETE RESTRICT
ON UPDATE CASCADE;

Melihat Daftar Foreign Key

Untuk melihat semua Foreign Key yang ada di database, gunakan query berikut:

-- Lihat semua Foreign Key di database aktif
SELECT
    TABLE_NAME,
    CONSTRAINT_NAME,
    COLUMN_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
    REFERENCED_TABLE_SCHEMA = DATABASE()
    AND REFERENCED_TABLE_NAME IS NOT NULL
ORDER BY TABLE_NAME;

Menghapus Foreign Key

Untuk menghapus Foreign Key, gunakan perintah ALTER TABLE ... DROP FOREIGN KEY beserta nama constraint-nya.

-- Hapus Foreign Key berdasarkan nama constraint
ALTER TABLE pesanan
DROP FOREIGN KEY fk_pesanan_pelanggan;

Contoh Penggunaan Data

Mari kita coba memasukkan data dan lihat bagaimana Foreign Key bekerja:

-- Insert data pelanggan terlebih dahulu
INSERT INTO pelanggan (nama, email) VALUES
('Andi Saputra', 'andi@email.com'),
('Budi Santoso', 'budi@email.com');

-- Insert pesanan untuk pelanggan yang sudah ada
INSERT INTO pesanan (id_pelanggan, nama_produk, jumlah, total_harga) VALUES
(1, 'Laptop ASUS', 1, 8500000.00),
(2, 'Mouse Wireless', 2, 300000.00);

-- Ini akan GAGAL karena id_pelanggan 99 tidak ada
-- INSERT INTO pesanan (id_pelanggan, nama_produk, jumlah, total_harga)
-- VALUES (99, 'Keyboard', 1, 250000.00);

Menonaktifkan Sementara Foreign Key Check

Ada kalanya Anda perlu menonaktifkan pengecekan Foreign Key sementara, misalnya saat import data massal. Gunakan perintah berikut dengan hati-hati:

-- Nonaktifkan pengecekan Foreign Key
SET FOREIGN_KEY_CHECKS = 0;

-- Lakukan operasi data di sini...

-- Aktifkan kembali
SET FOREIGN_KEY_CHECKS = 1;

Kesimpulan

Foreign Key adalah fitur esensial di MySQL untuk menjaga integritas data antar tabel. Dengan memahami cara membuat, mengelola, dan menggunakan opsi ON DELETE serta ON UPDATE, Anda dapat merancang database yang lebih solid dan terpercaya. Selalu gunakan storage engine InnoDB dan pastikan kolom yang dijadikan referensi sudah terindex agar Foreign Key berfungsi dengan baik. Mulailah menerapkan Foreign Key di project Anda untuk mencegah data yang tidak konsisten sejak awal.

foreign key mysql relasi tabel mysql cara membuat foreign key mysql relasi database constraint foreign key mysql one to many mysql
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’