SeatNumはどのような種類のキーでもありません。座席は座席です。つまり、座席の区別はありません。 「通路座席」や「窓座席」などの概念さえ、座席自体の属性に由来するものではありません。フライト内では、Seatnumの値は一意でなければなりませんが、そのような限定的な一意性は、キーの候補の候補にすることはほとんどできません。
これは練習問題ですので、もう少しコメントを許可してください。あなたのテーブル名は、テーブルに乗客のリストが含まれていますが、ConfirmationNum、FlightNumおよびSeatNumは乗客ではなく、乗客とフライト(または旅行)との多対多の関係を記述していることを示しています。フライトは多数の乗客で構成され、予約番号はフライトの1つまたは複数のレッグの旅行を参照することができます。
のでConfirmationNum、FlightNumとSeatNumが最も論理的にこのような交差点表に記載されていますフィールド:
create table Trip(
ConfirmationNum int not null,
FlightNum int not null
references Flights(ID),
SeatNum int not null,
PassengerNum int not null
references Passengers(ID)
-- Possible other attriutes such as price and departure date
);
乗客テーブルは、フライトや旅行へのフライトから変化しないでしょう乗客のデータで構成されます旅行する。
確認番号は、家族やフットボールのチームが一緒に旅行しているいくつかの異なる乗客を指すことができます。したがって、このテーブルの主キーは、示されているように4つのフィールドすべてからなる複合キーになります。
また、サロゲートキーにはにはビジネス上の意味が適用されてはいけませんが、このルールは広く無視されています。あなたは完全に良い一意の識別子を持っていますので、なぜ「確認番号」や「口座番号」などの多種多様な重要な名前を呼んでください。