Anda di halaman 1dari 16

1 DESAIN DATABASE

1.1. Relational Diagram


Sistem database yang dibangun memiliki 5 buah tabel yang saling berelasi satu sama
lain. Berikut ini adalah gambar diagram relasi antar tabel tersebut:

Kelima tabel dalam diagram ini adalah tabel utama. Rancangan database ini tidak
memerlukan tabel tambahan untuk menghubungkan antara tabel yang satu dengan yang
lain. Relasi antar tabel cukup digambarkan dengan menggunakan foreign key di antara
tabel yang saling berhubungan. Contohnya pada relasi antara tabel mobil dan merk,
primary key dari tabel merk (kolom idmerk) akan dijadikan sebagai foreign key di tabel
mobil (kolom merk_idmerk). Sehingga dapat diketahui sebuah mobil memiliki merk
apa.

1.2. Struktur Tabel


Struktur tabel yang digunakan dapat dilihat pada daftar di bawah ini:
1) Tabel pelanggan
Field Type Null Key Default Extra
noktp char(5) NO PRI NULL
nama varchar(45) NO NULL
Field Type Null Key Default Extra
alamat varchar(100) NO NULL
nohp varchar(15) NO NULL

2) Tabel merk

Field Type Null Key Default Extra


idmerk char(5) NO PRI NULL
namamerk varchar(45) NO NULL

3) Tabel mobil

Field Type Null Key Default Extra


platnomor char(9) NO PRI NULL
merk_idmerk char(5) NO MUL NULL
tahunproduksi year(4) NO NULL
hargarental int(11) NO NULL
Kolom merk_idmerk merupakan foreign key dari kolom id pada tabel merk.

4) Tabel sopir

Field Type Null Key Default Extra


noktp char(5) NO PRI NULL
nama varchar(45) NO NULL
alamat varchar(100) NO NULL
nohp varchar(15) NO NULL

5) Tabel transaksi

Field Type Null Key Default Extra


pelanggan_noktp char(5) NO MUL NULL
mobil_platnomor char(9) NO MUL NULL
sopir_noktp char(5) NO MUL NULL
tanggal datetime NO NULL
ratingsopir int(11) NO NULL
ratingmobil int(11) NO NULL
Kolom pelanggan_noktp merupakan foreign key dari kolom noktp pada tabel
pelanggan. Kolom mobil_platnomor merupakan foreign key dari kolom platnomor
pada tabel mobil. Kolom sopir_noktp merupakan foreign key dari kolom noktp pada
tabel sopir.

1.3. Fitur Database


Database yang dibangun memiliki berbagai macam fitur standar database seperti
penambahan data, pembaharuan data, dan penghapusan data. Selain itu ada fitur
tambahan sebagai berikut:
1) Menampilkan 5 plat nomor dan merk mobil yang paling sering dirental oleh
pelanggan.
2) Menampilkan 3 sopir dengan rata-rata rating sopir tertinggi.
3) Menampilkan 3 mobil dengan rata-rata rating mobil tertinggi.
4) Menampilkan 3 nama sopir yang paling sering dirental.
5) Menampilkan nama pelanggan, nama sopir, dan mobil yang digunakan berdasarkan
tanggal rental.
6) Pencarian mobil berdasarkan nama merk.
7) Menampilkan 3 pelanggan yang paling sering merental mobil.
8) Menampilkan jumlah mobil berdasarkan merk.
9) Menghitung jumlah kendaraan yang dirental berdasarkan rentang tanggal tertentu.
10) Menampilkan platnomor dan merk mobil yang dipinjam berdasarkan pelanggan.
11) Menampilkan ratingsopir yang diberikan pelanggan berdasarkan noktp sopir.
12) Menampilkan rata-rata ratingsopir dari seorang sopir.
4) Tabel sopir
CREATE TABLE `sopir` (
`noktp` CHAR(5) NOT NULL,
`nama` VARCHAR(45) NOT NULL,
`alamat` VARCHAR(100) NOT NULL,
`nohp` VARCHAR(15) NOT NULL,
PRIMARY KEY (`noktp`)
);

