N style="mso-spacerun: yes">
Clique aqui para ler todos os artigos desta edição
O que há de novo no MySQL 5?
Um pouco da vida do MySQL
por Renato Golin
O MySQL é a base de dados open source que mais cresce no planeta, tanto em número de usuários quanto em desenvolvimento de novas features. Desde o século passado, quando o produto foi lançado no mundo open source, o MySQL está invadindo mercados onde apenas competiam bases de dados puramente comerciais, suportadas por gigantes da informática. Com sua visão inovadora, o MySQL entrou no mundo de SGDBs provendo soluções diferenciadas para os mais variados gostos e bolsos.
Mas nem foi sempre assim, o MySQL já foi o guri dos SGDBs e por muito tempo foi considerado uma base para testes ou casos pequenos, por sua simplicidade e falta de recursos. Quando a empresa que mantém o produto, MySQL AB, resolveu entrar de cabeça no mercado corporativo e anunciou a versão 3.23 que já contava com replicação de dados Master/Slave e um sistema de transações completamente compatível com o padrão ACID (Atomicidade, Consistência, Isolamento e Durabilidade) utilizando a já consolidada tecnologia da universidade de Berkeley, o mundo passou a olhar para o guri de uma forma diferente. Ele havia se tornado um ”aborrecente”.
Essa fase intermediária do MySQL foi louvada pela coroação do padrão LAMP, ou a união do Linux, Apache, MySQL e Perl nos primórdios da internet. Esse padrão open source competiu de igual para igual com soluções completas das grandes empresas e tomou um espaço considerável entre os provedores de aplicação.
Não demorou muito para lançarem a versão 4 com muitas outras funcionalidades que o mercado exige, e de “aborrecente” se tornou um adulto respeitável. Não existem mais as restrições antigas, tamanho da base de dados, número de registros, queries complicadas são parte do dia a dia do MySQL assim como de qualquer outro banco de dados profissional e a robustez, confiabilidade e performance da pequena base mostrou-se também bastante competitiva.
Mas, como todo adulto, ainda tem muito que aprender com os mestres da velha guarda e isso é o que a MySQL AB está mostrando que sabe fazer muito bem. A última versão estável já conta com replicação, transações, chaves estrangeiras, geometrical data support, clustering, suporte completo à unicode, busca Full-Text e conexões seguras SSL. E agora com as novas funcionalidades da versão 5, o produto está completo, com o mínimo necessário para uma base de dados corporativa.
Além de simplesmente adicionar novidades, o time da MySQL AB continuou se preocupando com performance, escalabilidade e confiabilidade. É claro que não é possível manter a performance quando se adiciona novas funcionalidades e essa foi uma escolha muito dura para o time de desenvolvedores que por muitos anos recusaram incrementar o MySQL em detrimento da performance, e por muito tempo o MySQL foi a base de dados mais rápida do planeta.
Um dos maiores benefícios do MySQL é a possibilidade que temos de usar toda a velocidade original com o tipo de tabela original (MyISAM) ou toda a proteção das chaves estrangeiras e transações com o tipo de tabela InnoDB, ou seja, fica a seu cargo escolher performance ou segurança.
Novidades da versão 5
A versão 5, que está em Alpha ainda, traz novidades há muito pedidas: views, stored procedures, functions e triggers (que estava sendo adicionada na versão 5.0.2 quando este artigo foi escrito).
Sempre que falo sobre as novas funcionalidades do MySQL alguém pergunta: "mas tem stored procedures?". De fato é uma funcionalidade e tanto, e todos os DBAs e programadores das grandes bases de dados usam bastante.
O principal poder das procedures é que com elas é possível transferir para a base de dados lógicas que são pertinentes apenas à base de dados, que até então eram definidas na própria aplicação. O seu código fica assim mais limpo e organizado, e mais compatível com o paradigma MVC (Model-View-Controller). Esse paradigma prega que a parte relativa ao modelo de dados permaneça no nível do modelo de dados e não "suba" para a parte de controle ou visualização. Trocando em miúdos, não deixe nenhuma query nos seus templates!
Functions, geralmente de tratamento de dados para serem usadas em queries ou stored procedures, são mais simples. São funções que poderiam estar embutidas na query, mas por questão de organização é melhor ficar encapsulada em uma function, facilitando a manutenção.
Uma function pode ser incluída dentro de um select para tratar datas, strings ou mesmo a somatória não trivial de alguns dados de suas tabelas. Já uma procedure encapsula várias queries e pode capturar dados de lugares distintos, conter functions para tratamento de dados, fazer updates e deletes, ou seja, functions fazem parte de procedures mas o inverso dificilmente é verdade.
Views são "visualizações" de seus dados através de um select. Você pode juntar dados de várias tabelas, processados por functions, compilados e somados em uma tabela virtual, que poderá posteriormente ser acessada por outro select, bem mais simples. Views podem ser criadas e mescladas com views anteriores, onde os dados são atualizados pelo novo resultado do select. Um conceito muito importante que deriva de views é o OLAP (Online Analytical Processing). Este simplifica o acesso aos dados com muitas dimensões em tabelas mais simples de duas ou três dimensões com o auxílio de views.
Triggers são gatilhos que disparam quando alguma modificação acontece em uma tabela específica do seu banco de dados. Você pode programar uma trigger para verificar a consistência de um dado inserido em uma tabela em relação à outros dados em outras tabelas e corrigi-lo caso seja necessário. Triggers são muito usadas para consistência de dados e automação de processos dentro da base de dados.
Veremos a partir de agora ver na prática como essas novidades podem ser utilizadas no MySQL 5.
Nossa base de dados exemplo
Para exemplificar os conceitos descritos acima vamos criar uma base de dados de testes cujo modelo conceitual está apresentado na Figura 1.
Figura 1. Diagrama MER da nossa base de exemplo.
Nossa base de dados armazena dados de funcionários de uma empresa que estão divididos por seção e possuem uma função específica e um chefe. A relação entre funcionário e seção é de N para 1, ou seja, existem diversos funcionários em uma única seção mas apenas uma seção por funcionário. Para função a mesma coisa. Existe ainda a relação interna entre funcionário e funcionário que indica quem é o chefe de quem, com relação de N para 1 possibilitando apenas um chefe para uma equipe. O script de criação de base de dados é o mostrado na Listagem 1.
-- START OF THE SCRIPT
CREATE DATABASE myCompany;
USE myCompany;
CREATE TABLE `employee` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`salary` int(11) default NULL,
`function` int(11) default NULL,
...