Estou criando uma tabela de tela:
CREATE TABLE SCREEN(
BRANCHID CHAR(2) NOT NULL,
SCREENID CHAR(2) NOT NULL,
SCREENCACPACITY NUMBER(3),
CONSTRAINT SCREEN_PK PRIMARY KEY(BRANCHID, SCREENID),
CONSTRAINT SCREEN_FK FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID));
Mas quando eu crio uma Tabela de Sessões:
CREATE TABLE SESSIONS(
SESSIONID CHAR(4) NOT NULL,
BRANCHID CHAR(2) NOT NULL,
SCREENID CHAR(2) NOT NULL,
MOVIEID CHAR(2) NOT NULL,
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));
Recebo um erro "nenhuma chave única ou primária correspondente para esta lista de colunas". Sei que o erro é com a tabela Screen, pois tentei todas as chaves estrangeiras por conta própria, e a Screen foi a única que me deu o erro. Então, quando tento rodar o script completo, não funciona por causa do Screen.
Branch e Movie Screen foram feitos e são mais ou menos iguais que Screen. Ajuda pl0x
A maioria (senão todos) dos tipos de SQL que suportam chaves estrangeiras irão forçá-lo a apontar a chave estrangeira para a chave primária inteira. No seu caso, a tabela SCREEN tem (BRANCHID, SCREENID) AS PK, mas seu SESSIONS_FK2 FK aponta apenas para SCREENID.
Você deve criar uma chave estrangeira que especifica ambas as colunas. Algo como:
CONSTRAINT FK_SESSION_SCREEN FOREIGN KEY (BRANCHID, SCREENID) REFERENCES SCREEN(BRANCHID, SCREENID)
Outras coisas a considerar:
1) Se você deseja normalização, talvez ramificação e tela devam ser separadas (assim, tendo uma única chave primária de coluna para cada)
2) Nomeie suas restrições com nomes significativos, para que você entenda diretamente o que elas fazem.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras