Hi Guys,
Mari kita bahas relasi table pada MySQL melalui studi kasus: Pinjaman Uang
Story dari studi kasus ini adalah pelanggan bisa mengajukan pinjaman uang dan memiliki status dari pinjaman tersebut. Pengajuan ini dapat berstatus: Menunggu Approval, Disetujui, Ditolak, dan Selesai.
Table provinsi dan status adalah master data dimana table provinsi berisi daftar provinsi di Indonesia dan table status berisi status dari peminjaman.
Table pelanggan berelasi ke table provinsi one to many. Artinya satu data di provinsi bisa multi data di pelanggan.
Table peminjam memiliki 2 ForeignKey ke table pelanggan dan status dengan relasi one to many.
Syntax SQL:
table provinsi:
CREATE TABLE `provinsi` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nama` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
INSERT INTO `provinsi` (`id`, `nama`) VALUES (1, 'Jakarta');
INSERT INTO `provinsi` (`id`, `nama`) VALUES (2, 'Banten');
INSERT INTO `provinsi` (`id`, `nama`) VALUES (3, 'Sumatera Utara');
INSERT INTO `provinsi` (`id`, `nama`) VALUES (4, 'Bali');
table status:
CREATE TABLE `status` (
`id` INT(11) NULL DEFAULT NULL,
`nama` VARCHAR(50) NULL DEFAULT NULL,
INDEX `id` (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
INSERT INTO `status` (`id`, `nama`) VALUES
(1, 'Menunggu Approval'),
(2, 'Disetujui'),
(3, 'Ditolak'),
(4, 'Selesai');
table pelanggan:
CREATE TABLE `pelanggan` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`email` VARCHAR(50) NULL DEFAULT NULL,
`nama` VARCHAR(50) NULL DEFAULT NULL,
`tgl_lahir` DATE NULL DEFAULT NULL,
`id_provinsi` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `fk_provinsi` (`id_provinsi`),
CONSTRAINT `FKProvinsi` FOREIGN KEY (`id_provinsi`) REFERENCES `provinsi` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (1, 'test1@test.com', 'Test1', '1996-02-24', 4);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (2, 'test2@test.com', 'Test2', '2006-02-24', 4);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (3, 'test3@test.com', 'Test3', '1974-03-14', 4);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (4, 'test4@test.com', 'Test4', '1964-04-20', 3);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (5, 'test5@test.com', 'Test5', '2009-05-04', 4);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (6, 'test6@test.com', 'Test6', '1984-06-14', 1);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (7, 'test7@test.com', 'Test7', '1993-07-09', 1);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (8, 'test8@test.com', 'Test8', '1985-08-03', 4);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (9, 'test9@test.com', 'Test9', '1981-09-22', 2);
INSERT INTO `pelanggan` (`id`, `email`, `nama`, `tgl_lahir`, `id_provinsi`) VALUES (10, 'test10@test.com', 'Test10', '1987-12-27', 2);
table pinjaman:
-- Dumping structure for table pinjaman.pinjaman
CREATE TABLE IF NOT EXISTS `pinjaman` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pelanggan_id` int(11) DEFAULT NULL,
`jumlah` double DEFAULT NULL,
`status_id` int(11) DEFAULT NULL,
`tgl_pinjaman` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_pinjaman` (`status_id`),
KEY `fk_pelanggan` (`pelanggan_id`),
CONSTRAINT `fk_pelanggan` FOREIGN KEY (`pelanggan_id`) REFERENCES `pelanggan` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_status` FOREIGN KEY (`status_id`) REFERENCES `status` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;
INSERT INTO `pinjaman` (`id`, `pelanggan_id`, `jumlah`, `status_id`, `tgl_pinjaman`) VALUES
(1, 1, 100000, 1, '2023-02-23'),
(2, 1, 100000, 2, '2022-02-23'),
(3, 1, 100000, 3, '2023-02-23'),
(4, 10, 100000, 2, '2023-02-23'),
(5, 9, 1000000, 3, '2023-05-23'),
(6, 8, 300000, 2, '2023-05-23'),
(7, 7, 300000, 3, '2023-05-23'),
(8, 6, 300000, 3, '2023-05-23'),
(9, 5, 500000, 2, '2023-05-23'),
(10, 4, 500000, 3, '2023-05-23'),
(11, 3, 500000, 3, '2023-05-23'),
(12, 2, 500000, 3, '2023-05-23');
lanjut ke part 2 untuk Store Procedure