Kunci asing memberikan integritas referensial. Data dalam kolom kunci asing divalidasi - nilainya hanya boleh salah satu yang sudah ada di tabel &kolom yang ditentukan dalam kunci asing. Ini sangat efektif untuk menghentikan "data buruk" - seseorang tidak dapat memasukkan apa pun yang mereka inginkan - angka, teks ASCII, dll. Ini berarti data dinormalisasi - nilai berulang telah diidentifikasi dan diisolasi ke tabel mereka sendiri, jadi tidak ada masalah lagi tentang berurusan dengan sensitivitas huruf besar-kecil dalam teks... dan nilainya konsisten. Ini mengarah ke bagian selanjutnya - kunci asing adalah apa yang Anda gunakan untuk menggabungkan tabel bersama.
Kueri Anda untuk proyek yang dimiliki pengguna tidak akan berfungsi - Anda mereferensikan kolom dari USERS
tabel ketika tidak ada referensi ke tabel dalam kueri, dan tidak ada subkueri yang digunakan untuk mendapatkan informasi tersebut sebelum menautkannya ke PROJECTS
meja. Apa yang benar-benar Anda gunakan adalah:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'