Kamis, 17 Januari 2013

Tugas SMBD - Lanjutan [2]

SCHEMA DATABASE DENGAN DDL
1)      DEFINISI DATABASE
create database dbperpustakaan;

2)      DEFINISI TABEL DALAM DATABASE
use dbperpustakaan

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’));

create table tanggal_libur (
tanggal_liburdate not nullunique primary key,
keterangan_libur varchar(50) not null);

create table tarif_denda (
jumlah_hari_maksimal tinyint(3) not null unique primary key,
jumlah_denda mediumint(9) not null);

create table tarif_hilang (
harga_maksimal mediumint (9) not null unique primary key,
jumlah_denda mediumint(9) not null);

create table tarif_rusak (
harga_maksimal mediumint (9) not null unique primary key,
jumlah_denda mediumint(9) not null);

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 on update cascade on deletecascade);

create table jenis (
kode_jenis_buku char(4) not null unique primary key,
nama_jenis_buku varchar(20) not null);

create table bidang (
kode_bidang char(4) not null unique primary key,
nama_bidang varchar(20) not null);

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);



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);

create table propinsi (
kode_propinsi char(2) not null unique primary key,
nama_propinsi varchar(30) not null);

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);

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);

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));

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));

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));

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));

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));

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 SUM(jumlah) FROM buku;

4)      Menampilkan daftar buku dan penerbitnya, urut ascending berdasarkan abjad judul buku
SELECT buku.kode_buku, penerbit.nama_penerbit FROM buku JOIN penerbit ON buku.kode_penerbit = penerbit.kode_penerbit ORDER BY buku.judul_buku ASC;

5)      Menampilkan daftar anggota sedang meminjam buku, urut ascending berdasarkan tanggal pinjam
SELECT anggota.kode_anggota, anggota.nama_anggota, anggota.alamat_anggota FROM anggota JOIN pinjam ON anggota.kode_anggota = pinjam.kode_anggota ORDER BY pinjam.tanggal_pinjam;

6)      Menampilkan daftar seluruh anggota yang pernah membayar terlambat mengembalikan buku, urut ascending berdasarkan abjad nama anggota
SELECT anggota.kode_anggota, anggota.nama_anggota, anggota.alamat_anggota FROM anggota JOIN bayar_denda ON anggota.kode_anggota = bayar_denda.kode_anggota ORDER BY anggota.nama_anggota ASC;

7)      Menampilkan daftar seluruh anggota yang pernah membayar denda buku hilang, urut ascending berdasarkan abjad nama anggota
SELECT anggota.kode_anggota, anggota.nama_anggota, anggota.alamat_anggota FROM anggota JOIN bayar_hilang ON anggota.kode_anggota = bayar_hilang.kode_anggota ORDER BY anggota.nama_anggota ASC;


8)      Menampilkan daftar seluruh anggota yang pernah membayar denda buku rusak, urut ascending berdasarkan abjad nama anggota
SELECT anggota.kode_anggota, anggota.nama_anggota, anggota.alamat_anggota FROM anggota JOIN bayar_rusak  ON anggota.kode_anggota = bayar_rusak.kode_anggota ORDER BY anggota.nama_anggota ASC;










Tidak ada komentar:

Posting Komentar