Anda di halaman 1dari 72

INVENTARIS BARANG

Laporan untuk Memenuhi Tugas Akhir Matakuliah Praktikum Basis Data


yang Dibina oleh Triyanna Widiyaningtyas, S.T., M.T.

Oleh:
Aimmatul Azizah (160533611463)
Almas Amalia Azhar (160533611499)
Andisa Talenta Oktaviani (160533611441)
Crismon Dwi Indah Kartikasari (160533611434)

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
Mei 2017
INVENTARIS BARANG

A Latar Belakang
Inventaris adalah daftar yang memuat semua barang milik kantor yang
dipakai untuk melaksanakan tugas. Inventaris barang sangatlah penting bagi
kelangsungan sebuah Perusahaan dan Instansi. Salah satu atau beberapa
perlengkapan mengalami gangguan pasti akan menghambat jalannya roda
perekonomian Perusahaan atau Instansi tersebut, yang biasanya berupa tidak
teraturnya keorganisasian sebuah inventaris kantor atau kurangnya sebuah
sistem dalam menginventaris perlengkapan kantor. Oleh karena itu,
dibutuhkan sebuah sistem untuk memanage data inventaris kantor.
Dengan adanya kemajuan IT yang semakin pesat, dimana bukan
hanya menggunakan sosial media ataupun sekedar browsing saja tetapi
fenomena internet yang ada saat ini telah mengubah pandangan hidup orang-
orang pada masa saat ini. Berdasarkan hal tersebut, maka dikembangkan
sebuah basis data yang dapat digunakan untuk melakukan transaksi
peminjaman barang inventaris barang tersebut. Dengan pembuatan basis data
ini maka data peminjaman dapat lebih teratur dan ssun rapi sehingga dapat
memudahkan peruahaan teraebut dapat lebih mudah mengidentifikasi barang
investaris perusahaan tersebut.
Pada basis data base inventaris barang ini berisikan:
1 Tb_pegawai yang berisikan data dari Pegawai, seperti kd_pegawai,
nm_pegawai, jk, tgl_lahir, jln (alamat), kota (alamat) dan status
2 Tb_barang yang berisikan data Barang, seperti kd_brg, nm_brg,
jns_brg, jml_brg.
3 Tb_peminjaman yang berisikan data peminjaman, seperti
id_peminjam, kd_pegawai, tgl_pinjam dan petugas.
4 Tb_detail_pinjam yang berisikan data barang yang dikembalikan
seperti id_pinjam, kd_brg, dan jml_brg.
5 Tb_pengembalian yang berisikan data barang yang dikembalikan,
seperti id_pinjam, tgl_kembali, dan petugas.
6 Tb_detail_kembali yang berisikan data barang yang dikembalikan
seperti id_pinjam, kd_brg, jml_brg, dan kondisi
7 Tb_Suplier yang berisikan data suplier, seperti id_pengirim,
nm_pengirim, jk, tgl_lahir, jalan (alamat), kota(alamat), dan no_pt.
8 Tb_pengiriman_barang yakni tabel yang berisikan alamat perusahaan
yang mengirimkan barang yang berisikn, seperti kd_brg,nm_brg,
jml_brg, tgl_kirim, id_prngirim
9 Tb_perusahaan yakni tabel yang berisikan data dari perusahaan
suplier, seperti no_pt, nm_pt, jalan (alamat), kota (alamat), dan
jenis_pt
10 Tb_status yakni tabel status yang berisikan apakah pegawai termasuk
petugas atau tidak yang berisi status dan ket.

B Tujuan
Tujuan dibuatnya data base ini adalah :
1 Mempermudah petugas dalam mendata barang yang masuk dan barang
yang keluar karena dipinjam.
2 Mempermudah perusahaan mendata jumlah barang inventarisnya.
3 Mempermudah dalam mengindentifikasi barang saat keluar atau
dipinjam.

C Dasar Teori
1) Agregat

Fungsi Agregat (aggregate) adalah fungsi yang menerima koleksi


nilai dan mengembalikan nilai tunggal sebagai hasilnya. Standar ISO
mendefinisikan lima jenis fungsi agregat.

Fungsi Deskripsi
Mengembalikan jumlah (banyaknya atau kemunculannya)
COUNT
nilai di suatu kolom
Mengembalikan jumlah (total atau sum) nilai di suatu
SUM
kolom
AVG Mengembalikan rata-rata (average) nilai di suatu kolom
MIN Mengembalikan nilai terkecil (minimal) di suatu kolom
MAX Mengembalikan nilai terbesar (maximal) di suatu kolom
Untuk mendapatkan fungsi agregat, kita harus menggunakan aggregate
operator atau fungsi agregat. Berikut ini adalah beberapa fungsi atau
operator untuk agregasi.
a. MAX(NAMA_KOLOM) : fungsi ini digunakan untuk
mendapatkan nilai terbesar dari suatu atribut hasil query.
b. MIN(NAMA_KOLOM) : fungsi ini digunakan untuk
mendapatkan nilai terkecil dari suatu atribut hasil query.
c. COUNT(*) : fungsi ini digunakan untuk mendapatkan nilai
banyaknya record dari query.
d. SUM(NAMA_KOLOM) : fungsi ini digunakan untuk
mendapatkan nilai total suatu atribut bertipekan numeric dari
query.
e. AVG(NAMA_KOLOM) : fungsi ini digunakan untuk
mendapatkan nilai rata-rata suatu atribut bertipe numeric hasil
query.

Bentuk query untuk menggunakan agregat operator ini adalah :

SELECT [operator agregat] FROM[nama_tabel];

1. Keyword DISTINCT
Keyword DISTINCT dapat dimanfaatkan untuk mengeliminasi
duplikasi kemunculan data yang sama.
Sintaks keyword DISTINCT diperlihatkan sebagai berikut:
SELECT DISTINCT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
WHERE P

2. Pengelompokan
Group By merupakan fungsi yang digunakan untuk melakukan
pengelompokan dari perintah SELECT. Group by seringkali
diperlukan untuk menjalankan agregate menjadi sebuah kelompok dari
hasil Query. Berikut struktur SQL untuk penampilan data :
SELECT [nama_kolom] FROM [nama_tabel] GROUP BY
[nama_kolom];
Operasi non-trivial lainnya di dalam pengambilan data adalah
pengelompokan. Operasi ini direpresentasikan melalui klausa GROUP
BY dan diikuti nama field.
Sintaks klausa GROUP BY diperlihatkan sebagai berikut:
SELECT A1, A2, ..., An
FROM r1, r2, r3, ..., rm
GROUP BY A1, A2, ..., An

3. Having
Pada saat bekerja dengan fungsi agregat, terkadang diperlukan klausa
WHERE untuk menspesifikasikan hasil. Sayangnya, klausa WHERE
tidak boleh mengandung fungsi agregat. Sebagai solusi, kita bisa
memanfaatkan klausa HAVING. Penggunaan klausa ini mirip
WHERE.

Pemakaian HAVING terkait dengan GROUP BY, kegunaanya adalah


untuk menentukan kondisi bagi GROUP BY, dimana kelompok yang
memenuhi kondisi saja yang akan di hasilkan. Berikut Struktur yang
digunakan :

SELECT [nama_kolom] FROM [nama_tabel] GROUP BY


[nama_kolom] HAVING [kondidsi];

Sintaks klausa HAVING diperlihatkan sebagai berikut:


SELECT A1, COUNT(A1)
FROM r GROUP BY A1
HAVING P;

4. Case

Kata WHERE menggunakan perbandingan untuk mengontrol pemilihan


data, sedangkan CASE perbandingan dalam bentuk output kolom. Jadi
intinya penggunaan CASE akan membentuk output tersendiri berupa
sebuah kolom baru dengan data dari operasi yang di dalamnya. Struktur
di dalam select seperti berikut :
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result] END

5. View

Views merupakan suatu tampilan tabel virtual. Views berisi perintah


SELECT ke tabel dalam database. Views dapat digunakan untuk
mempermudah kita dalam pembuatan laporan atau tampilan database
yang diinginkan dengan cepat. Dengan kata lain, views merupakan
perintah SELECT yang disimpan, sehingga setiap saat kita
membutuhkannya, kita dapat langsung memanggilnya tanpa perlu
mengetikkan perintah SELECT kembali.
View dibuat atau didefinisikan dengan menggunakan perintah CREATE
VIEW. Bentuk umum perintah untuk membuat (mendefinisikan) view,
sebagai berikut:
CREATE VIEW nama_tabel_view AS query;
Yang dimaksud query pada perintah tersebut adalah perintah select yang
kita inginkan. Sedangkan untuk menampilkan view kita tinggal ketik
perintah
SELECT * FROM [nama_view];
2) Join and Union