5) Tabel transaksi
CREATE TABLE `transaksi` (
`pelanggan_noktp` CHAR(5) NOT NULL,
`mobil_platnomor` CHAR(9) NOT NULL,
`sopir_noktp` CHAR(5) NOT NULL,
`tanggal` DATETIME NOT NULL,
`ratingsopir` INT NOT NULL,
`ratingmobil` INT NOT NULL,
CONSTRAINT `fk_transaksimobil_pelanggan1`
FOREIGN KEY (`pelanggan_noktp`)
REFERENCES `pelanggan` (`noktp`),
CONSTRAINT `fk_transaksimobil_mobil1`
FOREIGN KEY (`mobil_platnomor`)
REFERENCES `mobil` (`platnomor`),
CONSTRAINT `fk_transaksimobil_sopir1`
FOREIGN KEY (`sopir_noktp`)
REFERENCES `sopir` (`noktp`)
);

2.2. Pengisian Data


1) Pengisian Data Tabel pelanggan
INSERT INTO `pelanggan` (`noktp`, `nama`, `alamat`, `nohp`)
VALUES
('p0001', 'Destri', 'Kalu', '081111111111'),
('p0002', 'Eka', 'Payeti', '081111111222'),
('p0003', 'Wati', 'Waingapu', '081111111333'),
('p0004', 'Mardiah', 'Matawai', '081111111444'),
('p0005', 'Lodoweijk', 'Kalumbang', '081111111555'),
('p0006', 'Rocky', 'Tandairotu', '081111111666'),
('p0007', 'Ambu', 'Payeti', '081111111777'),
('p0008', 'Dian', 'Wara', '081111111888'),
('p0009', 'Ricky', 'Hambala', '081111111999'),
('p0010', 'Echa', 'Wangga', '081111111010');
Data yang telah ditambahkan sebanyak 10:

2) Pengisian Data Tabel merk


INSERT INTO `merk` (`idmerk`, `namamerk`)
VALUES
('m0001', 'Honda Jazz'),
('m0002', 'Toyota Avanza'),
('m0003', 'Daihatsu Xenia'),
('m0004', 'Toyota Agya'),
('m0005', 'Daihatsu Ayla');
Data yang telah ditambahkan sebanyak 5:
3) Pengisian Data Tabel mobil
INSERT INTO `mobil` (`platnomor`, `merk_idmerk`,
`tahunproduksi`, `hargarental`)
VALUES
('ED1111AA', 'm0001', '2016', '300000'),
('ED2222AA', 'm0001', '2017', '300000'),
('ED3333AA', 'm0002', '2015', '350000'),
('ED4444AA', 'm0002', '2018', '350000'),
('ED5555AA', 'm0003', '2016', '350000'),
('ED6666AA', 'm0003', '2017', '350000'),
('ED7777AA', 'm0004', '2018', '250000'),
('ED8888AA', 'm0004', '2015', '250000'),
('ED9999AA', 'm0005', '2016', '250000'),
('ED1010AA', 'm0005', '2017', '250000');
Data yang telah ditambahkan sebanyak 10:

4) Pengisian Data Tabel sopir


INSERT INTO `sopir` (`noktp`, `nama`, `alamat`, `nohp`)
VALUES
('s0001', 'Anto', 'Waingapu', '082222222111'),
('s0002', 'Budi', 'Wangga', '082222222222'),
('s0003', 'Herman', 'Payeti', '082222222333'),
('s0004', 'Rico', 'Tandairotu', '082222222444'),
('s0005', 'Ardi', 'Kalumbang', '082222222555');
Data yang telah ditambahkan sebanyak 5:
5) Pengisian Data Tabel transaksi
INSERT INTO `transaksi` (`pelanggan_noktp`,
`mobil_platnomor`, `sopir_noktp`, `tanggal`, `ratingsopir`,
`ratingmobil`)
VALUES
('p0001', 'ED1111AA', 's0001', '2018-12-01 07:30:00', 7, 8)
('p0004', 'ED2222AA', 's0002', '2018-12-01 07:30:00', 8, 8),
('p0001', 'ED1111AA', 's0003', '2018-12-02 07:30:00', 6, 6),
('p0002', 'ED4444AA', 's0001', '2018-12-02 11:00:00', 7, 7),
...
('p0009', 'ED6666AA', 's0002', '2018-12-30 10:00:00', 6, 9),
('p0010', 'ED1010AA', 's0001', '2018-12-30 12:00:00', 8, 7),
('p0006', 'ED1111AA', 's0005', '2018-12-31 12:00:00', 5, 7),
('p0007', 'ED4444AA', 's0001', '2018-12-31 12:00:00', 9, 9),
('p0008', 'ED9999AA', 's0002', '2018-12-31 14:00:00', 5, 7);
Data yang telah ditambahkan sebanyak 80:
2.3. Pembuatan Fitur Database
1) Menampilkan 5 plat nomor dan merk mobil yang paling sering dirental oleh
pelanggan.
Untuk menampilkan 5 plat nomor dan merk mobil yang paling sering dirental
dibuat menggunakan view.
CREATE VIEW top_mobil AS
SELECT platnomor AS 'plat nomor', namamerk AS 'merk',
COUNT(platnomor) AS 'jumlah rental' FROM mobil, transaksi,
merk
WHERE mobil.platnomor=transaksi.mobil_platnomor
AND mobil.merk_idmerk=merk.idmerk
GROUP BY platnomor ORDER BY COUNT(platnomor) DESC LIMIT 5;
Pemanggilan view:

