navigasi pertemuan

berlangsung | pertemuan 16


















Merancang Database Perpustakaan Mini

profile Al Muhdil Karim user avater image
Al Muhdil Karim
10 min red
September 24, 2025
Merancang Database Perpustakaan Mini

Modul 1 – Merancang Database Perpustakaan Mini (Final)

Pendahuluan

Perancangan database merupakan langkah krusial dalam membangun sistem informasi perpustakaan karena menentukan bagaimana data akan disimpan, dikelola, dan dihubungkan. Tanpa rancangan yang tepat, sistem akan sulit dikembangkan dan rawan mengalami inkonsistensi data. Dalam konteks proyek mini ini, kita akan menyelesaikan rancangan final database yang mengintegrasikan seluruh tabel inti perpustakaan. Database ini mencakup tabel anggota, buku, pinjaman, detail pinjam, dan user. Dengan pendekatan sistematis, rancangan final akan menjadi fondasi yang kokoh untuk praktik-praktik selanjutnya.

Rancangan database bukan hanya sekadar membuat tabel, melainkan juga merancang hubungan antar entitas. Misalnya, relasi antara tabel anggota dan pinjaman mencerminkan siapa yang melakukan peminjaman. Demikian pula, relasi antara pinjaman dan detail_pinjam menggambarkan buku apa saja yang dipinjam. Jika relasi ini tidak dirancang dengan baik, informasi tentang pinjaman bisa menjadi terpecah dan tidak konsisten. Oleh karena itu, memahami logika hubungan antar tabel sangat penting untuk menjaga integritas data.

Selain hubungan antar entitas, pemilihan tipe data juga berperan penting. Tipe data yang sesuai memastikan penyimpanan yang efisien dan validasi otomatis oleh sistem. Misalnya, tanggal peminjaman harus menggunakan DATE agar bisa diproses dengan fungsi waktu. Jika salah memilih tipe data, misalnya menyimpan tanggal sebagai VARCHAR, maka query laporan bulanan akan sulit dibuat. Inilah contoh kesalahan desain yang dapat dihindari dengan perancangan yang matang.

Dalam proyek mini ini, kita juga akan menggunakan konsep kunci primer dan kunci asing. Kunci primer menjamin keunikan data pada tiap tabel, sementara kunci asing menjaga konsistensi antar tabel. Misalnya, id_anggota pada tabel pinjaman harus merujuk pada id_anggota di tabel anggota. Dengan demikian, tidak mungkin ada data pinjaman yang dibuat untuk anggota yang tidak terdaftar. Hal ini menciptakan database yang terstruktur dan bebas dari inkonsistensi.

Rancangan akhir yang baik juga mempertimbangkan kebutuhan masa depan. Meskipun sistem perpustakaan mini ini sederhana, rancangan tetap harus fleksibel agar bisa dikembangkan lebih lanjut. Misalnya, penambahan fitur denda, laporan keterlambatan, atau notifikasi bisa dilakukan tanpa mengubah struktur inti secara drastis. Dengan begitu, proyek mini ini tidak hanya menjadi latihan praktis, tetapi juga simulasi nyata bagaimana database harus dirancang untuk keberlanjutan.


Langkah-langkah Praktik

Mari kita coba membangun database final perpustakaan mini dengan tabel inti yang sudah dirancang. Pertama, kita buat database baru agar terpisah dari latihan sebelumnya. Jalankan perintah berikut di MariaDB:

CREATE DATABASE perpustakaan_mini;
USE perpustakaan_mini;

Selanjutnya, buat tabel anggota yang menyimpan informasi dasar pengguna perpustakaan. Pastikan ada kunci primer untuk membedakan setiap anggota.

CREATE TABLE anggota (
    id_anggota INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL,
    alamat VARCHAR(200),
    no_telp VARCHAR(20),
    email VARCHAR(100)
);

