Внешний ключ для составного ключа - PullRequest
8 голосов
/ 20 декабря 2011

У меня есть проблема, мне нужно связать один внешний ключ с составным ключом в другой таблице.

Моя структура базы данных выглядит следующим образом:

CREATE TABLE available_trip (
trip_code integer not null,
date datetime not null,
primary key(trip_code, date),
FOREIGN KEY (trip_code) REFERENCES trip (trip_code)
);

CREATE TABLE booking (
    available_trip_code integer not null,
    customer_code integer not null,
    date datetime not null,
    deposit float not null,
    total_price float not null,
    has_paid float not null,
    description_en nvarchar(12) null,
    finance_type_code nvarchar(12) not null,
    primary key(available_trip_code, customer_code, date),
    FOREIGN KEY (available_trip_code) REFERENCES available_trip (trip_code, date),


FOREIGN KEY (customer_code) REFERENCES customer (customer_code),
            FOREIGN KEY (finance_type_code) REFERENCES finance_type (finance_type_code)
        );

мой вопрос: какразрешить booking.available_trip_code ссылку на available_trip.trip_code и available_trip.date?

Ответы [ 2 ]

12 голосов
/ 20 декабря 2011

Если вы ссылаетесь на составной первичный ключ, ваш внешний ключ также должен содержать все эти столбцы - поэтому вам нужно что-то вроде:

FOREIGN KEY (available_trip_code, date) 
            REFERENCES available_trip (trip_code, date)

Если у вас еще нет всех этих столбцов в таблице, вам нужно добавить их.

4 голосов
/ 20 декабря 2011
alter table booking add constraint FK_Booking_TripAndDate
    foreign key (available_trip_code,date)
    references available_trip(trip_code, date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...