Merancang basis data
Diperkenalkan| English | Makna |
|---|---|
| relational database/rɪˈleɪʃənl ˈdeɪtəbeɪs/ | basis data relasional |
| tables/ˈteɪblz/ | tabel |
| entities/ˈentɪtiz/ | entitas |
| primary key/ˈpraɪməri kiː/ | kunci utama |
| foreign key/ˈfɒrən kiː/ | kunci asing |
| normalisation/ˌnɔːməlaɪˈzeɪʃn/ | normalisasi |
Satu kursus yang berganti nama kini memiliki dua judul
- Sebuah sekolah menyalin judul mata kuliah ke setiap baris pendaftaran. Mengubah nama beberapa salinan tersebut menyebabkan munculnya dua judul yang saling bertentangan untuk mata kuliah yang sama.
- Database relasional menyimpan baris dalam tabel. Identifikasi terlebih dahulu entitas, seperti siswa dan mata kuliah, serta hubungan di antara mereka.
Pisahkan identitas dari label yang dapat berubah
- Kunci primer mengidentifikasi baris secara unik dan tidak boleh bernilai null. ID siswa yang stabil memungkinkan perubahan nama tanpa mengubah identitas siswa itu sendiri.
- Kunci alami dapat berfungsi jika keunikan dan kestabilannya terjamin. Nama adalah kunci yang buruk karena siswa yang berbeda dapat memiliki nama yang sama; alamat email juga bisa berubah.
Siswa dapat berbagi nama dan mengubah alamat email. Manakah kunci terbaik untuk desain ini?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Pilih identitas yang stabil daripada label yang berulang atau berubah.
Representasikan hubungan banyak-ke-banyak
- Satu siswa dapat mengambil banyak mata kuliah; satu mata kuliah dapat memiliki banyak siswa. Gunakan tabel pendaftaran dengan satu baris untuk setiap pasangan siswa–mata kuliah.
- Kunci asing menghubungkan setiap pendaftaran ke kunci siswa atau mata kuliah yang valid. Kunci primer komposit
(student_id, course_id)mencegah kemunculan pasangan yang sama lebih dari sekali.
Desain mana yang mewakili siswa yang mengambil banyak mata kuliah dan mata kuliah yang memiliki banyak siswa?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Setiap pendaftaran mencatat satu pasangan siswa–mata kuliah.
Jenis kunci apa yang menghubungkan pendaftaran ke kunci mata kuliah yang sudah ada?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Kunci asing merepresentasikan dan membatasi referensi ini ketika penegakan diaktifkan.
Kendala manakah yang mencegah pasangan siswa–matkul muncul dua kali?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Kunci primer komposit mengidentifikasi pasangan tersebut.
Simpan fakta mata kuliah bersama matkulnya
- Normalisasi mengatur tabel berdasarkan ketergantungan mereka untuk mengurangi pengulangan yang tidak konsisten. Dalam desain ini, ID mata kuliah menentukan judulnya, sehingga simpanlah judul tersebut di dalam tabel mata kuliah.
- Nilai kunci asing yang berulang adalah hal yang wajar: banyak pendaftaran dapat merujuk pada satu mata kuliah. Aturan "Jangan pernah mengulang nilai apa pun" bukanlah aturan desain database yang berguna.
Mengulang ID mata kuliah yang sama di beberapa baris pendaftaran selalu merupakan kesalahan normalisasi.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Referensi berulang diharapkan. Menyalin judul mata kuliah ke setiap baris hubungan menciptakan masalah pembaruan di sini.
Aktifkan dan uji batasan (constraints)
- Di SQLite, aktifkan penegakan kunci asing pada setiap koneksi dengan
PRAGMA foreign_keys = ONsebelum pekerjaan dimulai. Deklarasi hubungan saja tidak cukup. - Uji pendaftaran yang valid, pasangan duplikat, dan pendaftaran yang merujuk pada mata kuliah yang hilang. Batasan harus menolak dua kasus terakhir; mereka tidak memutuskan pemanggil mana yang memiliki izin.
PRAGMA foreign_keys = ON;
CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
CREATE TABLE courses (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
CREATE TABLE enrolments (
student_id INTEGER REFERENCES students(id),
course_id INTEGER REFERENCES courses(id),
PRIMARY KEY (student_id, course_id),
CHECK (student_id IS NOT NULL AND course_id IS NOT NULL)
);
Mendeklarasikan kunci asing SQLite berarti kunci tersebut ditegakkan di setiap koneksi tanpa mengaktifkannya.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Aktifkan PRAGMA foreign_keys = ON di setiap koneksi dan verifikasi perilakunya.
Periksa desain terhadap kasus baru
- Untuk peminjaman perpustakaan, judul buku belum tentu merupakan fisik buku yang unik. Identifikasi peminjam, salinan buku, dan peristiwa peminjaman sebelum memilih kunci.
- Tentukan apakah peristiwa berulang diperbolehkan. Pasangan siswa–mata kuliah dapat mengidentifikasi satu pendaftaran di sini, tetapi pasangan peminjam–salinan tidak dapat membedakan peminjaman berulang pada tanggal yang berbeda.
Pilih kunci untuk identitas yang Anda butuhkan. Pisahkan fakta entitas dari baris hubungan, lalu verifikasi keunikan dan batasan referensi dengan kasus konkret.
Usulkan entitas dan kunci untuk perpustakaan di mana peminjam dapat meminjam salinan fisik yang sama lebih dari sekali.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Gunakan ID peminjam, ID salinan, dan identitas peristiwa pinjaman terpisah dengan detail peristiwa yang diperlukan.
Mengapa peminjam–salinan saja tidak cukup sebagai kunci untuk peminjaman berulang?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Kunci harus membedakan peristiwa aktual yang ingin Anda catat.