MySQL – Integridade Referencial

Na matéria anterior falamos sobre vários assuntos! Conexões, Inserções, exclusões, atualizações… Hoje estaremos aprofundando um pouco mais nossas atividades, falando de um assunto um pouco mais avançado!

Dizem que quem trabalha com Base de Dados MySQL, “procura facilidade”, já que trata-se de uma base de dados mais prática!

Até certo ponto concordo com essa lógica; Porém, devo lembrar que ela tem recursos que alguns Programadores desconhecem!

No MySQL (assim como em diversos tipos de bases de dados) é possível escolher o formato de armazenamento da tabela.

OBS.: Alguns recursos estão diretamente relacionados ao tipo de tabela (ex.: nível de lock e integridade referencial).

Neste artigo como de costume, através de imagens e informações, vamos mostrar como você pode trabalhar com esses recursos!

O Que É Integridade Referencial No MySQL?

Você já passou pela situação onde ao efetuar um SELECT um cliente ou até mesmo você teve dúvidas se o resultado obtido estava correto?

Quem trabalha com o CONSTRAINTS tem esse tipo de segurança!

Ele adiciona algumas restrições às chaves estrangeiras, fazendo com que seu Sistema retorne os valores corretos, sem erros!

Para usarmos este tipo de solução nas tabelas, precisamos que elas estejam como “InnoDB”.

O Que O InnoDB Faz?

O InnoDB tem a finalidade de inserir em sua tabela as restrições de integridade a seguir:

  • CASCADE;
  • RESTRICT;
  • SET NULL;
  • SET DEFAULT.

Bem… abaixo vamos disponibilizar um exemplo! Você poderá utilizar em seu Projeto!

Antes disso, preciso fazer algumas considerações!

No caso de CASCADE, quando removemos um registro da tabela usando a chave estrangeira, os registros relacionados ao que foi removido, serão automaticamente eliminados.

Quanto ao RESTRICT ele não permitirá a remoção de registros que possuam relacionamentos em outras tabelas. Isto é, trata-se de uma opção mais segura!

Bem… você pode dizer: Ah, ok… mas não entendi nada…

Vamos montar um exemplo prático?

Projeto Teste

Em nosso Projeto teremos 3 tabelas:

  1. Tabela de Funcionários
  2. Tabela de Serviços
  3. Tabela de Notas

OBS.:

Você poderá seguir a seguinte lógica:

O Funcionário da empresa de Tecnologia “EMPRESA A” presta os serviços “1, 2 e 3″.

Ao vender pelo telefone um certo Produto / Serviço, o Sistema solicita que o “CLIENTE” dê uma nota pelo atendimento!

Bem… este será o foco de suas tabelas, que poderão ser implementada com a sua linguagem de Programação preferencial!

Criando As Tabelas Na Base De Dados:

Antes de partirmos para a programação, abra o arquivo script-sql.txt (disponível no ficheiro em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.

OBS.: Neste ficheiro você deverá encontrar o código abaixo:


----- CRIANDO A TABELA E CONTEÚDO DE funcionarios -----

CREATE TABLE funcionarios (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome CHAR(30) NOT NULL
) TYPE=InnoDB;

INSERT INTO `funcionarios` VALUES (1,'Funcionario 01');
INSERT INTO `funcionarios` VALUES (2,'Funcionario 02');
INSERT INTO `funcionarios` VALUES (3,'Funcionario 03');

----- CRIANDO A TABELA servicos -----

CREATE TABLE servicos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nome CHAR(30) NOT NULL
) TYPE=InnoDB;

INSERT INTO `servicos` VALUES (1,'Telefonia VOIP');
INSERT INTO `servicos` VALUES (2,'Hospedagem de Site');
INSERT INTO `servicos` VALUES (3,'Desenv. Sistemas');

----- CRIANDO A TABELA notas -----

CREATE TABLE notas (
funcionario_id INT NOT NULL,
servico_id INT NOT NULL,
date DATE NOT NULL,
nota DOUBLE NOT NULL,
PRIMARY KEY(funcionario_id, servico_id, date),
INDEX i2 (servico_id),
FOREIGN KEY (funcionario_id) REFERENCES funcionarios(id) ON DELETE CASCADE,
FOREIGN KEY (servico_id) REFERENCES servicos(id) ON DELETE RESTRICT
) TYPE=InnoDB;

INSERT INTO `notas` VALUES (2,1,'2010-05-10',10);
INSERT INTO `notas` VALUES (2,2,'2010-05-10',9);
INSERT INTO `notas` VALUES (2,1,'2010-05-10',7);
INSERT INTO `notas` VALUES (2,2,'2010-05-10',8);

Em nossas matérias de MySQL geralmente utilizamos como padrão o MySQLFront. Caso você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

Criando a Tabela

Se você nunca trabalhou com o Constranints, certamente terá um pouco de dificuldades, mas… te aconselho a acompanhar algumas matérias de MSSQL, onde falamos sobre este assunto ou aguarde!

Estaremos falando mais sobre este tipo de atividade em nossas próximas edições, focando também em exemplos práticos.

Fique ligado em nossas matérias! Com certeza você vai gostar das demais matérias!

Em caso de dúvidas ou maiores informações, estamos a sua inteira disposição!

arquivos.zip

Be Sociable, Share!

1 Comentários

  1. Samuel Lima

    Boa tarde,

    No meu script resolveu não excluiu porém ele não retorna para a página principal e acusa na tela o erro.

    Como faria para não acusar o erro somente voltar para a página que tentou excluir

Participa! Comenta...