2015-09-20 2 views
-2

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

create table Table1 
(Table1ID NVARCHAR(8) NOT NULL, 
... 
PRIMARY KEY (Table1ID)); 

create table Table2 
(Table2ID NVARCHAR2(8) NOT NULL, 
... 
CONSTRAINT Table2ID_Table1ID_PK PRIMARY KEY (Table2ID, Table1ID)); <---- Here 

Во второй таблице я пытаюсь включить первичный ключ в первичный ключ из таблицы1. Нужно ли включать что-то вроде REFERENCES Table1(Table1ID));?

Кроме того, что было бы правильным способом вставить данные в таблицу2 для составного ключа? insert into Table2 values ('101, 1001', ....);?

Cheers.

+0

Поле должно быть в таблице до того, как любое ограничение на столе может включить его! –

+0

Я вижу, так что невозможно наследовать сущность из другой таблицы для использования для составного ключа? – P3rry

+1

Вы должны включить свой rdbms 'Sql Server',' Oracle' и т. Д. Покажите нам, что вы попробовали и какая у вас ошибка. Потому что на первый взгляд выглядят нормально. Пожалуйста, прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask) –

ответ

0

Вы можете использовать внешний ключ в своем составном первичном ключе, но имейте в виду, что вы создадите сопоставление 1 к 1, а таблица B будет зависеть от таблицы A и поэтому для сохранения ссылочной целостности строка/идентификатор в таблице A должен существовать до того, как попытаться вставить в таблицу B, который использует первичный ключ A в качестве внешнего ключа в его первичном ключе, и чтобы отразить этот выбор дизайна. Я добавил в решение предложение ON DELETE.

Без особых изменений вы можете использовать это MySQL-решение, чтобы оно соответствовало вашим DMBS, поскольку вы не указали, что используете.

CREATE TABLE TableA 
(
    id int NOT NULL PRIMARY KEY 
    .. 
); 

CREATE TABLE TableB 
(
    id    int NOT NULL, 
    tableA_id  int NOT NULL, 
    ... 
    FOREIGN KEY (tableA_id) REFERENCES TableA(id) ON DELETE CASCADE, 
    PRIMARY KEY(id, tableA_id) 
); 
Смежные вопросы