2) Menampilkan 3 sopir dengan rata-rata rating sopir tertinggi.


Fitur ini dibuat menggunakan view.
CREATE VIEW best_sopir AS
SELECT nama AS 'nama sopir', ROUND(AVG(ratingsopir), 2) AS
'rating rata-rata' FROM sopir
JOIN transaksi ON sopir.noktp=transaksi.sopir_noktp
GROUP BY sopir_noktp
ORDER BY AVG(ratingsopir) DESC LIMIT 3;
Pemanggilan view:

3) Menampilkan 3 mobil dengan rata-rata rating mobil tertinggi.


Fitur ini dibuat menggunakan view.
CREATE VIEW best_mobil AS
SELECT mobil_platnomor AS 'plat nomor', namamerk AS 'merk',
ROUND(AVG(ratingmobil), 2) AS 'rating rata-rata' FROM mobil
JOIN transaksi JOIN merk ON
mobil.platnomor=transaksi.mobil_platnomor
AND mobil.merk_idmerk=merk.idmerk
GROUP BY mobil_platnomor
ORDER BY AVG(ratingmobil) DESC LIMIT 3;
Pemanggilan view:

4) Menampilkan 3 nama sopir yang paling sering dirental.


Fitur ini dibuat menggunakan procedure dengan sql sebagai berikut:
DELIMITER //
CREATE PROCEDURE sopir_favorit()
BEGIN
SELECT nama, COUNT(sopir_noktp) AS 'jumlah' FROM transaksi
JOIN sopir ON sopir.noktp=transaksi.sopir_noktp
GROUP BY sopir_noktp
ORDER BY COUNT(sopir_noktp) DESC LIMIT 3;
END
//
DELIMITER ;
Contoh pemanggilan procedure pencarian sopir yang paling sering dirental:

5) Menampilkan nama pelanggan, nama sopir, dan mobil yang digunakan berdasarkan
tanggal rental.
Fitur ini dibuat menggunakan procedure dengan sql sebagai berikut:
DELIMITER //
CREATE PROCEDURE cek_rental(_date INT)
BEGIN
SELECT pelanggan.nama AS 'nama pelanggan', sopir.nama AS
'nama sopir', mobil_platnomor AS 'plat nomor', DATE(tanggal)
AS 'tanggal' FROM pelanggan, sopir, transaksi
WHERE pelanggan.noktp=transaksi.pelanggan_noktp
AND sopir.noktp=transaksi.sopir_noktp
AND DAY(tanggal)=_date;
END
//
DELIMITER ;

Contoh pemanggilan procedure untuk menampilkan nama pelanggan, nama sopir,


dan mobil yang digunakan berdasarkan tanggal rental:
6) Pencarian mobil berdasarkan nama merk.
Fitur ini dibuat menggunakan procedure dengan sql sebagai berikut:
DELIMITER //
CREATE PROCEDURE cari_mobil(_merk VARCHAR(45))
BEGIN
SELECT namamerk AS 'merk', platnomor AS 'plat nomor' FROM
mobil, merk WHERE mobil.merk_idmerk=merk.idmerk AND namamerk
LIKE CONCAT('%',_merk,'%');
END
//
DELIMITER ;
Contoh pemanggilan procedure untuk menampilkan mobil berdasarkan merk:

