Uma chave estrangeira deve ter como alvo uma chave primária ou restrição exclusiva. É normal fazer referência à chave primária, porque normalmente você deseja fazer referência a uma linha individual em outra tabela, e a chave primária é o identificador de uma linha da tabela.
Do ponto de vista técnico, não importa se uma chave estrangeira referencia a chave primária ou outra restrição única, pois no PostgreSQL ambas são implementadas da mesma forma, usando um índice único.
Quanto aos seus exemplos concretos, não há nada de errado em ter o exclusivo
size
coluna de vehicle_size
ser o alvo de uma chave estrangeira, embora levante a questão de por que você não fez size
a chave primária e omitir o id
coluna por completo. Não há necessidade de cada tabela ter um id
coluna que é a chave primária numérica gerada automaticamente, exceto que pode haver ORMs e outros softwares que esperam isso.