Kemudian, kita buat tabel buku yang berisi data koleksi perpustakaan. Tabel ini harus memiliki kolom yang cukup untuk mendeskripsikan buku dengan baik.

CREATE TABLE buku (
    id_buku INT AUTO_INCREMENT PRIMARY KEY,
    judul VARCHAR(200) NOT NULL,
    pengarang VARCHAR(100),
    penerbit VARCHAR(100),
    tahun_terbit YEAR,
    stok INT DEFAULT 0
);

Sekarang mari buat tabel pinjaman dan detail_pinjam. Tabel pinjaman menyimpan data transaksi peminjaman, sedangkan detail_pinjam menyimpan daftar buku yang dipinjam.

CREATE TABLE pinjaman (
    id_pinjaman INT AUTO_INCREMENT PRIMARY KEY,
    id_anggota INT,
    tgl_pinjam DATE,
    tgl_kembali DATE,
    FOREIGN KEY (id_anggota) REFERENCES anggota(id_anggota)
);

CREATE TABLE detail_pinjam (
    id_detail INT AUTO_INCREMENT PRIMARY KEY,
    id_pinjaman INT,
    id_buku INT,
    jumlah INT DEFAULT 1,
    FOREIGN KEY (id_pinjaman) REFERENCES pinjaman(id_pinjaman),
    FOREIGN KEY (id_buku) REFERENCES buku(id_buku)
);

Terakhir, kita buat tabel user untuk membedakan admin dan anggota yang mengakses sistem.

CREATE TABLE user (
    id_user INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password VARCHAR(100) NOT NULL,
    role ENUM('admin','anggota') NOT NULL
);

Kerja bagus! Sekarang Anda sudah memiliki struktur database final yang siap digunakan untuk seluruh latihan berikutnya.


Kesalahan Umum

1. Tidak Menentukan Kunci Primer

❌ SQL salah:

CREATE TABLE anggota (
    id_anggota INT,
    nama VARCHAR(100)
);

Tanpa kunci primer, tabel tidak bisa menjamin keunikan setiap baris data. Akibatnya, bisa saja ada dua anggota dengan id_anggota sama sehingga menimbulkan kebingungan pada saat peminjaman. Dalam literatur basis data, praktik ini disebut sebagai data redundancy yang memperburuk integritas sistem (Elmasri & Navathe, 2016). Pengguna harus selalu memastikan setiap tabel memiliki kunci primer yang konsisten.

Ketika tidak ada kunci primer, relasi antar tabel pun menjadi tidak valid. Misalnya, jika pinjaman mengacu pada id_anggota, tetapi tabel anggota tidak punya kunci unik, maka sistem tidak tahu baris mana yang menjadi acuan. Ini akan mengacaukan laporan pinjaman. Oleh karena itu, kunci primer adalah fondasi utama dalam setiap desain tabel.


2. Salah Menentukan Tipe Data

❌ SQL salah:

CREATE TABLE buku (
    id_buku INT PRIMARY KEY,
    judul TEXT,
    tahun_terbit VARCHAR(10)
);

Menggunakan VARCHAR untuk tahun terbit adalah kesalahan umum. Seharusnya menggunakan YEAR agar data lebih mudah diproses dalam query. Dengan VARCHAR, pengguna bisa saja memasukkan teks seperti “tahun depan” yang tidak valid. Hal ini melanggar prinsip validasi otomatis yang diberikan oleh DBMS.

Kesalahan tipe data juga menyebabkan kesulitan dalam membuat laporan statistik. Misalnya, menghitung jumlah buku per tahun akan lebih sulit jika kolom berisi string campuran. Maka dari itu, pemilihan tipe data yang tepat adalah langkah wajib agar sistem bekerja secara konsisten.


3. Tidak Membuat Foreign Key

❌ SQL salah:

CREATE TABLE pinjaman (
    id_pinjaman INT PRIMARY KEY,
    id_anggota INT,
    tgl_pinjam DATE
);

