Kita telah menempuh dua belas section materi SQLite, mulai dari Pengenalan SQLite hingga SQLite di Produksi. Proyek ini adalah tempat materi inti tersebut dipakai membangun satu database utuh dari nol: katalog perpustakaan untuk satu ruang baca kecil. Seorang pustakawan memakai database ini untuk mencatat koleksi buku beserta rak dan kategorinya, mendaftarkan anggota, mencatat setiap peminjaman, dan menjawab pertanyaan harian seperti “buku apa yang belum kembali?” dan “siapa yang melewati jatuh tempo?”.

Database yang selesai terdiri dari empat berkas SQL yang dibangun bertahap:

  • schema.sql — lima tabel dengan constraint dan aturan foreign key,
  • seed.sql — data awal: empat rak, enam kategori, lima belas judul buku, lima anggota, enam peminjaman,
  • laporan.sql — enam laporan siap baca yang dijalankan dengan satu perintah,
  • optimasi.sql — tujuh index, dua view, dan statistik untuk query planner.

Tampilan Sesi Akhir #

Empat perintah berikut membangun perpustakaan.db dari nol. Setiap berkas mengasumsikan berkas sebelumnya sudah dijalankan:

bash
sqlite3 perpustakaan.db < schema.sql
sqlite3 perpustakaan.db < seed.sql
sqlite3 perpustakaan.db < laporan.sql
sqlite3 perpustakaan.db < optimasi.sql

laporan.sql mencetak enam laporan lengkap yang kita bedah pada Bagian 3. Sesi singkat berikut memperlihatkan keadaan akhir database: satu query pada view, lalu dua pemeriksaan integritas:

text
sqlite> SELECT COUNT(*) AS jumlah_buku FROM buku;
15
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT judul, peminjam, jatuh_tempo FROM v_peminjaman_aktif;
judul   peminjam      jatuh_tempo
------  ------------  -----------
Kosmos  Budi Santoso  2025-06-09 
sqlite> PRAGMA foreign_key_check;
sqlite> PRAGMA integrity_check;
integrity_check
---------------
ok             
sqlite>

Tampilan tersebut ramping, tetapi di baliknya tersimpan keputusan desain yang menjadi inti proyek ini: normalisasi kategori ke tabel terpisah, aturan ON DELETE pada setiap foreign key, laporan berbasis JOIN lintas tiga tabel, serta index yang dibuktikan efeknya lewat EXPLAIN QUERY PLAN.

Tujuan Pembelajaran #

Setelah menyelesaikan proyek ini, kita mampu:

  • menerjemahkan kebutuhan pengguna menjadi lima tabel dengan relasi one-to-many yang tepat,
  • mengunci integritas data dengan NOT NULL, UNIQUE, CHECK, dan foreign key, termasuk memilih aksi ON DELETE,
  • mengisi data secara deterministik dengan INSERT multi-baris di dalam satu transaction,
  • menulis laporan dengan JOIN, GROUP BY, subquery, serta fungsi tanggal julianday() dan date(),
  • memilih index berdasarkan pola akses nyata lalu membuktikan efeknya dengan EXPLAIN QUERY PLAN dan ANALYZE,
  • membungkus query berulang menjadi view supaya pemakai database tidak menulis JOIN panjang berulang kali.

Prasyarat #

Proyek ini tidak memperkenalkan materi baru, melainkan memakai materi yang sudah dibahas. Chapter yang paling sering dirujuk:

  • Membuat Tabel dengan CREATE TABLE serta Constraint pada Tabel — definisi tabel dan penegakan NOT NULL, UNIQUE, dan CHECK,
  • Foreign Key — penegakan per koneksi dan aksi ON DELETE,
  • Memasukkan Data dengan INSERT — pola INSERT satu baris dan banyak baris,
  • Menggabungkan Tabel dengan JOIN serta Operator Lanjutan: IN, BETWEEN, IS NULL — query lintas tabel dan pemeriksaan NULL,
  • Fungsi Agregat dan Mengelompokan Hasil dengan GROUP BY dan HAVING — statistik koleksi,
  • Bekerja dengan Tanggal dan Waktu — aritmetika julianday() dan date(),
  • Index dan Pencarian Cepat, View, serta Menganalisis Query dengan EXPLAIN QUERY PLAN — materi optimasi Bagian 4.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan database yang dapat dipakai penuh:

  1. Bagian 1: Desain Skema — memutuskan lima tabel, kolom-kolomnya, dan constraint-nya, lalu menulis schema.sql dan menguji bahwa penegakannya benar-benar bekerja.
  2. Bagian 2: Data Awal — mengisi seed.sql dengan data perpustakaan yang realistis dan memverifikasi isinya lewat jumlah baris serta pemeriksaan titik.
  3. Bagian 3: Query dan Laporan — menyusun enam laporan harian pustakawan dalam laporan.sql, dari daftar koleksi hingga peminjaman terlambat.
  4. Bagian 4: Index dan View — menambahkan index dan view dalam optimasi.sql, membuktikan efeknya lewat EXPLAIN QUERY PLAN dan ANALYZE, lalu menutup proyek dengan pemeriksaan integritas.

Mulailah dari Bagian 1 dan ikuti urutannya karena setiap bagian dibangun di atas berkas bagian sebelumnya.

Berkas Sumber #

Berkas sumber setiap bagian tersedia pada bagian Berkas Sumber di bawah halaman bagian yang bersangkutan. Daftar berkas bersifat kumulatif: Bagian 2 memuat schema.sql dan seed.sql, Bagian 3 menambahkan laporan.sql, dan Bagian 4 memuat keempat berkas sekaligus — keadaan lengkap proyek pada tahap tersebut. Nama database yang dipakai di seluruh proyek adalah perpustakaan.db.