SOAL:
Soal ini terkait dengan Sistem Pengolahan Data Perpustakaan SMA ABC (SPDP).
SPDP adalah sebuah aplikasi web based yang melibatkan 6 dengan peran
sbb:
·
Administrator berperan mengelola data user.
·
Petugas berperan mengelola seluruh data
master, melayani dan mengelola data transaksi peminjaman, pengembalian,
pembayaran denda keterlambatan, pembayaran denda buku rusak atau hilang,
menyusun laporan yang terkait dengan data master dan transaksi.
·
Anggota dapat melakukan pencarian
katalog, mengecek ketersediaan buku, meng‐update
identitas, melakukan
peminjaman, dan pengembalian, dan pembayaran denda keterlambatan, penggantian
buku rusak atau hilang.
·
Kepala Perpustakaan berhak untuk
menentukan tarip denda keterlambatan pengembalian dan tarip penggantian untuk buku
rusak & hilang, serta menerima laporan & informasi dari Petugas
perpustakaan.
·
Kepala Sekolah berhak menerima laporan
& informasi dari Petugas perpustakaan.
·
Pengunjung hanya dapat melakukan
pencarian katalog.
Data master SPDP meliputi:
ð
user, anggota, buku,
jenis buku, bidang ilmu buku, penerbit, penulis, propinsi, kabupaten,
kecamatan, tarip denda (terlambat, hilang, rusak).
Data transaksi SPDP meliputi:
ð
pinjam,
kembali, bayar denda terlambat mengembalikan buku, bayar denda buku rusak,
bayar denda buku hilang
Berdasarkan keterangan tersebut di atas, buatlah;
1.
Buatlah rancangan struktur tabel database (dalam bentuk 3NF)
2.
Tentukan Primary Key & Foreign Key (jika
ada) dalam setiap tabel database (dalam bentuk 3NF)
3.
Gambarkan diagram kerelasian antar tabel
database
4.
Tuliskan perintah SQL untuk;
1) Membuat database perpustakaan
2) Membuat tabel database master
& transaksi
3) Menghitung jumlah total semua
koleksi perpustakaan
4) Menampilkan daftar buku dan
penerbitnya, urut ascending berdasarkan abjad judul buku
5) Menampilkan daftar anggota
sedang meminjam buku, urut ascending berdasarkan tanggal pinjam
6) Menampilkan daftar seluruh
anggota yang pernah membayar terlambat mengembalikan buku, urut ascending berdasarkan
abjad nama anggota
7) Menampilkan daftar seluruh
anggota yang pernah membayar denda buku hilang, urut ascending berdasarkan
abjad nama anggota
8) Menampilkan daftar seluruh
anggota yang pernah membayar denda buku rusak, urut ascending berdasarkan
abjad nama anggota
JAWABAN
Untuk
Soal Nomor 1 dan 2
RANCANGAN STRUKTUR TABEL
DATABASE YG DIGUNAKAN
1. Tabel: user
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
user_name
|
VarChar
|
20
|
No
|
-
|
Primary Key
|
2
|
password
|
VarChar
|
20
|
No
|
-
|
-
|
3
|
level_user
|
Char
|
1
|
No
|
5
|
1 = admin;
2 = kepala sekolah;
3 = kepala perpustakaan
4 = anggota;
5 = pengunjung
|
2. Tabel: tanggal_libur
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
tanggal_libur
|
Date
|
no
|
-
|
Primary Key
|
|
2
|
Keterangan_libur
|
Varchar
|
50
|
no
|
-
|
-
|
3. Tabel: tarif_denda
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
jumlah_hari_maksimal
|
Num
|
3
|
No
|
-
|
Primary Key
|
2
|
jumlah_denda
|
Num
|
7
|
No
|
-
|
-
|
4. Tabel: tarif _hilang
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
harga_maksimal
|
Num
|
7
|
No
|
-
|
Primary Key
|
2
|
jumlah_denda
|
Num
|
7
|
No
|
-
|
-
|
5. Tabel: tarif _rusak
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
harga_maksimal
|
Num
|
7
|
No
|
-
|
Primary Key
|
2
|
jumlah_denda
|
Num
|
7
|
No
|
-
|
-
|
6. Tabel: anggota
|
||||||||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
||||||
1
|
kode_anggota
|
Char
|
6
|
no
|
-
|
Primary Key
|
||||||
2
|
nama_anggota
|
VarChar
|
100
|
no
|
-
|
-
|
||||||
3
|
alamat
|
VarChar
|
100
|
no
|
-
|
-
|
||||||
4
|
kode_kecamatan
|
Char
|
6
|
no
|
-
|
Foreign Key
|
||||||
5
|
telepon
|
VarChar
|
12
|
yes
|
-
|
-
|
||||||
6
|
email
|
VarChar
|
20
|
yes
|
-
|
-
|
||||||
7
|
tgl_mulai_anggota
|
Date
|
no
|
-
|
-
|
|||||||
8
|
jenis_anggota
|
Char
|
1
|
no
|
2
|
1 = guru/karyawan;
2 = siswa
|
||||||
9
|
status_anggota
|
Char
|
1
|
no
|
2
|
1 = aktif; 2 =
tidak aktif
|
||||||
7. Tabel: jenis
|
||||||||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
||||||
1
|
kode_jenis_buku
|
Char
|
4
|
No
|
-
|
Primary Key
|
||||||
2
|
nama_jenis_buku
|
VarChar
|
20
|
No
|
-
|
-
|
||||||
8. Tabel: bidang
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_bidang
|
Char
|
4
|
No
|
-
|
Primary Key
|
2
|
nama_bidang
|
VarChar
|
20
|
No
|
-
|
-
|
9. Tabel: penerbit
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_penerbit
|
Char
|
4
|
No
|
-
|
Primary Key
|
2
|
nama_penerbit
|
VarChar
|
30
|
No
|
-
|
-
|
3
|
alamat
|
VarChar
|
100
|
no
|
-
|
-
|
4
|
kode_kecamatan
|
Char
|
6
|
no
|
-
|
Foreign Key
|
5
|
telepon
|
VarChar
|
12
|
yes
|
-
|
-
|
6
|
email
|
VarChar
|
20
|
yes
|
-
|
-
|
10. Tabel: penulis
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_penulis
|
Char
|
4
|
No
|
-
|
Primary Key
|
2
|
nama_penulis
|
VarChar
|
100
|
No
|
-
|
-
|
3
|
alamat
|
VarChar
|
100
|
no
|
-
|
-
|
4
|
kode_kecamatan
|
Char
|
6
|
no
|
-
|
Foreign Key
|
5
|
telepon
|
VarChar
|
12
|
yes
|
-
|
-
|
6
|
email
|
VarChar
|
20
|
yes
|
-
|
-
|
11. Tabel: propinsi
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_propinsi
|
Char
|
2
|
No
|
-
|
Primary Key
|
2
|
nama_propinsi
|
VarChar
|
30
|
No
|
-
|
-
|
12. Tabel: kabupaten
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_kabupaten
|
Char
|
4
|
No
|
-
|
Primary Key
|
2
|
nama_kabupaten
|
VarChar
|
30
|
No
|
-
|
-
|
3
|
kode_propinsi
|
Char
|
2
|
No
|
-
|
Foreign Key
|
13. Tabel: kecamatan
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_kecamatan
|
Char
|
6
|
No
|
-
|
Primary Key
|
2
|
nama_kecamatan
|
VarChar
|
30
|
No
|
-
|
-
|
3
|
kode_kabupaten
|
Char
|
4
|
No
|
-
|
Foreign Key
|
14. Tabel: pinjam
Catatan: kode_pinjam boleh tidak digunakan
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_pinjam
|
Primary Key
|
||||
2
|
kode_anggota
|
Char
|
6
|
No
|
-
|
Primary Key / Foreign Key
|
3
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key / Foreign Key
|
4
|
tanggal_pinjam
|
Date
|
No
|
Primary Key / Foreign Key
|
||
5
|
tanggal_harus_kembali
|
Date
|
N0
|
-
|
-
|
15. Tabel: kembali
Catatan:
·
kode_kembaliboleh tidak digunakan
·
jika tabel pinjam tidak menggunakan
kode_pinjam, maka harus ada kode_anggota+kode_buku+tanggal_pinjam
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_pinjam
|
Primary Key / Foreign Key
|
||||
2
|
kode_kembali
|
Primary Key
|
||||
3
|
kode_anggota
|
Char
|
6
|
No
|
-
|
Primary Key / Foreign Key
|
4
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key / Foreign Key
|
5
|
tanggal_pinjam
|
Date
|
No
|
Primary Key / Foreign Key
|
||
6
|
tanggal_kembali
|
Date
|
No
|
-
|
-
|
16. Tabel: bayar_denda
Catatan: jika tabel kembali tidak menggunakan
kode_kembali, maka harus ada
kode_anggota+kode_buku+tanggal_pinjam+tanggal_kembali
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_kembali
|
Primary Key / Foreign Key
|
||||
2
|
kode_anggota
|
Char
|
6
|
No
|
-
|
Primary Key/ Foreign Key
|
3
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key/ Foreign Key
|
4
|
tanggal_pinjam
|
Date
|
No
|
Primary Key/ Foreign Key
|
||
5
|
tanggal_bayar
|
Date
|
No
|
-
|
-
|
|
6
|
jumlah_denda
|
Num
|
9
|
No
|
0
|
Dihitung
otomatis
|
17. Tabel: bayar_hilang
Catatan: jika tabel pinjam tidak menggunakan
kode_pinjam, maka harus ada kode_anggota+kode_buku+tanggal_pinjam
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_pinjam
|
Primary Key
/ Foreign Key
|
||||
2
|
kode_anggota
|
Char
|
6
|
No
|
-
|
Primary Key
/ Foreign Key
|
3
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key
/ Foreign Key
|
4
|
tanggal_pinjam
|
Date
|
No
|
Primary Key
/ Foreign Key
|
||
5
|
tanggal_bayar
|
Date
|
No
|
-
|
-
|
|
6
|
jumlah_denda
|
Num
|
9
|
No
|
0
|
Dihitung
otomatis
|
18. Tabel: bayar_rusak
Catatan: jika tabel pinjam tidak menggunakan
kode_pinjam, maka harus ada kode_anggota+kode_buku+tanggal_pinjam
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_pinjam
|
Primary Key / Foreign Key
|
||||
2
|
kode_anggota
|
Char
|
6
|
No
|
-
|
Primary Key / Foreign Key
|
3
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key / Foreign Key
|
4
|
tanggal_pinjam
|
Date
|
No
|
Primary Key / Foreign Key
|
||
5
|
tanggal_bayar
|
Date
|
No
|
-
|
-
|
|
6
|
jumlah_denda
|
Num
|
9
|
No
|
0
|
Dihitung
otomatis
|
19. Tabel: buku
|
||||||
No
|
Nama Field
|
Tipe
|
Ukuran
|
Null
|
Default
|
Keterangan
|
1
|
kode_buku
|
Char
|
10
|
No
|
-
|
Primary Key
|
2
|
Judul_buku
|
VarChar
|
100
|
No
|
-
|
-
|
3
|
kode_jenis
|
Char
|
4
|
No
|
-
|
Foreign Key
|
4
|
kode_bidang
|
Char
|
4
|
No
|
-
|
Foreign Key
|
5
|
kode_penulis_utama
|
Char
|
4
|
No
|
-
|
Foreign Key
|
6
|
kode_penerbit
|
Char
|
4
|
No
|
-
|
Foreign Key
|
7
|
jumlah
|
Num
|
1
|
No
|
-
|
-
|
8
|
bahasa
|
Char
|
1
|
No
|
1
|
1 = Indonesia;
2 = Asing
|
9
|
isbn
|
Char
|
12
|
No
|
-
|
-
|
10
|
tahun
|
Char
|
4
|
No
|
-
|
-
|
11
|
jumlah_halaman
|
Num
|
1
|
No
|
-
|
-
|
12
|
edisi
|
Char
|
1
|
No
|
1
|
-
|
13
|
cetakan_ke
|
Char
|
1
|
No
|
1
|
-
|
14
|
status
|
Char
|
1
|
No
|
1
|
1 = Baik; 2 = Rusak
|
JAWABAN Untuk
Soal Nomor 3
Relasi Antar Tabel
JAWABAN
Untuk Soal Nomor 4
PERINTAH
SQL
3.
Perintah SQL untuk;
1) Membuat database
perpustakaan
ð
DEFINISI DATABASE
create
database dbperpustakaan;
ð
DEFINISI TABEL DALAM DATABASE
use dbperpustakaan
2) Membuat tabel database
master & transaksi
a. Tabel user
create
table user
(
user_namevarchar(5)
not nullunique
primary key,
password varchar(20)
not null,
level_user char(1) default
‘5’check(level_user=‘1’ or level_user=‘2’ or level_user=‘3’ or level_user=‘4’
or level_user=‘5’));
b. Tabel Tangal
Libur
create table tanggal_libur
(
tanggal_liburdate not nullunique primary key,
keterangan_libur varchar(50)
not null);
c. Tabel Tarif
Denda
create table tarif_denda (
jumlah_hari_maksimal tinyint(3) not null unique
primary key,jumlah_denda mediumint(9) not null);
d. Tabel Tarif
Hilang
create table tarif_hilang (
harga_maksimal mediumint (9) not null unique primary key,
jumlah_denda mediumint(9) not null);
e. Tabel Tarif
Rusak
create table tarif_rusak (
harga_maksimal mediumint (9) not null unique primary key,
jumlah_denda mediumint(9) not null);
f.
Tabel Anggota
create table anggota (
kode_anggota char(6) not null unique primary key,
nama_anggota varchar(100) not null,
alamat varchar(100) not null,
kode_kecamatan char(6) not null,
telepon varchar(12),
email varchar(20),
tgl_mulai_anggota date not null,
jenis_anggota char(1) not null default ‘2’check(jenis_anggota=‘1’ or
jenis_anggota=‘2’),
status_anggota char(1) not null default ‘1’check(status_anggota=‘1’ or
status_anggota=‘2’),
foreign key(kode_kecamatan) references kecamatan onupdate cascade on delete
cascade;
g. Tabel Jenis
create table jenis (
kode_jenis_buku char(4) not null unique primary key,
nama_jenis_buku varchar(20) not null;
h. Tabel Bidang
create table bidang (
kode_bidang char(4) not null unique primary key,
nama_bidang varchar(20) not null;
i.
Tabel Penerbit
create table penerbit (
kode_penerbit char(4) not null unique primary
key,
nama_penerbit varchar(30) not null,
alamat varchar(100) not null,
kode_kecamatan char(6) not null,
telepon varchar(12),
email varchar(20),
foreign key(kode_kecamatan) references kecamatan
on update cascade on delete cascade;
j.
Tabel Penulis
create table penulis (
kode_penulis char(4) not null unique primary key,
nama_penulis_utama varchar(100) not null,
alamat varchar(100) not null,
kode_kecamatan char(6) not null,
telepon varchar(12),
email varchar(20),
foreign key(kode_kecamatan) references kecamatan
on update cascade on delete cascade;
k.
Tabel Provinsi
create table propinsi (
kode_propinsi char(2) not null unique primary
key,
nama_propinsi varchar(30) not null;
l.
Tabel Kabupaten
create table kabupaten (
kode_kabupaten char(4) not null unique primary key,
nama_kabupaten varchar(30) not null,
kode_propinsi char(2) not null,
foreign key(kode_propinsi) references propinsi on
update cascade on delete cascade;
m. Tabel
Kecamatan
create table kecamatan (
kode_kecamatan char(6) not null unique primary
key,
nama_kecamatan varchar(30) not null,
kode_kabupaten char(4) not null,
foreign key(kode_kabupaten) references kabupaten
on update cascade on delete cascade;
n. Tabel Pinjam
create table pinjam (
kode_anggota char(6) not null,
kode_buku char(10) not null,
tanggal_pinjam date not null,
tanggal_harus_kembali date not null,
foreign key(kode_anggota) references anggota on
update cascade on delete cascade,
foreign key(kode_buku) references buku on update
cascade on delete cascade,
primary key(kode_anggota, kode_buku,
tanggal_pinjam);
o.
Tabel Kembali
create table kembali (
kode_anggota char(6) not null,
kode_buku char(10) not null,
tanggal_pinjam date not null,
tanggal_ kembali date not null,
foreign key(kode_anggota,
kode_buku,tanggal_pinjam) references pinjam on update cascade on delete cascade
primary key(kode_anggota, kode_buku,
tanggal_pinjam);
p.
Tabel Bayar Denda
create table bayar_denda (
kode_anggota char(6) not null,
kode_buku char(10) not null,
tanggal_pinjam date not null,
tanggal_bayar date not null,
jumlah_denda mediumint(9),
foreign key(kode_anggota, kode_buku,
tanggal_pinjam) references kembali on update cascade on delete cascade
primary key(kode_anggota, kode_buku,
tanggal_pinjam);
q.
Tabel Bayar Hilang
create table bayar_hilang (
kode_anggota char(6) not null,
kode_buku char(10) not null,
tanggal_pinjam date not null,
tanggal_bayar date not null,
jumlah_denda mediumint(9),
foreign key(kode_anggota, kode_buku,
tanggal_pinjam) references pinjam on update cascade on delete cascade
primary key(kode_anggota, kode_buku,
tanggal_pinjam);
r.
Tabel Bayar Rusak
create table bayar_rusak (
kode_anggota char(6) not null,
kode_buku char(10) not null,
tanggal_pinjam date not null,
tanggal_bayar date not null,
jumlah_denda mediumint(9),
foreign key(kode_anggota, kode_buku, tanggal_pinjam)
references pinjam on update cascade on delete cascade
primary key(kode_anggota, kode_buku,
tanggal_pinjam);
s.
Tabel Buku
create table buku (
kode_buku char(10) not null unique primary key,
judul_buku varchar(100) not null,kode_jenis char(4) not
null,kode_bidang char(4) not
null,kode_penulis char(4) not null,kode_penerbit char(4) not null,jumlah
tinyint(2) not null,bahasa char(1) not null default ‘1’check(bahasa=‘1’ or
bahasa=‘2’),isbn char(12) not null,tahun char(4) nor null,jumlah_halaman mediumint (4) not null,edisi char(1) not null, cetakan_ke char(1) not
null,status char(1) default ‘1’ check(status=’1’ or status=’2’),foreign key (kode_jenis) references jenis on update cascade on delete
cascade,foreign key(kode_bidang) references bidang on update cascade on delete
cascade,foreign key(kode_penulis) references penulis on update cascade on
delete cascade,foreign key(kode_penerbit) references penerbit on update cascade
on delete cascade;
3) Menghitung
jumlah total semua koleksi perpustakaan
SELECT COUNT(*) FROM
BUKU;
4) Menampilkan
daftar buku dan penerbitnya, urut ascending berdasarkan abjad judul buku
SELECT buku.judul_buku,
penerbit.nama_penerbit
FROM buku, penerbit
WHERE
buku.kode_penerbit=pesan.kode_penerbit Order by judul_buku ASC;
5) Menampilkan
daftar anggota sedang meminjam buku, urut ascending berdasarkan tanggal
pinjam
SELECT anggota.nama_anggota,
pinjam.tanggal_pinjam
FROM anggota, pinjam
WHERE
angota.kode_anggota=pinjam.kode_anggota order by tanggal_pinjam ASC;
6) Menampilkan
daftar seluruh anggota yang pernah membayar terlambat mengembalikan buku, urut ascending
berdasarkan abjad nama anggota
SELECT anggota.nama_anggota,
bayar_denda.kode_anggota
FROM anggota, bayar_denda
WHERE
angota.kode_anggota=bayar_denda.kode_anggota order by nama_anggota ASC;
7) Menampilkan
daftar seluruh anggota yang pernah membayar denda buku hilang, urut ascending
berdasarkan abjad nama anggota
SELECT anggota.nama_anggota,
bayar_hilang.kode_anggota
FROM anggota, bayar_hilang
WHERE
angota.kode_anggota=bayar_hilang.kode_anggota order by nama_anggota ASC;
8) Menampilkan
daftar seluruh anggota yang pernah membayar denda buku rusak, urut ascending
berdasarkan abjad nama anggota
SELECT anggota.nama_anggota,
bayar_rusak.kode_anggota
FROM anggota, bayar_rusak
WHERE
angota.kode_anggota=bayar_rusak.kode_anggota order by nama_anggota ASC;
0 comments:
Post a Comment