Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

Kualitas Data dan Validasi Pipeline

Pelajaran 6 dari 14

Keunikan dan integritas referensial

Rujukan putus dan perlakuan NULL

Setelah pelajaran ini kamu bisa menemukan kunci asing yang tidak punya induk dengan NOT EXISTS, menulis aturan NULL secara eksplisit, dan menjelaskan kenapa NOT IN bisa gagal diam-diam.

±14 menitDiperiksa 7 Okt 2026

Materi

Integritas referensial berarti setiap nilai kunci asing menunjuk ke baris yang benar-benar ada di tabel induk. Dokumentasi foreign key SQLite merumuskannya sebagai syarat untuk setiap baris anak: kolom rujukannya NULL, atau ada baris induk dengan kunci itu. Rumusan itu memuat keputusan penting: secara bawaan NULL dianggap memenuhi rujukan. Apakah NULL sah di data kita, misalnya pembeli tamu tanpa akun, adalah aturan bisnis yang ditulis di kontrak, bukan diserahkan pada perilaku mesin.

Kelas Desain Basis Data memakai LEFT JOIN ... WHERE induk.kunci IS NULL untuk mencari baris yatim. Bentuk lain yang setara adalah NOT EXISTS dengan subkueri berkorelasi. Operator EXISTS hanya menanyakan apakah subkueri menghasilkan baris, sehingga NULL di tabel induk tidak memengaruhinya. Bentuk yang tampak paling sederhana justru berbahaya: kolom NOT IN (SELECT kunci FROM induk). Bila kolom kunci induk memuat satu NULL saja, tabel kebenaran IN di dokumentasi SQLite memberi hasil NULL untuk setiap nilai yang tidak ditemukan, sehingga kuerinya tidak mengembalikan baris apa pun.

Penegakan foreign key di SQLite mati secara bawaan dan harus dinyalakan dengan PRAGMA foreign_keys = ON di setiap koneksi. Data yang masuk sebelum itu tidak pernah diperiksa, jadi audit rujukan tetap dijalankan dengan SELECT.

SELECT k.kirim_id, k.kode_gudang
FROM kiriman k
WHERE k.kode_gudang IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM gudang g WHERE g.kode = k.kode_gudang);

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Kueri WHERE pelanggan_id NOT IN (SELECT pelanggan_id FROM pelanggan) di data Lumbung Tani tidak mengembalikan satu baris pun, padahal ada pesanan yang pelanggannya tidak terdaftar. Kenapa?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke