O documento discute os principais conceitos relacionados a bancos de dados, incluindo: 1) Definição de banco de dados e sua importância para sistemas e empresas; 2) Sistemas gerenciadores de bancos de dados (SGBD) e linguagens como SQL; 3) Tecnologias para acesso remoto a bancos de dados como servidores e arquitetura MVC.
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
Seven_Palestra_Banco_Dados_Servidores
1. Banco de Dados
D6, em homenagem ao Felipe
Simões e ao Mairon Luz ;-)
... E ao Paulo Store o/
Cleber @ Tavares Junior .com
2. Banco de Dados
O que são?
Em informática, resumidamente, são coleções de informações armazenadas,
que relacionadas dão valor de negócio à um sistema / empresa.
(Traduzindo em jogos: são o login do jogador e sua senha, seus pontos e
níveis de personagem, seu equipamento e suas informaçõe$ de crédito)
Dito isto, nós NÃO vamos falar sobre banco de dados...
... apenas.
Cleber @ Tavares Junior .com
3. Banco de Dados
Vamos tentar mostrar toda a estrutura que envolve um Banco de Dados e
seu desenvolvimento.
KISS: Keep It Simple, Student.
Mas existem muito mais coisas escondidas entre seu servidor nas nuvens e
seu cliente / jogo no seu computador, Student...
Cleber @ Tavares Junior .com
4. Banco de Dados
Primeiro, retomando nossa definição de Banco de Dados, nos primeiríssimos
sistemas informatizados (antes da década de 70), estas informações eram
guardadas no próprio sistema de arquivos do S.O.
E isso gerava uma série de problemas...
A partir daí surgiram os SGBD – Sistemas Gerenciadores de Banco de
Dados. Na década de 80 surgiram os SGBD relacionais, que estão em
domínio até hoje. Ou seja, tabelas. (MySQL, SQLite, PostgreSQL, Oracle$)
Em tempos recentes vem surgindo com cada vez mais força os SGBD
Orientados à Objetos, ou não-relacionais, com o movimento NoSQL (já
vamos falar do SQL), como os MongoDB, CouchDB, e os da Google e Amazon
Cleber @ Tavares Junior .com
5. Banco de Dados
Em suma, existem várias tecnologias de bancos de dados, cada uma com uma
característica própria (simples e pequenos, simples, simples e escalável,
robustos e caros), alguns gratuitos, outros pagos por diversos valores... O
profissional que deseja trabalhar com isso precisa saber avaliar.
Para lidar com todas estas diferenças, nos bancos de dados relacionais, foi
criada uma linguagem padrão para manipulação das tabelas, a SQL
(Structured Query Language, Linguagem de Consulta Estruturada), pela
IBM no início dos anos 70.
Esta linguagem, assim como todas as outras linguagens de computador,
evolui (estamos no SQL:2003). Infelizmente nem todos os SGBD seguem o
padrão da linguagem à risca.
Isto é uma típica representação esquemática de um SGBD:
Cleber @ Tavares Junior .com
6. Banco de Dados
E a seguir uma breve apresentação da linguagem SQL. Ela serve para criar as
tabelas, as colunas / campos, inserir os dados, fazer a busca e o relacionamento
entre eles:
Cleber @ Tavares Junior .com
7. Banco de Dados
SQL, resumo / palavras - chave
Comandos de Criação Comandos de Controle Comandos de Transação
(DDL) (DCL) (DTL)
CREATE TABLE GRANT ROLLBACK
ALTER INDEX REVOKE
DROP VIEW
Cleber @ Tavares Junior .com
8. Banco de Dados
SQL, resumo / palavras - chave
Comandos de Manipulação Comandos de Consulta
(DML) (DQL)
INSERT SELECT
SELECT
UPDATE
DELETE
CRUD!
Cleber @ Tavares Junior .com
9. Banco de Dados
O comando de consulta SELECT é o mais utilizado, nele temos as cláusulas:
FROM, WHERE, HAVING, GROUP BY, ORDER BY, DISTINCT, JOIN
Os operadores lógicos:
AND, OR, NOT
Os operadores relacionais (muitas características do SQL foram baseadas
na álgebra relacional):
<, >, <=, >=., =, <>, BETWEEN, LIKE, IN
As funções de agregação:
AVG, COUNT, SUM, MAX, MIN
Cleber @ Tavares Junior .com
10. Banco de Dados
Pequenos exemplos de comandos SQL:
CREATE TABLE Players
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR (60) NOT NULL,
birth DATE,
phone CHAR (8),
PRIMARY KEY (id)
)
Players
id name birth phone
Cleber @ Tavares Junior .com
11. Banco de Dados
Pequenos exemplos de comandos SQL:
INSERT INTO Players VALUES (1, ‘Clever Tavares Jr.', 1900-08-19,’’);
Players
id name birth phone
1 Clever Tavares Jr. 1900-08-19
Cleber @ Tavares Junior .com
12. Banco de Dados
Pequenos exemplos de comandos SQL:
INSERT INTO Players VALUES (3, ‘', 19/08/1900,26667070);
Players
id name birth phone
1 Clever Tavares Jr. 1900-08-19
3 19/08/1900 26667070
Precisamos de uma maneira de assegurar que valores inválidos não sejam
inseridos! Nossos dados tem que ser consistentes!
Cleber @ Tavares Junior .com
13. Banco de Dados
Pequenos exemplos de comandos SQL:
SELECT * FROM Players;
Players
id name birth phone
1 Clever Tavares Jr. 1900-08-19
SELECT name AS Nick FROM Player;
Players
Nick
Clever Tavares Jr.
Cleber @ Tavares Junior .com
14. Banco de Dados
Pequenos exemplos de comandos SQL:
SELECT name, birth FROM Players WHERE name LIKE ‘Cleber‘;
Players
name birth
SELECT TOP 5 name, value FROM Points ORDER BY value desc; /*;-)*/
Chega!
Cleber @ Tavares Junior .com
15. Banco de Dados
Mas não temos apenas nosso banco de dados no processo. Para este ser acessado
remotamente, via web, precisamos de uma tecnologia de servidor, alguma
aplicação / serviço que fique online o tempo todo provendo esta comunicação.
Importante, esta aplicação ou programa, que nós desenvolvemos com linguagens de
servidor como C# / Java / PHP / Python / Ruby, deve ser criada seguindo o
esquema de implementação MVC, Model-View-Controller, Modelo(Banco)-
Visualização(Página, Cliente)-Controlador(Acesso), ou seja, mantendo sua lógica de
implementação independente da camada de visualização e dos dados.
A “camada de visualização”, pode ser uma página no navegador do jogador, ou um
jogo em Flash no navegador do jogador, ou um jogo no computador do jogador. É
ali no cliente que alguns dados devem ser tratados, com tecnologias / linguagens
de cliente (html –eu sei-, css, javascript, em Flash, em Unity…), e outros devem
vir/ir do/para o servidor, mantendo sempre o balanceamento adequado.
Cleber @ Tavares Junior .com
17. Banco de Dados
Claro que eu posso ter vários clientes:
Cleber @ Tavares Junior .com
18. Banco de Dados
Estes clientes podem gerar uma carga / volume de acesso muito grande de tal
modo que eu precise fazer o balanceamento / distribuição entre vários servidores
Cleber @ Tavares Junior .com
19. Banco de Dados
Normalmente a base de dados é compartilhada, mas às vezes não! E é preciso ter
muito cuidado para manter os dados coesos / coerentes / sincronizados!
Cleber @ Tavares Junior .com
20. Banco de Dados
E às vezes, as máquinas / computadores que são responsáveis pela aplicação
servidora e os SGBD´s nem são as mesmas, ou estão no mesmo lugar físico, e sim
espalhadas pelo mundo onde for mais conveniente.
É o conceito “nas nuvens”. Que auxilia na escabilidade do projeto / jogo.
Cleber @ Tavares Junior .com
21. Banco de Dados
Tá, então quais tecnologias vamos escolher para nosso exemplo?
1- Um computador rodando Windows 7 comum.
ATENÇÃO! A grande maioria dos servidores é Linux, e boa parte das linguagens
de servidor pode ser usada tanto em um quanto no outro (Java, PHP, Python,
Ruby, MySQL…)
2- O banco de dados MySQL, que é fácil de instalar, configurar e rodar no
Windows e é bastante suportado, tendo uma interface gráfica facilitadora.
3- A linguagem de programação Ruby e o framework de aplicações web Ruby On
Rails, ambos compatíveis com Windows e Linux. Existem muitas páginas famosas
que usam Rails, sendo este bastante famoso (Twitter…) e ele tem uma forte
comunidade. Apesar de não ser muito fácil usar em Windows, pode facilitar o
desenvolvimento com scaffold… e é diferente ;-)
Vamos lá detalhar isso:
Cleber @ Tavares Junior .com
22. Banco de Dados
1- Sobre o sistema operacional, vale ressaltar aqui que uma vez que você
desenvolva no Windows, o processo de *deploy*, ou colocar em produção /
funcionamento em um servidor com Linux, pode ser trabalhoso. Mas os servidores
Linux são mais baratos (e robustos e seguros…). Fica o aviso. Não veremos isso
aqui hoje.
Cleber @ Tavares Junior .com
23. Banco de Dados
2- Banco de dados MySQL;
http://www.mysql.com/downloads/mysql/
Gratuito na versão Community, com código fonte se quiser, 30 megas.
Esta é a versão mais nova.
Você pode experimentar
versões mais antigas
(5.0 e 5.1) se tiver
problemas de
compatibilidade
Cleber @ Tavares Junior .com
31. Banco de Dados
Podemos testar como acima para saber se tudo está ok.
Podemos fazer tudo via linha de comando (cmd).
Mas também podemos ter um editor visual para ajudar.
Aí entra o SQLyog:
http://www.webyog.com/en/
http://code.google.com/p/sqlyog/downloads/list
Vamos fazer o download da versão Community gratuita e instalar.
Cleber @ Tavares Junior .com
38. Banco de Dados
Temos agora o banco de dados MySQL funcionando com um editor visual no
Windows, vamos ao próximo passo:
3- A linguagem de programação Ruby e o framework de aplicações web Ruby On
Rails, ambos compatíveis com Windows e Linux e também tendo vários editores.
http://rubyinstaller.org/
Cleber @ Tavares Junior .com
42. Banco de Dados
Não esquecer de na mesma página baixar o Ruby Development Kit, que permitirá
instalar extensões nativas como o mysql2!
Assim que terminar o download, você deverá extrair os arquivos para o diretório /
pasta C:ruby193devkit, que não existe e precisa ser criado.
Agora, volte ao terminal. Você precisará instalar o DevKit na instalação atual do
Ruby. Para isso, digite os comandos:
cd C:Ruby193devkit para ir ao diretório que você acabou de extrair. Execute os
comandos:
ruby dk.rb init
e depois ruby dk.rb install
Cleber @ Tavares Junior .com
43. Banco de Dados
Não acabou :-/ Nós ainda precisamos configurar o Ruby para suporte ao MySQL.
Para fazer isso, acesse a página de downloads do MySQL e clique no link MySQL
Connectors. Precisaremos da versão "Connector/C (libmysql)". Na página de
download, escolha a opção sem o instalador. Escolha a versão de 32-bits. Isso é
necessário porque o Ruby é 32-bits e, mesmo que a instalação do MySQL tenha
sido feita em 64-bits, o conector que será usado por ele deve ter a mesma
arquitetura. Extraia os arquivos e copie o arquivo mysql-connector-c-
noinstall-6.0.2-win32/lib/libmysql.dll para o diretório C:Ruby193bin. Isso é
necessário pois DLLs precisam estar no PATH do Windows e, o diretório bin do
Ruby no Windows está lá.
Cleber @ Tavares Junior .com
45. Banco de Dados
ATENÇÃO! Os passos acima são os mais problemáticos. Se não conseguir rodar seu
servidor, veja solução mais abaixo.
Cleber @ Tavares Junior .com
46. Banco de Dados
Lembrando que:
“Nada é totalmente fácil ou difícil, esta é a beleza do mundo. Cabe à pessoa julgar
as ferramentas para alcançar seus objetivos.”
A linguagem Ruby junto com o framework para desenvolvimento web Rails tem suas
vantagens em relação ao PHP, incluindo um modelo de MVC (já discutido) embutido.
Com o até aqui feito, temos esta nova linguagem em nossa máquina habilitada para
trabalhar com MySQL. Mas a linguagem não é tudo. Assim como em C# eu tenho o
framework (conjunto de classes) XNA para me facilitar o desenvolvimento de
jogos, em AS3 eu tenho a library / biblioteca Box2D para física, em ambiente
Mobile / Java eu tenho uma série de frameworks (AndEngine, Cactus2D,
XNAndroid) para jogos, ou posso usar a engine (grande conjunto de ferramentas)
Unity em C# ou Boo, eu preciso de um framework para direcionar meu aplicativo /
ranking na web.
Este framework se chama Ruby On Rails (Ruby nos trilhos). Vamos instalá-lo.
Cleber @ Tavares Junior .com
47. Banco de Dados
O comando acima instala as classes sem a documentação, que é demorada…
Cleber @ Tavares Junior .com
48. Banco de Dados
Aproveitando que estamos falando sobre isso tudo, não poderia deixar de chamar a
atenção para se verificar se está instalado na máquina também um sistema de
controle de versão. Isto é importantíssimo em qualquer desenvolvimento de
sistemas ou jogos. Sugiro o TortoiseSVN, e aos mais corajosos o Git, que já tem
versão estável para Windows. (TortoiseGIT…) Mas foge ao escopo deste trabalho
falar sobre isso agora.
Vamos atualizar coisas que o rails precisa para criar uma app (bundle…):
gem update
gem install rake –v 0.9.2.2
gem install coffee-script-source -v 1.3.3
gem install execjs -v 1.4.0
gem install coffee-script -v 2.2.0
gem install coffee-rails -v 3.2.2
gem install jquery-rails -v 2.0.2
gem install mysql2 -v 0.3.11
gem install sass –v 3.1.20
gem install sass-rails -v 3.2.5
gem install uglifier -v 1.2.6
Cleber @ Tavares Junior .com
49. Banco de Dados
Alternativa para tanta atualização: http://railsftw.bryanbibat.net/
MUITO BOM!!!
Cleber @ Tavares Junior .com
50. Banco de Dados
Agora podemos dar o comando para criar nossa aplicação / app rails:
Rails new teste –d mysql
Com este comando (que deve ser dado em um diretório adequado) criamos um
subdiretório chamado teste, onde se cria toda a estrutura (quq já vamos ver) do
Rails, usando um banco de dados mysql (sqlite é o padrão)
Mas espere! E para editar os arquivos? Vamos ficar na linha de comando o tempo
todo? Não… Existem muitos editores (a.k.a. Flash IDE, Flash Develop, Visual
Studio, Eclipse, Mono Develop) que você pode usar para Rails, que reconhecem a
sintaxe do Ruby, desde gratuitos até pagos de diversos valores. Sugestões temos
o Notepad++, Redcar, Scite, gEdit… o próprio Eclipse…
Mas vamos ficar de NetBeans. Mesmo com os problemas dele… (peso e obsolência)
Cleber @ Tavares Junior .com
55. Banco de Dados
Veja como o Rails organiza nossos arquivos
(lembrando esta pasta foi importada, nenhum arquivo foi
criado pelo NetBeans)
Lembra do conceito de MVC para melhorar nossa lógica do
servidor? Model-View-Controller?
Repare que temos uma pasta de Models (para os modelos que
representam justo a base de dados)
Uma pasta de Views, para as visualizações/layouts
E uma pasta de Controllers/lógica
Além disso uma pasta com Helpers/Auxiliares, um enviador
de email, Confidurações, pasta Pública, Logs de servidor,
arquivos de teste e documentação (Rails te orienta a fazer
os testes de lógica de servidor!), bibliotecas e… migrations!
Cleber @ Tavares Junior .com
56. Banco de Dados
As migrations tem a ver com nosso banco de dados, são as mudanças nele ao longo
do desenvolvimento de nossa aplicação. Pense na importância disso. Se seu banco
de dados não corresponder à lógica da sua aplicação (controllers / views), você
corre o risco de tentar exibir algo que não existe (erro na certa) ou de guardar
informações desnecessárias (desperdício). Coerência.
“Uma página é uma exibição de um banco de dados”, controverso… especialmente
em jogos.
As migrations e o models nos “protegem” de ter que lidar com a linguagem SQL
diretamente…
Vamos gerar no nosso banco / página as informações anteriores de Player (o inglês
é quase necessário para programar web / sistemas / rails / páginas…)
Cleber @ Tavares Junior .com
57. Banco de Dados
rails generate scaffold Player name:string birth:date phone:string
Cleber @ Tavares Junior .com
58. Banco de Dados
Scaffold = arcabouço = migration (mudança no BD) + Model (representação do BD
no servidor) + Controller (fluxo de telas) + View (exibição), tudo junto.
Vamos colocar nossa aplicação nesta versão: Migrar o Banco de Dados
Opa, fomos negados! Que houve? Não conseguimos acesso aoBanco de Dados.
Vamos editar nosso arquivo de configuração no NetBeans.
Cleber @ Tavares Junior .com
60. Banco de Dados
Este é nosso arquivo de configuração do acesso do servidor na base de dados, toda
tecnologia de servidor tem essa configuração. Repare que Rails nos dá
automaticamente 3 tabelas (que devem ser criadas), chamadas por padrão de
nome_development, nome_teste, nome_production, com configurações separadas
para cada uma. Tudo para orientar o bom desenvolvimento!
Vamos configurar a tabela de desenvolvimento:
Cleber @ Tavares Junior .com
62. Banco de Dados
Uma vez com isso salvo vamos rodar nossa migração:
Ok. Vamos rodar nosso servidor e ver isso?
Como assim rodar o servidor? Ah, não contei? Quando você faz o código, precisa
de algo para executá-lo. Um Apache Server da vida, vai ler seu código e atender às
requisições de página.
Sorte nossa que o Rails vem com um servidor embutido, o WEBrick, basta chamá-lo
assim: (ah, e podemos depois mudar de servidor se quisermos, inclusive para
Apache)
Cleber @ Tavares Junior .com
63. Banco de Dados
rails server
Repare que ele está “ouvindo” (atendendo requisições) em http://localhost:3000
Cleber @ Tavares Junior .com
64. Banco de Dados
Tcharam! Temos uma página rodando, “Hello World” (antes mesmo da migration)
Cleber @ Tavares Junior .com
65. Banco de Dados
E olhando direto no SQLyog nossa base de dados, vemos que ela já está com a
tabela correta (lembre, um comando para gerar os arquivos e outro para migrar)
Cleber @ Tavares Junior .com
66. Banco de Dados
Se olharmos no NetBeans nossas pastas e arquivos, vemos que temos já controllers
e views para Player:
Cleber @ Tavares Junior .com
67. Banco de Dados
Lembrando que os controllers direcionam o fluxo de nossa aplicação, ou seja, que
página mostrar. Sabe uma página “index”? Pois é, olha lá o método de resposta à
ela ali…
E começamos aqui a ver um pouco mais de perto a linguagem Ruby. Não é tão
difícil, é? AS funções/métodos são defs, com end no final (parece Basic). O
@players é um conjunto de players… sim, instâncias de uma classe.
Conhece o RPG Maker? Sabe sua linguagem de programação? RGSS? Ruby Game
Script System! Isso aí! São a mesma.
Cleber @ Tavares Junior .com
68. Banco de Dados
Repare que eu estou na verdade mapeando um método de acesso à página do
próprio protocolo http, o GET. O GET sem número em um controller lê todos os
objeots correspondentes, o GET/numero retorna o objeto com aquele id, assim
como os métodos POST, PUT e DELETE estão mapeados… isso se chama REST e é
uma técnica muito eficiente.
Em Rails, não saia dos “trilhos”. Mantenha seus nomes corretos e tudo fará sentido
e funcionará automaticamente. Esta é a filosofia do framework.
Vamos “olhar” a view?
Cleber @ Tavares Junior .com
69. Banco de Dados
Repare como funciona bem como uma camada de visualização, sem interferir nos
dados e podendo ser mudada à vontade. Inclusive traduzida, sem mudar a base.
Cleber @ Tavares Junior .com
70. Banco de Dados
O que temos aqui é aquela lista de @players sendo mostrada. Repare no “for each”.
Epa, peraí… eu não escrevi código nenhum, será que eu já posso ver isso? Hum…
Cleber @ Tavares Junior .com
71. Banco de Dados
Uau! Eu tenho uma página com uma listagem dos jogadores e um cadastro!
1- Vamos ver seu código fonte, o html?
Cleber @ Tavares Junior .com
73. Banco de Dados
Repare que eu tenho um código “limpo” no cliente, com a importação automática de
alguns javascripts padrões (posso alterar), alguns metanames padrões (também
posso alterar) e a tabela com um link para criar um novo jogador.
É assim que funciona uma tecnologia de servidor. Gera uma página ou informação
dinâmica e “cospe” ela para quem pedir. (perdão pelo termo, culpa do Carlos)
Voltando ao controller, ele responde à requisições html e também… xml! Como
isso? Vamos acessar a mesma coisa, uma listagem dos jogadores, mas em xml:
Cleber @ Tavares Junior .com
74. Banco de Dados
Repare que ele não deu erro! Apenas mostrou o XML vazio, afinal, ainda não temos
jogadores. Ou recordes, ou imagens, o que seja. Mas se tivéssemos estaria ali, sem
nenhum esforço! Qual a importância disso? Se tivéssemos acessando estas
informações pela página, mostramos o html. Mas se tivéssemos nosso cliente em
Unity ou XNA ou Flash para mostrar a lsita de jogadores, por exemplo, qual a
melhor maneira de fazer isso? XML!
Cleber @ Tavares Junior .com
75. Banco de Dados
2- Muito bonito, mas a bagaça funciona?
Vamos tentar cadastrar um novo jogador:
Cleber @ Tavares Junior .com
76. Banco de Dados
2- Muito bonito, mas a bagaça funciona?
Vamos tentar cadastrar um novo jogador:
Cleber @ Tavares Junior .com
77. Banco de Dados
2- Muito bonito, mas a bagaça funciona?
Vamos tentar cadastrar um novo jogador:
Cleber @ Tavares Junior .com
78. Banco de Dados
2- Muito bonito, mas a bagaça funciona?
Vamos tentar cadastrar um novo jogador:
Definitivamente funciona.
Cleber @ Tavares Junior .com
82. Banco de Dados
É possível ver o dump da database
Cleber @ Tavares Junior .com
83. Banco de Dados
Não satisfeito com os testes e a lógica de “negócio”, quer mais facilidade para
criar a aplicação?
Lembra no início que nossa tabela tinha o nome do jogador como campo
obrigatório? Pois é, vamos ao model do player (nosso correspondente da tabela)
resolver isso:
Estava assim:
Ficou assim:
Só isso… vamos à página…
Cleber @ Tavares Junior .com
84. Banco de Dados
Se eu tentasse cadastrar em branco antes poderia…
Cleber @ Tavares Junior .com
85. Banco de Dados
Agora não mais…
Ah, as mensagens de erro são
personalizáveis.
Cleber @ Tavares Junior .com
87. Banco de Dados
Rails pode trabalhar com sistemas de arquivos, anexos, o que você quiser, de forma
fácil, basta usar a imagninação e a pesquisa ;-)
Usanod os validates corretos você consegue montar os relacionamentos entre os
modelos, e a busca de informações.
Cleber @ Tavares Junior .com
88. Banco de Dados
Uma ótima dica de documentação, não apenas de Ruby ou Rails, mas de dezenas de
linguagens e frameworks:
Cleber @ Tavares Junior .com
89. Banco de Dados
Uma ótima dica de documentação, não apenas de Ruby ou Rails, mas de dezenas de
linguagens e frameworks:
Cleber @ Tavares Junior .com