Anda di halaman 1dari 14

NIM : 10112680

NAMA : Faqih Pratama L

DATABASE UNTUK SISTEM INFORMASI PENYEWAAN KONTAINER


Sebuah Perusahaan PT. Guna Sejahtera yang bergerak dibidang jasa ekspedisi yaitu jasa penyewaan
kontainer dimana perusaahan membutuhkan sebuah sistem informasi yang didalam nya dapat melakukan
berbagai hal , ;
Yaitu :
1. Pencatatan data pelanggan
2. Pencatatan data container
3. Pencatatan data penerima
4. Perhitungan Denda
5. Laporan Penyewaan Kontainer
6. Laporan Pembayaran
Adapun Aturan Bisnis yang ada di PT. Guna Sejahtera adalah :
1. Penyewaan kontainer dimulai dari pelanggan yang datang kepada bagian pemasaran.
2. Pelanggan yang melalukan pemesanan kemudian didata untuk dicatat ke data pelanggan.
3. Setiap kontainer yang masih ada akan berstatus tersedia jika kosong akan berstatus tidak
tersedia.
4. Penyewaan kontainer akan dilakukan ketika pelanggan sudah melakukan pembayaran.
5. Pada saat pengiriman barang, bagian pemasaran memberikan data kapal, data kontainer, dan data
barang yang akan dikirim kepada bagian operasional. Setelah semua berkas diterima oleh bagian
operasional lalu melakukan penjemputan dan pengecekan terhadap barang dan siap untuk
mengirim barang ke lokasi tujuan.
6. Bagian keuangan membuat tagihan berupa invoice dan mengirimkan kepada pelanggan melalui
fax atau jasa tiki, lalu pelanggan melakukan pembayaran sesuai kesepakatan melalui transfer dan
mengkonfirmasikan kepada bagian keuangan.
7. Bagian keuangan membuat tagihan berupa invoice dan mengirimkan kepada pelanggan melalui
fax atau jasa tiki, lalu pelanggan melakukan pembayaran sesuai kesepakatan melalui transfer dan
mengkonfirmasikan kepada bagian keuangan.
8. Setelah pengembalian kontainer akan dilakukan pengecekan kembali apakah terlambat atau tidak
terlambat.
9. Jika pelanggan terlambat dalam melakukan pengembalian maka akan dikenakan denda, denda
dihitung perhari setelah tanggal kembali.
10. Laporan peminjaman buku yang dilaporkan adalah laporan peminjaman per hari dalam sebuah
bulan, laporan peminjaman bulanan per judul buku, dan laporan bulanan penerimaan dari denda
keterlambatan.

Adapun Tabel yang dibuat untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :
1. Tabel Pelanggan {no_pelanggan, nama_pelanggan, perusahaan, alamat, no_telp}
2. Tabel Kontainer {no_kontainer, jenis, ukuran , harga}
3. Tabel Penerima {no_penerima, nama_penerima, perusahaan, alamat, no_telp}
4. Tabel Penyewaan {no_sewa, tgl_sewa, tujuan, nama_barang, no_pelanggan, no_kontainer}
5. Tabel Pembayaran {no_invoice, tgl_bayar, tgl_kembali, no_sewa, no_pelanggan, no_penerima,
no_kontainer, qty, total}
6. Tabel Pengembalian {no_kembali, no_invoice, no_sewa, no_pelanggan, no_kontainer,
tgl_keterlambatan ,denda}

Adapun View yang dibuat untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :
1. View kontainer yang tersedia.
2. View pengembalian kontainer yang terlambat
3. View laporan pembayaran
Adapun Stored Procedure untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :
1. Stored Procedure untuk penambahan data container
2. Stored Procedure untuk menghitung total pembayaran
3. Stored Procedure untuk mem Validasi id pelanggan yang baru
4. Stored Procedure untuk mencari pelanggan berdasarkan nomor pelanggan/id pelanggan
5. Stored Procedure untuk mencari kontainer berdasarkan nomor kontainer/id kontainer
6. Stored Procedure untuk mencari data penyewaan kontrainer berdasarkan no pembayaran
Adapun Stored Function untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :
1. Stored Function untuk menghitung total jumlah yang melakukan transaksi pembayaran.
2. Stored Function untuk menghitung total jumlah kontainer pada tabel kontainer.
3. Stored Function untuk menghitung total jumlah pengembalian kontainer pada tabel
pengembalian.

