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 :
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 :
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 :
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 :
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 :
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 :
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 :
nah kalau dilihat keseluruhan relasinya sbb :