Klucz obcy musi być skierowany na klucz podstawowy lub ograniczenie przez unikalność. Odwoływanie się do klucza podstawowego jest normalne, ponieważ zazwyczaj chcesz odwoływać się do pojedynczego wiersza w innej tabeli, a klucz podstawowy jest identyfikatorem wiersza tabeli.
Z technicznego punktu widzenia nie ma znaczenia, czy klucz obcy odwołuje się do klucza podstawowego, czy do innego ograniczenia unikalnego, ponieważ w PostgreSQL oba są implementowane w ten sam sposób, przy użyciu unikalnego indeksu.
Jeśli chodzi o Twoje konkretne przykłady, nie ma nic złego w posiadaniu unikalnego size
kolumna vehicle_size
być celem klucza obcego, chociaż nasuwa się pytanie, dlaczego nie utworzyłeś size
klucz podstawowy i pomiń id
kolumna w całości. Nie ma potrzeby, aby każda tabela miała id
kolumna, która jest automatycznie generowanym liczbowym kluczem podstawowym, z wyjątkiem tego, że mogą istnieć ORM i inne oprogramowanie, które tego oczekuje.