Adapun Trigger untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :

1. Trigger dijalankan apabila terjadi proses insert pada tabel penyewaan


2. Trigger dijalankan apabila terjadi proses update pada tabel kontainer

Adapun Sequence dan Synonym untuk database penyewaan kontainer di PT. Guna Sejahtera ini adalah :
1. Membuat sequence pada tabel penyewaan untuk no_sewa
2. Membuat synonym pada tabel penyewaan agar lebih dipersingkat menjadi tabel sewa

Skema Relasi :
Struktur Tabel :
1. Tabel Pelanggan

N Field Tipe Data Length/Values Keterangan


o
1. no_pelanggan CHAR 5 PK
2. nama_pelanggan VARCHAR2 25
3. perusahaan VARCHAR2 25
4. alamat VARCHAR2 25
5. no_telp VARCHAR2 20

2. Tabel Kontainer

N Field Tipe Data Length/Values Keterangan


o
1. no_kontainer CHAR 5 PK
2. jenis VARCHAR2 25
3. ukuran NUMBER 5
4. harga NUMBER 15

3. Tabel Penerima

N Field Tipe Data Length/Values Keterangan


o
1. no_penerima CHAR 5 PK
2. nama_penerima VARCHAR2 25
3. perusahaan VARCHAR2 25
4. alamat VARCHAR2 25
5. no_telp VARCHAR2 20

4. Tabel Penyewaan

N Field Tipe Data Length/Values Keterangan


o
1. no_sewa CHAR 5 PK
2. tgl_sewa DATE
3. tujuan VARCHAR2 30
4. nama_barang VARCHAR2 25
5. no_pelanggan CHAR 5 FK
6. no_kontainer CHAR 5 FK

5. Tabel Pembayaran

N Field Tipe Data Length/Values Keterangan


o
1. no_invoice CHAR 10 PK
2. tgl_bayar DATE
3. tgl_kembali DATE
4. no_sewa CHAR 5 FK
5. no_pelanggan CHAR 5 FK
6. no_penerima CHAR 5 FK
7. no_kontainer CHAR 5 FK
8. qty NUMBER 3
9. total NUMBER 15
6. Tabel Pengembalian

N Field Tipe Data Length/Values Keterangan


o
1. no_kembali CHAR 15 PK
2. no_invoice CHAR 10 FK
3. no_sewa CHAR 5 FK
4. no_pelanggan CHAR 5 FK
5. no_kontainer CHAR 5 FK
6. Tgl_keterlambata DATE
n
7. denda NUMBER 15

A. Create Tabel dan Insert Tabel


1. Tabel Pelanggan
Tabel Pelanggan {no_pelanggan, nama_pelanggan, perusahaan, alamat, no_telp}
CREATE TABLE pelanggan
( no_pelanggan CHAR(5)
CONSTRAINT pel_no_pelanggan PRIMARY KEY
, nama_pelanggan VARCHAR2(25)
CONSTRAINT pel_nama_pelanggan NOT NULL
, perusahaan VARCHAR2(25)
, alamat VARCHAR2(25)
, no_telp VARCHAR2(20)
);

INSERT INTO pelanggan


(no_pelanggan, nama_pelanggan, perusahaan, alamat, no_telp)
VALUES
('P0001', 'Faqih Pratama L', 'PT. Putra Bangsa',
'Bandung', '085659131323');

