Modelando bancos de dados em MySQL

Calma aí... O que é banco de dados?

Então né... Segundo o Dicionário Aurélio (2006), é um conjunto de dados organizado por categorias, de modo a facilitar a pesquisa, comparação e atualização das informações; base de dados.

Mas, podemos dizer também que Bancos de dados, ou bases de dados, são coleções de informações que se relacionam de forma a criar um sentido. Com registros sobre pessoas, lugares ou coisas.

Sabe aquela planilha da escola com o nome dos alunos e a nota de cada um segmentada por unidade ou por disciplina? Aquilo seria um banco de dados, ou parte dele, de acordo com a definição.

E quanto ao MySQL?

Meu filho...

Bom, quais são as formas que você conhece de fazer bases de dados? Provavelmente você conhece o Excel e suas planilhas.

Digamos que o MySQL seja uma forma de criarmos e interagirmos com o nosso banco de dados.

Na real, o MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface.

E pra terminar de derrubar, essa é a ferramenta que vamos utilizar para tratar do armazenamento de dados dos nossos sites e sistemas web.

E é do pacote Office isso?

JAMAIS! Never! これまで! Niekedy!

Aqui estamos falando de código. O MySQL é uma extensão de uma linguagem de consulta, ué, e está cheia de conceitos e detalhes por trás. Alguns podem até parecer óbvios, mas também merecem atenção.

Vamos começar apresentando os elementos básicos de uma base dados.

Tabelas

Bom... bancos de dados são formados por tabelas (tables), que por sua vez, são formadas por linhas (rows) e colunas (columns), igualzinho ao Excel..

Tabelas guardam e exibem dados em um formato estruturado. Uma tabela geralmente está associada a um grupo de informações (usuários, por exemplo) onde cada coluna guarda um tipo de informação (nome, email, telefone) e cada linha representa uma instância daquele grupo (um usuário em específico). A esse grupo de informações damos o nome de ENTIDADE.

ENTIDADE? Tipo coisa de religião?

Não, jovem... Entidade aqui é qualquer coisa, concreta ou abstrata, abstraída do mundo real e modelada em forma de tabela para guardar informações no banco de dados.

Conseguiu imaginar? Óh, os 40 estudantes de uma sala de aula são diferentes entre si por inúmeros fatores, mas podemos abstraí-los em uma tabela a partir das características em comum, a depender do contexto. Quer ver? Espia: Todo estudante tem um número de matrícula, um nome, data de nascimento e um ano de entrada, por exemplo. Nesse caso, a nossa entidade se chamaria estudantes (students), esse seria o nome da tabela. Cada característica em comum seria uma coluna, e cada aluno seria uma linha com uma identificação única.

Peraê, rapaz!

Que identificação única é essa que tu falou aí?

Bom, essa identificação única é a famosa e renomada PRIMARY KEY. A PK é um campo (coluna) que identifica unicamente cada registro (linha) da tabela, e que não pode ser nulo.

Na tabela abaixo, o campo id seria um excelente candidato a Primary Key, pois identifica unicamente e numericamente cada linha. Perceba que isso permite que tenhamos duas "pessoas" com o mesmo nome na nossa tabela, e mesmo assim saibamos quem é quem.

id name department role
1 JP Rodrigues Marketing Diretor
2 JP Rodrigues Marketing Trainee

Mas isso não é tudo!

Uma das coisas mais importantes que vamos falar aqui é do relacionamento entre tabelas.

É... isso mesmo que você OUviu! Já sabemos que um banco de dados é composto por diversas tabelas. Sei lá: Clientes, Produtos, Pedidos, Detalhes do Pedido, etc. Beleza que as informações estarão separadas em cada uma das Tabelas, o lance é que na prática devem existir relacionamentos entre as tabelas.

Se ligue: Um Pedido é feito por um Cliente e neste Pedido podem existir diversos itens, itens que são gravados na tabela Detalhes do Pedido. Além disso, cada Pedido possui um número único (Código do pedido), mas um mesmo Cliente pode fazer diversos pedidos e assim por diante. É dessa forma que as relações acontecem e, em se falando de banco de dados, podemos representá-las das seguintes maneiras:

Quando a chave primária de uma tabela A é informada em uma tabela B para estabelecer o relacionamento de dados, passa a se chamar chave estrangeira para a tabela A em B.

E como que eu crio essas tabelas aí?

As tabelas e todas as outras coisas podem ser criadas por meio de código MySQL. Contudo, iremos utilizar uma ferramenta visual unificada para arquitetos de banco de dados e desenvolvedores, chamada Mysql Workbench. O que o Workbench vai fazer é permitir que você "desenhe" suas tabelas e relacionamentos com "clique e arraste", e depois transformará tudo em código.

$sudo apt-get install mysql-workbench

Estando o Workbench instalado, abra-o e tecle ctrl + N.

Abaixo segue um vídeo onde modelamos um banco de dados conforme sugerido pela explicação das relações 1 pra n e n pra n.

Tabelas modeladas, shift + ctrl + G para gerar o seu código MySQL.

Vamos a alguns detalhes não explicados anteriormente.

Tipos de dados

O MySQL possui vários tipos de dados. Listamos algums bem importantes:

E aí, é isso aí!.

Bom... Isso não é tudo sobre MySQL, não é tudo sobre Banco de Dados, e não é tudo sobre o Workbench. Procure tirar dúvidas com seu mentor, com outras pessoas na Info, com outros trainees, em livros, na internet, etc.

O mais importante deste guia é que você absorva os conceitos que foram apresentados.

Você pode ver a documentação completa do MySQL aqui.

A sequência desse guia é o guia de CRUD. Você já ouviu falar nisso?