1. Relationship
Relationship adalah suatu hubungan antara beberapa entitas.
Konsep ini sangat penting sekali di dalam basis data, di mana
memungkinkan entitas-entitas untuk saling berhubungan satu sama
lain.
Didalam sebuah relationship, primary key memiliki peran penting
untuk mengaitkan entitas. Selain itu, primary key juga digunakan
untuk mendefinisikan batasan keterhubungan.
2. Join
Join merupakan salah satu kontruksi dasar dari SQL dan basis data.
Join dapat didefinisikan sebagai kombinasi record dari dua atau lebih
table di dalam basis data relasional dan menghasilkan sebuah tabel
(temporary) baru yang disebut sebagai joined tabel. Join adalah
perintah SQL yang berfungsi untuk melakukan relasi antara kedua
tabel atau lebih yang saling memiliki hubungan / relasi (ditandai
dengan adanya primary key pada tabel master dan foregn key).
Tetapi pada dasrnya jika ingin mengambungan kedua tabel atau
lebih maka cukup menggunakan perintah JOIN saja mka tabel akan
saling berelasi asalkan data yang direlasikan benar. Selain
menggunakan jon cara lain untuk menghubungkan antara tabel juga
dapat menggunakan WHERE
Join dapat diklasifikasikan ke dalam dua jenis, yaitu inner join dan
outer join.
a. Inner Join
Inner join pada dasarnya adalah menemukan persimpangan
(intersection) antara dua buah tabel.
Adalah join yang menciptakan tabel hasil baru dengan
mengambungkan nilai-nilai kolom dari dua tabel ( A dan B)
didasarkan pada join predikat ELF JOIN adalah join yang
bergabung dengan dirinya sendiri.
Sintaks inner join diperlihatkan sebagai berikut :

Inner join juga dapat direpresentasikan dalam bentuk implisit


sebagai berikut :

Misalkan terdapat table A dan B, maka hasil inner join dapat


diperlihatkan sebagai bidang terasir dalam diagram Venn
seperti Gambar 1.

Gambar 1. Inner Join


b. Outer Join
Outer join dibagi ke dalam tiga jenis, yaitu left outer join, right
outer join dan full outer join.
Outer join disebut juga sebuah join yang tidak memerlukan
setiap record dalan dua tabel bergabung untuk memiliki catatan
cocok. Tabel bergabung dengan mempertahankan setiap catata-
bahkan jika tidak ada catatan yang cocok lainya ada. Luar
bergabung membagi lebih lanjut lebih kekiri luar bergabung,
kanan luar bergabung, tergantung pada tabel (S)
mempertahankan satu baris dari (kiri, kanan, atau keduanya.
Left Outer Join
Left outer join atau left join mengembalikan semua nilai dari
table kiri ditambah dengan nilai dari tabel kanan yang sesuai
atau NULL jika tidak ada nilai yang sesuai.
Sintaks left outer join diperlihatkan sebagai berikut :

Left outer join antar tabel A dan B dapat diilustrasikan dalam


diagram Venn seperti Gambar 2.

Gambar 2. Left outer join


Right outer Join
Right outer join atau right join pada dasarnya sama seperti left
join, namun dalam bentuk terbalik, kanan dan kiri.
Sintaks right outer join diperlihatkan sebagai berikut :

Right outer join antara table A dan B dapat diilustrasikan dalam


diagram Venn seperti Gambar 3.

Gambar 3. Right Outer Join


Full Outer Join
Full outer join atau full join pada hakikatnya merupakan
kombinasi dari left dan right join.
Sintaks full outer join diperlihatkan sebagai berikut :

Bentuk visual dari full outer join dapat diperlihatkan


menggunakan diagram Venn seperti Gambar 4.

Gambar 4. Full Outer Join


Selain empat jenis join yang utama di atas, masih ada beberapa
variasi join lainnya, seperti CROSS JOIN (cartesian product),
NATURAL JOIN dan sebagainya.
Perlu juga diperhatikan, join bisa diimplementasikan dalam
bentuk bersarang (nested join). Jadi, di dalam sebuah operasi
join bisa terdapat operasi join lainnya.

3. Union
MySQL Union adalah statemaen yang mengkombinasikan dua
buah atau lebih resulset dari beberapa table dengan statemen SELECT
sehingga menjadi satu buah resulset. Union Statemen memiliki
beberapa ketentuan sebagai berikut :
a. Jumlah kolom/field dari setiap statemen SELECT harus sama.
b. Tipe data kolom/field dari setiap statemen SELECT harus
kompatibel.
Secara default statemen UNION akan menghapus semua record
duplikat dari resulset. Apabila Anda ingin record duplikat tetap di
tampilkan maka pada resulset tuliskan secara explisit UNION ALL.
Perbedaan Union dan Union All dapat dijelaskan pada gambar
diagram Venn 5 dan 6.
Gambar 5. Union

Gambar 6. Union All


Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai
berikut :

3) Sub Query and View

1. Subquery

Subquery (disebut juga subselect atau nested select / query atau


inner- select) adalah query SELECT yang ada di dalam perintah SQL
lain misalnya SELECT, INSERT, UPDATE,atau DELETE.
Keberadaan subquery mampu menyederhanakan persoalanpersoalan
rumit berkaitan query data.

Pada hakekatnya, subquery sangat berguna ketika sebuah query


didasarkan pada nilai-nilai yang tak diketahui

Subquery dapat diklasifikasikan ke dalam tiga jenis :

a. Scalar Subquery

Subquery baris tunggal (scalar) hanya mengembalikan hasil satu


baris data. Subquery baris tunggal dapat menggunakan operator
baris tunggal =, >,>=, <, <=, atau <>.

b. Multiple-Row Subquery

Subquery baris ganda (multiple-row) mengembalikan lebih dari


satu baris data. Subquery baris ganda dapat menggunakan operator
komparasi IN, ANY /SOME, atau ALL

c. Multiple-Column Subquery

Subquery kolom ganda (multiple-column) mengembalikan lebih


dari satu baris dan satu kolom data.

2. View

View dapat didefinisikan sebagai tabel maya (virtual) atau logical


yang terdiri dari himpunan hasil query. Tidak seperti umumnya tabel
di dalam basis data relasional, view bukanlah bagian dari skema fisik.
View bersifat dinamis, ia mengandung data dari tabel yang
direpresentasikannya. Dengan demikian, ketika tabel yang menjadi
sumber datanya berubah, data di view juga akan berubah.

3. Update View

View dapat berisi read-only atau updatable. Kondisi ini sangat


dipengaruhi oleh adanya pendefinisian view itu sendiri. Untuk
menciptakan updatable view, pernyataan SELECT yang didefinisikan
di view harus mengikuti aturan-aturan sebagai berikut :
 Pernyataan SELECT tidak boleh merujuk ke lebih dari satu tabel.

 Pernyataan SELECT tidak boleh menggunakan klausa GROUP


BY atau HAVING.

 Pernyataan SELECT harus tidak menggunakan DISTINCT.

 Pernyataan SELECT harus tidak merujuk ke view lain yang tidak


updatable.

 Pernyataan SELECT tidak boleh mengandung ekspresi apa pun,


misalnya fungsi agregat.

Pada hakekatnya, jika sistem database mampu menentukan


pemetaan balik dari skema view ke skema tabel dasar, maka view
memungkinkan untuk di update. Dalam kondisi ini, operasi-operasi
INSERT, UPDATE dan DELETE dapat diterapkan pada view.

4) Trigger

1. Triger

Trigger dapat didefinisikan sebagai himpunan kode (prosedural)


yang dieksekusi secara otomatis sebagai respon atas suatu kejadian
berkaitan dengan tabel basis data. Kejadian (event) yang dapat
membangkitkan trigger umumnya berupa pernyataan INSERT ,
UPDATE, dan DELETE.

Berdasarkan ruang lingkupnya, trigger diklasifikasikan menjadi


dua jenis : row trigger dan statement trigger. Trigger baris (row)
mendefinsikan aksi untuk setiap baris tabel : trigger pernyataan hanya
berlaku untuk setiap pernyataan INSERT , UPDATE, dan DELETE.

Dari sisi perilaku (behavior)eksekusi, trigger dapat dibedakan


menjadi beberapa jenis; namun umumnya ada dua jenis : trigger
BEFORE dan AFTER. Sesuai penamaannya, jenis-jenis ini
merepresentasikan waktu eksekusi trigger misalnya sebelum ataukah
sesudah pernyataan-pernyataan yang berkorespondensi.
Adakalanya trigger dipandang sebagai bentuk spsifik dari stored
procedure (terkait pendefinian body). Bagaimanapun, trigger akan di
panggil (secara otomatis) ketika event terjadi, sedangkan stored
procedure harus di panggil secara eksplisit.

2. Triger MySQL

MySQL tidak mengizinkan multiple trigger dengan waktu aksi dan


event sama per tabel. Misalkan di tabel A sudah didefinisikan trigger
AFTER INSERT, maka kita tidak boleh mendefinisikan trigger
AFTER INSERT lagi; namun AFTER EDIT, AFTER DELETE ,
atau BEFORE ( INSERT, EDIT, dan DELETE) bisa diterima.

5) Stored Procedure

Stored procedure adalah sebuah prosedure –layaknya subprogram


(subrutin) didalam bahasa pemrograman reguler yang tersimpan di dalam
katalog basis data. Beberapa kelebihan yang ditawarkan stored procedure
antara lain : meningkatkan performa, mereduksi trafik jaringan, reusable,
dan meningkatkan kontrol sekuriti.

Di balik kelebihan-kelebihannya, stored procedure juga memiliki


kekurangan, diantaranya : berpotensi meningkatkan beban server dan
penulisannya tidak mudah (memerlukan pengetahuan spesifik).

Untuk memanggil stored procedure, digunakan perintah CALL


