Menjelang UAS, pencarian contoh soal basis data dan jawabannya melonjak, dan wajar: latihan soal tetap cara tercepat menguji pemahaman sebelum ujian, dibanding sekadar membaca ulang slide. Artikel ini menghimpun soal-soal basis data yang paling sering keluar di ujian mahasiswa sistem informasi dan informatika, lengkap dengan pembahasan langkah demi langkah, bukan sekadar kunci jawaban. Cakupannya: konsep dasar dan istilah, ERD, normalisasi, dan SQL, dari pilihan ganda sampai esai. Soal juga saya sesuaikan dengan gaya ujian Universitas Terbuka yang banyak dicari, di mana porsi analisis kasus cukup besar.
Soal konsep dasar basis data
Soal 1 – pilihan ganda
Kumpulan data yang saling berhubungan dan diorganisir sehingga dapat diakses dengan efisien disebut…
A. File system
B. Basis data
C. Spreadsheet
D. Direktori
Jawaban: B. Kunci pembedanya ada pada kata saling berhubungan dan diakses efisien. File system menyimpan data juga, tetapi tanpa struktur relasi antar data dan mekanisme akses terkontrol seperti index dan query, sehingga tidak memenuhi definisi basis data.
Soal 2 – pilihan ganda
Kelebihan utama basis data dibanding file system dalam menangani data yang sama diakses banyak aplikasi adalah…
A. Ukuran file lebih kecil
B. Menghilangkan redundansi dan inkonsistensi data
C. Tidak perlu backup
D. Semua data otomatis terenkripsi
Jawaban: B. Dengan data tersimpan satu tempat dan diakses lewat satu pintu DBMS, ganda data hilang sehingga tidak ada lagi kasus satu data terupdate di aplikasi A tetapi tidak di aplikasi B. Opsi lain bukan karakteristik otomatis basis data.
Soal 3 – isian singkat
Software yang mengelola basis data, menjembatani user dengan data fisik, contohnya MySQL dan PostgreSQL, disebut…
Jawaban: DBMS (Database Management System). Pada ujian sering keluar istilah berikutnya: orang yang mengatur desain dan struktur disebut database administrator, sedangkan tampilan logis bagi user disebut skema.
Soal ERD dan perancangan
Soal 4 – kasus perpustakaan
Sebuah perpustakaan mencatat peminjaman buku. Satu anggota dapat meminjam banyak buku, satu buku dapat dipinjam banyak anggota pada periode berbeda, dan setiap peminjaman mencatat tanggal pinjam dan tanggal kembali. Gambarkan entitas, relasi, dan kardinalitasnya.
Pembahasan: Entitasnya tiga: anggota, buku, dan peminjaman. Relasi anggota ke buku adalah many to many karena satu anggota banyak buku dan satu buku banyak anggota. Aturan emasnya: many to many selalu dipecah dengan entitas penghubung, sehingga muncul entitas peminjaman_detail. Hasil akhirnya: anggota satu-ke-banyak ke peminjaman, peminjaman satu-ke-banyak ke peminjaman_detail, dan buku satu-ke-banyak ke peminjaman_detail. Atribut tanggal pinjam dan tanggal kembali menempel di peminjaman, bukan di anggota atau buku, karena keduanya milik peristiwa meminjam.
Soal 5 – menentukan primary key
Dari tabel mahasiswa dengan kolom nama, NIM, tanggal_lahir, dan email, manakah yang paling tepat jadi primary key dan mengapa?
Pembahasan: NIM. Syarat primary key: unik, tidak null, dan stabil. Nama bisa kembar dan bisa berubah. Tanggal lahir jelas bisa kembar. Email unik tetapi bisa berubah seumur hidup dan formatnya dikontrol pihak luar seperti penyedia email. NIM terjamin unik oleh institusi dan tidak berubah, memenuhi tiga syarat sekaligus.
Soal normalisasi
Soal 6 – deteksi 1NF
Tabel pesanan berisi kolom id, tanggal, dan daftar_barang yang isinya berupa teks seperti “buku x2, pulpen x3”. Apakah tabel ini sudah 1NF? Jelaskan dan perbaiki.
Pembahasan: Belum. Pelanggarannya: kolom daftar_barang tidak atomic, satu sel memuat banyak nilai sehingga disebut repeating group. Perbaikannya pecah jadi tabel pesanan dan pesanan_detail dengan satu baris per item: id, pesanan_id, barang_id, qty. Setelah dipecah, setiap sel berisi tepat satu nilai dan tabel lulus 1NF.
Soal 7 – normalisasi ke 3NF
Tabel nilai: nim, nama_mahasiswa, nama_matkul, sks, nilai. Diketahui nama_matkul menentukan sks. Normalisasikan hingga 3NF.
Pembahasan: Ada dua masalah. Pertama, mahasiswa dan mata kuliah adalah entitas berbeda yang digabung dalam satu tabel, menimbulkan redundansi: mata kuliah yang sama dengan sks sama terulang di ribuan baris nilai. Kedua, sks bergantung pada nama_matkul, bukan pada kombinasi nim dan nama_matkul; ini pelanggaran ketergantungan transitif terhadap kunci. Solusi 3NF: pecah jadi tiga tabel: mahasiswa (nim, nama), mata_kuliah (kode_matkul, nama, sks), dan nilai (nim, kode_matkul, nilai) dengan dua foreign key. Sekarang sks tersimpan sekali di tabel mata kuliah dan perubahan sks cukup di satu tempat.
Soal SQL
Soal 8 – SELECT dasar dengan filter
Tampilkan nama dan harga semua barang dengan stok di bawah 10, urut dari stok paling sedikit.
SELECT nama, harga, stok
FROM barang
WHERE stok < 10
ORDER BY stok ASC;
Pembahasan singkat: WHERE menyaring sebelum data dikembalikan, ORDER BY mengatur urutan hasil. Kesalahan umum adalah menaruh kondisi stok di HAVING, yang hanya berlaku untuk agregasi.
Soal 9 – agregasi dan GROUP BY
Dari tabel penjualan (id, tanggal, pelanggan_id, total), tampilkan total omzet per pelanggan, hanya pelanggan dengan omzet di atas 1 juta.
SELECT pelanggan_id, SUM(total) AS omzet
FROM penjualan
GROUP BY pelanggan_id
HAVING SUM(total) > 1000000;
Pembahasan: SUM menjumlahkan per kelompok yang dibentuk GROUP BY. Filter hasil agregasi harus pakai HAVING, bukan WHERE, karena WHERE dievaluasi sebelum pengelompokan terjadi. Urutan penulisan klausa yang benar: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
Soal 10 – JOIN dua tabel
Tampilkan nama pelanggan dan jumlah transaksinya pada tahun 2026, untuk pelanggan yang pernah bertransaksi.
SELECT p.nama, COUNT(s.id) AS jumlah_transaksi
FROM pelanggan p
JOIN penjualan s ON s.pelanggan_id = p.id
WHERE YEAR(s.tanggal) = 2026
GROUP BY p.id, p.nama;
Pembahasan: JOIN menggabungkan berdasarkan kunci pelanggan_id yang cocok dengan id. INNER JOIN dipilih karena soal meminta hanya pelanggan yang pernah bertransaksi; kalau semua pelanggan tetap ingin tampil termasuk yang belum pernah, ganti ke LEFT JOIN dan hitung dengan COUNT(s.id) yang otomatis nol bagi yang tanpa pasangan.
Soal 11 – esai analisis kasus ala UT
Sebuah klinik menyimpan data dalam satu tabel: kode_kunjungan, tanggal, nama_pasien, umur, nama_dokter, spesialisasi_dokter, obat_yang_diberikan, biaya_kunjungan, total_bayar. Analisislah masalahnya dan usulkan struktur basis data yang tepat.
Pembahasan: Tabel tersebut melanggar hampir semua bentuk normal. Obat yang diberikan adalah repeating group karena satu kunjungan bisa berisi banyak obat. Data pasien dan dokter redundan di setiap kunjungan, dan spesialisasi bergantung pada dokter, bukan kunjungan: ketergantungan transitif. Struktur yang diusulkan: tabel pasien (id, nama, umur), tabel dokter (id, nama, spesialisasi), tabel kunjungan (id, tanggal, pasien_id, dokter_id, biaya, total), dan tabel kunjungan_obat (kunjungan_id, obat_id, dosis) sebagai penghubung many to many antara kunjungan dan tabel obat. Dengan struktur ini riwayat pasien dan jadwal dokter bisa di-query tanpa duplikasi data.
Strategi mengerjakan soal basis data di ujian
Tiga kebiasaan yang menaikkan nilai ujian basis data. Pertama, saat soal normalisasi, selalu tulis kunci tabelnya dulu dan tanyakan pada diri sendiri: kolom mana yang bergantung pada kunci penuh, dan mana yang hanya pada sebagian kunci. Pertanyaan tunggal itu menjawab 1NF sampai 3NF sekaligus. Kedua, saat soal ERD, jangan mulai menggambar; mulai dari mendaftar entitas dan relasinya dalam teks dulu, baru konversi ke diagram, supaya revisi murah. Ketiga, saat soal SQL, baca klausa yang diminta dari soal: kata hanya menunjukkan WHERE atau HAVING, kata per menunjukkan GROUP BY, dan kata tampilkan semua menandakan perlu LEFT JOIN.
Untuk pendalaman tiap topik, artikel saya tentang contoh ERD penjualan lengkap dengan normalisasi membahas proses desain dari cerita kasus sampai skema final, dan bisa jadi bacaan berikutnya setelah Anda selesai mencoba semua soal di atas.