Primeiros passos com o MySQL Workbench
Entenda rápido como começar com o MySQL Workbench
Hoje em dia, utilizo bastante o MySQL Workbench para manter a estrutura de meus BDs, ao invés do phpmyadmin. Eu prefiro, pois tenho um ambiente visual e facilidade em visualizar as alterações.
Para exemplificar, vou criar algo bem simples, mas que explora as vantagens que quero mostrar. Imagine que sua empresa possua franquias, e essas franquias possuam funcionários e clientes, e precisamos respeitar o seguinte:
- Ao desligar uma franquia, descadastramos junto seus funcionários;
- Ao desligar uma franquia, mantêmos seus clientes cadastrados.
Podemos resolver isso com a programação no server side, mas conseguimos resolver isso mais fácil pelo MySQL, e com mais segurança (pois já temos restrições bem testadas no BD).
Antes de começar
Tenha ele instalado: Link para download
Estou utilizando a versão 6.0.
Iniciando um projeto
Vamos começar criando uma conexão com o Banco de Dados, e então criando um database de teste. (Obs.: Você pode pular esse passo, se já tiver criado um database para isso)
Clique no sinal de “+” no começo da janela.
Em seguida, ele vai perguntar as informações de conexão. Se for o padrão localhost, você vai precisar preencher apenas um nome para essa conexão (no meu caso, chamei de localhost mesmo). Ele deve pedir a senha também (se você ainda não tiver armazenado).
E por fim, vamos criar um novo database:
Clique no primeiro desenho (new schema), em seguida preencha o nome de seu database (chamei de test_wb) e por fim clique em apply.
Se você estiver com dúvida do motivo de estar usando schema, ao invés de database, eles são a mesma coisa. O MySQL não faz distinção entre eles (veja mais em http://stackoverflow.com/questions/11618277/difference-between-schema-database-in-mysql )
Criando um modelo
Feche a aba dessa conexão para voltar a página inicial. Clique no + para criar um novo modelo.
O programa vai abrir uma nova aba com um modelo sem nenhum informação.
Para o nosso exercício, precisamos de 3 tabelas (franquia, funcionario, cliente). Vamos criá-las clicando em “Add table”, e então renomeando-as.
E então crie as colunas com as informações relevantes. Nesse exercício, vou apenas ter o id e nome para cada.
Crie um diagrama novo. Com ele, nós vamos visualizar graficamente os relacionamentos da tabela.
Trabalhando com o diagrama
Nesse momento, temos um diagrama vazio.
Usando o catálogo, e arrastando as tabelas que acabamos de criar, teremos o seguinte esquema (sem nenhum relacionamento).
À partir de agora, veremos a grande vantagem do MySQL workbench. Use as ferramentas para criar os relacionamentos.
Use a primeira 1:n, e então clique em cliente e depois em franquia. Com isso, você criou o primeiro relacionamento, em que cliente se relaciona com franquia através de uma coluna (no caso, chamada de “franquia_idfranquia”).
Agora use a segunda 1:n, e então clique em funcionário e depois em franquia. Agora, criamos outro relacionamento, porém esse identifica o funcionário como se fosse dessa franquia em específico.
Além disso, eu prefiro fazer outras coisas. Edita as colunas da seguinte forma:
Eu fiz isso dessa forma, pois quero habilitar o NULL apenas para o cliente (pois tenho a intenção de haver cliente sem empresa), e não tenho a necessidade de que franquia_idfranquia seja identificador do funcionário.
Se estamos no mesmo passo, seu novo diagrama deve ser semelhante ao seguinte:
Configurando os relacionamentos
Estamos no final. Selecione a tabela de clientes, e a aba de Foreign Keys. Em Foreign Key Options, deixe CASCADE para Update e SET NULL para Delete.
Com isso, você diz para o BD que ao atualizarmos franquia, ele vai atualizar os clientes também. Porém, ao apagá-lo, você vai deixar os clientes com franquia desconhecida (franquia = NULL). É possível encontrá-los depois com uma query simples:
SELECT * FROM `cliente` WHERE franquia_idfranquia IS NULL
E por fim, configurar funcionario com CASCADE para ambos.
Com isso, ao atualizar ou apagar a franquia, você fará o mesmo com seus funcionários.
Deploy
Está pronto. Precisamos apenas colocar isso no BD.
Salve (ctrl + S). Exporte (Database -> Synchronize Model ou então ctrl + shift + Z).
Nessa nova janela, clique em Next, depois Next novamente. E então escolha o database (estou utilizando test_db, que criei no começo do tutorial), e clique em Override Target.
Por fim, clique em todos os Next e Execute. Está pronto. Você configurou corretamente seu BD para necessidade do exercício.
Como funciona
Agora, vou inserir alguns exemplos:
Inserir informação
INSERT INTO `test_wb`.`franquia` (`idfranquia` ,`nome`)VALUES (NULL , 'franquia');
INSERT INTO `test_wb`.`cliente` (`idcliente` ,`nome` ,`franquia_idfranquia`)VALUES (NULL , 'meu cliente', '1');
INSERT INTO `test_wb`.`funcionario` (`idfuncionario` ,`nome` ,`franquia_idfranquia`)VALUES (NULL , 'funcionário da franquia', '1');
Atualizar franquia
UPDATE `test_wb`.`franquia` SET `idfranquia` = '2' WHERE `franquia`.`idfranquia` =1;
Após essa operação, é atualizado cliente e funcionário com id de franquia=2.
Apagar franquia
DELETE FROM `test_wb`.`franquia` WHERE `franquia`.`idfranquia` = 4
Após essa operação, todos os funcionários da franquia são apagados, mas mantemos os clientes (para que alguém os passe para outra franquia).
Cuidado
Na primeira vez que mexi com o MySQL Workbench, errei bastante em definir uma ação em On Delete como SET NULL, mas não deixei o campo permitir NULL. Com isso, dava erro ao sincronizar ambos, e não informava qual o erro. Levei um bom tempo para descobrir onde era a falha.
Conclusão
Hoje em dia, utilizo bastante o MySQL em meus projetos PHP para criar e manter esses relacionamentos. Acho muito mais fácil do que escrever os códigos no phpmyadmin. O phpmyadmin eu utilizo para pequenas operações (como visualizar, editar e apagar dados), mas isso também é possível fazer com o Workbench.
Mas sugiro a todos que utilizem as ferramentas do MySQL. Ele é muito poderoso para usarmos tão pouco dele.