外部キーは、主キーまたは一意性制約をターゲットにする必要があります。通常、主キーは別のテーブルの個々の行を参照する必要があり、主キーはテーブル行の識別子であるため、通常は主キーを参照します。
技術的な観点からは、外部キーが主キーを参照するか、別の一意の制約を参照するかは問題ではありません。PostgreSQLでは、両方とも一意のインデックスを使用して同じ方法で実装されるためです。
具体的な例としては、一意のsizeを使用しても問題はありません。 vehicle_sizeの列 sizeを作成しなかった理由は疑問ですが、外部キーのターゲットになります。 主キーを選択し、idを省略します 完全に列。各テーブルにidを設定する必要はありません。 自動的に生成される数値の主キーである列。ただし、ORMやその他のソフトウェアがそれを期待している場合があります。