Itu tidak sepenuhnya diperlukan untuk kueri, itu benar. Itu ada karena beberapa alasan:
- Sebagai batasan di atas meja untuk menghentikan Anda memasukkan sesuatu yang tidak mengarah ke apa pun;
- Sebagai petunjuk untuk pengoptimal; dan
- Untuk alasan historis di mana lebih dibutuhkan.
(1) mungkin yang penting dari ketiganya. Ini disebut integritas referensial . Artinya jika ada nilai dalam foreign key maka akan ada record yang sesuai dengan nilai tersebut sebagai primary key di tabel parent.
Meskipun demikian, tidak semua database mendukung integritas referensial (misalnya tabel MySQL/MyISAM) dan database yang tidak mendukungnya (untuk alasan kinerja).