Model relasional

Memahami tabel, baris, kunci, dan relasi sebagai fondasi perancangan basis data relasional.

Daftar isi

Topik ini memperkenalkan model relasional sebagai fondasi seluruh pekerjaan di PostgreSQL. Pembahasan mencakup tabel, baris, dan kolom beserta istilah resminya, peran kunci utama dan kunci asing, serta kebiasaan merancang tanpa duplikasi. Sebagai hasil akhir, diagram basis data perpustakaan yang dipakai sepanjang jalur ini akan dapat dibaca dan dijelaskan istilah per istilahnya.

Tabel, baris, dan kolom#

Model relasional menyimpan data dalam relasi, dan istilah sehari-hari untuk relasi adalah tabel. Sebuah tabel terdiri atas baris (row) dan kolom (column), di mana satu baris menyimpan satu fakta lengkap, misalnya satu anggota perpustakaan, sedangkan satu kolom menyimpan satu sifat dari fakta tersebut, misalnya nama atau tanggal bergabung. Dalam literatur formal, baris disebut tuple dan kolom disebut atribut, sehingga kedua pasang istilah ini perlu dikenali ketika membaca dokumentasi.

Setiap kolom memiliki domain, yaitu jenis data yang boleh diisikan padanya. Kolom tahun terbit hanya menerima bilangan, sedangkan kolom judul menerima teks. Aturan domain ini ditegakkan server, bukan disiplin pembaca, sehingga data yang bertipe keliru ditolak sejak awal.

Sifat paling penting yang sering diabaikan adalah ketiadaan urutan pada baris. Sebuah tabel adalah himpunan baris, bukan daftar berurutan, sehingga tidak ada baris pertama atau terakhir tanpa pernyataan eksplisit. Urutan tampilan hanya lahir dari klausa ORDER BY pada query, dan mengandalkan urutan penyimpanan fisik adalah kerentanan desain, bukan fitur.

Kunci utama dan kunci asing#

Kunci utama (primary key) adalah kolom atau gabungan kolom yang membedakan setiap baris dari baris lainnya. Nilainya wajib unik dan tidak boleh kosong, sehingga baris dapat dirujuk dengan pasti. Pada tabel anggota, kunci utama berupa id berupa bilangan yang bertambah, sedangkan email dapat dibuat unik sebagai pelengkap tanpa menjadi kunci utama.

Kunci asing (foreign key) adalah kolom yang menyimpan rujukan ke kunci utama tabel lain. Melalui kunci asing, tabel-tabel terhubung menjadi struktur yang bermakna. Diagram berikut menunjukkan skema perpustakaan yang dipakai sepanjang jalur ini, dengan empat tabel dan arah rujukan kunci asingnya.

kategoriidnamabukuidjudultahunkategori_idanggotaidnamapeminjamanidanggota_idbuku_id
Skema basis data perpustakaan beserta arah kunci asing

Pada diagram tersebut, tabel buku menyimpan kategori_id yang menunjuk kunci utama tabel kategori, sedangkan tabel peminjaman menyimpan anggota_id dan buku_id sekaligus. Satu peminjaman dengan demikian merangkai satu anggota dengan satu buku, dan rincian keduanya tidak pernah disalin ke tabel peminjaman.

Merancang tanpa duplikasi#

Prinsip inti model relasional adalah menyimpan setiap fakta tepat satu kali. Apabila nama kategori disalin ke setiap baris buku, satu penggantian nama menuntut pembaruan pada ratusan baris, dan satu baris yang terlewat langsung menciptakan data yang saling bertentangan. Cara yang benar menyimpan nama kategori satu kali di tabel kategori, sedangkan tabel buku hanya menyimpan id peminjamannya.

Prosedur menyatukan kembali data yang terpisah itu adalah join, yang dibahas lengkap pada modul join. Pada tahap ini cukup dipahami bahwa rancangan tanpa duplikasi selalu dapat disatukan kembali tanpa kehilangan informasi, sedangkan rancangan yang menduplikasi tidak dapat menjamin kesamaan nilai antarsalinannya. Kebiasaan ini disebut normalisasi dalam bentuk paling praktisnya, yaitu memisahkan jenis fakta ke tabel masing-masing dan menghubungkannya dengan kunci.

Kesalahan umum#

Kesalahan pertama adalah menyimpan daftar rujukan di dalam satu kolom, misalnya kolom buku_id berisi teks 1,5,9 pada satu baris peminjaman. Pola ini melumpuhkan kunci asing, memaksa penguraian teks pada setiap query, dan tidak dapat diindeks dengan layak. Relasi banyak-ke-banyak diselesaikan dengan tabel penghubung, bukan dengan daftar berteks.

Kesalahan kedua adalah memberi arti pada urutan baris, misalnya mengandalkan baris teratas sebagai data terbaru. Tanpa kolom waktu dan ORDER BY, klaim tersebut tidak berdiri. Kesalahan ketiga adalah menyalin kolom deskriptif antartabel demi menghindari join, yang memperkenalkan duplikasi persis seperti yang dibahas di atas.

Ringkasan#

  • Tabel menyimpan fakta dalam baris dan kolom bertipe, tanpa urutan intrinsik, dan setiap baris mewakili satu fakta utuh.
  • Kunci utama mengidentifikasi baris secara unik, sedangkan kunci asing menghubungkan tabel-tabel secara pasti.
  • Setiap fakta disimpan tepat satu kali, dan relasi menyatukan kembali data yang terpisah melalui join.
  • Skema perpustakaan dengan empat tabel, yaitu kategori, buku, anggota, dan peminjaman, menjadi dataset utama sepanjang jalur ini.

Referensi#