Coluna referenciada

PostgreSQL

24/06/2013

Galera a situação é a seguinte, eu tenho duas tabelas. Uma que se origina de um relacionamento N..N (tabela A) e outra que recebe referencia da tabela N..N (tabela B). Como eu faço para a minha segunda tabela (tabela B) receber as chaves compostas da tabela A?

Depois da tabela criada eu tento passar as chaves através do comando "alter"...

  ALTER TABLE tabelaB
    ADD constraint fk_codAluno FOREIGN KEY(codAluno) REFERENCES tabelaA(codAluno);

  ALTER TABLE tabelaB
    ADD constraint fk_codProf FOREIGN KEY(codProf) REFERENCES tabelaA(codProfissional);


...mas o seguinte erro aparece no momento que eu executo o primeiro ALTER TABLE:

não há restrição de unicidade que corresponde com as colunas informadas na tabela referenciada "tabelaA"
Marcus Almeida

Marcus Almeida

Curtidas 0

Respostas

Marcelo Senaga

Marcelo Senaga

24/06/2013

Como está declarada a tabela A?
GOSTEI 0
Marcus Almeida

Marcus Almeida

24/06/2013

Segue o código da tabela A:
create table CA(
  codProfissional integer not null,
  codAluno integer not null, 
  descricao varchar(50),
  constraint pk_CA    primary key(codProfissional, codAluno),
  constraint fk_Prof  foreign key(codProfissional) references profissional(codigo),
  constraint fk_Aluno foreign key(codAluno)        references aluno(codigo)
);



Na tabela B tenho o seguinte:
create table geraPrancha(
  codigo integer not null,
  codMidia integer not null,
  codAluno integer not null,
  codProf integer not null,
  dataCriacao date,
  path varchar(90) not null,
  constraint pk_geraPrancha primary key(codigo) 
);
GOSTEI 0
Marcelo Senaga

Marcelo Senaga

24/06/2013

Conseguiu resolver?
GOSTEI 0
Marcus Almeida

Marcus Almeida

24/06/2013

Consegui sim, logo mais coloco a solução. Obrigado!
GOSTEI 0
Marcelo Senaga

Marcelo Senaga

24/06/2013

Parabéns, tópico resolvido.
GOSTEI 0
Léo Rodrigues

Léo Rodrigues

24/06/2013

sim, kd a solução da caso dessa sua tabela com fk. ??
quero ver a resposta correta.




Léo Rodrigues
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

24/06/2013

Acho que nem é necessário esperar a resposta dele. Acontece que a "foreing key" não está referenciando a chave composto, o certo seria:

ALTER TABLE tabelaB
  ADD constraint fk_codAlunoCodProf FOREIGN KEY(codAluno, codProf) REFERENCES tabelaA(codAlun, codProf);


Se a tabela A não tiver essa chave, deve ter pelo menos uma chave burra (ID) para facilitar o relacionamento.
GOSTEI 0
POSTAR