SELECT *
FROM pelanggan ;
2. Tabel Kontainer
Tabel Kontainer {no_kontainer, jenis, ukuran , harga}
CREATE TABLE kontainer
( no_kontainer CHAR(5)
CONSTRAINT kon_no_kontainer PRIMARY KEY
, jenis VARCHAR2(25)
CONSTRAINT kon_jenis NOT NULL
, ukuran NUMBER(5)
CONSTRAINT kon_ukuran NOT NULL
, harga NUMBER(15)
CONSTRAINT kon_harga NOT NULL
, status VARCHAR2(20)
CONSTRAINT kon_status NOT NULL
);

INSERT INTO kontainer


(no_kontainer, jenis, ukuran, harga, status)
VALUES
('K0001', 'Dry Containers', '20', '3000000','Tersedia');

SELECT *
FROM kontainer ;

3. Tabel Penerima
Tabel Penerima {no_penerima, nama_penerima, perusahaan, alamat, no_telp}
CREATE TABLE penerima
( no_penerima CHAR(5)
CONSTRAINT pen_no_penerima PRIMARY KEY
, nama_penerima VARCHAR2(25)
CONSTRAINT pen_nama_penerima NOT NULL
, perusahaan VARCHAR2(25)
, alamat VARCHAR2(25)
, no_telp VARCHAR2(20)
);

INSERT INTO penerima


(no_penerima, nama_penerima, perusahaan, alamat, no_telp)
VALUES
('T0001', 'Faqih Pratama L', 'PT. Putra Bangsa',
'Bandung', '085659131323' );

