Friday, August 12, 2016

Database Penjualan dengan MySQL

Tabel-tabel yang perlu dipersiapkan :
tnotajual : untuk menyimpan no nota dan tanggal kapan transaksi penjualan dilakukan ?
tpenjualan : untuk menyimpan barang-barang apa saja yang dijual dan jumlahnya berapa ?
maka DDL dan DMLnya adalah sbb :
CREATE TABLE `tnotajual` (
`nonota` VARCHAR( 15 ) NOT NULL ,
`tgljual` DATE NOT NULL ,
PRIMARY KEY ( `nonota` )
) ENGINE = innodb;
insert into tnotajual VALUES (‘J001′,’2008/11/14’);
insert into tnotajual VALUES (‘J002′,’2008/11/14’);
CREATE TABLE `tpenjualan` (
`nonota` VARCHAR( 14 ) NOT NULL ,
`kodebrg` VARCHAR( 10 ) NOT NULL ,
`harga` INT( 10 ) NOT NULL ,
`jumlah` INT( 5 ) NOT NULL
) ENGINE = innodb;
Untuk relasinya tambahkan :
ALTER TABLE `tpenjualan`
ADD FOREIGN KEY (`kodebrg`) REFERENCES `tbarang` (`kodebrg`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD FOREIGN KEY (`nonota`) REFERENCES `tnotajual` (`nonota`) ON DELETE CASCADE ON UPDATE CASCADE;
DMLnya :
insert into tpenjualan values (‘J001′,’BRG001’,1200,2);
insert into tpenjualan values (‘J001′,’BRG002’, 1400,3);
insert into tpenjualan values (‘J001′,’BRG003’, 1700,4);
insert into tpenjualan values (‘J002′,’BRG001’, 1200,2);
insert into tpenjualan values (‘J002′,’BRG002’, 1400,3);
insert into tpenjualan values (‘J002′,’BRG003’, 1700,4);
sampai disini table untuk transaksi penjualan sudah jadi tinggal dilanjutkan lagi. Bagaimana kalau ada seorang bos menanyakan barang yang sudah laku berapa ? apa saja ? dan stok barang kita tinggal berapa ?
nah untuk bisa menjawab pertanyaan tersebut perlu beberapa query atau view untuk mempermudah pekerjaan. Nah dilanjutkan lagi buat view :
buat dulu qpenjualan :
create view qpenjualan as SELECT tnotajual.nonota, tnotajual.tgljual, tpenjualan.kodebrg, tbarang.namabrg, tbarang.satuan, tpenjualan.jumlah,
tpenjualan.harga, (tpenjualan.jumlah * tpenjualan.harga) AS jumlahjual
FROM tbarang RIGHT JOIN (tnotajual INNER JOIN tpenjualan ON tnotajual.nonota=tpenjualan.nonota) ON tbarang.kodebrg=tpenjualan.kodebrg;
Sehingga kalau dilihat datanya :
relasi7
Nah tinggal dilanjutkan lagi untuk menampilkan data yang menampilkan notanota sekian transaksi tanggal sekian berapa jumlah yang dibayarkan ? nah bisa dilanjutkan dengan membuat view lagi :
CREATE view qtotjualan as select tnotajual.nonota, tnotajual.tgljual, Sum(qpenjualan.jumlahjual) AS jumlah
FROM tnotajual INNER JOIN qpenjualan ON tnotajual.nonota = qpenjualan.nonota
GROUP BY tnotajual.nonota, tnotajual.tgljual;
Sehingga hasilnya :
relasi82
Dengan demikian bisa dilihat bahwa transaski penjualan dengan nonota J001 pada tanggal 2008-11-14 jumlah yang harus dibayarkan adalah 13400, begitu juga untuk yang J002.
Nah sampai disini bisa diketahui masing-masing transaksi totalnya baik itu pembelian ataupun penjualan. Langkah selanjutnya untuk mengetahui stok barang yang ditersedia logikanya barang yang tersedia adalah seluruh barang yang dibeli dikurangi dengan seluruh barang yang terjual sehingga bisa diketahui sisanya. Untuk mengetahui jawaban ini tentunya tidak perlu melibatkan bahasa pemrograman ataupun scrip web, cukup dengan DBMS saja mestinya sudah bisa terjawab dan sudah bisa bekerja dengan sendirinya, alias datanya yang dihasilnya bisa selalu terupdate. Nah langkahnya adalah sbb :
Buat dahulu view untuk menghitung total barang yang sudah dibeli :
create view qbarangbeli as SELECT tbarang.kodebrg, tbarang.namabrg, tbarang.satuan, Sum(tpembelian.jumlah) AS totalbeli
FROM tbarang RIGHT JOIN tpembelian ON tbarang.kodebrg=tpembelian.kodebrg
GROUP BY tbarang.kodebrg, tbarang.namabrg, tbarang.satuan;

Sehingga hasilnya :
relasi9
Terlihat masing-masing barang yang sudah dibeli berapa ? nah sekarang tinggal melanjutkan untuk barang yang sudah terjual juga berapa ? langkahnya buat view :
create view qbarangjual as SELECT tbarang.kodebrg, tbarang.namabrg, tbarang.satuan, if(Sum(qpenjualan.jumlah),Sum(qpenjualan.jumlah),0) AS totaljual
FROM tbarang LEFT JOIN qpenjualan ON tbarang.kodebrg=qpenjualan.kodebrg
GROUP BY tbarang.kodebrg, tbarang.namabrg, tbarang.satuan;
Dengan demikian hasilnya :
relasi10
Nah kelihatan bahwa Sabun GIV sudah laku 4, Sabun Lifeboy sudah laku 6, Soklin 1 Kg sudah laku 8 dan Rinso 1 Kg belum laku alias nol.
Sampai disini tentunya masih belum terjawab, berapa sih stok pada masing-masing barang. Nah untuk menjawab ini bisa dengan cara membuat view lagi, yaitu view Qbarangbeli dikurangi dengan view Qbarangjual, Oke bisa dilanjutkan lagi begini :
create view qstokbarang as SELECT tbarang.kodebrg, tbarang.namabrg, tbarang.satuan, qbarangbeli.totalbeli, qbarangjual.totaljual, (qbarangbeli.totalbeli)-(qbarangjual.totaljual) AS stok FROM (tbarang LEFT JOIN qbarangbeli ON tbarang.kodebrg=qbarangbeli.kodebrg) LEFT JOIN qbarangjual ON tbarang.kodebrg=qbarangjual.kodebrg;
Sehingga hasilnya sbb :
relasi11

Terlihat dengan jelas, bahwa untuk Sabun GIV membeli sebanyak 20 kemudian laku 4 tinggal 16, Sabun Lifeboy beli 60 laku 6 tinggal 54 dan seterusnya. Sebagai uji coba, coba diupdate datanya pada transaksi penjualan :
update tpenjualan set jumlah=5 where nonota=’J001′ and kodebrg =’BRG001′;
select * from tpenjual

sehingga hasilnya :
relasi12

kelihatan bahwa jumlah yang dijual pada transaksi dengan nonota = J001 dengan kodebrg = BRG001 telah dirubah menjadi 5, mestinya perubahan ini juga berpengaruh pada stok barang, yang tadinya Sabun GIV stoknya 16 menjadi 13 seperti gambar berikut :
relasi13
nah kalau dilihat keseluruhan relasinya sbb :
relasi14

0 comments:

Post a Comment

 

Welcome To My Blog Template by Ipietoon Cute Blog Design