Integridade referencial MySQL

Maio 15, 2009 at 10:56 am (mysql)

Lendo alguns artigos na net, encontrei este exemplo de integridade referencial no MySQL. Achei bem interessante pois já passei por um fato em que a utilização dessa solução seria ideal: eu precisava ao deletar um registro de um autor, deletar todos os canais dele e seus arquivos.

Antes de dar o exemplo, pesquisei a diferença entre tabelas MyISAM e InnoDB, pois para isso ser possível deve ser usado o tipo de tabela InnoDB. As tabelas do tipo MyISAM não suportam esse recurso.

InnoDB trabalha com integridade referencial e MyISAM não, no entanto, em matéria de performance, MyIsam é mais rápido. Então varia muito do uso.
Se em seu sistema uma tabela não precisar ter qualquer tipo de relacionamento com outras tabelas, então crie ela utilizando o motor MyISAM, que irá ter melhor performance. Caso precise de relacionamentos, utilize o InnoDB. Um bom exemplo para tabela do tipo MyIsam seria uma tabela de log de sistema, onde os dados armazenados não necessitam de relacionamento com outras tabelas.

Bom então vamos ao exemplo:

CREATE TABLE carro (
id int not null auto_increment,
marca varchar(25) not null,
modelo varchar(25) not null,
ano_fab date not null,
ano_mod date not null,
primary key(id)
) engine=InnoDB;

CREATE TABLE carro_acessorios (
carro_id int not null,
descricao varchar(150) not null,
preco decimal(10,2) not null,
key(carro_id),
foreign key (carro_id) references carro (id) on delete cascade
) engine=InnoDB;

Nesse exemplo temos a tabela de carros e uma tabela de acessórios que esse carro possui. Se o registro do carro for apagado, os registros de acessórios também serão.

Vamos analisar a linha responsável por isso:

* foreign key (carro_id)…: Aqui está sendo definido qual é o campo da tabela que será referenciado.
* …references carro (id)…: Aqui está sendo definido que está se referenciando ao campo ‘id’ da tabela carro.
* …on delete cascade: E por fim se o campo no qual ele está fazendo referência for apagado, ele é apagado também.

Para maiores informações sobre integridade referencial no MySQL acesse: http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

Fonte: ITATUX

1 Comentário

  1. Petruquio disse,

    Ai que lindu, ai que tudo, ai que super!

Comente