Materi
Bentuk normal kedua menuntut setiap kolom bukan kunci bergantung pada seluruh kunci primer, bukan hanya sebagiannya. Microsoft mencatat aturan ini hanya relevan bila kunci primernya komposit. Contohnya tabel dengan kunci (id_pesanan, id_produk) yang juga menyimpan nama produk: nama produk hanya bergantung pada id_produk, jadi tabelnya melanggar 2NF dan nama produk dipindah ke tabel produk. Dalam istilah OpenStax Introduction to Computer Science, tabel 2NF tidak punya dependensi parsial.
Bentuk normal ketiga menambahkan syarat bahwa kolom bukan kunci tidak saling bergantung; setiap kolom bergantung pada kunci dan tidak pada yang lain. OpenStax menyebutnya tanpa dependensi fungsional transitif. Ujian dari Microsoft: kolom bukan kunci mana pun bisa diubah tanpa memengaruhi kolom lain. Pelanggarannya dipecah dengan cara yang sama, yaitu memindahkan kolom yang bergantung ke tabel yang kuncinya adalah penentunya.
| Tabel | Kunci | Masalah | Pemecahan |
|---|---|---|---|
| pinjam(no_anggota, isbn, tgl, judul) | (no_anggota, isbn) | judul hanya bergantung pada isbn: melanggar 2NF | judul pindah ke buku(isbn, judul) |
| buku(isbn, judul, penerbit, kota_penerbit) | isbn | kota_penerbit bergantung pada penerbit: melanggar 3NF | penerbit(id, nama, kota); buku menyimpan penerbit_id |
Pemecahan yang benar tidak kehilangan informasi: tabel aslinya bisa disusun ulang dengan JOIN kapan saja. Karena itu setiap pemecahan dibuktikan dengan kueri penyusun ulang. Bila rujukannya boleh kosong, pakai LEFT JOIN supaya baris tanpa pasangan tidak hilang dari hasil.
SELECT b.isbn, b.judul, pn.nama, pn.kota
FROM buku b
LEFT JOIN penerbit pn ON pn.id = b.penerbit_id;