Tanpa foreign key, sistem tidak tahu apakah id_anggota benar-benar ada di tabel anggota. Akibatnya, bisa saja muncul data pinjaman untuk anggota fiktif. Hal ini menimbulkan orphan record yang merusak integritas database. Dalam literatur, hal ini sering disebut sebagai referential integrity violation.

Foreign key berfungsi sebagai “pengikat” antar tabel agar data tetap konsisten. Jadi, selalu pastikan setiap kolom relasional memiliki constraint yang sesuai.


4. Lupa Menentukan Default Value

❌ SQL salah:

CREATE TABLE buku (
    id_buku INT PRIMARY KEY,
    judul VARCHAR(200),
    stok INT
);

Jika kolom stok tidak memiliki nilai default, maka data buku baru bisa saja tersimpan dengan stok kosong. Hal ini menyulitkan pustakawan karena stok seharusnya minimal 0. Kesalahan ini bisa menyebabkan salah hitung ketika laporan inventaris dibuat.

Memberikan nilai default mencegah data kosong (null value) yang bisa mengacaukan hasil query. Oleh sebab itu, selalu tetapkan default yang logis pada setiap atribut yang membutuhkannya.


5. Mengabaikan Normalisasi

❌ SQL salah:

CREATE TABLE anggota (
    id_anggota INT PRIMARY KEY,
    nama VARCHAR(100),
    alamat VARCHAR(200),
    daftar_buku_pinjam VARCHAR(500)
);

Menyimpan daftar buku pinjaman langsung dalam satu kolom VARCHAR adalah contoh pelanggaran normalisasi. Hal ini membuat query menjadi sulit, misalnya menghitung jumlah buku pinjaman per anggota. Kesalahan seperti ini menimbulkan duplikasi data dan inkonsistensi yang parah.

Normalisasi memastikan data disimpan dalam struktur tabel terpisah sehingga mudah dikelola. Oleh karena itu, atribut seperti “daftar buku pinjam” seharusnya ditempatkan di tabel detail_pinjam.


Baik, saya lanjutkan ke bagian Best Practice untuk Modul 1 – Merancang Database Perpustakaan Mini (Final).


Best Practice

1. Selalu Gunakan Kunci Primer

✅ SQL benar:

CREATE TABLE anggota (
    id_anggota INT AUTO_INCREMENT PRIMARY KEY,
    nama VARCHAR(100) NOT NULL
);

Menentukan kunci primer sangat penting untuk memastikan setiap baris data unik. Dengan AUTO_INCREMENT, sistem otomatis menghasilkan ID baru tanpa risiko duplikasi. Hal ini memudahkan pustakawan ketika mencari data anggota berdasarkan ID. Selain itu, keberadaan kunci primer memperkuat integritas database sebagaimana disarankan oleh Connolly & Begg (2015).

Dengan praktik ini, relasi antar tabel menjadi lebih aman dan jelas. Tidak akan ada kebingungan saat tabel lain melakukan referensi. Hasilnya, query laporan atau pencarian data menjadi lebih efisien dan konsisten.


2. Pilih Tipe Data yang Tepat

✅ SQL benar:

CREATE TABLE buku (
    id_buku INT AUTO_INCREMENT PRIMARY KEY,
    judul VARCHAR(200) NOT NULL,
    tahun_terbit YEAR
);

Menggunakan YEAR untuk tahun terbit membuat data lebih valid dan siap diproses dalam query. DBMS akan menolak input yang tidak sesuai format, misalnya string “202X”. Dengan demikian, kualitas data terjaga secara otomatis. Hal ini sesuai dengan prinsip data integrity yang ditekankan dalam praktik basis data modern.

Selain itu, penggunaan tipe data yang tepat mempercepat eksekusi query. Fungsi agregasi dan filter waktu akan berjalan lebih efisien dibandingkan jika menggunakan teks. Dengan kata lain, pemilihan tipe data adalah bentuk optimasi sejak awal.


