Basis Data Part 3: Keutuhan Data (Data Integrity) Dengan Relasi Tabel
Sesuai kaidah RDBMS yang telah dijelaskan pada bagian Basis Data Part 2: Pengantar RDBMS (Relational Database Management System), maka kali ini kita akan mencoba menjaga keutuhan data dengan memanfaatkan skema relational pada tabel-tabel pada database yang kita buat sebelumnya.
ER Model Database (Diagram ER)
Ingat bahwa rancangan relational tabel mengacu pada bagan berikut:
Berikut langkah-langkah yang harus dilakukan:
Perhatikan tab Project di bagian bawah, klik kanan pada menu ER Diagrams dan pilih menu Create New ER Diagram.
Buat diagram baru dengan nama cobadb_diagram yang merujuk ke database cobadb.
Pada window tersebut akan muncul semua tabel yang terdapat di dalam database “cobadb” yang terdiri dari tabel:
- jenis_barang_tb
- penjualan_header_tb
- penjualan_detil_tb
- barang_tb
- kustomer_tb
Selanjutnya kita akan menghubungkan antara field foreign key salah satu tabel ke field primary key pada tabel lainnya sesuai rancangan ER Model yang ditetapkan pada bagan sebelumnya.
Anda cukup melakukan drag-drop ke tabel-tabel yang saling berhubungan. ingat:
Note.
klik salah satu field foreign key, seret ke field primary key tabel yang akan dihubungkan tanpa melepas tombol mouse, kemudian lepaskan tombol mouse bila sudah tepat berada di field primary key yang dituju.
Berikut contoh menghubungkan antara field jenis_barang_id dalam tabel barang_tb ke field jenis_barang_id dalam tabel jenis_barang_tb.
hasilnya akan tampak sebagai berikut:
Sekarang lakukan hal yang sama seperti di atas, sehingga secara keseluruhan relasi antar tabel sesuai rancangan akan tampak seperti berikut:
Jangan lupa ER-Diagram disimpan terlebih dahulu dengan perintah Ctrl+S.
Mengatur Foreign Keys Field
Setelah membuat Diagram ER, selanjutnya kita akan mengeset foreign key field yang akan menjadi key tamu bagi primary key feild tabel lainnya.
Kembali kerancangan berikut:
Field yang dilingkari merah pada gambar di bawah merupakan foreign keys yang harus diset.
Note. Pengaturan foreign key (key tamu) adalah di dalam tabel lawannya atau tabel dimana field primary key berada. Bukan pada tabel dimana field foreign key berada.
Berdasarkan gambar di atas, maka
- Pengaturan Foreign Key 1: diset pada tabel penjualan_detil_tb
- Pengaturan Foreign Key 2: diset pada tabel penjualan_header_tb
- Pengaturan Foreign Key 3: diset pada tabel penjualan_detil_tb
- Pengaturan Foreign Key 4: diset pada tabel barang_tb
Note. Dalam kasus ini, tabel penjualan_detil_tb memiliki dua pengaturan foreign key.
Pengaturan Foreign Key 1: diset pada tabel penjualan_detil_tb
ALTER TABLE cobadb.penjualan_detil_tb ADD CONSTRAINT penjualan_detil_tb_FK FOREIGN KEY (penjualan_id) REFERENCES cobadb.penjualan_header_tb(penjualan_id);
Pengaturan Foreign Key 2: diset pada tabel penjualan_header_tb
ALTER TABLE cobadb.penjualan_header_tb ADD CONSTRAINT penjualan_header_tb_FK FOREIGN KEY (kustomer_id) REFERENCES cobadb.kustomer_tb(kustomer_id);
Pengaturan Foreign Key 3: diset pada tabel penjualan_detil_tb
ALTER TABLE cobadb.penjualan_detil_tb ADD CONSTRAINT penjualan_detil_tb_FK_1 FOREIGN KEY (barang_id) REFERENCES cobadb.barang_tb(barang_id);
Pengaturan Foreign Key 4: diset pada tabel barang_tb
ALTER TABLE cobadb.barang_tb ADD CONSTRAINT barang_tb_FK FOREIGN KEY (jenis_barang_id) REFERENCES cobadb.jenis_barang_tb(jenis_barang_id);
Sampai di sini kita sudah menerapkan konsep menjaga keutuhan data (data integrity) dengan menerapkan:
- ER Diagram
- Primary key
- Foreign Key
Ringkasan DDL tabel
Untuk melihat kode SQL DDL (data definition language) untuk tabel:
-- cobadb.barang_tb definitionCREATE TABLE `barang_tb` (
`barang_id` char(10) NOT NULL,
`nama_barang` varchar(50) NOT NULL,
`jenis_barang_id` char(10) NOT NULL,
`harga` int(10) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`barang_id`),
KEY `barang_tb_FK` (`jenis_barang_id`),
CONSTRAINT `barang_tb_FK` FOREIGN KEY (`jenis_barang_id`) REFERENCES `jenis_barang_tb` (`jenis_barang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- cobadb.jenis_barang_tb definitionCREATE TABLE `jenis_barang_tb` (
`jenis_barang_id` char(10) NOT NULL,
`nama_jenis_barang` varchar(50) NOT NULL,
PRIMARY KEY (`jenis_barang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- cobadb.kustomer_tb definitionCREATE TABLE `kustomer_tb` (
`kustomer_id` char(10) NOT NULL,
`nama_kustomer` varchar(35) NOT NULL,
`alamat` varchar(35) DEFAULT NULL,
`kota` varchar(35) DEFAULT NULL,
`telp` varchar(35) DEFAULT NULL,
PRIMARY KEY (`kustomer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- cobadb.penjualan_detil_tb definitionCREATE TABLE `penjualan_detil_tb` (
`penjualan_detil_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`penjualan_id` char(10) NOT NULL,
`barang_id` char(10) NOT NULL,
`jumlah` int(10) unsigned NOT NULL DEFAULT 1,
`harga` int(10) unsigned NOT NULL,
PRIMARY KEY (`penjualan_detil_id`),
KEY `penjualan_detil_tb_FK` (`penjualan_id`),
KEY `penjualan_detil_tb_FK_1` (`barang_id`),
CONSTRAINT `penjualan_detil_tb_FK` FOREIGN KEY (`penjualan_id`) REFERENCES `penjualan_header_tb` (`penjualan_id`),
CONSTRAINT `penjualan_detil_tb_FK_1` FOREIGN KEY (`barang_id`) REFERENCES `barang_tb` (`barang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;-- cobadb.penjualan_header_tb definitionCREATE TABLE `penjualan_header_tb` (
`penjualan_id` char(10) NOT NULL,
`tanggal` date NOT NULL,
`kustomer_id` char(10) NOT NULL,
PRIMARY KEY (`penjualan_id`),
KEY `penjualan_header_tb_FK` (`kustomer_id`),
CONSTRAINT `penjualan_header_tb_FK` FOREIGN KEY (`kustomer_id`) REFERENCES `kustomer_tb` (`kustomer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Tugas
- Apa yang kamu ketahui tentang “On Delete” dan “On Update”?
- Apa yang dimaksud dengan opsi: No Action, Cascade, Restrict, Set Null dan Set Default
- Coba jelaskan!
Seri Basis Data Tingkat Dasar:
- Basis Data Part 1: Persiapan Lingkungan Pengembangan Database
- Basis Data Part 2: Pengantar RDBMS (Relational Database Management System)
- Basis Data Part 3: Keutuhan Data (Data Integrity) Dengan Relasi Tabel
- Basis Data Part 4: CRUD (Create, Retrieve, Update, Delete) pada Tabel dan Pengujian ER Diagram
- Basis Data Part 5: Bahasa SQL (Structured Query Language)
- Basis Data Part 6: Bahasa SQL (Structured Query Language): Like, In, Between
- Basis Data Part 7: Query Melibatkan Join Table
- Basis Data Part 8: View & Store Procedure
- Basis Data Part 9: Trigger MySQL