Dois Campos na Chave Estrangeira
Puxa vida, estou com um problemão...
Tenho uma tabela Setor, uma tabela Cargo e uma tabela Funcionário.
A tabela Setor tem o campo IDSetor como chave primária.
A tabela Cargo tem os campos IDSetor e IDCargo como chave primária.
O campo IDSetor da tabela Cargo faz chave primária com o campo IDSetor da tabela Setor.
Eu queria que os campos IDSetor e IDCargo da tabela de Funcionários fizessem chave primária com os campos IDSetor e IDCargo da tabela Cargo, mas não consigo.
Eu tentei executar o seguinte código:
Mas o Firebird retorna uma mensagem dizendo que esse comando viola a chave primária da tabela CARGO(idsetor,idcargo):
/*******************************************************************************
The next statement causes the following error:
violation of FOREIGN KEY constraint ´´.
violation of FOREIGN KEY constraint ´PK_CARGO´ on table ´CARGO´.
*******************************************************************************/
Não estou entendendo. Qual é o problema?
Tenho uma tabela Setor, uma tabela Cargo e uma tabela Funcionário.
_________ _________ _________ | | | | | | | SETOR |<--| CARGO |<--|FUNCION. | |_________| |_________| |_________| idsetor idsetor (idsetor) idcargo (idcargo)
A tabela Setor tem o campo IDSetor como chave primária.
A tabela Cargo tem os campos IDSetor e IDCargo como chave primária.
O campo IDSetor da tabela Cargo faz chave primária com o campo IDSetor da tabela Setor.
Eu queria que os campos IDSetor e IDCargo da tabela de Funcionários fizessem chave primária com os campos IDSetor e IDCargo da tabela Cargo, mas não consigo.
Eu tentei executar o seguinte código:
alter table FUNCIONARIO add constraint FK_FUNCIONARIO_1 foreign key (IDSETOR,IDCARGO) references CARGO(IDCARGO,IDSETOR);
Mas o Firebird retorna uma mensagem dizendo que esse comando viola a chave primária da tabela CARGO(idsetor,idcargo):
/*******************************************************************************
The next statement causes the following error:
violation of FOREIGN KEY constraint ´´.
violation of FOREIGN KEY constraint ´PK_CARGO´ on table ´CARGO´.
*******************************************************************************/
Não estou entendendo. Qual é o problema?
Mordred
Curtidas 0
Respostas
Thomaz_prg
13/01/2006
Verifique se os campos idsetor e idcargo da tabela funcionários não estam marcadas para aceitar nulos. Se estiver, deixe estes campos como not null.
GOSTEI 0
Raserafim
13/01/2006
caso na tabela FUncionários tenha algum registro que não tenha na tabela cargos, este erro tb vai ocorrer.
sugestão: apague todos os registros e tente novamente da forma como vc está fazendo. e observe o q o colega falou, q isto tb acontece muito, principalmente quando é alguma alteração na tabela.
sugestão: apague todos os registros e tente novamente da forma como vc está fazendo. e observe o q o colega falou, q isto tb acontece muito, principalmente quando é alguma alteração na tabela.
GOSTEI 0
Xtreme
13/01/2006
alter table FUNCIONARIO add constraint FK_FUNCIONARIO_1 foreign key (IDSETOR,IDCARGO) references CARGO(IDCARGO,IDSETOR);
Vc deve seguir a ordem correta ao que me parece a ordem no teu sql esta invertida, o correto seria assim
alter table FUNCIONARIO add constraint FK_FUNCIONARIO_1 foreign key (IDSETOR,IDCARGO) references CARGO([b]IDSETOR,IDCARGO[/b]);
caso realmente seja isto! Tenta ai e ve se roda!
GOSTEI 0
Mordred
13/01/2006
Não tive tempo de testar as outras soluções, mas a solução do Xtreme funcionou certinho aqui! PQP, onde já se viu trocar a ordem dos campos na chave? Depois dessa eu mereço o troféu abacaxi :P:P:P
Valeu mesmo, galera!
Valeu mesmo, galera!
GOSTEI 0