Een externe sleutel moet een primaire sleutel of een unieke beperking targeten. Het is normaal om naar de primaire sleutel te verwijzen, omdat u doorgaans naar een afzonderlijke rij in een andere tabel wilt verwijzen, en de primaire sleutel is de id van een tabelrij.
Vanuit technisch oogpunt maakt het niet uit of een externe sleutel verwijst naar de primaire sleutel of naar een andere unieke beperking, omdat in PostgreSQL beide op dezelfde manier worden geïmplementeerd, met behulp van een unieke index.
Wat uw concrete voorbeelden betreft, er is niets mis met het hebben van de unieke size
kolom van vehicle_size
het doelwit zijn van een externe sleutel, hoewel het de vraag oproept waarom je geen size
. hebt gemaakt de primaire sleutel en laat de id
. weg kolom helemaal. Het is niet nodig dat elke tafel een id
heeft kolom die de automatisch gegenereerde numerieke primaire sleutel is, behalve dat er mogelijk ORM's en andere software zijn die dat verwachten.