Materi
Keunikan dalam kerangka Pemerintah Inggris adalah sejauh mana record tidak terduplikasi: satu record untuk setiap entitas yang diwakilinya. Contohnya sekolah dengan 500 siswa yang menyimpan 501 record karena Fred Smith dan Freddy Smith tercatat terpisah, sehingga keunikannya 500/501 atau 99,8%.
Kelas Desain Basis Data sudah membahas cara mencari nilai kunci ganda dengan GROUP BY dan HAVING COUNT(*) > 1. Dalam audit kualitas, temuan itu perlu dipilah lagi. Kunci ganda yang barisnya kembar persis bisa lahir dari pemuatan yang terulang; salinannya bisa dibuang dengan aturan tertulis. Kunci ganda yang isinya berbeda adalah konflik: dua versi fakta untuk satu entitas, dan tidak ada kueri yang tahu versi mana yang benar. Konflik dikembalikan ke pemilik data.
Cara memilahnya: hitung berapa versi isi yang berbeda di dalam setiap kunci ganda, yaitu jumlah baris dari SELECT DISTINCT kolom-kolom isinya. Satu versi berarti kembar, lebih dari satu berarti konflik. Kunci kosong tidak dihitung di sini karena NULL adalah urusan pemeriksaan kelengkapan. Dokumentasi SQLite juga mencatat bahwa di kolom UNIQUE setiap NULL dianggap berbeda dari NULL lain, sehingga batasan UNIQUE tidak pernah menolak NULL ganda.
SELECT isbn, COUNT(*) AS baris
FROM buku
WHERE isbn IS NOT NULL
GROUP BY isbn
HAVING COUNT(*) > 1;
-- versi isi untuk satu isbn
SELECT COUNT(*) FROM (
SELECT DISTINCT judul, penerbit, tahun FROM buku WHERE isbn = '978-602-0000-00-1'
);