(beberapa DBMS ada yang menggunakan EXECUTE). Dalam
implementasi nyata, penggunaan stored procedure sering melibatkan
parameter. Di MySQL, parameter stored procedure dibedakan menjadi tiga
mode :

 IN

Parameter yang merupakan mode default ini mengindikasikan bahwa


sebuah parameter dapat di-pass ke stored procedure tetapi nilainya
tidak dapat diubah (dari dalam stored procedure).

 OUT
Mode ini mengindikasikan bahwa stored procedure dapat mengubah
parameter dan mengirimkan kembali ke program pemanggil.

 INOUT

Mode ini pada dasarnya merupakan kombinasi dari mode IN dan


OUT.

Stored procedure dapat mencerminkan beragam operasi data ,


misalnya seleksi, penambahan, pengubahan, penghapusan, dan juga
operasi-operasi DDL.

Seperti halnya prosedur di bahasa pemrograman , stored procedure


juga dapat melibatkan variabel, pernyataan kondisional, dan
pengulangan.

6) Transaction

Konsep transaksi basis data (database transaction) cukup sederhana,


antara lain:

 Tandai bagian awal dan akhir himpunan perintah,

 Putuskan di bagian akhir untuk mengeksekusi (commit) atau


membatalkan (rollback) semua perintah.

1. Properti Transaksi Basis Data

Dalam transaksi basis data, terdapat properti-properti yang


menjamin bahwa transaksi dilaksanakan dengan baik. Properti-
properti ini dikenal sebagai ACID (Atomicity, Consistency, Isolation,
Durability ).

 Atomicity

Transaksi dilakukan sekali dan sifatnya atomic, artinya


merupakansatu kesatuan tunggal yang tidak dapat dipisah, baik itu
pekerjaanyang dilaksanakan secara keseluruhan, ataupun tidak
satupun.
 Consistency

Jika basis data pada awalnya dalam keadaan konsisten,


makapelaksanaan transaksi dengan sendirinya juga harus
meninggalkanbasis data tetap dalam status konsisten.

 Isolation

Isolasi memastikan bahwa secara bersamaan (konkuren)


eksekusitransaksi terisolasi dari yang lain.

 Durability

Begitu transaksi telah dilaksanakan (di-commit), maka


perubahanyang diakibatkan tidak akan hilang atau tahan lama
(durable),sekalipun terdapat kegagalan sistem.

D Desain Database
1. Permodelan Erd
1.1 Menentukan Entitas
DATABASE Inventaris_barang
Tb_pegawai, tb_barang, tb_peminjaman,
tb_detail_peminjaman, tb_pengembalian,
tb_detail_kembali, tb_suplier,
ENTITAS tb_pengiriman_barang, tb_perusahaan, tb_status.

1.2 Menentukan Relasi


Entitas tb_p tb_bar tb_pe tb_detail tb_peng tb_det tb_supl tb_pengi tb_pe tb_
ega ang minja _peminj embalia ail_ke ier riman_b rusah stat
wai man aman n mbali arang aan us

tb_pega - - Me - Meng - - - - -
wai
min embal
jam ikan
tb_baran - - - Dicat - Dica - dikiri - -
g
at tat m
tb_pemi Me - - dicata - - - - - -
njaman
nca t
tat
tb_ddeta - Me men - - - - - - -
il_pemin
muat cata
jam
t
tb_peng me - - - - Me - - - -
embalia
nca muat
n
tat
tb_detail - Me - - Dicat - - - - -
_kembal
muat at
i
tb_supli - - - - - - - Meng - -
er
irimk
an
tb_pengi - men - - - - Men - - -
riman_b
giri ganta
arang
mka rkan
n
tb_perus - - - - - - Men - - -
ahaan
gelua
rkan
tb_status ter - - - - - - - - -
ma
suk

1.3 Gambar ERD sementara

1.4 Kardinalitas
1.5 Key
Entitas Primary Key Foregn Key
tb_pegawai Kd_pegawai
tb_barang Id_brg
tb_peminjaman Id_pinjam Kd_pegawai
tb_detail_peminjam Id_pinjam, kd_brg
tb_pengembalian Id_pinjam
tb_detail_kembali Id_pinjam, kd_brg
tb_suplier Id_pengirim
tb_pengiriman_barang Id_brg
tb_perusahaan No_pt
tb_status Status

1.6 ERD berdasarkan Key


1.7 Atribut
Entitas Atribut
tb_pegawai kd_pegawai, nm_pegawai, jk, tgl_lahir, jln,
kota, status
tb_barang kd_brg, nm_brg, jns_brg, dan jml_barang
tb_peminjaman id_pinjam, kd_pegawai yang meminjam,
tgl_pinjam , petugas
tb_detail_peminjam id_pinjam, kd_brg, jml_barang
tb_pengembalian id_pinjam tgl_kembali, petugas
tb_detail_kembali id_pinjam kd_brg, jml_brg ,kondisi
tb_suplier id_pengirim nm_pengirim, jk, tgl_lahir,
jalan, kota, no_pt
tb_pengiriman_barang kd_brg, nm_brg, jml_brg, tgl_kirim,
id_pengirim
tb_perusahaan no_pt, nm_pt, jalan(alamat), kota (alamat),
dan jenis_pt
tb_status Status, ket

1.8 Pemetaan atribut


Entitas Primary Key Foregn Key Atribut
tb_pegawai Kd_pegawai - kd_pegawai,
nm_pegawai, jk(jenis
kelamin), tgl_lahir,
jln, kota, status
tb_barang Id_brg - kd_brg, nm_brg,
jns_brg, jml_barang
tb_peminja Id_pinjam Kd_pegawai id_pinjam,
man kd_pegawai,
tgl_pinjam , petugas
tb_detail_pe - Id_pinjam, id_pinjam, kd_brg,
minjam kd_brg jml_barang
tb_pengemb Id_pinjam - id_pinjam
alian tgl_kembali, petugas
tb_detail_ke - Id_pinjam, id_pinjam kd_brg,
mbali kd_brg jml_brg ,kondisi
tb_suplier Id_pengirim - id_pengirim
nm_pengirim, jk,
tgl_lahir, jalan, kota,
no_pt
tb_pengirim - Id_brg kd_brg, nm_brg,
an_barang jml_brg, tgl_kirim,
id_pengirim
tb_perusaha No_pt - no_pt, nm_pt,
an jalan(alamat), kota
(alamat), dan jenis_pt
tb_status status - Status, ket

1.9 ERD dengan atribut

1.10 Hasil
2. Normalisasi Tabel
Karena ada beberapa entitas yang membentuk suatu relasi dan
menciptakan relasi baru yaitu :
- Entitas tb_pegawai
- Entitas tb_barang
- Entitas tb_suplier
- Entitas tb_peminjaman
- Entitas tb_pengembalian
Maka akan menimbulkan entitas baru dari proses normalisasi data. Yaitu :
- Entitas tb_detail_pinjam
- Entitas tb_detail_kembali
- Entitas tb_perusahaan
- Entitas tb_pengiriman_barang
- Entitas tb_status
Tabel awal sebelum dinormalisasi :
a. Tabel tb_pegawai

kd_pegawai nm_pegawai jk tgl_lahir usia alamat status

b. Tabel tb_barang
kd_brg nm_brg jns_brg jml_brg

c. Tabel tb_peminjaman
id_pinjam kd_pegawai kd_brg tgl_pinjam jml_brg

d. Tabel tb_pengembalian
id_pinjam kd_pegawai kd_brg tgl_kembali jml_brg Kondisi

e. Tabel tb_suplier
id_pengirim nm_pengirim jk tgl_lahir usia Alamat No_pt

ERD yang belum dinormalisasi


2.1 1NF
a. Pernormalisasian pertama tabel pegawai
- Entitas tb_pegawai
kd_pegawa nm_pegawa j Tg bl th th jl kot statu
i i k l n n n n a s

- Entitas tb_barang
kd_brg nm_brg Jns_brg Jlm_barang

- Entitas tb_peminjaman
id_pinjam kd_pegawai kd_brg tgl_pinjam jml_barang

- Entitas tb_pengembalian
id_pinjam kd_pegawai kd_brg tgl_kembali jml_brg Kondisi

- Entitas tb_suplier
id_pengirim nm_pengirim jk tgl_lahir usia jalan kota No_pt

Dari entitas baru diatas sudah tidak ada lagi data yang multivalue dan
atributnya simple atau atomik . sehingga bisa dikatakan bahwa ketiga
entitas diatas telah memenuhi normalisasi pertama.
2.2 2NF
langkah kedua adalah menormalisasikan kan ke 2NF dengan syarat :
1. Tidak ada redudansi data dan null value
2. Field-field yang bukan primary key bergantung penuh dengan primary
key sehingga perlu membuat functional dependency
a. Functional depedecy pada relasi tb_pegawai, tb_barang, tb_peminjaman,
tb_pengembalian, tb_suplier
- kd_pegawai → nm_pegawai, jk, tgl_lahir, jln, kota, status
- kd_brg→nm_brg, jns_brg, dan jml_barang
- id_pinjam→kd_pegawai, tgl_pinjam , petugas
- id_pinjam →tgl_kembali, petugas
- id_pengirim →nm_pengirim, jk, tgl_lahir, jalan, kota, no_pt
seperti di bawah ini :
a. Tabel tb_pegawai
kd_pegawai status

