Pada materi kali ini, kita akan melanjutkan seri dari Tutorial PostgreSQL. Setelah sebelumnya kita melakukan Implementasi DML dengan operasi CRUD, sekarang kita akan masuk ke materi baru yaitu Relasi Antar Tabel.
Seperti yang disampaikan sebelumnya, memahami penggunaan Relasi Antar Tabel sangatlah penting untuk menjaga konsistensi dan integritas data. Relasi seperti one-to-one, one-to-many dan many-to-many berperan penting dalam membuat struktur database yang efisien.
Relasi Antar Tabel sangatlah penting untuk temen-temen pahami, apalagi jika temen-temen sedang membuat aplikasi yang sangat kompleks. Dengan melakukan Relasi Antar Tabel, kita bisa membuat struktur database menjadi lebih efisien, memastikan konsistensi data, memudahkan proses query dan mendukung kemudahan dalam proses pemeliharaan.
Apa Itu Relasi Antar Tabel?
Relasi antar tabel adalah hubungan antara dua tabel atau lebih dalam sebuah Database. Tujuan dari relasi sendiri, untuk menghubungkan data antar tabel sehingga integritas data tetap terjaga. Dalam penggunaan relasi, kita menggunakan foreign key (FK) sebagai referensi ke primary key (PK) yang berada di tabel lain.
Jenis-Jenis Relasi Antar Tabel
- One-to-One (Hubungan satu ke satu)
Hubungan dimana satu baris pada tabel A, hanya dapat berhubungan dengan satu baris pada tabel B, begitu juga sebaliknya.
Sebagai contoh kita akan membuat tabel social_media_accounts untuk menampung data sosial media setiap users.CREATE TABLE social_media_accounts (id SERIAL PRIMARY KEY,user_id INT UNIQUE, -- Menggunakan unik supaya satu user hanya bisa memiliki satu data sosial mediainstagram VARCHAR(255),facebook VARCHAR(255),linkedin VARCHAR(255),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE);
Temen-temen bisa melihat pada desain tabel users dan social_media_accounts, terdapat relasi antara kolom id (tabel users) dengan kolom user_id (tabel social_media_accounts). Bentuk relasi ini ditandai dengan angka satu pada tabel users dan simbol bintang (*) pada tabel social_media_accounts.
Catatan : Untuk melihat desain tabel temen-temen bisa menggunakan PgAdmin, DataGrip atau secara online menggunakan DBDiagram. - One-to-Many (Hubungan satu ke banyak)
Hubungan dimana satu baris pada tabel A, dapat berhubungan dengan banyak baris pada tabel B.
Sebagai contoh kita akan membuat tabel product yang berhubungan dengan tabel stores, jadi setiap toko bisa memiliki banyak produk.
Catatan : Pada attribut stock kita mengimplementasikan CHECK CONSTRAINT supaya data stock tidak kurang dari nol atau minus (-).CREATE TABLE products (id SERIAL PRIMARY KEY,store_id INT NOT NULL REFERENCES stores(id) ON DELETE CASCADE,name VARCHAR(191) NOT NULL,price DECIMAL(10,2) NOT NULL,stock INT NOT NULL CHECK (stock >= 0),description TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);Sekilas bentuk dari relasi one-to-many memang seperti relasi one-to-one, namun perbedaan utama terletak pada jumlah hubungan data di tabel produk dan penggunaan properti UNIQUE pada kolom store_id.
Tanpa penggunaan UNIQUE untuk kolom store_id, memungkinkan setiap toko bisa memiliki banyak produk. Tapi, setiap produk hanya dimiliki oleh satu toko. - Many-to-Many (Hubungan banyak ke banyak)
Hubungan dimana banyak baris pada tabel A, dapat berhubungan dengan banyak baris di tabel B. Untuk melakukan hubungan many-to-many, kita membutuhkan tabel tambahan sebagai penghubung atau Junction Tabel.
Sebagai contoh kita akan membuat relasi many-to-many untuk tabel produk dan kategori, jadi setiap produk bisa memiliki lebih dari satu kategori. Dan setiap kategori, bisa memiliki banyak produk.CREATE TABLE categories (id SERIAL PRIMARY KEY,name VARCHAR(80) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Tabel penghubung (Junction Tabel)
Catatan : Pada tabel penghubung, kita mengimplementasikan penggunaan Composite Key dengan melibatkan kolom product_id dan category_id.CREATE TABLE product_categories (product_id INT NOT NULL,category_id INT NOT NULL,PRIMARY KEY (product_id, category_id),FOREIGN KEY (product_id) REFERENCES products(id),FOREIGN KEY (category_id) REFERENCES categories(id),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Bentuk desain tabel untuk relasi many-to-many
Seperti yang disampaikan sebelumnya, memahami penggunaan Relasi Antar Tabel sangatlah penting untuk menjaga konsistensi dan integritas data. Relasi seperti one-to-one, one-to-many dan many-to-many berperan penting dalam membuat struktur database yang efisien.
Mungkin itu saja yang bisa kita pelajari pada materi kali ini. Semoga materinya dapat membantu teman-teman untuk belajar tentang Relasi Antar Tabel. Jika teman-teman memiliki pertanyaan atau ingin berbagi pengalaman, silakan ketikkan pada kolom komentar di bawah.
Sedikit Tentang Saya :
Sebagai seorang programmer profesional dengan pengalaman sekitar 4 tahun di bidang IT, saya siap membantu Anda dengan berbagai kebutuhan konsultasi.
Jangan ragu untuk menghubungi saya melalui WhatsApp.
Sampai jumpa di tutorial berikutnya!
Kontak Saya :
Email : ronisurya.115@gmail.com
WhatsApp : 081222821596
Website : Roni Surya
Materi Sebelumnya : Operasi CRUD
Materi Selanjutnya : Referensi