Integridade referencial 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


Petruquio disse,
Maio 15, 2009 às 1:13 pm
Ai que lindu, ai que tudo, ai que super!