b. Tabel tb_barang
Untuk normalisasi hanya sampai 1NF saja sebab pada tabel
ini semua fild sudah bergantung pada primary key
c. Tabel tb_peminjaman
id_pinjam kd_pegawai kd_brg

d. Tabel tb_pengembalian
id_pinjam kd_pegawai kd_brg

e. Tabel suplier
no_pt id_pengirim

Dari penjabaran diatas dapat diketahui masing-masing functional


dependency dari masing-masing tabel dan tidak adanya null value
sehingga entitas-entitas diatas telah memenuhi pernomalisasian
bentuk kedua .
2.3 3NF
a. Tabel tb_pegawai
Pada normalisasi 3NF tabel di pecah menjadi tabel tb_pegawai dan
tb_status
tb_pegawai
kd_pegawa nm_pegawa Jk tgl bln thn usia jln kota
i i
tb_status
status Ket

b. Tabel tb_barang
Tabel barang sudah normal pada normalisasi 1NF pertama
c. Tabel tb_peminjaman
Pada normalisasi 3NF ini maaka tabel tb_peminjaman di pecah
menjadi tb_peminjaman dan tabel tb_detail_pinjam.
tb_peminjaman
id_pinjam kd_pegawai tgl_pinjam
Tb_detail_pinjam
id_pinjam kd_brg jml_barang

d. Tabel tb_pengembalian
Pada normalisasi 3NF ini maaka tabel tb_pengembalian di pecah
menjadi tb_pengembalian dan tabel tb_detail_pengembalian.
tb_pengembalian
id_pinjam kd_pegawai tgl_kembali
Tb_detail_kembali
id_pinjam kd_brg jml_barang Kondisi

e. Tabel tb_suplier
Pada tabel tb_suplier untuk noormalisasi 3NF data di pecah menjadi
tabel tb_suplier , tb_perusahhan, tb_pengiriman
Tabel tb_suplier
id_pengirim nm_pengirim jk tgl_lahir usia jalan Kota

Tabel tb_perusahaan
no_pt nm_pt jalan kota

Tabel tb_pengiriman_barang
kd_brg nm_brg jml_brg

ERD yang sudah dinormalisasi


E Implementasi Database
a. Membuat database baru dengan nama invnetaris barang
b. Membuat tabel tb_pegawai
Membuat tabel pegawai dengan field kd_pegawai bertipe varchar
berukuran 6, nm_pegawai dengan tipe varchar berukuran 25, tgl_lahir
bertipe date atau tmt, jk bertipe varchar berukuran 1, jl atau jalan untuk
alamat bertipe varchar berukuran 25, kota untuk alamat bertipe varchar
berukuran 10, status bertipe varchar yang berukuran 1. Primary keynya
menggunakan kd_pegawai.
Query :
CREATE TABLE pegawai (kd_pegawai varchar(6)
PRIMARY KEY, nm_pegawai varchar(25), tgl_lahir
date, jk varchar(1), jln varchar(25), kota
varchar(10), status varchar(1))
Nb : untuk foregn key membuat manual

c. Membuat tabel tb_barang


Membuat tabel barang dengan field kd_brg dengan type varcar berukuran
6 , nm_brg dengan type data varchar panjang 20, jns_brg bertype varchar
yang berukuran 15, jml_brg dengan tipe data int atau interger dengan
panjang 5. Pada tabel tb_barang ini menggunakan kd_brg sebagai primary
key.
Query : CREATE TABLE tb_barang (kd_brg varchar(6)
PRIMARY KEY, nm_brg varchar(20), jns_brg
varchar(15), jml_brg int(5))

d. Membuat tabel tb_peminjaman


Membuat tabel tb_peminjaman dengan field id_pinjam dengan type
varchar dan panjang 5, kd_pegawai dengantype varchar panjang 6,
tgl_pinjam mengunakan date atau tmt hari ini, petugas dengan type
varchar dengan ukuran 6. Pada tabel ini menggunakn id_pinjam sebagai
primary key dan kd_pegawai untuk forign keynya.
Query :
CREATE TABLE tb_peminjaman (id_pinjam varchar(5),
kd_pegawai varchar(6), tgl_pinjam date, petugas
varchar(6))
Nb : foregn dibuat manual

e. Membuat tabel tb_detail_pminjaman


Membuat tabel tb_detail_peminjaman dengan field id_pinjam dengan type
varchar ukuran 5, kd_brg bertipe varchar ukuran 6, jml_barang dengan tipe
int atau integer dengan ukuran 5. Tabel ini tidak ada primary key namun
menggunakan foregn key pada fiel id_pinjam dan kd_brg.
Query :
CREATE TABLE tb_detail_peminjaman (id_pinjam
varchar(5), kd_brg varchar(6), jlm_barang int(5))
Nb : forign key dibuat manual

f. Membuat tabel tb_pengembalian


Membuat tabel pengebalian dengan field id_pinjam yang bertype varchar
5, tgl_kembali menggunakan date, kemudian petugas dengan type varchar
berukuran 6. Tabel ini menggunakan prymary key id_pinjam.
Query :
CREATE TABLE tb_pengembalian (id_pinjam varchar(5)
PRIMARY KEY, tgal_kembali date, petugas
varchar(6))

g. Membuat tabel tb_detail_kembali


Membuat tabel tb_detail_kembali dengan field id_pinjam yang bertype
varchar berukuran 5, kd_brg dengan tipe varchar panjang , jml_barang
dengan tipe integer panjang 5, kondisi dengan type varchar panjang 10.
Tabel ini tidak menggunakan primary key namun menggunakan foregn key
id_pinjam dan kd_brg
Query :
CREATE TABLE tb_detail_kembali (id_pinjam
varchar(5), kd_brg varchar(6), jml_barang int(5),
kondisi varchar(10))

h. Membuat tabel tb_suplier


Membuat tabel tb_suplier dengan field id_pengirim bertype varchar
dengan ukuran 7, nm_pengirim bertype data varchar dengan ukuran 25, jk
bertipe varchar dengan ukuran 1, tgl_lahir dengan menggunakan date,
jalan dengan tipe varchar ukuran 25, koa dengan type varchar ukuran 15,
no_pt dengan type varchar dengan panjang 6. Tabel ini menggunakan
id_pengirim sebagai premary key dan menggunakan foregn key no_pt.
Query :
CREATE TABLE tb_suplier (id_pengirim varchar(7)
PRIMARY KAY, nm_pengirim varchar(25), jk
varchar(1), tgl_lahir date, jalan varchar(25),
Kota varchar(15), no_pt varchar(6))
Nb : foregnkey dibuat manual.
i. Membuat tabel tb_pengiriman_barang
Membuat tabel tb_pengiriman barang dengan field kd_brg bertype varchar
dengan ukuran 6, nm_brg dengan type varchar dengan ukuran 20, jml_brg
dengan type int panjang 5, tgl_kirim dengan menggunakan date,
id_pengirim dengan type varchar ukuran 7. Pada tabel ini tidak
menggunakan primary key namun menggunakan forign key kd_brg dan
id_pengiriman_barang.
Query :
CREATE TABLE tb_pengiriman_barang (kd_brg
varchar(6), nm_brg varchar(20), jml_barang int(5),
tgl_kirim date, id_pengirim varchar(7))
Nb : foregn key dibuat secara manual

j. Membuat tabel tb_perusahaan


Membuat tabel tb_perusahaan dengan field no_pt dengan tipe varchar
ukuran 6, nm_pt dengan type varchar ukuran 15, jalan menggunakan type
data varchar ukuran 25, kota dengan type varchar ukuran 15, jns_pt
menggunakan type varchar panjang 15, tabel ini menggunakan primary
key no_pt.
Query :
CREATE TABLE tb_perusahaan (no_pt varchar(6)
PRIMARY KEY, nm_pt varchar(15), jalan varchar(25),
kota varchar(15), jns_pt varchar(15))
k. Membuat tabel tb_status
Membuat tabel tb_status dengan field status dengan type varchar ukuran
1, ket dengan type varchar ukuran 100. Tabel ini hanya menggunakan
status sebagai foregn keynya.
Query :
CREATE TABLE tb_suplier (status varchar(1), ket
varchar(100))
Nb : Forign key dibuat secara manual

l. Meralasikan tabel diatas menjadi seperti gambar ini

m. Mengisi tabel tb_pegawai


Mengisi tabel pegawai dengan menggunakan query berikut :
INSERT INTO 'tb_pegawai'('kd_pegawai', 'nm_pegawai',
'tgl_lahir', 'jk', 'jln', 'kota', 'status')VALUES