SELECT *
FROM kontainer ;
4. Tabel Penyewaan
Tabel Penyewaan {no_sewa, tgl_sewa, tujuan, nama_barang, no_pelanggan, no_kontainer}
CREATE TABLE penyewaan
( no_sewa CHAR(5)
CONSTRAINT sewa_no_kontainer PRIMARY KEY
, tgl_sewa DATE NOT NULL
, tujuan VARCHAR2(30)
CONSTRAINT sewa_tujuan NOT NULL
, nama_barang VARCHAR2(25)
CONSTRAINT sewa_nama_barang NOT NULL
, no_pelanggan CHAR(5) NOT NULL
, no_kontainer CHAR(5) NOT NULL
, CONSTRAINT sewa_no_pel_fk
FOREIGN KEY(no_pelanggan)
REFERENCES pelanggan(no_pelanggan)
, CONSTRAINT sewa_no_kon_fk
FOREIGN KEY(no_kontainer)
REFERENCES kontainer(no_kontainer)
);
INSERT INTO penyewaan
(no_sewa, tgl_sewa, tujuan, nama_barang, no_pelanggan,
no_kontainer)
VALUES
('S0001',(to_date('2017/01/30 09:00:00', 'yyyy/mm/dd
hh24:mi:ss')),'Surabaya','Food Cargo','P0001','K0004');

SELECT *
FROM penyewaan ;

5. Tabel Pembayaran
Tabel Pembayaran {no_invoice, tgl_bayar, tgl_kembali, no_sewa, no_pelanggan, no_penerima,
no_kontainer, qty, total}

CREATE TABLE pembayaran


( no_invoice CHAR(10)
CONSTRAINT bayar_no_invoice PRIMARY KEY
, tgl_bayar DATE
, tgl_kembali DATE
, no_sewa CHAR(5) NOT NULL
, no_pelanggan CHAR(5) NOT NULL
, no_penerima CHAR(5) NOT NULL
, no_kontainer CHAR(5) NOT NULL
, qty NUMBER(3) NOT NULL
, total NUMBER(15) NOT NULL
, CONSTRAINT bayar_no_sewa_fk
FOREIGN KEY(no_sewa)
REFERENCES penyewaan(no_sewa)
, CONSTRAINT bayar_no_pen_fk
FOREIGN KEY(no_penerima)
REFERENCES penerima(no_penerima)
, CONSTRAINT bayar_no_pel_fk
FOREIGN KEY(no_pelanggan)
REFERENCES pelanggan(no_pelanggan)
, CONSTRAINT bayar_no_kon_fk
FOREIGN KEY(no_kontainer)
REFERENCES kontainer(no_kontainer)
);

INSERT INTO pembayaran


(no_invoice, tgl_bayar, tgl_kembali , no_sewa,
no_pelanggan,no_penerima, no_kontainer, qty, total)
VALUES
('INV0001',(to_date('2017/01/30 09:00:00', 'yyyy/mm/dd
hh24:mi:ss')),(to_date('2017/02/4 12:00:00', 'yyyy/mm/dd
hh24:mi:ss')),'S0001','P0001','T0001','K0004', '1' , '4500000');

SELECT *
FROM pembayaran ;

6. Tabel Pengembalian
Tabel Pengembalian {no_kembali, no_invoice, no_sewa, no_pelanggan, no_kontainer,
tgl_keterlambatan ,denda}

CREATE TABLE pengembalian


( no_kembali CHAR(15)
CONSTRAINT back_no_kembali PRIMARY KEY
, no_invoice CHAR(10) NOT NULL
, no_sewa CHAR(5) NOT NULL
, no_pelanggan CHAR(5) NOT NULL
, no_kontainer CHAR(5) NOT NULL
, tgl_keterlambatan DATE NOT NULL
, denda NUMBER(15) NOT NULL
, CONSTRAINT back_no_pel_fk
FOREIGN KEY(no_pelanggan)
REFERENCES pelanggan(no_pelanggan)
, CONSTRAINT back_no_kon_fk
FOREIGN KEY(no_kontainer)
REFERENCES kontainer(no_kontainer)
, CONSTRAINT back_no_inv_fk
FOREIGN KEY(no_invoice)
REFERENCES pembayaran(no_invoice)
, CONSTRAINT back_no_sewa_fk
FOREIGN KEY(no_sewa)
REFERENCES penyewaan(no_sewa)
);

INSERT INTO pengembalian


(no_kembali, no_invoice, no_sewa, no_pelanggan,
no_kontainer, tgl_keterlambatan, denda)
VALUES
('INVBACK0001','INV0001','S0001','P0001','K0004',
(to_date('2017/02/5 12:00:00', 'yyyy/mm/dd hh24:mi:ss')),'150000');

SELECT *
FROM pengembalian ;

B. Create View
1. View tabel kontainer dengan status status tersedia
CREATE OR REPLACE VIEW vu_lihatkontainer AS
SELECT * FROM kontainer WHERE status = 'Tersedia' ;

2. View pengembalian kontainer yang terlambat


CREATE OR REPLACE VIEW vu_lihatsewaterlambat AS
SELECT s.no_sewa, s.tgl_sewa, b.tgl_kembali , o.tgl_keterlambatan, s.tujuan, s.nama_barang ,
s.no_pelanggan, p.nama_pelanggan, k.no_kontainer , k.jenis, k.harga, k.status
FROM penyewaan s JOIN pembayaran b ON (s.no_sewa = b.no_sewa)
JOIN pelanggan p ON (s.no_pelanggan = p.no_pelanggan)
JOIN kontainer k ON (s.no_kontainer = k.no_kontainer)
JOIN pengembalian o ON (s.no_sewa = o.no_sewa)

With read only


;

3. View Laporan Pembayaran


CREATE OR REPLACE VIEW vu_laporan_pembayaran AS
SELECT no_invoice, s.no_sewa , p.no_pelanggan, p.nama_pelanggan,k.no_kontainer, b.qty,k.harga,
b.total, s.tgl_sewa, b.tgl_kembali , o.tgl_keterlambatan, o.denda,(b.total + o.denda) AS TOTALBAYAR
FROM penyewaan s JOIN pembayaran b ON (s.no_sewa = b.no_sewa)
JOIN pelanggan p ON (s.no_pelanggan = p.no_pelanggan)
JOIN kontainer k ON (s.no_kontainer = k.no_kontainer)
JOIN pengembalian o ON (s.no_sewa = o.no_sewa)
;
C. STORED PROCEDURE
1. Stored Procedure untuk tambah data kontainer.
CREATE OR REPLACE
PROCEDURE Tambah_kontainer(vno_kon kontainer.no_kontainer%TYPE,
vjenis kontainer.jenis%TYPE,
vukuran kontainer.ukuran%TYPE,
vharga kontainer.harga%TYPE,
vstatus kontainer.status%TYPE
)
IS
BEGIN
IF vno_kon IS NULL THEN
RAISE_APPLICATION_ERROR(-2680,'Nomor Kontainer tidak boleh
kosong');
END IF;

IF vjenis IS NULL THEN


RAISE_APPLICATION_ERROR(-2681,'Jenis Kontainer tidak boleh
kosong');
END IF;
IF vukuran IS NULL THEN
RAISE_APPLICATION_ERROR(-2682,'ukuran Kontainer tidak boleh
kosong');
END IF;

IF vharga IS NULL THEN


RAISE_APPLICATION_ERROR(-2683,'Harga tidak boleh kosong');
END IF;

IF vstatus IS NULL THEN


RAISE_APPLICATION_ERROR(-2684,'Status tidak boleh kosong');
END IF;

INSERT INTO kontainer VALUES(vno_kon,vjenis, vukuran, vharga,


vstatus);
COMMIT;
END;

2. Stored Procedure untuk Total Pembayaran


CREATE OR REPLACE
PROCEDURE Total_bayar(vno_invoice pembayaran.no_invoice%TYPE
)
IS
vtotal pembayaran.total%TYPE;
BEGIN
SELECT (to_char(b.qty*k.harga))AS TOTAL INTO vtotal
FROM pembayaran b JOIN kontainer k ON (b.no_kontainer =
k.no_kontainer)
WHERE NO_INVOICE = vno_invoice;
UPDATE pembayaran SET total=vtotal
where no_invoice = vno_invoice;
COMMIT;
END;

3. Stored Procedure untuk Validasi nomor pelanggan

CREATE OR REPLACE
PROCEDURE validasi_no_pelanggan(vno_pel pelanggan.no_pelanggan%TYPE
)
IS
vpelanggan pelanggan.no_pelanggan%TYPE;

BEGIN
BEGIN
SELECT no_pelanggan INTO vpelanggan FROM pelanggan WHERE
no_pelanggan = vno_pel;

EXCEPTION
WHEN NO_DATA_FOUND THEN
vpelanggan := NULL;
END;

IF vpelanggan IS NOT NULL THEN


RAISE_APPLICATION_ERROR(-2780,'Nomor Pelanggan sudah ada');
END IF;
END;

4. Stored Procedure untuk mencari pelanggan berdasarkan nomor pelanggan/id pelanggan

CREATE OR REPLACE PROCEDURE SPCARIPELANGGAN


(vID IN pelanggan.no_pelanggan%TYPE,
vNAMA OUT pelanggan.nama_pelanggan%TYPE,
vPRHS OUT pelanggan.perusahaan%TYPE,
vALAMAT OUT pelanggan.alamat%TYPE,
vTELEPON OUT pelanggan.no_telp%TYPE)

IS
BEGIN
select nama_pelanggan,perusahaan,alamat,no_telp into vNAMA,vPRHS,
vALAMAT,vTELEPON from pelanggan where no_pelanggan= vID;
end SPCARIPENYEWA;
/

5. Stored Procedure untuk mencari kontainer berdasarkan nomor kontainer/id kontainer

CREATE OR REPLACE PROCEDURE SPCARIKONTAINER


(vID IN kontainer.no_kontainer%TYPE,
vJENIS OUT kontainer.jenis%TYPE,
vUKURAN OUT kontainer.ukuran%TYPE,
vHARGA OUT kontainer.harga%TYPE,
vSTATUS OUT kontainer.status%TYPE)

IS
BEGIN
select jenis,ukuran,harga,status into vJENIS,vUKURAN, vHARGA,vSTATUS
from kontainer where no_kontainer= vID;
end SPCARIKONTAINER
;
/

6. Stored Procedure untuk mencari data penyewaan kontrainer berdasarkan no pembayaran.

CREATE OR REPLACE PROCEDURE SPCARIPENGEMBALIAN


( VINVOICE IN pembayaran.no_invoice%TYPE,
VNO_SEWA OUT pembayaran.no_sewa%TYPE,
VIDPLG OUT pembayaran.no_pelanggan%TYPE,
VKON out pembayaran.no_kontainer%TYPE,
VTGLBAYAR OUT pembayaran.tgl_bayar%TYPE,
VTGLkembali OUT pembayaran.tgl_kembali%TYPE
)
IS
BEGIN
select no_sewa, no_pelanggan, no_kontainer,tgl_bayar, tgl_kembali
into VNO_SEWA,VIDPLG, VKON,VTGLBAYAR,VTGLkembali
from pembayaran
where no_invoice= VINVOICE;
end SPCARIPENGEMBALIAN;
/

D. STORED FUNCTION
1. Stored Function untuk menghitung total jumlah yang melakukan transaksi pembayaran pada tabel
pembayaran
CREATE OR REPLACE FUNCTION totaltransaksi

RETURN NUMBER IS
total NUMBER(3) := 0;

BEGIN
SELECT count(*) into total
FROM pembayaran;

RETURN total;

END;

--call function
DECLARE

tot_trans number (3);


BEGIN
tot_trans:= totaltransaksi() ;
dbms_output.put_line('Total transaksi : '||tot_trans);
END;

2. Stored Function untuk menghitung total jumlah kontainer pada tabel kontainer
CREATE OR REPLACE FUNCTION totalkontainer

RETURN NUMBER

IS
total number(3) := 0;

BEGIN
SELECT count(*) into total
FROM kontainer;

return total;

END;

--call function
DECLARE

tot_kontra number (3);


BEGIN
tot_kontra:= totalkontainer() ;
dbms_output.put_line('Total Kontainer : '||tot_kontra);
END;

3. Stored Function untuk menghitung total jumlah pengembalian container pada tabel
pengembalian.
CREATE OR REPLACE FUNCTION totalpengembalian

RETURN NUMBER

IS
total number(3) := 0;

BEGIN
SELECT count(*) into total
FROM pengembalian;

return total;

END;
--call function
DECLARE

tot_peng number (3);


BEGIN
tot_peng:= totalpengembalian() ;
dbms_output.put_line('Total Pengembalian Kontainer : '||
tot_peng);
END;

E. TRIGGER
1. Trigger dijalankan apabila terjadi proses insert pada tabel penyewaan
CREATE OR REPLACE TRIGGER set\\elah_insert_table_penyewaan
AFTER INSERT ON PENYEWAAN
FOR EACH ROW
BEGIN

IF INSERTING THEN UPDATE kontainer


set status = 'Tidak Tersedia'
where no_kontainer = :new.no_kontainer;
end if;
end;
/

2. Trigger dijalankan apabila terjadi proses update pada tabel kontainer


CREATE OR REPLACE TRIGGER setelah_update_row_kontainer
AFTER UPDATE on kontainer
FOR EACH ROW
BEGIN
IF UPDATING THEN
UPDATE kontainer
set status = 'Tersedia'
where no_kontainer = :old.no_kontainer;
end if;
end;
/

F. SEQUENCE, SYNONYM
1. Membuat sequence pada tabel penyewaan untuk no_sewa.
CREATE SEQUENCE no_sewa
MINVALUE 1
MAXVALUE 123
START WITH 1
INCREMENT BY 1;

2. Membuat synonym pada tabel penyewaan agar lebih dipersingkat menjadi tabel sewa.
Create Synonym Sewa
FOR UAS.penyewaan ;

Anda mungkin juga menyukai