Marcio Alexandre's Blog !

Algo sobre tecnologia… =)

MySql 5.0.22 – Configurando Foreign key (InnoDB)

Usar chaves estrangeiras no MySql pode se tornar algo meio “trabalhoso”.

A importância do uso das mesmas, refiro-me às Foreign keys, nós estamos calejados de saber.

Caso você utilize phpMyAdmin para criar as tabelas de seu banco, e não está familiarizado com Sqls,  como este:

CREATE TABLE tb_pais(id_pais INT NOT NULL,descricao VARCHAR(250), PRIMARY KEY (id_pais)) TYPE=INNODB;
CREATE TABLE tb_cidade(id_cidade INT, id_pais INT,descricao VARCHAR(250), INDEX pais_ind (id_pais),
FOREIGN KEY (id_pais) REFERENCES tb_pais(id_pais) ON DELETE CASCADE ON UPDATE CASCADE) TYPE=INNODB;

Vamos lá às dicas (estou considerando que o banco da aplicação já foi criado, iremos às tabelas):

1. Certifique-se que as tabelas estão operando em InnoDB (no caso acima, seriam as duas tabelas: tb_pais e tb_cidade). Isso vc pode configurar clicando na tabela desejada, e indo na aba “Operações”, colocando a opção “InnoDB” no campo “Storage Engine”. O default costuma ser o MyISAM, deve-se mudar.

2. Crie um índice no atributo que será a chave estrangeira (clica na aba “estrutura”, e em Ações clica em “índice”). No exemplo acima, seria o atributo id_pais da tabela tb_cidade. Automaticamente será gerado um índice com o nome do atributo.

3. Após gerado o índice para o atributo, clique em “ver relações”. Teremos 3 campos para configurar. No primeiro campo escolha a relação que este atributo terá com a tabela-mãe (no exemplo acima seria, “tb_pais -> id_pais“), nos demais campos você irá escolher  a ação (cascate, restrict, set null, no action) que deverá ser feita ao deletar e/ou atualizar a tabela-mãe.

Explicando rapidamente: cascate é quando a tupla da tabela-mãe é deletada, todas as tuplas referenciadas nas tabelas-filha também serão, num efeito “cascata”; restrict é o contrário, enquanto houver referencia não pode deletar; set null insere valor null na tupla referenciada, considerando o mesmo contexto; e no action trata as tabelas-filhas como independentes e não ocorre mudança alguma, mesmo que deletando a tabela-mãe.

Pronto! Trabalho concluído, mãos à obra!

25/01/2012 Publicado por | Banco de dados, Java, PHP, Software Livre, Tecnologia | 1 Comentário

   

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.