Kunci asing harus menargetkan kunci utama atau batasan unik. Adalah normal untuk mereferensikan kunci utama, karena Anda biasanya ingin mereferensikan satu baris di tabel lain, dan kunci utama adalah pengidentifikasi baris tabel.
Dari sudut pandang teknis, tidak masalah apakah kunci asing mereferensikan kunci utama atau batasan unik lainnya, karena di PostgreSQL keduanya diimplementasikan dengan cara yang sama, menggunakan indeks unik.
Mengenai contoh konkret Anda, tidak ada yang salah dengan memiliki size
yang unik kolom vehicle_size
menjadi target kunci asing, meskipun itu menimbulkan pertanyaan mengapa Anda tidak membuat size
kunci utama dan hilangkan id
kolom sama sekali. Setiap tabel tidak perlu memiliki id
kolom yang merupakan kunci utama numerik yang dibuat secara otomatis, kecuali bahwa mungkin ada ORM dan perangkat lunak lain yang mengharapkannya.