3. Gunakan Foreign Key untuk Menjaga Relasi

✅ SQL benar:

CREATE TABLE pinjaman (
    id_pinjaman INT AUTO_INCREMENT PRIMARY KEY,
    id_anggota INT,
    tgl_pinjam DATE,
    FOREIGN KEY (id_anggota) REFERENCES anggota(id_anggota)
);

Menambahkan foreign key memastikan bahwa setiap pinjaman pasti terkait dengan anggota yang valid. Dengan begitu, tidak ada data pinjaman yatim (orphan record). Praktik ini menjaga integritas relasional sebagaimana ditekankan dalam teori referential integrity.

Selain itu, foreign key memudahkan proses cascade update atau delete. Misalnya, jika data anggota dihapus, maka pinjamannya juga bisa dihapus otomatis jika aturan cascade ditetapkan. Hal ini membuat pengelolaan data lebih praktis.


4. Gunakan Default Value yang Logis

✅ SQL benar:

CREATE TABLE buku (
    id_buku INT AUTO_INCREMENT PRIMARY KEY,
    judul VARCHAR(200) NOT NULL,
    stok INT DEFAULT 0
);

Memberikan nilai default pada kolom stok memastikan data baru selalu valid. Misalnya, jika pustakawan menambahkan entri buku baru tetapi lupa mengisi stok, maka nilainya otomatis 0. Hal ini mencegah munculnya nilai NULL yang membingungkan.

Praktik ini mengikuti prinsip fail-safe design, yaitu sistem tetap memberikan hasil yang aman meskipun ada kesalahan pengguna. Dengan demikian, kualitas data tetap konsisten tanpa perlu intervensi manual berulang kali.


5. Terapkan Normalisasi Sejak Awal

✅ SQL benar:

CREATE TABLE detail_pinjam (
    id_detail INT AUTO_INCREMENT PRIMARY KEY,
    id_pinjaman INT,
    id_buku INT,
    FOREIGN KEY (id_pinjaman) REFERENCES pinjaman(id_pinjaman),
    FOREIGN KEY (id_buku) REFERENCES buku(id_buku)
);

Dengan normalisasi, informasi tentang peminjaman buku dipisahkan ke tabel detail_pinjam. Hal ini membuat data lebih terstruktur dan mudah dikelola. Misalnya, menghitung jumlah buku yang dipinjam per anggota dapat dilakukan dengan query sederhana.

Normalisasi adalah standar internasional dalam desain database (Date, 2004). Dengan menerapkannya sejak awal, sistem perpustakaan mini akan lebih mudah dikembangkan di masa depan.


Baik, saya lanjutkan ke bagian Studi Kasus untuk Modul 1 – Merancang Database Perpustakaan Mini (Final).


Studi Kasus

Mari kita coba sebuah studi kasus nyata untuk menguji rancangan database perpustakaan mini. Misalnya, sebuah perpustakaan sekolah ingin mencatat transaksi peminjaman buku oleh siswa. Database yang kita buat harus mampu menyimpan informasi anggota, buku, pinjaman, dan detail pinjaman dengan relasi yang konsisten. Dengan cara ini, pustakawan bisa membuat laporan yang akurat kapan saja dibutuhkan.

Pertama, kita tambahkan data contoh ke tabel anggota dan buku. Data ini mewakili koleksi dasar perpustakaan dan siswa yang terdaftar. Jalankan query berikut:

INSERT INTO anggota (nama, alamat, no_telp, email)
VALUES 
('Andi Wijaya', 'Jl. Melati 10', '08123456789', '[email protected]'),
('Siti Aminah', 'Jl. Mawar 5', '08234567890', '[email protected]');

