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)
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
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_anggota | INT | PK | Primary key |
| nama | VARCHAR(100) | Nama lengkap anggota | |
| 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
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| 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
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_kategori | INT | PK | Primary key |
| nama_kategori | VARCHAR(80) | Nama kategori buku | |
| deskripsi | TEXT | Deskripsi kategori |
peminjaman
6 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| 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;
Case Study Lainnya