Database perpustakaan adalah kumpulan tabel yang menyimpan data buku, anggota, dan transaksi peminjaman di sebuah sistem informasi perpustakaan. Di artikel ini kamu akan lihat contoh database perpustakaan menggunakan MySQL yang terdiri dari 8 tabel, lengkap dengan struktur field, ERD, script SQL, sampai contoh query yang siap kamu pakai langsung.
Contoh database ini cocok kamu jadikan referensi buat tugas kuliah, skripsi, atau bahan belajar sebelum bikin aplikasi perpustakaan sendiri baik berbasis web maupun mobile.
Struktur Database Perpustakaan
Database perpustakaan berikut ini terdiri dari 8 tabel yang saling berelasi, diantaranya ialah :
- user, tabel ini digunakan untuk menyimpan data user atau pengguna aplikasi perpustakaan.
- anggota, tabel ini digunakan untuk menyimpan data anggota perpustakaan.
- buku, tabel ini digunakan untuk menyimpan data buku.
- kategori, tabel ini digunakan untuk mengelola kategori buku.
- penerbit, tabel ini digunakan untuk menyimpan data penerbit buku.
- peminjaman, tabel ini digunakan untuk menyimpan data peminjaman buku yang dilakukan oleh anggota perpustakaan.
- peminjaman_detail, tabel ini digunakan untuk menyimpan data buku dari setiap transaksi dari tabel peminjaman.
- pengembalian, tabel ini digunakan untuk menyimpan data pengembalian buku.
Kenapa dipecah jadi 8 tabel, bukan digabung jadi satu tabel besar ? Dikarenakan ini soal normalisasi. Kalau data buku, kategori, dan penerbit digabung dalam satu tabel, kamu bakal nulis ulang nama kategori dan penerbit yang sama berkali-kali di setiap baris buku. Selain boros storage, risiko datanya nggak konsisten juga lebih besar (misal typo nama penerbit beda-beda di tiap baris). Makanya data itu dipisah, lalu dihubungkan pakai relasi.
Baca Juga : Mengenal DDL, DML dan DCL di MySQL
ERD (Entity Relationship Diagram) Database Perpustakaan
ERD di atas menggambarkan bagaimana kedelapan tabel saling terhubung lewat primary key dan foreign key. Beberapa relasi utamanya:
- buku ? kategori: satu kategori bisa punya banyak buku (one to many), makanya
id_kategorimuncul sebagai foreign key di tabel buku - buku ? penerbit: sama seperti kategori, satu penerbit bisa menerbitkan banyak buku
- peminjaman ? anggota: satu anggota bisa melakukan banyak transaksi peminjaman
- peminjaman ? peminjaman_detail: satu transaksi peminjaman bisa berisi banyak buku, makanya detailnya dipisah ke tabel sendiri (header-detail pattern)
- peminjaman ? pengembalian: satu transaksi peminjaman punya satu record pengembalian saat buku dikembalikan
Pola header-detail (peminjaman dan peminjaman_detail) ini penting kamu pahami karena sering dipakai juga di kasus lain seperti contoh database penjualan, satu transaksi bisa berisi banyak item.
Struktur Tabel & Field
Berikut detail field di masing-masing tabel inti. Kamu bisa sesuaikan tipe data dan panjangnya sesuai kebutuhan aplikasimu.
Tabel kategori
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_kategori | INT, AUTO_INCREMENT | Primary key |
| nama_kategori | VARCHAR(50) | Nama kategori buku, misal Fiksi, Sains, Sejarah |
Tabel penerbit
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_penerbit | INT, AUTO_INCREMENT | Primary key |
| nama_penerbit | VARCHAR(100) | Nama penerbit |
| alamat | VARCHAR(255) | Alamat penerbit |
| telepon | VARCHAR(20) | Nomor telepon penerbit |
Tabel buku
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_buku | INT, AUTO_INCREMENT | Primary key |
| judul | VARCHAR(150) | Judul buku |
| pengarang | VARCHAR(100) | Nama pengarang |
| isbn | VARCHAR(20) | Nomor ISBN buku |
| id_kategori | INT | Foreign key ke tabel kategori |
| id_penerbit | INT | Foreign key ke tabel penerbit |
| tahun_terbit | YEAR | Tahun buku diterbitkan |
| stok | INT | Jumlah eksemplar yang tersedia |
Tabel anggota
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_anggota | INT, AUTO_INCREMENT | Primary key |
| nama | VARCHAR(100) | Nama anggota |
| alamat | VARCHAR(255) | Alamat anggota |
| no_telepon | VARCHAR(20) | Nomor telepon |
| tanggal_daftar | DATE | Tanggal anggota terdaftar |
Tabel peminjaman (header transaksi)
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_peminjaman | INT, AUTO_INCREMENT | Primary key |
| id_anggota | INT | Foreign key ke tabel anggota |
| id_user | INT | Foreign key ke tabel user (petugas yang melayani) |
| tanggal_pinjam | DATE | Tanggal transaksi peminjaman |
| tanggal_jatuh_tempo | DATE | Batas waktu pengembalian |
| status | ENUM(‘dipinjam’,’selesai’) | Status transaksi |
Tabel peminjaman_detail
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_detail | INT, AUTO_INCREMENT | Primary key |
| id_peminjaman | INT | Foreign key ke tabel peminjaman |
| id_buku | INT | Foreign key ke tabel buku |
| jumlah | INT | Jumlah eksemplar yang dipinjam |
Tabel pengembalian
| Field | Tipe Data | Keterangan |
|---|---|---|
| id_pengembalian | INT, AUTO_INCREMENT | Primary key |
| id_peminjaman | INT | Foreign key ke tabel peminjaman |
| tanggal_kembali | DATE | Tanggal buku benar-benar dikembalikan |
| denda | DECIMAL(10,2) | Denda keterlambatan, kalau ada |
Script SQL CREATE TABLE
Berikut script SQL untuk bikin semua tabel di atas. Kamu bisa copy-paste langsung ke phpMyAdmin atau MySQL command line.
CREATE DATABASE IF NOT EXISTS perpustakaan;
USE perpustakaan;
CREATE TABLE kategori (
id_kategori INT AUTO_INCREMENT PRIMARY KEY,
nama_kategori VARCHAR(50) NOT NULL
);
CREATE TABLE penerbit (
id_penerbit INT AUTO_INCREMENT PRIMARY KEY,
nama_penerbit VARCHAR(100) NOT NULL,
alamat VARCHAR(255),
telepon VARCHAR(20)
);
CREATE TABLE buku (
id_buku INT AUTO_INCREMENT PRIMARY KEY,
judul VARCHAR(150) NOT NULL,
pengarang VARCHAR(100),
isbn VARCHAR(20),
id_kategori INT,
id_penerbit INT,
tahun_terbit YEAR,
stok INT DEFAULT 0,
FOREIGN KEY (id_kategori) REFERENCES kategori(id_kategori),
FOREIGN KEY (id_penerbit) REFERENCES penerbit(id_penerbit)
);
CREATE TABLE anggota (
id_anggota INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
alamat VARCHAR(255),
no_telepon VARCHAR(20),
tanggal_daftar DATE
);
CREATE TABLE user (
id_user INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
nama VARCHAR(100),
role ENUM('admin','petugas') DEFAULT 'petugas'
);
CREATE TABLE peminjaman (
id_peminjaman INT AUTO_INCREMENT PRIMARY KEY,
id_anggota INT,
id_user INT,
tanggal_pinjam DATE NOT NULL,
tanggal_jatuh_tempo DATE,
status ENUM('dipinjam','selesai') DEFAULT 'dipinjam',
FOREIGN KEY (id_anggota) REFERENCES anggota(id_anggota),
FOREIGN KEY (id_user) REFERENCES user(id_user)
);
CREATE TABLE peminjaman_detail (
id_detail INT AUTO_INCREMENT PRIMARY KEY,
id_peminjaman INT,
id_buku INT,
jumlah INT DEFAULT 1,
FOREIGN KEY (id_peminjaman) REFERENCES peminjaman(id_peminjaman),
FOREIGN KEY (id_buku) REFERENCES buku(id_buku)
);
CREATE TABLE pengembalian (
id_pengembalian INT AUTO_INCREMENT PRIMARY KEY,
id_peminjaman INT,
tanggal_kembali DATE,
denda DECIMAL(10,2) DEFAULT 0,
FOREIGN KEY (id_peminjaman) REFERENCES peminjaman(id_peminjaman)
);
Contoh Query untuk Database Perpustakaan
Setelah tabelnya jadi, ini beberapa query yang paling sering kamu butuhkan waktu bikin aplikasi perpustakaan.
Cek buku yang masih tersedia (stok lebih dari 0):
SELECT judul, pengarang, stok
FROM buku
WHERE stok > 0;
Tambah transaksi peminjaman baru (header dan detail):
INSERT INTO peminjaman (id_anggota, id_user, tanggal_pinjam, tanggal_jatuh_tempo)
VALUES (1, 1, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 7 DAY));
INSERT INTO peminjaman_detail (id_peminjaman, id_buku, jumlah)
VALUES (LAST_INSERT_ID(), 5, 1);
Gabungkan data buku dengan kategori dan penerbit (JOIN):
SELECT b.judul, b.pengarang, k.nama_kategori, p.nama_penerbit
FROM buku b
JOIN kategori k ON b.id_kategori = k.id_kategori
JOIN penerbit p ON b.id_penerbit = p.id_penerbit;
Laporan jumlah peminjaman per anggota:
SELECT a.nama, COUNT(pm.id_peminjaman) AS total_peminjaman
FROM anggota a
LEFT JOIN peminjaman pm ON a.id_anggota = pm.id_anggota
GROUP BY a.id_anggota, a.nama
ORDER BY total_peminjaman DESC;
Keempat query di atas sudah mencakup skenario paling umum: cek ketersediaan, input transaksi, tampilkan data gabungan, dan bikin laporan. Kamu tinggal sesuaikan nama kolom kalau strukturmu sedikit berbeda.
Download Contoh Database Perpustakaan
Kalau kamu nggak mau ketik ulang semua script di atas, kamu bisa download langsung file .sql-nya. File ini berisi dump database lengkap (struktur tabel + data contoh) yang tinggal kamu import lewat phpMyAdmin atau mysql command line.
Untuk mendownload contoh database perpustakaan silakan klik link download dibawah.
Kamu juga bisa lihat studi kasus lainnya yaitu contoh database penjualan kalau butuh referensi database dengan pola transaksi serupa.
FAQ
Berapa jumlah tabel minimal untuk database perpustakaan ?
Untuk kasus sederhana, minimal 4-5 tabel (buku, anggota, peminjaman, dan tabel pendukung seperti kategori) sudah cukup. Contoh di artikel ini pakai 8 tabel supaya lebih lengkap dan dekat dengan kebutuhan aplikasi nyata.
Apa bedanya tabel peminjaman dan peminjaman_detail ?
Tabel peminjaman menyimpan data header transaksi (siapa yang pinjam, kapan, sama siapa yang melayani). Tabel peminjaman_detail menyimpan buku apa saja yang dipinjam di transaksi itu, karena satu transaksi bisa berisi lebih dari satu buku.
Apakah contoh database ini bisa dipakai untuk skripsi atau tugas akhir ?
Bisa. Kamu bebas memodifikasi struktur tabel dan field sesuai kebutuhan studi kasus di skripsimu, misalnya menambah fitur reservasi atau perpanjangan peminjaman.
Apakah database ini bisa dikembangkan pakai barcode atau ISBN ?
Bisa. Kamu tinggal manfaatkan kolom isbn yang sudah ada di tabel buku sebagai barcode, lalu tambahkan kolom kode unik serupa di tabel anggota kalau mau scan kartu anggota.
Kesimpulan
Contoh database perpustakaan di atas sudah mencakup struktur tabel, ERD, script SQL, sampai query siap pakai yang bisa langsung kamu coba. Cara paling efektif buat memahaminya adalah dengan langsung import filenya, coba jalankan query-query di atas, lalu modifikasi sesuai kebutuhan aplikasimu sendiri.
Selamat belajar dan semoga bermanfaat.











