Contoh Database Perpustakaan MySQL

Contoh Database Perpustakaan MySQL : Struktur, ERD & Query Lengkap

MySQL, Snippets, Tutorial - 10 Jan 2021

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.

Skema ERD Database Perpustakaan

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_kategori muncul 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

FieldTipe DataKeterangan
id_kategoriINT, AUTO_INCREMENTPrimary key
nama_kategoriVARCHAR(50)Nama kategori buku, misal Fiksi, Sains, Sejarah

Tabel penerbit

FieldTipe DataKeterangan
id_penerbitINT, AUTO_INCREMENTPrimary key
nama_penerbitVARCHAR(100)Nama penerbit
alamatVARCHAR(255)Alamat penerbit
teleponVARCHAR(20)Nomor telepon penerbit

Tabel buku

FieldTipe DataKeterangan
id_bukuINT, AUTO_INCREMENTPrimary key
judulVARCHAR(150)Judul buku
pengarangVARCHAR(100)Nama pengarang
isbnVARCHAR(20)Nomor ISBN buku
id_kategoriINTForeign key ke tabel kategori
id_penerbitINTForeign key ke tabel penerbit
tahun_terbitYEARTahun buku diterbitkan
stokINTJumlah eksemplar yang tersedia

Tabel anggota

FieldTipe DataKeterangan
id_anggotaINT, AUTO_INCREMENTPrimary key
namaVARCHAR(100)Nama anggota
alamatVARCHAR(255)Alamat anggota
no_teleponVARCHAR(20)Nomor telepon
tanggal_daftarDATETanggal anggota terdaftar

Tabel peminjaman (header transaksi)

FieldTipe DataKeterangan
id_peminjamanINT, AUTO_INCREMENTPrimary key
id_anggotaINTForeign key ke tabel anggota
id_userINTForeign key ke tabel user (petugas yang melayani)
tanggal_pinjamDATETanggal transaksi peminjaman
tanggal_jatuh_tempoDATEBatas waktu pengembalian
statusENUM(‘dipinjam’,’selesai’)Status transaksi

Tabel peminjaman_detail

FieldTipe DataKeterangan
id_detailINT, AUTO_INCREMENTPrimary key
id_peminjamanINTForeign key ke tabel peminjaman
id_bukuINTForeign key ke tabel buku
jumlahINTJumlah eksemplar yang dipinjam

Tabel pengembalian

FieldTipe DataKeterangan
id_pengembalianINT, AUTO_INCREMENTPrimary key
id_peminjamanINTForeign key ke tabel peminjaman
tanggal_kembaliDATETanggal buku benar-benar dikembalikan
dendaDECIMAL(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.