Layanan Publik

Sistem Perpustakaan

Manajemen koleksi buku, anggota, dan peminjaman

Perpustakaan adalah salah satu sistem database klasik yang mencakup relasi banyak-ke-banyak antara anggota dan buku melalui tabel peminjaman. Studi kasus ini mengeksplorasi desain ERD, normalisasi, constraint, dan query analitik yang sering dipakai di dunia nyata.

Relasi M:N Foreign Key JOIN Aggregate Subquery Normalisasi 3NF
1

ERD Diagram

Entity Relationship Diagram — notasi Chen (atribut oval)

 ANGGOTA BUKU KATEGORI PEMINJAMAN meminjam memiliki dipinjam 1 N 1 N 1 1 N id_anggota nama email status tgl_daftar id_buku isbn judul pengarang stok id_kategori nama_kategori id_pinjam tgl_pinjam tgl_kembali denda Entitas Atribut Relasi Atribut PK Garis Relasi

Entitas = persegi panjang · Atribut = oval · Relasi = belah ketupat · Garis ganda = atribut kunci

2

Struktur Tabel

4 tabel dengan kolom, tipe data, dan constraint

anggota 7 kolom
KolomTipe DataConstraintKeterangan
id_anggota INT PK Primary key
nama VARCHAR(100) Nama lengkap anggota
email VARCHAR(150) UQ Email unik
telepon VARCHAR(20) Nomor telepon
alamat TEXT Alamat lengkap
tgl_daftar DATE Tanggal pendaftaran
status ENUM(aktif,nonaktif) Status keanggotaan
buku 8 kolom
KolomTipe DataConstraintKeterangan
id_buku INT PK Primary key
isbn VARCHAR(20) UQ International Standard Book Number
judul VARCHAR(255) Judul buku
pengarang VARCHAR(100) Nama pengarang
penerbit VARCHAR(100) Nama penerbit
tahun_terbit YEAR Tahun terbit
id_kategori INT FK → kategori.id_kategori
stok INT Jumlah stok tersedia
kategori 3 kolom
KolomTipe DataConstraintKeterangan
id_kategori INT PK Primary key
nama_kategori VARCHAR(80) Nama kategori buku
deskripsi TEXT Deskripsi kategori
peminjaman 6 kolom
KolomTipe DataConstraintKeterangan
id_pinjam INT PK Primary key
id_anggota INT FK → anggota.id_anggota
id_buku INT FK → buku.id_buku
tgl_pinjam DATE Tanggal peminjaman
tgl_kembali DATE Tanggal pengembalian (NULL jika belum)
denda DECIMAL(10,2) Denda keterlambatan (0 jika tepat waktu)
3

Contoh Query

4 query analitik siap pakai

1. Daftar buku yang sedang dipinjam
Ambil semua buku yang belum dikembalikan beserta data peminjamnya.
SELECT b.judul, b.pengarang, a.nama AS peminjam,
       p.tgl_pinjam,
       DATEDIFF(CURDATE(), p.tgl_pinjam) AS lama_hari
FROM   peminjaman p
JOIN   buku b    ON b.id_buku    = p.id_buku
JOIN   anggota a ON a.id_anggota = p.id_anggota
WHERE  p.tgl_kembali IS NULL
ORDER  BY lama_hari DESC;
2. Anggota paling aktif meminjam
Ranking anggota berdasarkan total buku yang pernah dipinjam.
SELECT a.nama, a.email,
       COUNT(p.id_pinjam)   AS total_pinjam,
       SUM(p.denda)         AS total_denda
FROM   anggota a
LEFT JOIN peminjaman p ON p.id_anggota = a.id_anggota
GROUP  BY a.id_anggota
ORDER  BY total_pinjam DESC
LIMIT  10;
3. Buku populer per kategori
Temukan buku yang paling sering dipinjam dalam setiap kategori.
SELECT k.nama_kategori, b.judul,
       COUNT(p.id_pinjam) AS frekuensi
FROM   kategori k
JOIN   buku b       ON b.id_kategori = k.id_kategori
LEFT JOIN peminjaman p ON p.id_buku  = b.id_buku
GROUP  BY k.id_kategori, b.id_buku
ORDER  BY k.nama_kategori, frekuensi DESC;
4. Buku dengan stok kritis (≤ 2)
Identifikasi buku yang perlu pengadaan segera.
SELECT b.isbn, b.judul, b.pengarang,
       b.stok,
       k.nama_kategori
FROM   buku b
JOIN   kategori k ON k.id_kategori = b.id_kategori
WHERE  b.stok <= 2
ORDER  BY b.stok ASC;