Bertemu lagi dengan blog yang sudah lama tidak ada postingan, mungkin semua pengunjung blog saya mengira blog ini sudah mati, tidak demikian kawan-kawanku hanya saja tidak ada waktu untuk menulis alias sibuk bekerja dan momong anak yang sudah mulai lucu-lucunya.
Pada kesemptan kali ini saya posting tentang dunia kerja diperkebunan tentang proporsi basis panen yang terlihat sederhana perhitungannya namun akan sedikit rumit jika menggunakan atau diimplementasikan dalam basis data.
Kenapa harus diimplementasikan dalam basis data, karena sesungguhnya perhitungan itu dilakukan oleh system basis data entah apapun itu softwarenya. Dengan basis data akan mempermudah untuk melakukan query dalam melakukan perhitungan global secara cepat. Padahal hal ini juga dapat dilakukan perhitungan manual dengan softare ms excel namun akan rumit jika data yang akan dikalkulasi terdapat beberapa pemanen dan tanggal yang akan diproporsi.
Berikut adalah gambaran proporsi basis banen.
Pertama mari desain secara sederhana ERD untuk sistem basis data yang akan kita rancang untuk implementasi Proporsi Basis panen tersebut.
Berikut gambarnya.
`Topografi` enum('Bukit','Datar') NOT NULL,
`Basis` decimal(4,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`idBlok` char(5) NOT NULL,
`Luas` decimal(5,2) DEFAULT NULL,
`JumlahPokok` decimal(5,0) DEFAULT NULL,
`Topografi` enum('Bukit','Datar') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`idPemanen` int(11) NOT NULL,
`NamaPemanen` varchar(45) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
`idPanen` int(11) NOT NULL,
`Tanggal` date DEFAULT NULL,
`idPemanen` int(11) NOT NULL,
`idBlok` char(5) NOT NULL,
`KgPanen` decimal(5,0) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
('Bukit', '1280'),
('Datar', '1600');
('G0007', '20.76', '2500', 'Bukit'),
('H0006', '27.70', '3006', 'Bukit'),
('H0007', '28.98', '4000', 'Datar'),
('J0005', '30.10', '4200', 'Datar');
(1, 'Paijo Kusumo'),
(2, 'Harianto Ardi'),
(3, 'Andika Perkusu'),
(4, 'Wagiman King Kong');
(1, '2022-06-11', 3, 'G0007', '700'),
(2, '2022-06-11', 3, 'H0007', '900'),
(3, '2022-06-12', 4, 'G0007', '350'),
(4, '2022-06-12', 4, 'H0006', '400'),
(5, '2022-06-12', 4, 'H0007', '250'),
(6, '2022-06-12', 4, 'J0005', '450');
ADD PRIMARY KEY (`Topografi`);
ALTER TABLE `blok`
ADD PRIMARY KEY (`idBlok`),
ADD KEY `fk_Blok_Basis1_idx` (`Topografi`);
ALTER TABLE `panen`
ADD PRIMARY KEY (`idPanen`),
ADD KEY `fk_Panen_Pemanen_copy1_idx` (`idPemanen`),
ADD KEY `fk_Panen_Blok1_idx` (`idBlok`);
ALTER TABLE `pemanen`
ADD PRIMARY KEY (`idPemanen`);
ALTER TABLE `panen`
MODIFY `idPanen` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
ALTER TABLE `blok`
ADD CONSTRAINT `fk_Blok_Basis1` FOREIGN KEY (`Topografi`) REFERENCES `basis` (`Topografi`) ON DELETE NO ACTION ON UPDATE NO ACTION;
ALTER TABLE `panen`
ADD CONSTRAINT `fk_Panen_Blok1` FOREIGN KEY (`idBlok`) REFERENCES `blok` (`idBlok`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `fk_Panen_Pemanen_copy1` FOREIGN KEY (`idPemanen`) REFERENCES `pemanen` (`idPemanen`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Selanjutnya lihat isi dari masing-masing tabel yang sudah dibuat sebelumnya.
Setting environment for using XAMPP for Windows.
ProgrammerAmatir@DESKTOP-EF1HF32 c:\xampp
# mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 335
Server version: 10.4.17-MariaDB mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use premipanen
Database changed
MariaDB [premipanen]> select*from basis;
+-----------+-------+
| Topografi | Basis |
+-----------+-------+
| Bukit | 1280 |
| Datar | 1600 |
+-----------+-------+
2 rows in set (0.001 sec)
MariaDB [premipanen]> select*from blok;
+--------+-------+-------------+-----------+
| idBlok | Luas | JumlahPokok | Topografi |
+--------+-------+-------------+-----------+
| G0007 | 20.76 | 2500 | Bukit |
| H0006 | 27.70 | 3006 | Bukit |
| H0007 | 28.98 | 4000 | Datar |
| J0005 | 30.10 | 4200 | Datar |
+--------+-------+-------------+-----------+
4 rows in set (0.001 sec)
MariaDB [premipanen]> select*from pemanen;
+-----------+-------------------+
| idPemanen | NamaPemanen |
+-----------+-------------------+
| 1 | Paijo Kusumo |
| 2 | Harianto Ardi |
| 3 | Andika Perkusu |
| 4 | Wagiman King Kong |
+-----------+-------------------+
4 rows in set (0.001 sec)
MariaDB [premipanen]> select*from panen;
+---------+------------+-----------+--------+---------+
| idPanen | Tanggal | idPemanen | idBlok | KgPanen |
+---------+------------+-----------+--------+---------+
| 1 | 2022-06-11 | 3 | G0007 | 700 |
| 2 | 2022-06-11 | 3 | H0007 | 900 |
| 3 | 2022-06-12 | 4 | G0007 | 350 |
| 4 | 2022-06-12 | 4 | H0006 | 400 |
| 5 | 2022-06-12 | 4 | H0007 | 250 |
| 6 | 2022-06-12 | 4 | J0005 | 450 |
+---------+------------+-----------+--------+---------+
6 rows in set (0.001 sec)
MariaDB [premipanen]>
Semua tabel telah terisi dengan data yang akan digunakan untuk simulasi proporsi basis panen.
Beberapa yang harus dipahami untuk dapat melakukan proporsi ini adalah,
1. Fungsi Agregate
2. Mysql Over dan partition (fungi yang ada pada mysql/mariadb)
3. Bahasa query (SQL)
4. Nalar Berpikir (wajib)
Pertama, mari coba cari basis panen perblok terlebih dahulu dengan perintah sql seperti berikut ini.
MariaDB [premipanen]> SELECT PANEN.TANGGAL,pemanen.NamaPemanen,BLOK.IDBLOK,Blok.topografi
-> ,panen.kgpanen,basis.basis
-> FROM
-> PANEN,BASIS,BLOK,PEMANEN
-> WHERE BLOK.Topografi=BASIS.TOPOGRAFI
-> AND PANEN.IDBLOK=BLOK.IDBLOK
-> AND PANEN.IDPEMANEN=PEMANEN.IDPEMANEN group by panen.tanggal,panen.idpemanen,blok.idblok
-> ;
+------------+-------------------+--------+-----------+---------+-------+
| TANGGAL | NamaPemanen | IDBLOK | topografi | kgpanen | basis |
+------------+-------------------+--------+-----------+---------+-------+
| 2022-06-11 | Andika Perkusu | G0007 | Bukit | 700 | 1280 |
| 2022-06-11 | Andika Perkusu | H0007 | Datar | 900 | 1600 |
| 2022-06-12 | Wagiman King Kong | G0007 | Bukit | 350 | 1280 |
| 2022-06-12 | Wagiman King Kong | H0006 | Bukit | 400 | 1280 |
| 2022-06-12 | Wagiman King Kong | H0007 | Datar | 250 | 1600 |
| 2022-06-12 | Wagiman King Kong | J0005 | Datar | 450 | 1600 |
+------------+-------------------+--------+-----------+---------+-------+
6 rows in set (0.001 sec)
MariaDB [premipanen]>
Dari query diatas terlihat basis panen pada setiap blok yang dipanen oleh masing-masing pemanen pada tanggl 11 dan 12 juni 2022.
Sekarang lihat perhitungan proprosi basis panen dengan menggunakan perintah SQL sesuai dengan kebutuhan yang harus dipahami diatas (point 1-4).
MariaDB [premipanen]> SELECT PANEN.TANGGAL,pemanen.NamaPemanen,BLOK.IDBLOK,Blok.topografi
-> ,panen.kgpanen,basis.basis,sum(kgPanen) over(partition by tanggal,idpemanen)Kgtotalt,panen.kgpanen/basis.basis as PersenProporsi,
-> (panen.kgpanen/basis.basis)/sum(panen.kgpanen/basis.basis)over(partition by tanggal,idpemanen) persentcapai,
-> (panen.kgpanen/basis.basis)/sum(panen.kgpanen/basis.basis)over(partition by tanggal,idpemanen)*basis.basis as basispanen,
-> panen.kgpanen-((panen.kgpanen/basis.basis)/sum(panen.kgpanen/basis.basis)over(partition by tanggal,idpemanen)*basis.basis) as lebihbasis
-> FROM
-> PANEN,BASIS,BLOK,PEMANEN
-> WHERE BLOK.Topografi=BASIS.TOPOGRAFI
-> AND PANEN.IDBLOK=BLOK.IDBLOK
-> AND PANEN.IDPEMANEN=PEMANEN.IDPEMANEN group by panen.tanggal,panen.idpemanen,blok.idblok
Dari query tersebut akan menghasilkan output seperti gambar berikut.
Demikian haril dari proporsi basis panen dengan implementasi menggunkan basis data. Dalam hal penyelesaian masalah tentang pembahasan kali ini adalah kemudahan dalam menggunakan basis data untuk melakukan perhitungan lebih efisien karena hanya dengan query dapat menghitung proporsi basis panen dalam range bulanan dan bahkan tahunan dengan satu perintah query.
Demikian terimakasih,
Salam Query.... Execute.