. 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
2) membuat tabel database master & transaksi
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
Tabel Tanggal Libur
mysql>
create table tanggal_libur(
-> tanggal_libur date not null unique primary
key,
mysql>
create table tarif_denda(
-> jumlah_hari_maksimal tinyint(3) not
null unique primary key,
mysql>
create table tarif_hilang(
-> harga_maksimal mediumint(9)not null
unique primary key,
Tabel
Tarif Rusak
mysql>
create table tarif_rusak(
-> harga_maksimal mediumint(9)not null
unique primary key,
Tabel
Jenis
mysql>
create table jenis(
-> kode_jenis_buku char(4)not null
unique primary key,
mysql>
create table bidang(
-> kode_bidang char(4)not null unique
primary key,
mysql>
create table propinsi(
-> kode_propinsi char(2)not null unique
primary key,
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)
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)
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)
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)
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 cascad
e,
-> foreign key(kode_penerbit) references
penerbit(kode_penerbit) on update cascade on delete cas
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)
Tabel
Pinjam
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 cascad
e,
-> foreign key(kode_buku) references
buku(kode_buku) on update cascade on delete cascade,
mysql>
create table kembali(
-> 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,
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,t
anggal_pinjam)
on update cascade on delete cascade,
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,t
anggal_pinjam)
on update cascade on delete cascade,
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
mysql>
SELECT nama_anggota, tanggal_pinjam from anggota INNER JOIN pinjam
using(kode_anggota) ORDER BY tanggal_pinjam, nama_anggota;
6)
Menampilkan daftar seluruh anggota yang
pernah membayar terlambat mengembalikan buku, urut ascending berdasarkan abjad 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