#sql #oracle
#sql #Oracle
Вопрос:
Я очень новичок в SQL, и я застрял на этом некоторое время.
Три из моих четырех таблиц были созданы, но последняя продолжает выдавать ошибку «нет совпадающего уникального или первичного ключа для этого столбца». Я абсолютно не знаю, как это исправить.
Ниже приведены две таблицы, которые вызывают проблему, ошибка возникает, когда я пытаюсь создать таблицу сеансов.
CREATE TABLE SCREEN(
BRANCHID CHAR(2) NOT NULL,
SCREENID CHAR(2) NOT NULL,
SCREENCAPACITY CHAR(4),
CONSTRAINT SCREEN_PK PRIMARY KEY(SCREENID, BRANCHID),
CONSTRAINT SCREEN_FK1 FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID));
CREATE TABLE SESSIONS(
SESSIONID CHAR(4) NOT NULL,
BRANCHID CHAR(2),
SCREENID CHAR(2),
MOVIEID CHAR(2),
SESSIONDATE DATE,
SESSIONPRICE NUMBER(4,2),
CONSTRAINT SESSIONS_PK PRIMARY KEY(SESSIONID),
CONSTRAINT SESSIONS_FK1 FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID),
CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID) REFERENCES SCREEN(SCREENID),
CONSTRAINT SESSIONS_FK3 FOREIGN KEY(MOVIEID) REFERENCES MOVIE(MOVIEID));
Это начинает расстраивать, поэтому любая помощь будет очень признательна.
Ответ №1:
Ваш внешний ключ SESSIONS_FK2
неверен.
Родительская таблица SCREEN
имеет composite Primary key
so, когда вы ссылаетесь на нее, вам нужно добавить составные столбцы в ссылках
CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID,BRANCHID) REFERENCES SCREEN(SCREENID,BRANCHID)
Также написание этого ответа на основе SQL SERVER
знаний, пожалуйста, прокомментируйте, если он не работает
Ответ №2:
У вас есть составной первичный ключ для screen
, поэтому вы должны ссылаться на него, используя оба компонента:
CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID, BRANCHID) REFERENCES SCREEN(SCREENID, BRANCHID)