Khóa ngoại phải nhắm mục tiêu khóa chính hoặc ràng buộc duy nhất. Tham chiếu đến khóa chính là điều bình thường vì bạn thường muốn tham chiếu đến một hàng riêng lẻ trong một bảng khác và khóa chính là mã định danh của một hàng trong bảng.
Từ quan điểm kỹ thuật, không quan trọng việc khóa ngoại tham chiếu đến khóa chính hay một ràng buộc duy nhất khác, bởi vì trong PostgreSQL, cả hai đều được triển khai theo cùng một cách, sử dụng một chỉ mục duy nhất.
Đối với các ví dụ cụ thể của bạn, không có gì sai khi có size
duy nhất cột vehicle_size
là mục tiêu của khóa ngoại, mặc dù nó đặt ra câu hỏi tại sao bạn không tạo size
khóa chính và bỏ qua id
cột hoàn toàn. Mỗi bảng không cần phải có id
là khóa chính dạng số được tạo tự động, ngoại trừ việc có thể có ORM và phần mềm khác mong đợi điều đó.