Una clave externa tiene que apuntar a una clave principal o restricción única. Es normal hacer referencia a la clave principal, porque normalmente desea hacer referencia a una fila individual en otra tabla, y la clave principal es el identificador de una fila de la tabla.
Desde un punto de vista técnico, no importa si una clave externa hace referencia a la clave principal o a otra restricción única, porque en PostgreSQL ambas se implementan de la misma manera, utilizando un índice único.
En cuanto a sus ejemplos concretos, no hay nada de malo en tener el size
único columna de vehicle_size
ser el objetivo de una clave externa, aunque plantea la pregunta de por qué no hizo size
la clave principal y omitir el id
columna en total. No es necesario que cada tabla tenga un id
columna que es la clave primaria numérica generada automáticamente, excepto que puede haber ORM y otro software que espere eso.