Cizí klíč musí cílit na primární klíč nebo jedinečné omezení. Je normální odkazovat na primární klíč, protože obvykle chcete odkazovat na jednotlivý řádek v jiné tabulce a primární klíč je identifikátor řádku tabulky.
Z technického hlediska nezáleží na tom, zda cizí klíč odkazuje na primární klíč nebo jiné jedinečné omezení, protože v PostgreSQL jsou oba implementovány stejným způsobem pomocí jedinečného indexu.
Pokud jde o vaše konkrétní příklady, není nic špatného na jedinečné size
sloupec vehicle_size
být cílem cizího klíče, i když to vyvolává otázku, proč jste neudělali size
primární klíč a vynechat id
sloupec úplně. Není potřeba, aby každá tabulka měla id
sloupec, který je automaticky generovaným číselným primárním klíčem, kromě toho, že mohou existovat ORM a další software, který to očekává.