INSERT INTO buku (judul, pengarang, penerbit, tahun_terbit, stok)
VALUES 
('Database Fundamentals', 'R. Elmasri', 'Pearson', 2016, 5),
('Pemrograman SQL', 'A. Nugroho', 'Informatika', 2020, 3);

Selanjutnya, kita buat transaksi peminjaman. Anggota dengan id_anggota = 1 (Andi Wijaya) meminjam buku pertama. Transaksi dicatat dalam tabel pinjaman dan detail_pinjam.

INSERT INTO pinjaman (id_anggota, tgl_pinjam, tgl_kembali)
VALUES (1, '2025-09-01', '2025-09-15');

INSERT INTO detail_pinjam (id_pinjaman, id_buku, jumlah)
VALUES (1, 1, 1);

Dengan rancangan ini, pustakawan bisa langsung mengetahui siapa yang meminjam buku, judul buku yang dipinjam, serta periode peminjaman. Mari kita buktikan dengan query gabungan:

SELECT a.nama, b.judul, p.tgl_pinjam, p.tgl_kembali
FROM anggota a
JOIN pinjaman p ON a.id_anggota = p.id_anggota
JOIN detail_pinjam d ON p.id_pinjaman = d.id_pinjaman
JOIN buku b ON d.id_buku = b.id_buku;

Hasil query akan menampilkan daftar anggota beserta judul buku yang mereka pinjam. Kerja bagus! Database Anda sekarang sudah siap untuk mendukung kebutuhan perpustakaan mini dengan data yang konsisten dan mudah diakses.


Baik, saya lanjutkan ke bagian Kesimpulan untuk Modul 1 – Merancang Database Perpustakaan Mini (Final).


Kesimpulan

Perancangan database perpustakaan mini yang kita lakukan pada modul ini menunjukkan pentingnya struktur yang baik dalam sistem informasi. Dengan membangun tabel inti seperti anggota, buku, pinjaman, detail_pinjam, dan user, kita telah memastikan data tersimpan secara rapi dan terhubung melalui relasi yang jelas. Praktik penggunaan kunci primer, foreign key, tipe data yang tepat, nilai default, dan normalisasi membantu menjaga integritas serta konsistensi data. Selain itu, studi kasus yang kita uji membuktikan bahwa rancangan ini mampu menghasilkan informasi yang relevan dan dapat diandalkan. Dengan demikian, database final ini menjadi fondasi kokoh untuk latihan-latihan berikutnya dan siap dikembangkan lebih lanjut sesuai kebutuhan nyata.

Baik, saya lengkapi dengan bagian Referensi untuk Modul 1 – Merancang Database Perpustakaan Mini (Final).


Referensi

  • Connolly, T., & Begg, C. (2015). Database Systems: A Practical Approach to Design, Implementation, and Management (6th ed.). Pearson Education.
  • Date, C. J. (2004). An Introduction to Database Systems (8th ed.). Addison-Wesley.
  • Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
  • Coronel, C., & Morris, S. (2017). Database Systems: Design, Implementation, and Management (12th ed.). Cengage Learning.
  • Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill Education.

mulai diskusi

peraturan

Login menggunakan akun telegram untuk memulai diskusi.

Gunakan bahasa yang sopan, baik dan benar

Dilarang menggunakan perkataan yang mengandung unsur pelecehan, cacian dan merendahkan aggota forum lain.

Dilarang memulai pembicaraan yang keluar dari topik pembahasan.

pegaduan

panduan

Login menggunakan akun Github untuk mengajukan report.

Gunakan kalimat deskriptif yang jelas terkait kendala yang dihadapi dalam pengajuan report

Upload gambar screenshoot terkait report untuk membantu kami dalam penanganan report

Progress penanganan report dapat di monitoring pada halaman github course.

latihan

berikut ini adalah aktivitas latihan untuk modul Merancang Database Perpustakaan Mini

penugasan

aktivitas penugasan dan penilaian untuk modul Merancang Database Perpustakaan Mini