quarta-feira, 27 de janeiro de 2010

Relacionamentos no MySQL

Sofri mais consegui!!! sempre brinquei com a linguagem DDL no banco MySQL, mas só de forma simples, criando e dropando tabelas que não possuíam dependências, nunca tive problemas com isso! Só que resolvi complicar um pouco mais meus “exercícios” e resolvi criar um banco maior com varias tabelas e seus relacionamentos, e mi deparei com um erro que mi tirou algumas horas de sossego, não conseguia criar o relacionamento , vou expor minha situação:
Eu teria três tabelas no banco uma de funcionários onde teriam que conter os dados do funcionário , nome, endereço, telefone e a primary key matricula_funcionario, teria outra tabela departamento que continha nome_departamento,numero_departamento, cod_departamento como PK, a terceira tabela seria o cargo no qual teria o nome_cargo, numero_cargo e cod_cargo, para relacionar essas três tabelas eu iria criar a tabela alocação onde iria colocar as pk das tres tabelas dentro dela como FK e teria uma PK cod_alocaçao.
Tentei criar esse relacionamento na munheca, não deu certo, tentei utilizar o MySQL
administrator não deu certo, tentei o workbench para criar o modelo de dados fazê-lo criar um script para criação das tabelas o mesmo também deu erro.
O erro gerado em todas essas situações era o error 150(#1005), bati cabeça e pesquisando na internet em muitos tópicos e posts consegui descobrir o porquê do erro, vamos a solução

Os dois campos devem ser idênticos em seus tipos. Ou seja (aqui estava meu erro) até mesmo se ele é unsigned deve ser igual. As outras condições são:
• Ambas as tabelas do tipo InnoDB;
• Na tabela que faz a referência, deve haver um índice que corresponde a chave estrangeira;
• Na tabela referenciada, deve haver um índice que corresponde a chave primária;
• Não são suportados para este tipo de relacionamento, campos text e blob;
• Os campos devem ter o mesmo tipo (em todas as características);

bom espero que esse post possa ajudar alguém com o mesmo tipo de problema que eu passei!

Nenhum comentário:

Postar um comentário