Ir para conteúdo
Fórum Script Brasil
  • 0

Chave composta auto increment com FK


Adriano dos Santos Júnior

Pergunta

Boa noite gente!

Quero ver se vocês podem me ajudar num problema cruel.

Um exemplo simples, que ocorre este problema.

Existem 2 tabelas: chamado e chamadoInteracao;

Estruturas

create table chamado (
chamadoId int(9) primary key auto_increment
);

create table chamadoInteracao (
chamadoId int(9),
interacaoId int(9) auto_increment,
primary key (chamadoId,interacaoId)
)ENGINE=MyISAM

Deste modo, o campo interacaoId é gerado automaticamente ao inserir um novo registro na tabela chamadoInteracao, bastando apenas informar o campo chamadoId.

Existiria alguma forma, engine ou outro método para a tabela chamadoInteracao ter uma FK para tabela de chamado, e assim, ao excluir um registro de chamado, apagar todas as interações?

Porque para contemplar esse auto_increment do interacaoId, somente a engine MyISAM permite, a InnoDB não

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
...

Existiria alguma forma, engine ou outro método para a tabela chamadoInteracao ter uma FK para tabela de chamado, e assim, ao excluir um registro de chamado, apagar todas as interações?

Porque para contemplar esse auto_increment do interacaoId, somente a engine MyISAM permite, a InnoDB não

Ao contrario funciona com InnoDB e não funciona com MyISAM.

Quando voce inclui a cláusula

ALTER TABLE chamadoInteracao
ADD CONSTRAINT nome_de_sua_fk FOREIGN KEY (`chamadoId`) REFERENCES `chamado ` (`chamadoId`) ON DELETE CASCADE

Ao deletar um item da tabela chamado todos os registros de chamadoInteracao que tiverem o mesmo chamadoId serão deletados.

Link para o comentário
Compartilhar em outros sites

  • 0

Denis, se você tentar executar o código de criação que citei, ele irá funcionar, mas irá criar com Engine MyISAM a tabela chamadoInteracao.

Se você for adicionando nesta tabela um valor para a coluna chamadoId, ele vai criar automaticamente e incrementalmente o valor da coluna interacaoId.

Se você retirar a parte do comando engine=MyISAM, você pode perceber que ocorrerá o seguinte erro:

SQL Error (1075): Incorrect table definition; there can be only one auto column and it must be defined as a key

Logo, o InnoDB não permite uma tabela com dois campos primários, sendo um inteiro e outro auto_increment baseado no primeiro campo da chave primária.

A estrutura de dados ficaria mais ou menos assim:

chamadoId interacaoId (auto_increment)
1                1
1                2 
2                1
2                2
2                3
2                4
3                1

Com a engine InnoDB não é possível criar a chave composta com um campo auto_increment baseado em outro campo da chave primária.

Estou a procura de uma engine ou procedure (Invocada por trigger), que permita o seguinte:

Criar uma tabela com chave composta, aonde o segundo campo desta chave seja auto_increment e ainda tenha referência de FK no primeiro campo da chave primária.

Link para o comentário
Compartilhar em outros sites

  • 0
...

Estou a procura de uma engine ou procedure (Invocada por trigger), que permita o seguinte:

Criar uma tabela com chave composta, aonde o segundo campo desta chave seja auto_increment e ainda tenha referência de FK no primeiro campo da chave primária.

Leia o artigo que escrevi para a Devmedia.

Link para o comentário
Compartilhar em outros sites

  • 0
...

Estou a procura de uma engine ou procedure (Invocada por trigger), que permita o seguinte:

Criar uma tabela com chave composta, aonde o segundo campo desta chave seja auto_increment e ainda tenha referência de FK no primeiro campo da chave primária.

Leia o artigo que escrevi para a Devmedia.

Obrigado Denis!

Vou criar uma function que recebe a tabela, campo primário e valor como parâmetros e retorne o próximo ID válido, me baseando nesta sua função.

Assim na criação da trigger, eu simples chamo essa function.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...