('PGW001','Agus Suwono','1987-05-11','L','jl.Terusan
Surabaya','Malang','0'),
('PGW002','Dinda Permata','1991-02-15','P','jl.basuki
Rahmat','Surabaya','0'),
('PGW003','Maharani Anggita','1990-10-05','P','jl.A.
Yani','Surabaya','i'),
('PGW004','Fajar Cahyono','1992-10-
21','L','jl.Jendral Sudirman','Yogyakarta','1'),
('PGW005','Junico Robin','1991-07-
25','L','jl.Kartini','Jember','0'),
('PGW006','Alin Septia','1990-09-
23','P','jl.Sumatra','Bandung','1'),
('PGW007','Irma Yosi','1990-10-10','P','jl.Paglima
Sudirman','Madiun','0'),
('PGW008','Ferry Faudzul','1992-09-
24','L','jl.Patimura','Malang','1'),
('PGW009','Irma Darmawati','1987-01-
01','P','jl.Cendrawasih','Surabaya','0'),
('PGW010','Frry Yanuar','1990-03-
03','L','jl.Sukomoro','Madiun','0');

n. Mengisi tabel tb_barang


Mengisi tabel tb_barang dengan mengetikan query seperti dibawah ini :
INSER INTO
'tb_barang'('kd_brg','nm_brg','jns_brg','jml_brg')
VALUES

('A001','Papan Tulis','ATK','20'),
('A002','Spidol','ATK','20'),
('A003','Bulpoin','ATK','20'),
('A004','Penghapus','ATK','20'),
('A005','Map','ATK','20'),
('A006','Gunting','ATK','20'),
('A007','Pengaris','ATK','20'),
('E001','Kamera DSLR','Elektronik','10'),
('E002','Laptop','Elektronik','10'),
('E003','PC','Elektronik','10'),
('E004','Kipas','Elektronik;,'10'),
('E005','LCD','Elektronik','10'),
('E006','White Screen','Elektronik','10'),
('F001','Meja','Furniture','20'),
('F002','Kursi','Furniture','20'),
('F003','Rak','Furniture','20'),
('F004','Laci','Furniture','20'),
('T001','Mobil','Transportasi','5'),
('T002','Sepeda Motor','Transportasi','5'),
('T003','Sepeda','Transportasi','5'),
('T004','Mobil Box','Transportasi','5');

o. Mengisi tabel tb_peminjaman


Mengisi tabel tb_peminjaman dengan menulis query seperti dibawah ini :
INSERT INTO 'tb_peminjaman'(=id_pinjam',
'kd_pegawai','tgl_pinjam','petugas')VALUES

('1001','PGW001','2017-05-06','PGW003'),
('1002','PGW002','2017-05-06','PGW003'),
('1003','PGW002','2017-05-06','PGW003'),
('1004','PGW005','2017-05-06','PGW003'),
('1005','PGW001','2017-05-06','PGW003'),
('1006','PGW001','2017-05-07','PGW004'),
('1007','PGW005','2017-05-07','PGW004'),
('1008','PGW009','2017-05-07','PGW004'),
('1009','PGW009','2017-05-07','PGW004'),
('1010','PGW007','2017-05-07','PGW004');

p. Mengisi tabel tb_detai_peminjaman


Mengisi tabel tb_detail_peminjaman dengan mengetikan query pada sql
dengan query dibawah ini :
INSERT INTO 'tb_detail_peminjaman'('id_pinjam',
'kd_brg','jml_barang')VALUES

('1001','A003','5'),('1002','A002','7'),
('1003','E001','3'),('1004','E004','6'),
('1005','F001','8'),('1006','F004','9'),
('1007','T004','1'),('1008','T002','1'),
('1009','T002','2'),('1010','E005','5');
q. Mengisi tabel tb_pengembalian
Mengisi tabel tb_pengembalian dengan mengetikan query seperti berikut :
INSERT INTO 'tb_pengembalian'('id_pinjam',
'tgl_kembali','petugas')VALUES

('1001','2017-05-07','PGW004'),
('1002','2017-05-07','PGW004'),
('1003','2017-05-08','PGW006'),
('1004','2017-05-08','PGW006'),
('1005','2017-05-08','PGW006'),
('1006','2017-05-09','PGW008'),
('1007','2017-05-09','PGW008'),
('1008','2017-05-09','PGW008'),
('1009','2017-05-09','PGW008'),
('1010','2017-05-09','PGW008');

r. Mengisi tabel tb_detail_kembali


Mengisi tabel tb_detail_kebali dengan mengetikkan query sebagai berikut :
INSERT INTO 'tb_detail_kembali'('id_pinjam',
'kd_brg','jml_barang','kondisi')VALUES

('1001','A003','5','Baik'),
('1002','A002','5','baik'),
('1002','A002','2','pecah'),
('1003','E001','3','baik'),
('1004','E004','4','baik'),
('1004','E004','2','pecah'),
('1005','F001','6','baik'),
('1005','F001','2','pecah'),
('1006','F004','8','baik'),
('1006','F004','1','pecah');

s. Mengisi tabel tb_suplier


Mengisi tabel suplier dengan mengetikkan query sebagai berikut :
INSERT INTO 'tb_suplier'('id_pengirim',
'nm_pengirim','jk','tgl_lahir','jalan','kota','no_
pt')VALUES

('001','Sumaryanto','L','1986-09-05','jl.Mawar
Indah','Tulungagung','PT110'),
('002','Agus Prianto','L','1970-11-
20','jl.Melati','Pasuruan','PT220'),
('003','Deni Atmaja','L','1983-05-
09','jl.Cempaka','Gresik','PT330'),
('004','Puji Astuti','P','1990-12-
11','jl.Seruni','Surabay','PT440');
t. Mengisi tabel tb_pengiriman_barang
Untuk mengisi tabel tb_pengiriman_barang mengetikan query sebagai
berikut :
INSERT INTO 'tb_pengiriman_barang'('kd_brg',
'nm_brg','jml_barang','tgl_kirim','id_pengirim')VA
LUES

('A002','Spidol','2','2017-05-07','003'),
('E004','Kipas','2','2017-05-08','002');

u. Mengisi tabel tb_perusahaan


Untuk mengisi tabel tb_perusahaankita mengetikan query sebagai berikut:
INSERT INTO 'tb_perusahaan'(no_pt','nm_pt','jalan'
,'kota','jns_pt')VALUES

('PT110','Karya
Agung','Jl.Mercusuar','Jakarta','Transportasi'),
('PT110','Rahayu
Meubel','Jl.Kertaharja','Sidoarjo','Furniture'),
('PT110','Dian Ilmu','Jl.Dieng','Malang','ATK'),
('PT110','Sahabat
Elektro','Jl.Sudimoro','Yogyakarta','Transportasi'
);

v. Mengisi tabel tb_status


Untuk mengisi tabel tb_status maka ini querynya :

INSERT INTO 'tb_status'('status','ket')VALUES

('0','Pegawai Umum'),('1','Petugas');

F Studi Kasus
 AGREGAT
1 Studi Kasus 1
Dapatkan jumlah jenis barang ATK ?
Query :
SELECT COUNT(jns_brg) AS jumlah FROM tb_barang WHERE
jns_brg = "ATK";
Screenshot :

Penjelasan :
Query diatas digunakan untuk menghitung jumlah jenis barrang ATK
dimana untuk menjumlahkannya menggunakan fungsi Agregat yaitu
COUNT dimana COUNT ini digunakan untuk menghitung banyaknya data
yang ada pada field jns_barang yang kemudian hasil dari COUNT akan
dikeluarkan sebagai jumlah dengan adanya query As jumlah yang artinya
hasil dari query COUNT(jns_brg) akkan dimasukkan kedalam field buatan
yaitu jumlah. Agar yang dihitung jumlahnya adalah barang yang
kategorinya ATK maka pada query ditambah dengan keterangan yaitu
dimana jns_brg atau jenis barangnya adalah ATK.

2 Studi Kasus 2
Dapatkan data barang yang mempunyai jumlah terkecil ?
Query :
SELECT kd_brg, nm_brg, jns_brg FROM tb_barang where
jml_brg = (SELECTMIN(jml_brg) FROM tb_barang)
screenshot :

Penjelasan :
Query agregat diatas yang menunjukkan dimana berguna untuk memcari
suatu data dengan niai terkecil yaitu Agregat MIN. Dengan query tersebut
kita akan menampilkan kd_brg, nm_brg, dan jns_brg dari
tb_barang dimana jml_brg adalah jumlah barang
minimal dari tb_barang.

3 Studi Kasus 3
Dapatkan total barang pada jenis elektronik ?
Query :
SELECT SUM(jml_brg) AS total_elektronik FROM
tb_barang WHERE jns_brg = "elektronik";
Screenshot hasil :

Penjelasan :
Query diatas digunakan untuk menghitung jumlah dari masing-masing
jenis barrang Elektronik dimana untuk menjumlahkannya menggunakan
fungsi Agregat yaitu SUM dimana SUM ini digunakan untuk menghitung
banyaknya data yang ada pada data barang pada table barang yang
kemudian hasil dari SUM akan dikeluarkan sebagai jumlah dengan adanya
query As total_elektronik yang artinya hasil dari query SUM(jml_brg)
akan dimasukkan kedalam field buatan yaitu total_elektronik. Agar yang
dihitung jumlahnya adalah barang yang kategorinya Elektronik maka pada
query ditambah dengan keterangan yaitu dimana jns_brg atau jenis
barangnya adalah Elektronik.
4 Studi Kasus 4
Dapatkan jumlah pegawai yang memiliki alamat di kota surabaya
Query :
SELECT COUNT(kd_pegawai) AS jml_pegawai FROM
`tb_pegawai` WHERE kota = "Surabaya"
Screenshot hasil :
Penjelasan :
Query diatas digunakan untuk menghitung jumlah pegawai yang memiliki
alamat kota surabaya dimana untuk menjumlahkannya menggunakan fungsi
Agregat yaitu COUNT dimana COUNT ini digunakan untuk menghitung
banyaknya data yang ada pada field kd_pegawai yang kemudian hasil dari
COUNT akan dikeluarkan sebagai jumlah dengan adanya query As
jml_pegawai yang artinya hasil dari query COUNT(kd_pegawai) akan
dimasukkan kedalam field buatan yaitu jml_pegawai. Agar yang dihitung
jumlahnya adalah pegawai yang alamat kotanya adalah Surabaya maka
pada query ditambah dengan keterangan yaitu dimana kota adalah Surabaya.
5 Studi Kasus 5
Dapatkan jumlah pegawai yang melayani peminjaman barang ?
Query :
SELECT COUNT(kd_pegawai) AS jml_pegawai FROM
`tb_pegawai` WHERE STATUS = "1"
Screenshot hasil :

Penjelasan :
Query
diatas
digunakan
untuk

menghitung jumlah pegawai yang melayani peminjaman barang,


sebelumnya perlu diketahui terlebih dahulu bahwa pada database ini,
pegawai yang bisa melayani peminjaman barang adalah pegawai yang
memiliki status 1, status itulah yang membedakan antara pegawai biasa
dengan pegawai yang sekaligus bertindak sebagai petugas. Kemudian untuk
menjumlahkannya menggunakan fungsi Agregat yaitu COUNT dimana
COUNT ini digunakan untuk menghitung banyaknya data yang ada pada
field kd_pegawai yang kemudian hasil dari COUNT akan dikeluarkan
sebagai jml_pegawai dengan adanya query As jml_pegawai yang artinya
hasil dari query COUNT(kd_pegawai) akan dimasukkan kedalam field
buatan yaitu jml_pegawai. Agar yang dihitung jumlahnya adalah pegawai
yang melayani peminjaman barang, maka pada query ditambahkan
keterangan yaitu dimana status sama dengan 1.
6 Studi Kasus 6
Dapatkan data kota tempat tinggal pegawai ?
Query :
SELECT DISTINCT kota FROM tb_pegawai;
Screenshot hasil :

Penjelasan :
Query diatas digunakan untuk mendapatkan data kota tempat tinggal
pegawai. Pada query diatas digunakan agregat yaitu DISTINCT dimana
agregat tersebut diguanakan untuk tidak menampilkan data yang sama. Pada
query diatas akan ditampilkan kota kota tempat tinggal pegawai. Jika dilihat
di tabel pegawai, ada beberapa pegawai ang berasal dari kota yang sama,
maka dari itu untuk mengantisipasi penampilan data yang sama, maka
diguankanlah agregat DISTINCT.
 RELASI DAN JOIN
7 Studi kasus 7
Tampilkan nama peminjam barang ?
Query :
SELECT DISTINCT(tb_pegawai.nm_pegawai) FROM
tb_pegawai INNER JOIN tb_peminjaman WHERE
tb_pegawai.kd_pegawai = tb_peminjaman.kd_pegawai ;
Screenshot hasil :

Penjelasan :
Query diatas digunakan untuk menampilkan nama pegawai yang meninjam
barang. Untuk mendapatkan hasil yang diinginkan, query yang digunakan
menggunakan join, yaitu join antara table nama pegawai dan table
peminjaman. Karena pada table peminjaman tidak terdapat field nama
pegawai yang meminjam. Kunci dari relasi ini adalah pada kode pegawai,
yaitu kode pegawai yang terdapat pada table peminjaman akan ditemukan
siapa nama yang sesuai dengan kode tersebut pada table pegawai.
8 Studi kasus 8
Tampilkan nama barang yang dipinjam dan katagorinya ?
Query :
SELECT DISTINCT (tb_barang.nm_brg), tb_barang.jns_brg
FROM tb_barang INNER JOIN tb_detail_pinjam WHERE
tb_barang.kd_brg = tb_detail_pinjam.kd_brg;
Screenshot hasil :
Penjelasan :
Query diatas digunakan untuk menampilkan nama barang apa saja yang
dipinjam oleh pegawai beserta kategori barangnya. Karena pada table detail
pinjam tidak terdapat field kategori, sehingga untuk menampilkan kategori
diperlukan join dengan table barang. Kunci dari relasi ini adalah dari kode
barang, sehingga dari table barang dapat menunjuk pada nama barang yang
dilihat dari kode barang yang sesuai.
9 Studi kasus 9
Tampilkan transaksi data barang yang dipinjam ?
Query :
SELECT
tb_peminjaman.id_pinjam,tb_peminjaman.kd_pegawai,
tb_peminjaman.tgl_pinjam, tb_peminjaman.petugas,
tb_detail_pinjam.kd_brg,tb_detail_pinjam.jml_baran
g FROM tb_peminjaman INNER JOIN tb_detail_pinjam
WHERE tb_peminjaman.id_pinjam =
tb_detail_pinjam.id_pinjam;

Screenshot hasil :
Penjelasan :
Query diatas digunakan untuk menampilkan data barang yang dipinjam.
Karenapada table peminjaman tidak terdapat field-field barangvsecara
terperinci, sehingga pada untuk menampilkan data barang secara rinci
harus di join dengan table yang didalamnya terdapat detail barang, yaitu
tb_detail_pinjam, yang disitu id_pinjam sebagai kunci joinnya.

10 Studi kasus 10
menampilkan jumlah barang yang tidak dipinjam berdasarkan jenisnya ?
Query :
SELECT tb_barang.jns_brg, COUNT(tb_barang.jns_brg)
AS jumlah
FROM tb_barang LEFT JOIN tb_detail_pinjam
ON tb_barang.kd_brg = tb_detail_pinjam.kd_brg
WHERE tb_detail_pinjam.kd_brg IS NULL
GROUP BY tb_barang.jns_brg;
Screenshot :

Penjelasan :
Query diatas digunakan untuk menampilkan jumlah barang yang tidak
dipinjam berdasarkan jenisnya. Ditentukan dari table barang yang di left
join dengan tb_detail_pinjam yang disitu totalnya di NULL kan, sehingga
yang tampilan adalah yang selain dipinjam.
11 Studi kasus 11
Dapatkan namadanusia pegawai yang meminjam barang dan berumur
kurang dari 30 tahun
Query :
SELECT tb_pegawai.nm_pegawai, YEAR(NOW())-
YEAR(tb_pegawai.tgl_lahir) AS usia
FROM tb_pegawai INNER JOIN tb_peminjaman
ON tb_pegawai.kd_pegawai = tb_peminjaman.kd_pegawai
WHERE YEAR(NOW())-YEAR(tb_pegawai.tgl_lahir) < 30
GROUP BY tb_peminjaman.kd_pegawai;
Screenshot

Penjelasan:
Query diatas digunakan untuk
mendapatkan nama pegawai beserta
usia yang meminjam kan barang
dengan syarat usia kurang dari 30
tahun. Untuk mendapatkan hasil yang
diminta yaitu dengan menggunakan
inner join antara tb_pegawai dan tb_peminjaman. Dari table pegawai
dipanggil nama serta usia, karena usia bukan sebagai field, maka membuat
field derivate baru dengan menggunakan rumus diatas. Kemudian akan
ditampilkan nama beserta usia yang meminjam barang dan usianya
memenuhi syarat, yaitu kurang dari 30 tahun.
 SUB QUERY
12 Studi Kasus 12
Menampilkan nama pegawai yang meminjam kamera DSLR
Query :
SELECT nm_pegawai FROM tb_pegawai WHERE kd_pegawai
= (SELECT tb_peminjaman.kd_pegawai FROM
tb_peminjaman INNER JOIN tb_detail_pinjam WHERE
tb_peminjaman.id_pinjam =
tb_detail_pinjam.id_pinjam AND
tb_detail_pinjam.kd_brg = (SELECT kd_brg FROM
tb_barang WHERE nm_brg = "Kamera DSLR"))
Screenshot :
Penjelasan :
Query diatas digunakan untuk menampilkan nama pegawai yang
meminjaman kamera DSLR. Untuk mendapatkan nama-nama pegawai yang
meminjam kamera DSLR menggunakan sub query, karena sebelum
menemukan nama peminjam harus ditemukan dulu id_pegawai yang
meminjam dengan detail barang, nama barang apa saja yang dipinjam.
Kemudian diperlukan INNER JOIN tb_peminjaman dan tb_detail_pinjam
karena didalam tabel peminjaman tidak terdapat nama barang yang disini
adalah DSLR, sehingga harus dihubungkan dengan tb_peminjaman, dan
untuk menampilkan nama maka dihubungkan dengan tb_pegawai dengan
kunci id_pegawai.
13 Studi kasus 13
Menampilkan kd_barang dan nm_barang yang dipinjam dengan jumlah
peminjaman sama dengan 6.
Query :
SELECT kd_brg, nm_brg from tb_barang WHERE kd_brg =
(SELECT kd_brg from tb_detail_pinjam WHERE
jml_barang =6);
Screenshot :

Penjelasan :
Query diatas digunakan untuk menampilkan kode barang dan nama barang
yang dipinjam dengan syarat jumlah peminjaman sama dengan 6. Untuk
menampilkan hal ini diperlukan adanya select didalam select. Select
pertama digunakan untuk mensingkronkan antara nama barang dan kode
barang. Selanjutnya terdapat select didalamnya yang disitu sebagai syarat
bahwa kode barang tersebut mempunyai jumlah barang 6 pada tabel detail
pinjam.
14 Studi kasus 14
Menampilkan nama barang elektronik yang sudah dikembalikan
SELECT nm_brg from tb_barang WHERE kd_brg IN
(SELECT kd_brg from tb_detail_kembali WHERE kd_brg
like "E%");
Screenshoot :

Penjelasan:
Query diatas digunakan untuk menampilkan nama barang elektronik yang
sudah dikembalikan. Untuk mengetahui nama barang yang sudah
dikembalikan tersebut diambil dari tabel tb_barang, dan dengan syarat
didalam select kedua tedapat pencaian barang pada tb_detail_kembali
dengan kunci pencarian adalah kode barang yang berinisial huruf E.

15 Studi kasus 15
menampilkan kd_pegawai dan nm_pegawai yang mencatat pengeluaran
barang jenis furnitur
Query :
SELECT kd_pegawai, nm_pegawai FROM tb_pegawai WHERE
kd_pegawai IN (SELECT petugas FROM tb_peminjaman
WHERE id_pinjam IN (SELECT id_pinjam from
tb_detail_pinjam WHERE kd_brg LIKE "F%"))

Query diatas digunakan untuk menampilkan kode pegawai dan nama


pegawai yang mencatat pengeluaran barang jenis furniture. Untuk
menampilkan yang diminta, dari table pegawai harus ditentukan dulu siapa
saja yang menjadi petugas peminjaman barang yang bisa didapat pada table
peminjaman dan untuk memnuhi syarat petugas yang mencatat pengeluaran
baran g jenis furniture maka diberi syarat lagi yaitu kd_brg diawali dengan
huruf F. karena kode barang dengan awalan huruf F adalah jenis barang
furniture.

16 Studi kasus 16
Mengurutkan data pegawai dari yang paling sering meminjam barang
sampai yang paling sedikit meminjam barang
Query :

SELECT nm_pegawai, tgl_lahir, jln, kota FROM


tb_pegawai WHERE kd_pegawai IN (SELECT kd_pegawai
FROM tb_peminjaman GROUP BY kd_pegawai ORDER BY
COUNT(kd_pegawai) DESC);

Penjelasan:

Query diatas digunakan untuk mengurutkan data pegawai yang paling sering
meminjam barang sampai pegawai yang paling sedikit meminjam barang.
Dari table pegawai diambil data nama, tanggal lahir jalan dan kota untuk
ditampilkan. Selanjutnya dari kd_pegawai dihitung berapa serinng muncul,
dan yang paling banyak maka kode itu akan berada pada urutan paling atas.

 STORED PROCEDUR

17 Studi kasus 17
Menambah barang dengan nama yang berbeda menggunakan procedure
Query :
DELIMITER //
CREATE PROCEDURE tambah_barang(
IN kd_brg varchar (6),
IN nm_brg varchar (20),
IN jns_brg varchar (15),
IN jml_brg int (5))
BEGIN
INSERT INTO tb_barang VALUES(
kd_brg,nm_brg,jns_brg,jml_brg);
END //
DELIMITER ;

Pemanggilan Fungsi
CALL tambah_barang("F005","Meja Lipat",
"Furnitur",20);

Melihat isi tabel barang

Penjelasan :
Query diatas digunakan untuk menambah barang dengan nama baru, yang
sebelumnya belum ada didalam isi data mengunakan procedure. Nama
procedurenya adalah tambah_barang yang didalamnya terdapat kd_brg,
nm_brg, jns_brg dan jml_brg, dimana apabila ingin menambah barang maka
tinggal melakukan call tambah_barangi dan memasukkan data barang yang
ingin ditambah sesuai dengan field yang ada.

18 Studi kasus 18
Mendapatkan data barang berdasarkan jenisnya
Query:
DELIMITER //
CREATE PROCEDURE GETtabelbarangbyjenis(IN jns
VARCHAR(15))
BEGIN
SELECT * FROM tb_barang
WHERE jns_brg = jns;
END //
DELIMITER ;
Screenshot :

CALL GETtabelbarangbyjenis("ATK");

Penjelasan :
Query diatas merupakan pembuatan prosedure untuk memudahkan dalam
menampilkan data berdasarkan jenisnya. Disini ketika ingin menampilkan
data barang bedasarkan jenisnya, maka tidak perlu menuliskan query
panjang, cukup dengan CALL GETtabelbarangbyjenis(“ATK”).

19 Studi kasus 19
Menambah pegawai menggunakan procedur
Query :
DELIMITER //
CREATE PROCEDURE ADDpegawai(
IN kd_pegawai varchar(6),
IN nm_pegawai VARCHAR (25),
IN tgl_lahir DATE,
IN jk VARCHAR (1),
IN jln VARCHAR (25),
IN kota VARCHAR (10),
IN status VARCHAR (1))
BEGIN
INSERT INTO tb_pegawai VALUES (
kd_pegawai, nm_pegawai, tgl_lahir, jk, jln, kota,
status);
END //
DELIMITER ;
Screenshoot :

CALL ADDpegawai ("PGW999", "Sulastri", "1987-09-


12", "P", "Jl. Panglima Sudirman", "Caruban", "0");

select * from tb_pegawai;


Penjelasan:
Query diatas digunakan untuk menambah pegawai baru mengunakan
procedure. Nama procedurenya adalah ADDpegawai yang didalamnya
terdapat kd_pegawai, nm_pegawai, tgl_lahir, jk, jln, kota, dan status,
dimana apabila ingin menambah pegawai maka tinggal melakukan call
ADDpegawai dan memasukkan data pegawai yang ingin ditambah
20 Studi kasus 20
Mengetahui apakah barang tersedia atau tidak
Query :
DELIMITER //
CREATE PROCEDURE cek (IN barang VARCHAR(6))
BEGIN
DECLARE str VARCHAR (20);
IF (EXISTS (SELECT kd_brg FROM tb_barang WHERE
kd_brg=barang AND jml_brg>0))
THEN SET str = 'BARANG TERSEDIA';
ELSE
SET str = 'BARANG KOSONG';
END IF;
SELECT str;
END //
Screenshoot
CALL cek("A001");

CALL cek("A010");

Penjelasan:
Program ini digunakan untuk membuat procedure untuk mempermudah
dalam kroscek apakah stok barang masih tersedia atau tidak. Nama
prosedurnya adalah cek, didalamnya pendeklarasian str yang digunakan
untuk memunculkan string baru saat perintah dijalankan. Kemudian kondisi
apabila barang yang ada pada tb_barang jumlahnya leih dari 0 maka akan
menampilkan bahwa barang tersedia, namun jika tidak memenuhi kondisi
tersebut maka akana menampikan bahwa barang kosong. Untuk memanggil
triger ini menggunakan query CALL cek (“kode barang yang akan dicek”)

21 Study kasus 21
Menampilkan jumlah barang furniture yang dipinjam
Query :
DELIMITER //
CREATE PROCEDURE GETjumlahbarangpinjam()
BEGIN
SELECT SUM(jml_barang) FROM tb_detail_pinjam
WHERE kd_brg LIKE "F%";
END //
DELIMITER ;
Screenshot :
CALL GETjumlahbarangpinjam();
Penjelasan:
Query diatas digunakan untuk menampilkan jumlah barang furniture yang
sedang dipinjam. Procedue ini diberi nama GETjumlahbarangpinjam.
Didalam procedue ini, untuk mengeahui jumlah barang furniture yang
dipinjam ialah dari tabel detail pinjam, barang yang mempunyai kode
dengan awalan huruf F. Maka akan menampilkan jumlah dari barang
furniture yang dipinjam, awalan huruf F dikarenakan semua jenis furniure
mempunyai awalan kode huruf F.

 TRIGER
22 Study kasus 22

Setiap terjadi pencatatan peminjaman barang elektronik, maka jumlah


barang elektronik otomatis berkurang sejumlah peminjaman.

DELIMITER //

CREATE TRIGGER updatestokbarang


AFTER INSERT ON tb_detail_pinjam

FOR EACH ROW BEGIN

UPDATE tb_barang SET tb_barang.jml_brg =


tb_barang.jml_brg - NEW.jml_barang WHERE
tb_barang.kd_brg = NEW.kd_brg;
END //
INSERT INTO `tb_peminjaman` (`id_pinjam`,
`kd_pegawai`, `tgl_pinjam`, `petugas`) VALUES
('1011', 'PGW009', '2017-05-08', 'PGW004');
Penjelasan :
Trigger updatestokbarang digunakan untuk mengurangi jumlah barang
pada tabel barang ketika ada barang yang dipinjam. Pada
tb_detail_pinjam terjadi kejadian insert dimana setelah memasukkan
data id_pinjam, kd_brg, jml_brg pada table tersebut, setelah itu
mengupdate barang dimana jml_brg pada tb_barang dikurangi dengan
jumlah barang yang dipinjam pada tb_detail_pinjam dimana kd_brg
pada tb_barang sama seperti kd_brg yang telah diinputkan dengan
tb_detail_pinjam.
23 Study kasus 23
Apabila peminjam sudah mengembalikan barang, maka data peminjam
pada tabel peminjaman barang sudah tidak ada
DELIMITER //

CREATE TRIGGER hapuspinjam


AFTER INSERT ON tb_pengembalian

FOR EACH ROW BEGIN

DELETE FROM tb_peminjaman WHERE id_pinjam =


NEW.id_pinjam;

END //
Trigger hapuspinjam digunakan untuk menghapus data peminjam yang
sudah mengembalikan barang yang dipinjam. Pada tb_pengembalian
terjadi kejadian insert dimana setelah memasukkan data id_pinjam,
tgl_kembali, dan petugas pada table tersebut, maka akan dieksekusi
query menghapus field dimana id_pinjam pada tabel tb_peminjaman
sama seperti id_pinjam pada tb_pengembalian.

Daftar tabel peminjaman dan detail pinjam


Pegawai dengan id pinjam 1011 mengembalikan barang

INSERT INTO `tb_pengembalian` (`id_pinjam`, `tgl_kembali`,


`petugas`) VALUES ('1011', '2017-05-08', 'PGW004');
INSERT INTO `tb_detail_kembali` (`id_pinjam`, `kd_brg`,
`jml_barang`, `kondisi`) VALUES ('1011', 'E001', '5', 'Baik');
SELECT * FROM tb_peminjaman INNER JOIN
tb_detail_pinjam WHERE tb_peminjaman.id_pinjam =
tb_detail_pinjam.id_pinjam;
24 Study kasus 24

Membuat trigger,apabila terjadi penyuplaian barang,


maka barang yang disuply akan sesuai dengan suplier yang
cocok dengan jenis barang tersebut.

DELIMITER //

CREATE TRIGGER suplier


AFTER INSERT ON tb_pengiriman_barang

FOR EACH ROW BEGIN


IF kd_brg = "E%" THEN
SET NEW.id_pengirim = "004";
ELSEIF kd_brg = "T%" THEN
SET NEW.id_pengirim = "001";
ELSEIF kd_brg = "A%" THEN
SET NEW.id_pengirim = "003";
ELSEIF kd_brg = "F%" THEN
SET NEW.id_pengirim = "002";
END IF;
END //

Trigger suplier digunakan untuk mengatur penyuplai barang


dimana ketika kode barang berawalan E maka penyuplai
berasal dari perusahaan elektronik dengan id pengirim 004,
ketika kode barang yang dimasukkan berawalan F maka
penyuplai berasal dari perusahaan furnitur dengan id pengirim
002, ketika kode barang yang diinputkan berawalan T maka
penyuplai berasal dari perusahaan transportasi dengan id
pengirim 001, dan ketika kode barang yang dimasukkan
berawalan A maka penyuplai berasal dari perusahaan ATK
dengan id pengirim 003.
25 Study kasus 25

Menyuplai data pada tabel tb_pengiriman_barang

Trigger untuk setelah pengembalian barang, barang dengan


kondisi baik akan dikembalikan, sedangkan barang dengan
kondisi rusak atau pecah akan di suplay
CREATE TRIGGER kembalisuplay

AFTER INSERT ON tb_detail_kembali

FOR EACH ROW BEGIN

DELETE FROM tb_detail_pinjam WHERE id_pinjam =


NEW.id_pinjam;

IF new.kondisi = "Baik" THEN


UPDATE tb_barang SET tb_barang.jml_brg =
tb_barang.jml_brg + NEW.jml_barang WHERE
tb_barang.kd_brg = NEW.kd_brg;

ELSEIF new.kondisi = "Rusak" OR new.kondisi = "Pecah"


THEN
INSERT INTO tb_pengiriman_barang
VALUES( new.kd_brg,(SELECT nm_brg FROM tb_barang
WHERE kd_brg = new.kd_brg),new.jml_barang, NOW()," ");

END IF ;
END

Trigger kembalisuplay digunakan untuk menghapus data detail


pinjam yang sudah mengembalikan barang yang dipinjam dan
memberikan kondisi untuk mengatur jumlah barang. Ketika
menghapus data detail pinjam, pada tb_detail_kembali terjadi
kejadian insert dimana setelah memasukkan data id_pinjam,
kd_brg, jml_barang dan kondisi pada table tersebut, maka akan
dieksekusi query menghapus field dimana id_pinjam pada tabel
tb_detail_pinjam sama seperti id_pinjam pada
tb_detail_kembali. Query kedua yaitu memberikan kondisi
dimana ketika kondisi barang sewaktu dikembalikan tersebut
baik maka query akan menambah jumlah barang pada tabel
barang sesuai jumlah barang yang dikembalikan dan ketika
kondisi barang rusak atau pecah maka query akan melakukan
insert pada tb_pengiriman_barang untuk menyuplai barang
yang telah rusak atau pecah sebanyak jumlah tersebut.

Mengembalikan barang rusak


INSERT INTO `tb_detail_kembali` (`id_pinjam`, `kd_brg`,
`jml_barang`, `kondisi`) VALUES ('1011', 'E001', '5', 'Rusak');
26 Study kasus 26

Menambah jumlah barang ketika terjadi pengiriman barang

DELIMITER //
CREATE TRIGGER suplaybarang

AFTER INSERT ON tb_pengiriman_barang

FOR EACH ROW BEGIN


UPDATE tb_barang SET tb_barang.jml_brg =
tb_barang.jml_brg + NEW.jml_barang WHERE
tb_barang.kd_brg = NEW.kd_brg;

END//
Trigger suplaybarang digunakan untuk menambah jumlah barang pada
tabel barang ketika terjadi pengiriman barang. Pada
tb_pengiriman_barang terjadi kejadian insert dimana setelah
memasukkan data kd_brg, nm_brg, jml_barang, tgl_kirim, dan
id_pengirim pada table tersebut, setelah itu mengupdate jumlah barang
dimana jml_brg pada tb_barang ditambah dengan jumlah barang yang
kirim pada tb_pengiriman_barang dimana kd_brg pada tb_barang sama
seperti kd_brg yang telah diinputkan dengan tb_pengiriman_barang.
G Kesimpulan
Dalam perancangan database inventaris kantor ini terdapat 10 buah tabel
yaitu tb_pegawai, tb_barang, tb_detail_peminjaman, tb_peminjaman,
tb_pengembalian, tb_detail_kembali, tb_pengiriman, tb_suplier,
tb_perusahaan dan tb_status.
Dalam database Inventaris kantor ini menggunakan fungsi agregat seperti
sum, count, min, dan max untuk mempermudah melakukan perhitungan
seperti jumlah barang keseluruhan, barang yang dipinjam dan barang yang
dikembalikan. Menggunakan join untuk menggabungkan antara satu tabel
dengan tabel yang lain seperti mengabungkan antara tabel tb_peminjaman
dengan tabel tb_detail_peminjaman untuk bisa mengetahui apa saja barang
yang telah di pinjam. Menggunakan view untuk mempermudah dalam
menampilkan data dalam database inventaris kantor. Menggunakan sub query
untuk memudahkan menampilkan data sesuai dengan kriteria ataupun kondisi
tertentu. Menggunakan trigger untuk mempermudah proses seperti
pengurangan stok barang dan penambahan barang yang sudah dikembalikan.
Menggunakan stored procedure untuk mempermudah menampilkan data
seperti untuk menghitung total barang yang sedang dipinjam dan melihat
siapa saja pegawai yang meminjam barang. Dan juga menggunakan
transaction untuk mempermudah dalam transaksi peminjaman barang
inventaris, dan lain sebagainya.

Daftar Pustaka
1. Tim Asisten Dosen. 2016. Modul 1 Pengenalan MySQL. Malang :
Universitas Negeri Malang.
2. Tim Asisten Dosen. 2016. Modul 2 Objek-objek Basis Data. Malang :
Universitas Negeri Malang.
3. Tim Asisten Dosen. 2016. Modul 3 SQL. Malang : Universitas Negeri
Malang.
4. Tim Asisten Dosen. 2016. Modul 4 Fungsi Agregat. Malang :
Universitas Negeri Malang.
5. Tim Asisten Dosen. 2017. Modul 5 Relasi dan Join. Malang :
Universitas Negeri Malang.
6. Tim Asisten Dosen. 2017. Modul 6 Subquery. Malang : Universitas
Negeri Malang.
7. Tim Asisten Dosen 2017. Modul 7 Stored Proceudure : Universitas
Negeri Malang
8. Tim Asisten Dosen 2017. Modul 8 Triger : Universitas Negeri Malang
9. Tim Asisten Dosen 2017. Modul 9 View : Universitas Negeri Malang
10. Tim Asisten Dosen 2017. Modul 10 Transaksi: Universitas Negeri
Malang

Lampiran
JOB DESCRIPTION
Nama Tugas
Aimmatul Azizah  Menyusun laporan
 Mendesain ERD
Almas Amalia Azhar  Mendesain database
 Membuat ERD
 Membuat studi kasus
Andisa Talenta Oktaviani  Mendesain database
 Membuat ERD
 Membuat studi kasus
Crismon Dwi Indah K.  Mendesain database
 Membuat ERD
 Membuat studi kasus
 Menyusun Artikel
Gambar ERD database invenmtaris kantor

Anda mungkin juga menyukai