7) Menampilkan 3 pelanggan yang paling sering merental mobil.


Fitur ini dibuat menggunakan view.
CREATE VIEW pelanggan_setia AS
SELECT nama AS 'nama pelangan', COUNT(pelanggan_noktp) AS
jumlah FROM pelanggan, transaksi
WHERE pelanggan.noktp=transaksi.pelanggan_noktp
GROUP BY pelanggan_noktp DESC LIMIT 3;
Pemanggilan view:
8) Menampilkan jumlah mobil berdasarkan merk.
Fitur ini dibuat menggunakan function dengan sql sebagai berikut:
DELIMITER //
CREATE FUNCTION hitung_mobil(_merk VARCHAR(45))
RETURNS INT
BEGIN
DECLARE jumlah INT;
SELECT COUNT(platnomor) AS jumlah INTO jumlah FROM mobil,
merk
WHERE mobil.merk_idmerk=merk.idmerk
AND namamerk LIKE CONCAT('%',_merk,'%');
RETURN jumlah;
END
//
DELIMITER ;
Contoh pemanggilan function untuk menghitung jumlah mobil berdasarkan merk:

9) Menghitung jumlah pemasukan berdasarkan rentang tanggal tertentu.


Fitur ini dibuat menggunakan function dengan sql sebagai berikut:
DELIMITER //
CREATE FUNCTION hitung_pemasukan(_start INT, _end INT)

RETURNS INT

BEGIN
DECLARE jumlah INT;

SELECT SUM(hargarental) INTO jumlah FROM transaksi, mobil


WHERE mobil.platnomor=transaksi.mobil_platnomor AND
DAY(tanggal) BETWEEN _start AND _end;

RETURN jumlah;

END

//

DELIMITER ;

Contoh pemanggilan function untuk menghitung jumlah pemasukan dalam rentang


tanggal tertentu:

10) Menampilkan platnomor dan merk mobil yang dipinjam berdasarkan pelanggan.
Fungsi ini dibuat menggunakan procedure dengan sql sebagai berikut:
DELIMITER //
CREATE PROCEDURE cari_mobil_dirental(_noktp CHAR(5))
BEGIN
SELECT noktp, namamerk, platnomor, tanggal FROM pelanggan,
transaksi, mobil, merk WHERE noktp=transaksi.pelanggan_noktp
AND transaksi.mobil_platnomor=mobil.platnomor AND
mobil.merk_idmerk=merk.idmerk AND noktp LIKE
CONCAT('%',_noktp,'%') ORDER BY tanggal;
END
//
DELIMITER ;
Contoh pemanggilan procedure untuk menampilkan platnomor dan merk mobil
yang dipinjam berdasarkan pelanggan:
11) Menampilkan ratingsopir yang diberikan pelanggan berdasarkan noktp sopir.
Fitur ini dibuat menggunakan procedure dengan sql sebagai berikut:
DELIMITER //
CREATE PROCEDURE cek_rating_sopir(_noktp CHAR(5))
BEGIN
SELECT sopir.noktp, pelanggan.nama AS 'nama pelanggan',
ratingsopir FROM pelanggan, transaksi, sopir WHERE
pelanggan.noktp=transaksi.pelanggan_noktp AND
sopir.noktp=transaksi.sopir_noktp AND sopir_noktp LIKE
CONCAT('%',_noktp,'%') ORDER BY ratingsopir DESC;
END
//
DELIMITER ;
Contoh pemangilan procedure untuk menampilkan ratingsopir yang diberikan
pelanggan berdasarkan noktp sopir:
12) Menampilkan rata-rata ratingsopir berdasarkan nama sopir.
Fitur ini dibuat menggunakan function dengan sql sebagai berikut:
DELIMITER //
CREATE FUNCTION rata2_rating_sopir(_nama VARCHAR(45))
RETURNS FLOAT
BEGIN
DECLARE rating FLOAT;
SELECT AVG(ratingsopir) INTO rating FROM transaksi, sopir
WHERE sopir.noktp=transaksi.sopir_noktp AND nama LIKE
CONCAT('%',_nama,'%');
RETURN rating;
END
//
DELIMITER ;

Contoh pemanggilan function untuk menampilkan rata-rata rating sopir


berdasarkan nama sopir:

Anda mungkin juga menyukai