複合キーは 1 つのテーブルに対しては問題なく機能しますが、テーブル間のリレーションを作成し始めると、少し複雑になることがあります。
2 つのテーブルPerson
とEvent
、および と呼ばれるそれらの間の多対多の関係について考えますAppointment
。
Person
名、姓、および生年月日で構成されるテーブルに複合キーがあり、場所Event
と名前で構成されるテーブルに複合キーがある場合、テーブルに 5 つのフィールドがありAppointment
、関係を識別します。
リレーションをバインドする条件は非常に長くなります。
select Person,*, Event.*
from Person, Event, Appointment
where
Person.FirstName = Appointment.PersonFirstName and
Person.LastName = Appointment.PersonLastName and
Person.BirthDate = Appointment.PersonBirthDate and
Event.Place = Appointment.EventPlace and
Event.Name = Appointment.EventName`.
一方、 および テーブルに自動番号付けされたキーがあるPerson
場合、リレーションを識別するためEvent
にテーブルに必要なフィールドは 2 つだけAppointment
であり、条件ははるかに小さくなります。
select Person,*, Event.*
from Person, Event, Appointment
where
Person.Id = Appointment.PersonId and Event.Id = Appointment.EventId