Basis Data Lanjut
Basis Data Lanjut
DOSEN PENGAMPU:
I Made Putrama, S.T.,M.Tech.
Oleh:
Sistem Informasi
3A
SKS : 3 SKS
Store Function yang Anda buat harus dapat melakukan hal berikut ini:
a) Cek apakah ada nama_tabel = ‘barang’ di tabel autoidtabel:
Jika Tidak ada, generate sebuah Kode <kode_baru> untuk tabel Barang lalu
lakukan insert di tabel autoidtabel.
Jika Ada, cek apakah ada nilai pada kolom id_terhapus.
Jika Ada, ambil satu nilai (terpisah dengan ‘,’) dan update isi dari kolom
id_terhapus = id_terhapus – (nilai id yang diambil)
Jika Tidak ada, update id_terakhir = <kode_baru> where nama_tabel =
‘barang’
3) Store Procedures
a. Buatlah sebuah Store Procedure yang dapat menampilkan View 1(a) dengan input
paramater:
• Nama Barang
• Nama Pemasok
• Tanggal Pembelian (dari – sampai)
b. Store Procedure 3(a) harus memanfaatkan Store Function pada instruksi ke-2
c. Buatlah sebuah Store Procedure yang dapat menampilkan View 1(b) dengan input
parameter ID Pembelian
4) Triggers
a. Buatlah sebuah Trigger untuk menginputkan data berikut ini secara otomatis
pada tabel Pembelian, Barang dan Penjualan:
• Created_Dt
b. Buatlah sebuah Trigger untuk mengenerate otomatis ID Tabel barang dan
melakukan insert ke tabel Barang
B. Buatlah sebuah dokumen yang merupakan Spesifikasi Sistem Database yang dibuat
meliputi:
1) ERD dan Kamus Data nya
2) Tabel-tabel lengkap dengan relasi nya
3) Kumpulan DB Script yang dibuat
4) Instruksi untuk melakukan Ekskusi mulai dari awal sampai akhir
5) Database Object yang dibuat dan contoh hasil ekskusinya
Jawab :
B.
1. ERD dan Kamus Data
Kamus Data:
KategoriPengguna :{id,kategori}.
Satuan :{id,nama,deskripsi}.
Negara :{kode,nama,deskripsi}.
2. Tabel-Tabel dan Relasinya (RAT)
3. DB Script
4. Instruksi untuk melakukan Eksekusi mulai dari awal sampai akhir
-- version 4.9.1
-- https://www.phpmyadmin.net/
--
-- Host: localhost
SET AUTOCOMMIT = 0;
START TRANSACTION;
/*!40101 SET
@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET
@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET
@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-- Database: `tugasfix`
--
DELIMITER $$
--
-- Procedures
--
BEGIN
WHERE
OR
OR
END$$
select id, id_terakhir, id_terhapus into tid, tterakhir, tterhapus from autoidtable
where nama_table = tname;
-- delete
begin
else
end if;
end;
-- update
-- insert
else
END$$
select id, id_terakhir, id_terhapus into tid, tterakhir, tterhapus from autoidtabel
where nama_table = tname;
-- delete
begin
else
end if;
end;
-- update
-- insert
else
end if;
END$$
--
-- Functions
--
declare curtemp cursor for select id, id_terakhir, id_terhapus from autoidtabel
where nama_table = ntable;
open curtemp;
getData: loop
begin
length(id_terhapus))
end;
begin
end;
else
begin
set tterakhir = 1;
end;
end if;
close curtemp;
return strid;
END$$
DECLARE v1 INT;
DECLARE v2 INT;
Penjualan.id
RETURN (v2-v1);
END$$
DELIMITER ;
-- --------------------------------------------------------
--
--
--
-- --------------------------------------------------------
--
--
--
--
('Barang01', 'Aqua Gelas', 100, 50, 20, 'Aqua Gelas Laku 10 Dus', 'Unit01', 'Rak01',
'Lantai01', 'Gudang01', 1, '0000-00-00 00:00:00', '2019-10-24 00:00:00'),
('Barang02', 'Laptop Asus ROG', 50, 5, 20, 'Laptop Asus ROG Laku 13', 'Unit02',
'Rak02', 'Lantai02', 'Gudang01', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
('Barang03', 'Gas LPG', 100, 50, 10, 'Gas LPG Laku 50', 'Unit03', 'Rak03', 'Lantai03',
'Gudang02', 2, '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
('Barang04', 'Kipas Angin', 30, 10, 10, 'Kipas Angin Laku 5', 'Unit04', 'Rak04',
'Lantai04', 'Gudang02', 2, '0000-00-00 00:00:00', '0000-00-00 00:00:00');
--
-- Triggers `Barang`
--
DELIMITER $$
END
$$
DELIMITER ;
DELIMITER $$
END
$$
DELIMITER ;
DELIMITER $$
end if;
END
$$
DELIMITER ;
-- --------------------------------------------------------
--
--
--
--
INSERT INTO `CabangUsaha` (`id`, `nama_cabang`, `id_alamat`) VALUES
-- --------------------------------------------------------
--
--
--
--
-- --------------------------------------------------------
--
--
--
--
-- --------------------------------------------------------
--
--
--
--
-- --------------------------------------------------------
--
--
--
--
--
--
--
--
(1, 'Karyawan'),
(2, 'Customer'),
(3, 'Admin'),
(4, 'Owner');
-- --------------------------------------------------------
--
-- Table structure for table `Kecamatan`
--
--
--
-- --------------------------------------------------------
--
--
--
--
--
--
--
--
-- --------------------------------------------------------
--
-- Table structure for table `Pelanggan`
--
--
--
-- --------------------------------------------------------
--
--
CREATE TABLE `Pemasok` (
--
--
-- --------------------------------------------------------
--
--
--
--
-- Triggers `Pembelian`
--
DELIMITER $$
END
$$
DELIMITER ;
-- --------------------------------------------------------
--
--
--
-- --------------------------------------------------------
--
--
--
--
-- --------------------------------------------------------
--
--
--
--
--
-- Triggers `Penjualan`
--
DELIMITER $$
END
$$
DELIMITER ;
-- --------------------------------------------------------
--
--
--
--
INSERT INTO `PenjualanBarang` (`id_penjualan`, `kode_barang`, `id_satuan`,
`harga_jual`, `jumlah_jual`) VALUES
-- --------------------------------------------------------
--
--
--
--
INSERT INTO `Provinsi` (`kode`, `nama`, `deskripsi`, `kode_negara`) VALUES
-- --------------------------------------------------------
--
--
--
--
INSERT INTO `Rak` (`kode`, `deskripsi`, `kode_lantai`, `kode_gudang`, `id_cabang`,
`nama`) VALUES
-- --------------------------------------------------------
--
--
--
--
INSERT INTO `Satuan` (`id`, `nama`, `deskripsi`) VALUES
-- --------------------------------------------------------
--
--
--
-- --------------------------------------------------------
--
--
`Nama_Pembelian` int(11)
,`Nama_Pemasok` varchar(45)
,`Nama_Barang` varchar(45)
,`Jumlah_Total_Pembelian` int(11)
,`Jumlah_Total_Penjualan` int(11)
,`total_persediaan` int(11)
,`Tanggal_Pembelian` datetime
);
-- --------------------------------------------------------
--
--
`id_pembelian` int(11)
,`Nama_Barang` varchar(45)
,`Harga_Item_Barang` float
,`Nama_Pemasok` varchar(45)
,`Tanggal_Beli` datetime
,`Tanggal_Terima` datetime
,`Jumlah_Pembelian_Item` int(11)
);
-- --------------------------------------------------------
--
--
`Nama_Penjualan` int(11)
,`Nama_Pelanggan` varchar(45)
,`Jumlah_Total_Penjualan` int(11)
,`Persediaan_Barang` int(11)
,`Barang_Terjual` int(11)
,`Tanggal_Penjualan` datetime
,`Nama_Karyawan` varchar(45)
);
-- --------------------------------------------------------
--
--
`Nama_Item_Barang` varchar(45)
,`Harga_Barang` float
,`Tanggal_Pesan` datetime
,`Tanggal_Terima` datetime
,`Jumlah_Item_Dibeli_Pelanggan` int(11)
);
-- --------------------------------------------------------
--
--
-- --------------------------------------------------------
--
--
DROP TABLE IF EXISTS `view_item_barang`;
-- --------------------------------------------------------
--
--
-- --------------------------------------------------------
--
--
--
--
--
-- Indexes for table `Alamat`
--
--
--
--
--
--
--
ALTER TABLE `Gudang`
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
ALTER TABLE `PenjualanBarang`
--
--
--
--
--
--
--
--
--
--
--
--
-- Constraints for table `HakAkses`
--
--
--
--
--
--
--
ALTER TABLE `Kecamatan`
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
-- Constraints for table `Provinsi`
--
--
--
--
--
COMMIT;
/*!40101 SET
CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET
CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET
COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
A. VIEW
View adalah perintah query yang disimpan pada database dengan suatu nama
tertentu, sehingga bisa digunakan setiap saat untuk melihat data tanpa menuliskan
ulang query tersebut. Views dapat dikatakan sebagai suatu tampilan tabel virtual
yaitu bentuk representasi data yang dapat dibuat dengan melibatkan data yang ada
pada satu atau beberapa tabel.
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
VIEW `tugasfix`.`views_pembelian` AS
SELECT
`tugasfix`.`Pembelian`.`id` AS `Nama_Pembelian`,
`tugasfix`.`Pemasok`.`nama` AS `Nama_Pemasok`,
`tugasfix`.`Barang`.`nama` AS `Nama_Barang`,
`tugasfix`.`Pembelian`.`total_jumlah` AS `Jumlah_Total_Pembelian`,
`tugasfix`.`Penjualan`.`total_jumlah` AS `Jumlah_Total_Penjualan`,
`tugasfix`.`Pembelian`.`created_dt` AS `Tanggal_Pembelian`
FROM
(((((`tugasfix`.`PembelianBarang`
JOIN `tugasfix`.`Pembelian` ON
(`tugasfix`.`PembelianBarang`.`id_pembelian` = `tugasfix`.`Pembelian`.`id`))
JOIN `tugasfix`.`PenjualanBarang` ON
(`tugasfix`.`PenjualanBarang`.`kode_barang` = `tugasfix`.`Barang`.`kode`))
JOIN `tugasfix`.`Penjualan` ON
(`tugasfix`.`PenjualanBarang`.`id_penjualan` = `tugasfix`.`Penjualan`.`id`))
GROUP BY `tugasfix`.`Pembelian`.`id`
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SELECT
`tugasfix`.`PembelianBarang`.`id_pembelian` AS `id_pembelian`,
`tugasfix`.`Barang`.`nama` AS `Nama_Barang`,
`tugasfix`.`PembelianBarang`.`harga_beli` AS `Harga_Item_Barang`,
`tugasfix`.`Pemasok`.`nama` AS `Nama_Pemasok`,
`tugasfix`.`Pembelian`.`created_dt` AS `Tanggal_Beli`,
`tugasfix`.`Pembelian`.`updated_dt` AS `Tanggal_Terima`,
`tugasfix`.`PembelianBarang`.`jumlah_beli` AS `Jumlah_Pembelian_Item`
FROM
(((`tugasfix`.`Barang`
JOIN `tugasfix`.`Pembelian` ON
(`tugasfix`.`PembelianBarang`.`id_pembelian` = `tugasfix`.`Pembelian`.`id`))
GROUP BY `tugasfix`.`Pembelian`.`id`
Views Penjualan
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
VIEW `tugasfix`.`view_penjualan` AS
SELECT
`tugasfix`.`Penjualan`.`id` AS `Nama_Penjualan`,
`tugasfix`.`Pelanggan`.`nama` AS `Nama_Pelanggan`,
`tugasfix`.`Penjualan`.`total_jumlah` AS `Jumlah_Total_Penjualan`,
`tugasfix`.`Barang`.`total_persediaan` AS `Persediaan_Barang`,
`tugasfix`.`Barang`.`total_penjualan` AS `Barang_Terjual`,
`tugasfix`.`Penjualan`.`created_dt` AS `Tanggal_Penjualan`,
`tugasfix`.`Karyawan`.`nama` AS `Nama_Karyawan`
FROM
((((`tugasfix`.`Penjualan`
GROUP BY `tugasfix`.`Penjualan`.`id`
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
VIEW `tugasfix`.`view_penjualan_barang` AS
SELECT
`tugasfix`.`Barang`.`nama` AS `Nama_Item_Barang`,
`tugasfix`.`PenjualanBarang`.`harga_jual` AS `Harga_Barang`,
`tugasfix`.`Penjualan`.`created_dt` AS `Tanggal_Pesan`,
`tugasfix`.`Penjualan`.`updated_dt` AS `Tanggal_Terima`,
`tugasfix`.`PenjualanBarang`.`jumlah_jual` AS
`Jumlah_Item_Dibeli_Pelanggan`
FROM
((`tugasfix`.`Barang`
JOIN `tugasfix`.`Penjualan` ON
(`tugasfix`.`PenjualanBarang`.`id_penjualan` = `tugasfix`.`Penjualan`.`id`))
GROUP BY `tugasfix`.`Penjualan`.`id`
Dalam database server ada 2 kategori fungsi: (1) fungsi aggregate adlah
fungsi-fungsi bawaan yang terdapat pada sistem database tersebut, (2) fungsi
yang diciptakan oleh user sendiri. Pada bagian ini akan dibahas tentang cara
menciptakan, dan menggunakan fungsi yang dibuat oleh user sendiri. Cara kerja
store function hampir sama dengan stored procedure, namun sebuah fungsi
mengembalikan sebuah nilai balik melalui perintah return. Sintaks yang
digunakan untuk membuat store function.
BEGIN
DECLARE v1 INT;
DECLARE v2 INT;
Penjualan.id
RETURN (v2-v1);
END
BEGIN
declare curtemp cursor for select id, id_terakhir, id_terhapus from autoidtabel
where nama_table = ntable;
open curtemp;
getData: loop
begin
length(id_terhapus))
end;
begin
end;
else
begin
set tterakhir = 1;
insert into autoidtabel (id_terakhir) values (tterakhir);
end;
end if;
close curtemp;
return strid;
END
C. PROCEDURE
NO SQL
BEGIN
WHERE
OR
OR
END
-- delete
begin
else
end if;
end;
-- update
-- insert
else
end if;
END
D. Trigger
Trigger adalah suatu objek database yang merupakan aksi atau prosedur yang
terjadi jika terjadi perubahan pada suatu row akibat eksekusi pernyataan INSERT,
UPDATE, DELETE. Trigger ditujukan untuk menjaga konsistensi data. Sebagai
contoh, ketika sebuah record data pada tabel resep dihapus, trigger dapat diatur
agar data pembayaran dari resep yang bersangkutan yang terdapat pada tabel
pembayaran ikut terhapus.
Trigger 4(a)
BEGIN
END
Hasil Trigger 4(a)
Trigger 4(b)
Barang_Before_INSERT
end if;
END
Barang_After_INSERT
CREATE DEFINER=`root`@`localhost` TRIGGER `barang_AFTER_INSERT`
AFTER INSERT ON `Barang` FOR EACH ROW BEGIN
END
Barang_Before_DELETE
END