Ein Fremdschlüssel muss auf einen Primärschlüssel oder eine eindeutige Einschränkung abzielen. Es ist normal, auf den Primärschlüssel zu verweisen, da Sie normalerweise auf eine einzelne Zeile in einer anderen Tabelle verweisen möchten und der Primärschlüssel der Bezeichner einer Tabellenzeile ist.
Aus technischer Sicht spielt es keine Rolle, ob ein Fremdschlüssel auf den Primärschlüssel oder eine andere eindeutige Einschränkung verweist, da beides in PostgreSQL auf die gleiche Weise implementiert ist, indem ein eindeutiger Index verwendet wird.
Was Ihre konkreten Beispiele betrifft, ist nichts falsch daran, die eindeutige size
zu haben Spalte vehicle_size
das Ziel eines Fremdschlüssels sein, obwohl es die Frage aufwirft, warum Sie size
nicht gemacht haben den Primärschlüssel und lassen Sie die id
weg Spalte überhaupt. Es ist nicht erforderlich, dass jede Tabelle eine id
hat Spalte, die der automatisch generierte numerische Primärschlüssel ist, außer dass es möglicherweise ORMs und andere Software gibt, die dies erwarten.