Chega de ficar apenas aprendendo ‘create table’ no banco de dados MySQL, aprenda como se criar Procedures, View e Trigger e comunicação entre as mesmas nessa postagem.
Quando se cria uma aplicação que se necessita de uma comunicação com bando de dados, seja ela de qual linguagem de programação for, o acesso entre “Aplicação Banco” sempre é um dos principais fatores para uma boa otimização, ganha tempo e velocidade de processos. A maioria da estrutura e performasse de uma aplicação, está na própria aplicação, mas isso não quer dizer que você não possa melhorar o desempenho realizando boas praticas de código no seu banco de dados. Você consegue fazer várias tarefas que poderiam ser feitas na aplicação, apenas com códigos PL/SQL.
Neste post, será passado como se deve realizar transações no seu banco de dados utilizando as famosas PROCEDURES do MySQL, que é um dos mais conceituados banco de dados.
Para começar, utilize o script SQL abaixo com a opção de criar um database e uma tabela de Clientes no MySQL.
Criando: Database e Tables
Como podem perceber a tabela de Clientes é uma tabela pai das tabelas Cliente_Fisico e Cliente_Juridico, ou seja, uma Herança.
Com a herança de tabelas criada, vamos criar uma VIEW para realizar o READ do CRUD, pois temos uma herança de tabelas e precisa-se fazer um JOIN dos registros de Cliente com Cliente Físico e Cliente Jurídico para listar todos os registros de nosso database.
Criando: View de Clientes
Também precisa-se criar um TRIGGER (gatilho) com a função de deletar a herança de um determinado registro. Por exemplo: A tabela Cliente contem os registros padrão de um cliente, mas que pertence aos clientes físicos e clientes jurídicos também, então para realizar uma exclusão de um cliente, temos que remover os registros da tabela herdada (Cliente Físico e Jurídico) e posteriormente da tabela Clientes, dependendo de qual registro irá ser excluído.
Criando: Trigger
Como podem ver, nessa TRIGGER, irá remover os dos da tabela Clientes, Cliente Físico e Cliente Jurídico atraves das chaves estrangeiras.
Exclui os “filhos” para depois excluir o “pai” de nossa herança.
Com a toda estrutura de TABLES, VIEW e TRIGGER criadas, vem a parte mais esperada (tan tan tan taaann), vamos criar a nossa “linda e bonita” procedure de transações, que será responsável por fazer todas as criações, leituras, alterações e remoções de registros, ou seja, uma procedure com capacidade de relizar o CRUD (Create, Read, Update e Delete) no banco de dados.
Criando: Procedure
Na parte de criação (Create) de registros através dessa procedure, foi utilizado a função LAST_INSERT_ID() do MySQL, como temos uma herança de tabelas, essa função nos da uma opção de resgatar o ultimo registro inserido na tabela Clientes, pegando seu ID (Primary Key) e incluindo na tabela Cliente Físico ou Cliente Jurídico no campo de Foreign Key, dependendo de qual cliente você vai inserir, claro. Também pode-se perceber, foi declarado uma variável “exception” , com um valor default igual a 0 (zero), e atribuindo um SQLEXCEPTION com o valor de 1(um) caso de erro na transação, uma mensagem de exceção será disparada. O restante da procedure é basicamente implicado com lógicas de IF e ELSE.
NOTA: Para relizar as transações com o procedure, utiliza-se o CALL no MySQL. Lembrando que todos os parâmetros que estão presente no procedure, devem ser especificados na execução da procedure com o CALL, mesmo esses parâmetros não tendo uma implicância significativa, eles devem ser carregados com **NULL **.
Um exemplo:
Como podem ver, ao criar (CREATE) um registro com CALL, dependendo de ser cliente físico ou jurídicos, os campos preenchidos são distintos. Já na parte de remoção de registros (DELETE), precisa-se apenas especificar a chave primária da tabela Clientes, que o trigger que criamos, será responsável por remover os dados da tabela “filho”. No CALL de selecionar (READ) os registros, apenas é necessário informar os parâmetros de operação e parâmetros da tabela a ser realizada a transação, já que utilizamos uma VIEW contendo todos os campos para a listagem completa.
Bom, vou me despedindo por aqui, espero que você tenha entendido um pouco de transações com procedure através de tabelas com herança no MySQL. Um abraço. Morfei!