TUGAS INDIVIDU
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
1. SISTEM PENGOLAHAN DATA PERPUSTAKAAN SMAABC (SPDP)
1. Rancangan struktur tabel database yang digunakan(dalam bentuk
3NF)
2.
Primary
key & Foreign key
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
|
3. Diagram Kerelasian Antar Tabel Database
4. Perintah SQL
1) membuat database perpustakaan
mysql>create database dbperpustakaan;
2) membuat tabel database master & transaksi
mysql> use perpustakaan :
Tabel User
mysql>
create table user(
-> user_name varchar(5) not null unique
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'));
Tabel Tanggal Libur
mysql>
create table tanggal_libur(
-> tanggal_libur date not null unique primary
key,
-> keterangan_libur varchar(50) not
null);
Tabel Tarif Denda
mysql>
create table tarif_denda(
-> jumlah_hari_maksimal tinyint(3) not
null unique primary key,
-> jumlah_denda mediumint(9)not null);
Tabel
Tarif Hilang
mysql>
create table tarif_hilang(
-> harga_maksimal mediumint(9)not null
unique primary key,
-> jumlah_denda mediumint(9) not null);
Tabel
Tarif Rusak
mysql>
create table tarif_rusak(
-> harga_maksimal mediumint(9)not null
unique primary key,
-> jumlah_denda mediumint(9) not null);
Tabel
Jenis
mysql>
create table jenis(
-> kode_jenis_buku char(4)not null
unique primary key,
-> nama_jenis_buku varchar(20)not null);
Tabel
Bidang
mysql>
create table bidang(
-> kode_bidang char(4)not null unique
primary key,
-> nama_bidang varchar(20) not null);
Tabel
Propinsi
mysql>
create table propinsi(
-> kode_propinsi char(2)not null unique
primary key,
-> nama_propinsi varchar(30) not null);
Tabel
Kabupaten
mysql>
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(kode_propinsi)
-> on update cascade on delete cascade);
Tabel
Kecamatan
mysql>
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(kode_kabupaten)
-> on update cascade on delete cascade);
Tabel
Penerbit
mysql>
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,
-> telp varchar(12),
-> email varchar(20),
-> foreign key(kode_kecamatan)
references kecamatan(kode_kecamatan)
-> on update cascade on delete cascade);
Tabel
Penulis
mysql>
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,
-> telp varchar(12),
-> email varchar(20),
-> foreign key(kode_kecamatan)
references kecamatan(kode_kecamatan)
-> on update cascade on delete cascade);
Tabel
Buku
mysql>
create table buku(
-> kode_buku char(10)not null unique
primary key,
-> judul_buku varchar(100)not null,
-> kode_jenis_buku 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) not 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_buku)
references jenis(kode_jenis_buku) on update cascade on delete ca
scade,
-> foreign key(kode_bidang) references
bidang(kode_bidang) on update cascade on delete cascade,
-> foreign key(kode_penulis) references
penulis(kode_penulis) on update cascade on delete cascade,
-> foreign key(kode_penerbit) references
penerbit(kode_penerbit) on update cascade on delete cascade);
Tabel
Anggota
mysql>
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,
-> telp 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(kode_kecamatan)
-> on update cascade on delete cascade);
Tabel
Pijam
mysql>
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(kode_anggota) on update cascade on delete cascade,
-> foreign key(kode_buku) references
buku(kode_buku) on update cascade on delete cascade,
-> primary key(kode_anggota, kode_buku,
tanggal_pinjam));
Tabel
Kembali
mysql>
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(kode_anggota,kode_buku,
tanggal_pinjam) on update cascade on delete cascade,
-> primary key(kode_anggota,
kode_buku,tanggal_pinjam));
Tabel
Bayar Denda
mysql>
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(kode_anggota,kode_buku,tanggal_pinjam)
on update cascade on delete cascade,
-> primary key(kode_anggota,kode_buku,tanggal_pinjam));
Tabel
Bayar Hilang
mysql>
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(kode_anggota,kode_buku tanggal_pinjam)
on update cascade on delete cascade,
-> primary key(kode_anggota, kode_buku,
tanggal_pinjam));
Tabel
Bayar Rusak
mysql>
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(kode_anggota,kode_buku,tanggal_pinjam)
on update cascade on delete cascade,
-> primary
key(kode_anggota,kode_buku,tanggal_pinjam));
3) Menghitung
jumlah total semua koleksi perpustakaan
mysql> SELECT SUM(jumlah) as
jumlah_total_koleksi_perpustakaan FROM buku;
4)
Menampilkan daftar buku dan penerbitnya,
urut ascending berdasarkan abjad judul buku
mysql> select judul_buku,nama_penerbit from buku INNER JOIN
penerbit USING(kode_penerbit) ORDER BY j
udul_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
mysql>
SELECT nama_anggota, tanggal_pinjam from anggota INNER JOIN pinjam
using(kode_anggota) ORDER BY tanggal_pinjam, nama_anggota;
mysql>
select nama_anggota,tanggal_pinjam,tanggal_bayar from bayar_denda INNER JOIN
anggota USING(kode_anggota) ORDER BY nama_anggota;
7) Menampilkan daftar seluruh anggota yang
pernah membayar denda buku hilang, urut ascending berdasarkan abjad nama
anggota
mysql>
select nama_anggota,tanggal_bayar,jumlah_denda from bayar_hilang INNER JOIN
anggota USING(kode_anggota) ORDER BY nama_anggota;
8) Menampilkan daftar seluruh anggota yang pernah membayar denda_buku rusak, urut ascending berdasarkan abjad nama anggota
Tidak ada komentar:
Posting Komentar