ошибка внешнего ключа sql - PullRequest
1 голос
/ 17 октября 2011

Я хочу создать эти две таблицы, но получаю сообщение об ошибке, в котором говорится, что ключи SECTION, на которые ссылаются внешние ключи HOLD, не являются первичными ключами. как видно из запроса, они являются первичными ключами. Как я могу решить эту проблему?

create table SECTION( 
ID integer foreign key references TERM(ID),
CID integer foreign key references COURSE(CID),
SECT integer,
constraint PK_SECTION primary key (ID,CID,SECT),
);

create table HOLD( 
NAME varchar(30) foreign key references INSTRUCTOR(NAME),
ID integer foreign key references SECTION(ID),
CID integer foreign key references SECTION(CID),
SECT integer foreign key references SECTION(SECT),
constraint PK_HOLD primary key (NAME,ID,CID,SECT),
);

Ответы [ 2 ]

5 голосов
/ 17 октября 2011

ID, CID, SECT не являются первичными ключами, все они вместе являются одним первичным ключом (из нескольких атрибутов). Вы должны ссылаться на них так:

CONSTRAINT "HOLD_FK01" FOREIGN KEY ("ID", "CID", "SECT")
      REFERENCES "SECTION" ("ID", "CID", "SECT")
0 голосов
/ 02 января 2014

Используя это утверждение ограничение PK_SECTION первичный ключ (ID, CID, SECT) вы делаете только по первичному ключу и следующим заявлением Целочисленный идентификатор внешнего ключа ссылки TERM (ID) CID целочисленные ссылки на внешние ключи COURSE (CID) вы пытаетесь создать два внешних ключа, но дело в том, что ID и CID не являются первичными ключами, а комбинация - это первичный ключ (ID, CID, SECT)

Чтобы исправить это, вам нужно создать индивидуальный идентификатор первичного ключа и CID

create table SECTION( 
ID integer foreign key references TERM(ID),
CID integer foreign key references COURSE(CID),
SECT integer,
constraint PK_SECTION_ID primary key (ID),
constraint PK_SECTION_SECT primary key (SECT),
constraint PK_SECTION_CID primary key (CID)
);

или

CONSTRAINT "FK" ИНОСТРАННЫЙ КЛЮЧ ("ID", "CID") ССЫЛКИ "РАЗДЕЛ" ("ID", "CID")

...