banco de dados

Propaganda
Prof. Me. Edson Yanaga
BANCO DE DADOS
graduação
análise e desenvolvimento de sistemas
Sistemas para internet
MARINGÁ-pr
2012
Reitor: Wilson de Matos Silva
Vice-Reitor: Wilson de Matos Silva Filho
Pró-Reitor de Administração: Wilson de Matos Silva Filho
Presidente da Mantenedora: Cláudio Ferdinandi
NEAD - Núcleo de Educação a Distância
Diretoria do NEAD: Willian Victor Kendrick de Matos Silva
Coordenação Pedagógica: Gislene Miotto Catolino Raymundo
Coordenação de Marketing: Bruno Jorge
Coordenação Comercial: Helder Machado
Coordenação de Tecnologia: Fabrício Ricardo Lazilha
Coordenação de Curso: Danillo Xavier Saes
Supervisora do Núcleo de Produção de Materiais: Nalva Aparecida da Rosa Moura
Capa e Editoração: Daniel Fuverki Hey, Fernando Henrique Mendes, Jaime de Marchi Junior, José Jhonny Coelho, Luiz
Fernando Rokubuiti e Thayla Daiany Guimarães Cripaldi
Supervisão de Materiais: Nádila de Almeida Toledo
Revisão Textual e Normas: Cristiane de Oliveira Alves, Gabriela Fonseca Tofanelo, Janaína Bicudo Kikuchi, Jaquelina
Kutsunugi, Karla Regina dos Santos Morelli e Maria Fernanda Canova Vasconcelos.
Ficha catalográfica elaborada pela Biblioteca Central - CESUMAR
CENTRO UNIVERSITÁRIO DE MARINGÁ. Núcleo de Educação
a distância:
C397 Banco de dados / Edson Yanaga. Maringá - PR, 2012.
143 p.
“Graduação em Análise e Desenvolvimento de Sistemas e Sistemas para Internet - EaD”.
1. Banco de dados. 2. Arquitetura de sistemas. 3.EaD. I. Título.
CDD - 22 ed. 005.74
CIP - NBR 12899 - AACR/2
“As imagens utilizadas neste livro foram obtidas a partir dos sites PHOTOS.COM e SHUTTERSTOCK.COM”.
Av. Guedner, 1610 - Jd. Aclimação - (44) 3027-6360 - CEP 87050-390 - Maringá - Paraná - www.cesumar.br
NEAD - Núcleo de Educação a Distância - bl. 4 sl. 1 e 2 - (44) 3027-6363 - [email protected] - www.ead.cesumar.br
BANCO DE DADOS
Prof. Me. Edson Yanaga
APRESENTAÇÃO DO REITOR
Viver e trabalhar em uma sociedade global é um grande desafio para todos os cidadãos.
A busca por tecnologia, informação, conhecimento de qualidade, novas habilidades para
liderança e solução de problemas com eficiência tornou-se uma questão de sobrevivência no
mundo do trabalho.
Cada um de nós tem uma grande responsabilidade: as escolhas que fizermos por nós e pelos
nossos fará grande diferença no futuro.
Com essa visão, o Cesumar – Centro Universitário de Maringá – assume o compromisso
de democratizar o conhecimento por meio de alta tecnologia e contribuir para o futuro dos
brasileiros.
No cumprimento de sua missão – “promover a educação de qualidade nas diferentes áreas
do conhecimento, formando profissionais cidadãos que contribuam para o desenvolvimento
de uma sociedade justa e solidária” –, o Cesumar busca a integração do ensino-pesquisa-extensão com as demandas institucionais e sociais; a realização de uma prática acadêmica que
contribua para o desenvolvimento da consciência social e política e, por fim, a democratização
do conhecimento acadêmico com a articulação e a integração com a sociedade.
Diante disso, o Cesumar almeja ser reconhecido como uma instituição universitária de referência regional e nacional pela qualidade e compromisso do corpo docente; aquisição de competências institucionais para o desenvolvimento de linhas de pesquisa; consolidação da extensão
universitária; qualidade da oferta dos ensinos presencial e a distância; bem-estar e satisfação
da comunidade interna; qualidade da gestão acadêmica e administrativa; compromisso social
de inclusão; processos de cooperação e parceria com o mundo do trabalho, como também
pelo compromisso e relacionamento permanente com os egressos, incentivando a educação
continuada.
Professor Wilson de Matos Silva
Reitor
BANCO DE DADOS | Educação a Distância
5
Caro(a) aluno(a), “ensinar não é transferir conhecimento, mas criar as possibilidades para a
sua produção ou a sua construção” (FREIRE, 1996, p. 25). Tenho a certeza de que no Núcleo
de Educação a Distância do Cesumar, você terá à sua disposição todas as condições para se
fazer um competente profissional e, assim, colaborar efetivamente para o desenvolvimento da
realidade social em que está inserido.
Todas as atividades de estudo presentes neste material foram desenvolvidas para atender o
seu processo de formação e contemplam as diretrizes curriculares dos cursos de graduação,
determinadas pelo Ministério da Educação (MEC). Desta forma, buscando atender essas
necessidades, dispomos de uma equipe de profissionais multidisciplinares para que,
independente da distância geográfica que você esteja, possamos interagir e, assim, fazer-se
presentes no seu processo de ensino-aprendizagem-conhecimento.
Neste sentido, por meio de um modelo pedagógico interativo, possibilitamos que, efetivamente,
você construa e amplie a sua rede de conhecimentos. Essa interatividade será vivenciada
especialmente no ambiente virtual de aprendizagem – AVA – no qual disponibilizamos, além do
material produzido em linguagem dialógica, aulas sobre os conteúdos abordados, atividades de
estudo, enfim, um mundo de linguagens diferenciadas e ricas de possibilidades efetivas para
a sua aprendizagem. Assim sendo, todas as atividades de ensino, disponibilizadas para o seu
processo de formação, têm por intuito possibilitar o desenvolvimento de novas competências
necessárias para que você se aproprie do conhecimento de forma colaborativa.
Portanto, recomendo que durante a realização de seu curso, você procure interagir com os
textos, fazer anotações, responder às atividades de autoestudo, participar ativamente dos
fóruns, ver as indicações de leitura e realizar novas pesquisas sobre os assuntos tratados,
pois tais atividades lhe possibilitarão organizar o seu processo educativo e, assim, superar os
desafios na construção de conhecimentos. Para finalizar essa mensagem de boas-vindas, lhe
estendo o convite para que caminhe conosco na Comunidade do Conhecimento e vivencie
a oportunidade de constituir-se sujeito do seu processo de aprendizagem e membro de uma
comunidade mais universal e igualitária.
Um grande abraço e ótimos momentos de construção de aprendizagem!
Professora Gislene Miotto Catolino Raymundo
Coordenadora Pedagógica do NEAD- CESUMAR
6
BANCO DE DADOS | Educação a Distância
APRESENTAÇÃO
Livro: BANCO DE DADOS
Professor Me. Edson Yanaga
Salve, caríssimo(a) leitor(a). Tenho um enorme prazer em apresentar-lhe o livro de Banco
de Dados, elaborado especificamente para contribuir na sua formação de futuro(a)
desenvolvedor(a) de software. Sou o Professor Edson Yanaga, autor deste livro. Espero que
você tenha um bom proveito do material.
Permita-me apresentar-me adequadamente: sou Bacharel em Ciência da Computação pela
Universidade Estadual de Maringá (UEM) e Mestre em Engenharia Elétrica e Informática
Industrial pela Universidade Tecnológica Federal do Paraná (UTFPR) na área de Telemática.
Sou empresário (consultor e desenvolvedor) na área de software e trabalho com a plataforma
Java desde 1997 – completando 15 anos de experiência neste ano de 2012. Trabalho também
como administrador de sistemas Unix (Solaris, HP-UX e Linux) desde 2000, e desde 2008
já era adepto e entusiasta da computação em nuvem (cloud computing). Participo de vários
cursos em nível de especialização em diversas instituições, como Cesumar, UEM, UNIPAR
e Faculdade Integrado; e sou coordenador do curso de Especialização em Desenvolvimento
Orientado a Objetos em Java do Cesumar desde 2004. Possuo as seguintes certificações:
Oracle Certified Professional, Java Platform, Enterprise Edition 6 Enterprise JavaBeans
Developer; Certified ScrumMaster; Sun Certified Developer for Java Web Services 5; Sun
Certified Specialist for NetBeans IDE; Sun Certified Web Component Developer for J2EE 1.4;
e Sun Certified Programmer for Java 2 Platform 1.4. Como líder do Redfoot JUG (Java Users
Group) – Grupo de Usuário Java do Norte do Paraná – atuo desde 2004. Tive o prazer de ser
membro do comitê técnico do JavaOne Latin America nas edições de 2010 e 2011. Apresento
palestras em diversos eventos em nível nacional e internacional, e ultimamente sou um grande
entusiasta do Artesanato de Software e do código bem-feito.
Confesso que foi um tremendo desafio escrever este material. Até certo ponto é uma repetição
cansativa dizer que o ritmo das mudanças e inovações cada vez mais se acelera, mas a
princípio o tema “banco de dados” aparentaria ser algo tranquilo pelo fato de ser uma área
do conhecimento bastante consolidada. Ledo engano. Nos últimos cinco anos, a disciplina
de banco de dados passou por profundas transformações que chacoalharam os alicerces
de fundamentos criados e utilizados desde a década de 1970. Os desafios dos sistemas de
BANCO DE DADOS | Educação a Distância
7
informação atuais exigem que manipulemos não gigabytes ou terabytes de informações, e sim
petabytes, exabytes e zetabytes.
Sistemas de informação das gerações anteriores tinham como objetivo gerar informações que
pudessem agregar valor aos processos de negócios. Pois bem, esse objetivo foi alcançado.
Com a tão aguardada e estimulada onipresença de software, a magnitude destas informações
geradas cresceu. Redes sociais, smartphones, tablets, sensores de automação e vários outros
dispositivos geram inúmeros bits de informação a todo momento. Conceitos antigos já não são
soberanos nesses ambientes inóspitos atuais. Diante destes cenários surgiram os conceitos
de Big Data e NoSQL.
Mas para irmos longe e chegarmos a este ponto, devemos dar o primeiro passo. Este material
aborda os conceitos que até recentemente eram considerados como as “regras sagradas” de
banco de dados: os bancos de dados relacionais. E não se engane, caro(a) leitor(a), estes
fundamentos de bancos de dados relacionais são imprescindíveis para que se possa dar o
“próximo passo” rumo ao conhecimento de Big Data e NoSQL.
Na Unidade I teremos a apresentação de tópicos conceituais e definições sobre bancos de
dados, sistemas gerenciadores de bancos de dados e os tipos de usuários que interagem com
esses sistemas. Teremos também uma breve explanação sobre o conceito de transações,
que é uma ferramenta essencial no desenvolvimento de aplicações mais tradicionais como
aquelas que envolvem dados financeiros. Como leitura complementar, temos um texto de
Cezar Taurion (Evangelista Técnico da IBM) falando sobre Big Data. Afinal, é importante
darmos um passo no presente – mas sempre com um olho no futuro. Essa será a tônica das
nossas leituras complementares e sugestões de vídeos: apresentar-lhe sempre os conceitos
de vanguarda que já são aplicados em muitos casos de uso em aplicações modernas.
A Unidade II descreverá a terminologia e outros conceitos básicos que serão utilizados no
restante deste material, tais como a diferenciação entre schemas e instâncias de dados; bem
como a arquitetura de sistemas de banco de dados. Conhecer a arquitetura permitirá que você,
como desenvolvedor(a) de software, possa explorar melhor os recursos do seu sistema de
banco de dados – além de auxiliá-lo(a) na escolha dos diferentes tipos de produtos existentes
e também dos produtos concorrentes em cada tipo ofertado.
O modelo relacional de banco de dados propriamente dito será abordado na Unidade III. A
8
BANCO DE DADOS | Educação a Distância
partir deste ponto você estará apto a identificar as características de modelos relacionais e
passar a construir seus próprios modelos de dados baseado nos fundamentos apresentados.
Na modelagem relacional, você identificará entidades do seu domínio de negócios, suas
restrições e os relacionamentos entre as diversas entidades modeladas.
Nas Unidades IV e V aprenderemos a linguagem SQL (Structured Query Language), que é uma
ferramenta dominada por 10 em cada 10 desenvolvedores de software que utilizam sistemas de
banco de dados. De conceito simples, acredito piamente que não será um problema para você,
futuro(a) desenvolvedor(a) de software bem feito. Mas convém ressaltar que SQL possui uma
natureza declarativa, que é diferente das linguagens imperativas como Java, C ou Pascal
com as quais você provavelmente está acostumado(a). Após sua criação, a SQL tornou-se um
padrão de facto para manipular informações em sistemas de banco de dados por meio de seus
comandos para inserção, atualização, remoção e consulta de instâncias de dados.
E antes que você possa apreciar o conteúdo do material, permita-me apresentar meu ponto de
vista para reflexão: em muitas empresas o sistema de banco de dados tornou-se o repositório
“sagrado” das informações, trancado a sete chaves e reservado ao guardião denominado de
DBA (DataBase Administrator). Aliás, é bastante comum que os alunos aprendam ou venham
a concluir que o banco de dados é o coração de um sistema de informação – baseados
nessas falsas impressões transmitidas até certo ponto em grande quantidade. Para mim e
também para muitos autores renomados do mundo do software, o banco de dados é apenas
uma ferramenta utilizada na construção de nossos sistemas de informação. E como toda
e qualquer ferramenta, não pode ficar acima do próprio código que atende ao processo de
negócios da empresa. Isso diminui sua importância? Certamente que não! Mas quando
modelar seu sistema de informação, pense primeiro no seu modelo de negócios e postergue
até o último momento a sua visão sobre o banco de dados. Tenho certeza de que isso tornará
a sua aplicação muito melhor projetada e permitirá que ela ofereça um retorno muito melhor
ao seu negócio.
O banco de dados é só um detalhe. Um detalhe importante, mas o considere um detalhe.
O coração da sua aplicação é o código bem feito que você elaborará para atender ao seu
negócio. Pense nisso, e a cada batida desse coração você poderá usufruir de muito retorno (e
muito dinheiro, espero).
Um bom proveito e uma ótima leitura.
Prof. Me. Edson Yanaga
BANCO DE DADOS | Educação a Distância
9
Sumário
UNIDADE I
CONCEITOS DE BANCOS DE DADOS
CARACTERÍSTICAS DE SISTEMAS DE BANCOS DE DADOS.............................................20
TRANSAÇÕES.........................................................................................................................27
VANTAGENS DE SE UTILIZAR UM SGBD.............................................................................31
UNIDADE II
OS BANCOS DE DADOS E O SOFTWARE
SCHEMAS, INSTÂNCIAS E ABSTRAÇÕES...........................................................................42
INTERFACES DOS SGBDS.....................................................................................................43
ARQUITETURAS DE SISTEMAS DE BANCO DE DADOS....................................................46
MODELO CENTRALIZADO.....................................................................................................47
CLASSIFICAÇÃO DOS SISTEMAS DE BANCO DE DADOS.................................................56
UNIDADE III
O MODELO RELACIONAL
CONCEITUAÇÃO.....................................................................................................................68
RESTRIÇÕES DO MODELO RELACIONAL...........................................................................71
UNIDADE IV
SQL Básico
DEFINIÇÕES DE DADOS E TIPOS EM SQL..........................................................................93
RESTRIÇÕES..........................................................................................................................97
CONSULTAS BÁSICAS EM SQL.............................................................................................99
COMANDOS DE MODIFICAÇÃO DE DADOS EM SQL........................................................104
UNIDADE V
MAIS SQL
CONSULTAS ENVOLVENDO NULL...................................................................................... 118
CONSULTAS UTILIZANDO JOINS........................................................................................124
CONSULTAS COM FUNÇÕES DE AGREGAÇÃO................................................................126
COMANDOS DE ALTERAÇÃO DE SCHEMA.......................................................................128
CONCLUSÃO......................................................................................................................... 141
REFERÊNCIAS......................................................................................................................143
UNIDADE I
CONCEITOS DE BANCOS DE DADOS
Professor Me. Edson Yanaga
Objetivos de Aprendizagem
• Apresentar os conceitos fundamentais envolvendo dados e bancos de dados em
sistemas computacionais.
• Descrever as formas interação dos usuários com os bancos de dados.
• Comparar as vantagens desta abordagem em relação a outras similares.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
• Conceituar bancos de dados, sistemas gerenciadores de banco de dados e
sistemas de banco de dados
• Apresentar as principais características de sistemas de banco de dados
• Enumerar alguns papéis de usuários envolvidos na interação com sistemas
de bancos de dados
• Descrever algumas vantagens na utilização de sistemas de bancos de dados
comparados a outras abordagens
Fonte: SHUTTERSTOCK.COM
INTRODUÇÃO
“Scientia potentia est”: “Conhecimento é poder”.
Sim, caro(a) leitor(a), conhecimento é poder. Informação é poder. Na sociedade do século
XXI, chamamos estas informações armazenadas em sistemas computacionais de dados. E
temos informação em abundância. O desafio crescente dos próximos anos é encontrar formas
eficientes de processar os dados que já temos e ainda criar para gerar conhecimento e,
consequentemente, riqueza.
Nas últimas décadas, boa parte do software desenvolvido envolve além do processamento
de informações: as informações de entrada e de saída do software (além de outras
metainformações intermediárias) devem ser armazenadas em um mecanismo confiável, e que
possibilite o acesso simples e rápido à leitura e escrita destas informações.
Há alguns anos, escrever sobre o tema “banco de dados” seria uma tarefa relativamente
tranquila, pois muitos acreditavam tratar-se de um assunto absolutamente consolidado.
Mas o nosso mundo está em constante mudança e os modelos de negócios que surgiram
recentemente provocaram uma ruptura na forma de se pensar no armazenamento de
informações em bancos de dados.
BANCO DE DADOS | Educação a Distância
15
Mas de onde vem este termo que conhecemos como “banco de dados”? Pois em inglês, o
termo refere-se a databases, que numa tradução literal definiríamos como “base de dados”. Um
bom palpite remete a uma visão generalizada de que as instituições denominadas de “bancos”
guardam de modo bastante seguro o nosso dinheiro. Os “bancos de dados” seriam então
ferramentas que guardariam nossas informações (dados) de modo também supostamente
seguro e confiável.
Outra confusão bastante comum e plenamente justificada refere-se à diferença entre os termos
“banco de dados” e os sistemas que o gerenciam. Segue uma definição segundo Navathe
(2011, p.3):
Um banco de dados é uma coleção de dados relacionados. Os dados são fatos que
podem ser gravados e que possuem um significado implícito. Por exemplo, considere
nomes, números telefônicos e endereços de pessoas que você conhece. Esses dados
podem ter sido escritos em uma agenda de telefones ou armazenados em um computador,
por meio de programas como o Microsoft Access ou Excel. Essas informações são
uma coleção de dados com um significado implícito, consequentemente, um banco de
dados.
Nossos bancos de dados podem ser coleções de dados relacionados dos mais diversos
tamanhos. Desde uma pequena agenda contendo números e contatos de pessoas até um
índice gigantesco de páginas de Internet e buscas relacionadas ou todas as mensagens e
informações trocadas entre bilhões de usuários de uma rede social.
Em termos computacionais, há uma categoria de software especializado que é desenvolvido
especificamente com o propósito de se gerenciar estas coleções de dados: os sistemas
gerenciadores de banco de dados – popularmente reconhecidos pela sigla SGBD (ou DBMS
– DataBase Management Systems, na sigla original em inglês). Segue mais uma definição de
Navathe (2011, p.3), sobre o termo:
Um sistema gerenciador de banco de dados (SGBD) é uma coleção de programas
que permite aos usuários criar e manter um banco de dados. O SGBD é, portanto,
um sistema de software de propósito geral que facilita os processos de definição,
construção, manipulação e compartilhamento de bancos de dados entre vários usuários
e aplicações. A definição de um banco de dados implica especificar os tipos de dados,
16
BANCO DE DADOS | Educação a Distância
as estruturas e as restrições para os dados a serem armazenados em um banco de
dados.
Embora não seja necessário utilizar um SGBD para se desenvolver quaisquer sistemas de
software, tal opção não se mostra viável. Relembrando o nosso conceito de que a importância
do software consiste em sua capacidade de se gerar valor com as informações que manipula,
tem-se que implementar nosso próprio mecanismo de manipulação de dados em nossas
aplicações não gera valor: somente custo. É por este motivo que atualmente definimos os
SGBDs numa categoria de software que consideramos como commodity.
Exemplos de SGBDs relacionais (mais tradicionais e consolidados) incluem Oracle, DB2, SQL
Server, Access, PostgreSQL, MySQL, Derby e H2. Já exemplos de SGBDs não relacionais
(também conhecidos como NoSQL) incluem MongoDB, Redis, Neo4j e Riak.
Para propósitos de definição, finalizaremos denominando o conjunto formado pelo banco de
dados e o sistema que o gerencia, o SGBD, de sistema de banco de dados.
Bancos de dados Open Source: presente ou futuro?
Fonte: SHUTTERSTOCK.COM
Cezar Taurion
Nos eventos sobre Open Source, volta e meia surge uma pergunta sobre bancos de dados Open
Source. Bem, tenho minha opinião pessoal e quero compartilhar com vocês. Vamos ver se vai gerar
muita discordância...
BANCO DE DADOS | Educação a Distância
17
Os softwares de banco de dados são um dos mais importantes componentes de software de uma
organização. Neste ambiente as alternativas de software livre já são bastante conhecidas e freqüentemente são mencionadas na mídia, como MySQL, PostgreSQL, Ingres e Derby.
O MySQL é um produto de uma empresa privada, a MySQL AB. Seu código é desenvolvido pelos
funcionários da empresa e com isso ela garante a propriedade intelectual sobre o produto. Existe uma
comunidade envolvida, mas submissões de código são restritas apenas à correção de bugs. Uma
pergunta: o MySQL pode ser considerado realmente Open Source, uma vez que não adota o modelo
de desenvolvimento colaborativo? O MySQL é ofertado tanto em GPL como sob licença comercial.
As duas versões são funcionalmente equivalentes, sendo diferenciadas pelo nível de suporte e certificação. Indiscutivelmente é o banco de dados Open Source mais popular, com o maior mindshare
do setor.
Outro software é o PostgreSQL, que tem suas origens no Postgres desenvolvido pela Universidade
de Berkeley. Podemos citar também o Ingres, que foi um banco de dados da Computer Associates e
agora pertence a uma organização independente, a Ingres Corporation (www.ingres.com) e o Derby,
originalmente o Cloudscape da IBM e recentemente doado para a Apache Software Foundation, onde
agora é o projeto Derby. O Derby (http://db.apache.org/derby/) é um banco de dados em Java, geralmente embarcado em outros softwares. A IBM, por exemplo, o utiliza embutido em diversos softwares
das famílias WebSphere, Tivoli e Lotus.
Nas minhas andanças pelo mercado tenho visto que na prática os bancos de dados Open Source só
aparecem como competidores dos produtos mais avançados nas aplicações pouco sofisticadas ou
bem especificas.
Por sua vez, os sistemas de banco de dados proprietários buscam competir com funcionalidades diferenciadoras, principalmente as relacionadas com administração de ambientes complexos; escalabilidade; desempenho com grande volume de transações; alta disponibilidade e capacidade de recuperação rápida; e recursos de data warehousing. Além disso, foi criado um ecossistema de negócios em
torno dos principais software de banco de dados proprietários, com diversas empresas independentes
oferecendo ferramentas de software complementares (geradores de relatórios, analisadores estatísticos e outros), serviços de suporte técnico especializado e formação de recursos humanos, e assim
por diante, o que também cria uma barreira de entrada difícil de transpor por qualquer novo entrante.
Já o ecossistema empresarial criado em torno dos bancos de dados Open Source (onde se gera dinheiro) ainda é incipiente, sendo formado por pequenas empresas com abrangência de atuação bastante limitada. Ano passado, a MySQL gerou cerca de 50 milhões de dólares em receita (http://news.
com.com/MySQL+hits+50+million+revenue,+plans+IPO/2100-7344_3-6179290.html), mas ainda é
um traço (cerca de 0,03%) no gráfico que mostra o mercado global de bancos de dados relacionais,
estimado pelo IDC em 16 bilhões de dólares. Como comparativo, o IDC estima que neste mesmo ano,
18
BANCO DE DADOS | Educação a Distância
a receita da IBM com a família de produtos DB2 foi de aproximadamente 3,5 bilhões de dólares.
Qual o papel que os bancos de dados Open Source desempenharão? Na minha opinião estarão
atuando (pelo menos nos próximos 3 a 4 anos) na chamada faixa de produtos com funcionalidades
comoditizadas, onde as características de preço são as de maior importância. Os usuários típicos
serão organizações e aplicações que não precisam de recursos mais sofisticados.
Como avaliar a qualidade de um banco de dados Open Source? Existem diversos critérios que podem
e devem ser considerados em uma análise para seleção de um banco de dados. Os níveis de importância das variáveis da análise estão diretamente relacionadas com os objetivos do negócio e das
necessidades a serem impostas aos softwares de bancos de dados.
Alguns dos principais fatores a serem considerados são:
a) Recursos de gerenciamento e administração. São as ferramentas de apoio às tarefas do administrador do banco de dados.
b) Desempenho e escalabilidade. Os recursos que o software oferece para garantir desempenho
adequado, nos volumes de transações que serão demandados.
c) Recursos técnicos. Disponibilidade de recursos como triggers, stored procedures, cursors, subqueries, capacidade de replicação, recursos de indexação, aderência a padrões (ANSI SQL), particionamento, backup/recovery, suporte a dados não estruturados, independência de plataforma
e recursos de segurança.
d) Custos de Propriedade.
e) Suporte técnico e disponibilidade de recursos humanos. Abrangência do ecossistema em termos
de serviços de suporte e qualificação de recursos humanos.
f)
Disponibilidade de aplicativos.
g) Recursos de data warehousing e BI.
h) Recursos de desenvolvimento de aplicações.
i)
Modalidade de licenciamento.
j)
Visão, estratégia e road map do produto.
k) Tamanho e participação/envolvimento da comunidade.
l)
Modelo de governança adotado pela comunidade.
m) Base instalada e adoção pelo mercado.
Bem e quanto a uma pergunta que muitos me fazem... Minha empresa deve adotar um banco de dados Open Source? Para mim, para mudar um software de banco de dados deve haver uma estratégia
impulsionada por razões fortes e consistentes. Por exemplo, se houver desconfianças que o atual
fornecedor esteja saindo do mercado; falta de funcionalidade do software (não é mais adequado às
BANCO DE DADOS | Educação a Distância
19
necessidades das novas aplicações da empresa); falta de visão estratégica por parte do fornecedor
do software atual; custos de manutenção e operação muito elevados para o resultado obtido; falta de
pessoal gabaritado, que esteja disponível no mercado; carência de consultorias e serviços de suporte
externos; relacionamento com o fornecedor cada vez mais deteriorado... Mudar para um banco de
dados Open Source simplesmente por questões ideológicas deve estar fora de cogitação, pois banco
de dados é muito sério para ser tratado de forma simplista.
OK, e quais seriam então os custos e riscos da migração? Existem custos de migração que não podemsersubestimados.Temososcustosdaconversãodedados,custosdacodificação,testes,eo
que chamamos reconciliação entre as aplicações no novo e no antigo ambiente, sempre considerando
quedificilmenteconseguiremosfazerumamigraçãoestilobigbang,masqueestaserágradual.
Quanto mais complexas forem as aplicações a serem convertidas, mais custosa será a migração. Esta
complexidade pode ser medida pelo número de programas, número de tabelas relacionais, restrições
de integridade referencial e tamanho do banco de dados. Existem custos indiretos como a construção
de interfaces entre as aplicações já convertidas e as que ainda estão no banco de dados antigo. Também os custos de suporte técnicos aos dois ambientes implicam muitas vezes, em gastos adicionais
elevados, principalmente quando o novo banco de dados não for de completo domínio da equipe
técnica da empresa.
Em resumo, os custos da migração afetam os cálculos de custos totais de propriedade. A maioria das
empresas é extremamente cautelosa em trocar de fornecedor de softwares críticos. O perigo de uma
interrupção nos seus negócios decorrente de uma troca mal planejada ou inadequada faz com que
os custos de troca possam ser extremamente elevados e desestimuladores. Migrar de um banco de
dados para outro é sempre uma tarefa complexa e de alto risco, que só deve ser efetuada quando os
benefícios forem claramente demonstráveis.
Fonte: <https://www.ibm.com/developerworks/mydeveloperworks/blogs/ctaurion/entry/bancos_de_dados_open_source?lang=pt_br>. Acesso em: 14 ago. 2012.
CArACtErÍStiCAS DE SiStEmAS DE BANCOS DE DADOS
Se utilizar um sistema de banco de dados parece uma solução natural, qual seria a outra
solução alternativa? Pense em algumas aplicações que você utiliza e que não fazem uso de
SGBDs. Processadores de texto, planilhas, ferramentas de desenho etc., são alguns exemplos
20
BANCO DE DADOS | Educação a Distância
dessas aplicações. O que todas têm em comum? A necessidade de se armazenar a informação
manipulada por meio de arquivos.
Em qualquer aplicação que necessite do armazenamento de dados, faz-se necessário dispor de
algum mecanismo que permita que estes sejam gravados de modo persistente. A abordagem
de arquivos tem suas vantagens, como por exemplo, a portabilidade dos dados. Você pode
carregá-los eletronicamente ou fisicamente para locais diferentes de modo bastante simples.
Mas entre as desvantagens desta abordagem há todo o trabalho necessário para se criar um
formato e processar a sua gravação e recuperação – e acredite, não é pouco trabalho!
Um SGBD, por outro lado, já dispõe de uma série de funcionalidades prontas para serem
utilizadas pelo desenvolvedor da aplicação. Deste modo, uma série de preocupações passa
a ser delegada a um software de terceiros (o SGBD). A seguir, apresentaremos uma série de
características que diferenciam a abordagem de sistemas de banco de dados da manipulação
manual das informações (como em arquivos, por exemplo).
Natureza autodescritiva
Uma característica fundamental que distingue os sistemas de bancos de dados de outras
abordagens é o fato de que nos SGBDs, o banco de dados e as metainformações sobre
o banco de dados são armazenados conjuntamente. Essas metainformações armazenadas
contêm informações como o tipo, tamanho e restrições do banco de dados. Em termos
técnicos, as metainformações são chamadas de esquema (ou schema, em seu termo original
em inglês).
Isolamento entre Programa e Dados
Numa aplicação que utilize arquivos para o armazenamento de dados, quaisquer alterações na
estrutura do arquivo também implicarão em alterações no programa. Nesse caso, dizemos que
o programa é altamente acoplado à sua estrutura de armazenamento de dados. Em contraste,
SBGDs permitem que o programa somente informe quais dados são armazenados, sem se
BANCO DE DADOS | Educação a Distância
21
importar em como esses dados serão manipulados internamente. Esta característica aumenta
bastante o nível de manutenibilidade do sistema, quando bem aplicada.
Múltiplas visões dos dados
Esta não é uma característica fundamental, mas muitos SGBDs fornecem a possibilidade de
que diferentes usuários com diferentes permissões possam acessar diferentes “visões” dos
dados. Essas visões (views) correspondem a estruturas virtuais criadas a partir dos dados
armazenados e podem conter, além dos próprios dados, também informações derivadas
(calculadas) a partir desses dados.
A criação de diferentes usuários com diferentes permissões a visões específicas é uma
abordagem muito utilizada em sistemas cliente/servidor; ou na integração de aplicações
mediante banco de dados. O auge do uso destas abordagens deu-se no final da década
de 1990, embora ainda hoje seja possível testemunhar aplicações sendo executadas sob
este modelo. Recomenda-se fortemente que no desenvolvimento de novas aplicações, a
abordagem de múltiplas visões e de integração mediante banco de dados seja substituída
por uma abordagem orientada a serviços como SOA (Service Oriented Architecture) ou como
REST (REpresentational State Transfer).
Visões não são uma má prática. São um recurso bastante útil, mas não imprescindível. Como
toda ferramenta, bem utilizada e de modo adequada, é um recurso valioso.
Acesso concorrente de múltiplos usuários
Um SGBD multiusuário, como o próprio nome já define, deve permitir o acesso de múltiplos
usuários. Além disso, o acesso deve ser concorrente, permitindo que todos os usuários
conectados executem operações “ao mesmo tempo”.
Vale a pena refletir sobre dois termos muitas vezes utilizados de forma errônea na área
de Tecnologia da Informação: “paralelo” e “concorrente”. Paralelismo puro é algo raro em
22
BANCO DE DADOS | Educação a Distância
computação, embora seja perfeitamente possível. Ao lidarmos com sistemas de banco de
dados, utilizamos o termo “concorrente”, pois vários usuários têm a impressão de que estão
executando instruções ao mesmo tempo – quando na verdade, por se tratar de informações
acessadas em disco ou com um único barramento de acesso, torna-se necessário algum
mecanismo de contenção que serialize (coloque em fila) cada uma dessas instruções.
Como idealmente a execução dessas instruções é bastante curta, tem-se a impressão do
pseudoparalelismo.
Um conceito fundamental para que o acesso destes múltiplos usuários mantenha o banco de
dados num estado consistente é o mecanismo de transações, que será descrito na próxima
seção.
ArevoluçãodoBigDataestáprestesaacontecer
Fonte: SHUTTERSTOCK.COM
Cezar Taurion
OtermoBigDatacomeçaadespertarmuitaatenção,masaindaéumconceitomaldefinidoecompreendido.ComumarápidapesquisaaoGoogle,identifiquei,pelomenos,umadúziadedefinições.
Nesteartigo,voufalarumpoucosobreoassuntoedebateralgunsdesafiosquetemosparaconseguir
colocar projetos de Big Data em ação.
BANCO DE DADOS | Educação a Distância
23
Sem entrar em definições e nos atendo apenas a conceitos, podemos resumir com uma fórmula simples o que é Big Data: volume + variedade + velocidade de dados. Volume porque, além dos dados
gerados pelos sistemas transacionais, temos a imensidão de dados gerados pelos objetos na Internet
das Coisa, como sensores e câmeras, e os gerados nas mídias sociais, via PCs, smartphones e tablets. Variedade porque estamos tratando tanto de dados textuais estruturados, quanto dos não estruturados, como fotos, videos, emails e tuítes. E, por fim, velocidade porque, muitas vezes, precisamos
responder aos eventos quase que em tempo real. Ou seja, estamos falando de criação e tratamento
de dados em volumes massivos.
Outro desafio: criar e tratar apenas de dados históricos, como os veteranos Data Warehouse e as
tecnologias de BI (Business Intelligence) começam a se mostrar lentos demais para a velocidade com
que os negócios precisam tomar decisões. Aliás, o termo BI já tem mais de 50 anos. Ele foi cunhado
por Hans Peter Luhn, pesquisador da IBM em um artigo escrito nos idos de 1958.
Quando falamos em volume, os números são gigantescos. Se olharmos globalmente, estamos falando em zetabytes, ou 10²¹ bytes. Grandes corporações armazenam multiplos petabytes e mesmo
as pequenas e médias empresas trabalham com dezenas de terabytes de dados. Este volume tende
a crescer geométricamente. Em mundo cada vez mais competitivo e rápido, as empresas precisam
tomar decisões baseadas não apenas em palpites, mas em dados concretos. Assim, para um setor de
marketing faz todo sentido ter uma visão 360° de um cliente, olhando não apenas o que ele comprou
da empresa, como registrado no ERP, mas saber o que ele pensa e diz sobre a empresa e como os
faz - pelo Facebook e Twitter, por exemplo.
Hoje, já é consenso que dados são os recursos naturais da nova Revolução Industrial. Na atual sociedade industrial, ter apenas recursos naturais, como minério, e exportá-los de forma bruta - importando
em troca produtos manufaturados, não garante a competitividade de um país no longo prazo. O importante é a tecnologia e o conhecimento que cria produtos manufaturados. Afinal, um quilo de satélite
vale imensamente mais do que um quilo de minério de ferro.
Fazendo um paralelo, na sociedade da informação é crucial saber tratar os dados na velocidade
adequada. Dados não tratados e analisados em tempo hábil são dados inúteis, pois não geram informação. Dados passam a ser ativos corporativos importantes e como tal, podem - e deverão - ser
quantificados econômicamente.
Big Data representa um desafio tecnológico, pois demanda atenção à infraestrutura e tecnologias
analíticas. O processamento de volumes massivos de dados pode ser facilitado pelo modelo de computação em nuvem, desde, é claro, que este imenso volume não seja transmitido repetidamente via
Internet. Só para lembrar, os modelos de cobrança pelo uso de nuvens públicas tendem a gerar processamentos muito baratos, mas tornam caro a transmissão de muitos dados.
A principal base tecnológica para Big Data Analytics é o Hadoop e os bancos de dados NoSQL, onde
24
BANCO DE DADOS | Educação a Distância
“No” significa Not Only SQL, ou seja, usa-se bases de dados SQL e não SQL. A importância do “Not
Only” SQL explica-se pelo fato do modelo relacional ser baseado na época de sua criação, no início
dos anos 70. Nessa época, acessar, categorizar e normalizar dados era bem mais fácil do que hoje.
Praticamente não existiam dados não estruturados circulando pelos computadores da época. Também não foi desenhado para escala massiva, ou para um processamento muito rápido. Seu objetivo
básico era possibilitar a criação de queries que acessacem bases de dados corporativas e, portanto,
estruturadas. Para soluções Big Data, tornam-se necessárias varias tecnologias, desde bancos de
dados SQL, a softwares que utilizem outros modelos, que lidem melhor com documentos, grafos,
processamento paralelo, etc.
A complexidade do Big Data vem à tona quando lembramos que não estamos falando apenas de
armazenamento e tratamento analítico de volumes massivos de dados, mas de revisão, ou criação,
de processos que garantam a qualidade destes dados e de processos de negócios que usufruam dos
resultados obtidos. Portanto, Big Data não é apenas um debate sobre tecnologias, mas, principalmente, sobre como os negócios poderão usufruir da montanha de dados que está agora à sua disposição.
Aí emerge a questão da integração: como integrar bases de dados estruturadas e não estruturadas
com diversos softwares envolvidos?
O Big Data abre oportunidades profissionais bem amplas. Na minha opinião, existe espaço para dois
perfis profissionais: um mais voltado para os negócios e qualificados para tratar analiticamente as
informações geradas por estas imensas bases de dados e outro com viés mais técnico, ou Data
Architect.
Pelo viés dos negócios, um artigo interessante que foi publicado há poucos meses pelo Wall Street
Journal, na edição brasileira, aponta como problema a escassez de talentos. Ele fala que muitas
empresas americanas começaram a procurar profissionais que saibam interpretar os números usando
a análise de dados, também conhecida como inteligência empresarial. Mas encontrar profissionais
qualificados tem se mostrado difícil. O resultado foi que várias faculdades americanas, como a Faculdade de Pós-Graduação em Administração da Universidade Fordham e a Faculdade de Administração
Kelley, da Universidade de Indiana, começaram a oferecer disciplinas eletivas, cursos de extensão e
mestrados em análise de dados. Já o Data Architect deve lidar com tecnologias SQL e NoSQL, conhecer profundamente conceitos como stream processing e Event Driven Architecture (EDA) e, portanto,
ter capacidade de desenhar estratégias para manusear e analisar grandes volumes de dados de
formatos diferentes, quase que em tempo real.
A idéia de stream processing, ou stream computing, é fantástica; é um novo paradigma. No modelo
de data mining tradicional, uma empresa filtra dados dos seus vários sistemas e, após criar um data
warehouse, dispara “queries”. Na prática, faz-se uma garimpagem em cima de dados estáticos, que
não refletem o momento, mas sim o contexto de horas, dias ou mesmo semanas atrás. Com o stream
computing, esta garimpagem é efetuada em tempo real. Em vez de disparar queries em cima de uma
BANCO DE DADOS | Educação a Distância
25
base de dados estática, coloca-se uma corrente contínua de dados (streaming data) atravessando
umconjuntodequeries.Podemospensareminúmerasaplicações,sejamestasemfinanças,saúde
e mesmo manufatura.
Vamos ver este último exemplo: um projeto em desenvolvimento com uma empresa de fabricação
desemicondutoresmonitoraemtemporealoprocessodedeteçãoeclassificaçãodefalhas.Como
stream computing, as falhas nos chips que estão sendo fabricados são detetadas em minutos e não
em horas ou semanas. Os wafers defeituosos podem ser reprocessados e, mais importante ainda,
pode-se fazer ajustes em tempo real nos próprios processos de fabricação.
Quanto ao EDA, pode-se começar a estudar o assunto acessando seu verbete na Wikipedia.
O termo Big Data vai aparecer na tela do radar dos CIOs em breve. Aliás, já aparece no canto da tela
de um ou outro CIO, e, provavelmente, em alguns anos já será um dos temas mais prioritários das
tradicionais listas de “tecnologias do ano”. Portanto, é bom estar atento à sua evolução e começar a
colocar em prática algumas provas de conceito.
Fonte: <http://imasters.com.br/artigo/23437/banco-de-dados/a-revolucao-do-big-data-esta-prestes-a-acontecer>. Acesso em 15 jul. 2012.
O maior evento da comunidade brasileira de NoSQL:
<http://nosqlbr.com/>.
26
BANCO DE DADOS | Educação a Distância
Fonte: SHUTTERSTOCK.COM
TRANSAÇÕES
O conceito de transação é fundamental em muitas áreas da computação, e particularmente
fundamental em sistemas de banco de dados. Consideramos como transação uma
determinada “unidade de trabalho”, que é realizada em qualquer sistema computacional de
um modo coerente e independente de outras transações. Estas transações devem permitir
que o sistema esteja num estado coerente antes e depois de sua execução, independente de
falhas ou outros problemas que possam ocorrer. Devem permitir também que vários clientes
diferentes acessem concorrentemente o sistema sem que isso possa corromper ou levar a
estados que não sejam considerados coerentes.
Uma definição clássica do conceito de transações envolve o acrônimo ACID, oriundo das
propriedades de Atomicidade, Consistência, Isolamento e Durabilidade.
Atomicidade
A propriedade atomicidade de banco de dados advém do conceito de átomo da física – o qual
até recentemente supunha-se indivisível. Essa indivisibilidade pressupõe que as operações
realizadas numa transação sejam todas realizadas por completo; ou que nenhuma seja
realizada. Popularmente seria o conceito do “tudo ou nada”. Isto permite que durante a nossa
interação com um banco de dados, possamos agrupar vários comandos relacionados com
BANCO DE DADOS | Educação a Distância
27
a garantia de que todos sejam executados – de modo que as informações armazenadas
permaneçam num estado consistente após a execução da transação.
Consistência
A propriedade de consistência assegura que a execução de qualquer transação trará o
banco de dados de um estado consistente para outro estado também consistente. No caso,
a “consistência” implica que todos os dados de um banco de dados devem ser válidos de
acordo com um conjunto de regras que podem incluir restrições de tipo, valor, referências entre
informações etc.
Isolamento
A propriedade de isolamento determina que o resultado da execução concorrente de um
conjunto de transações terá o mesmo resultado de sua execução em série (uma após a outra).
O isolamento transacional é o que garante e permite o acesso concorrente de múltiplos
usuários ao mesmo SGBD.
Durabilidade
A propriedade de durabilidade garante que uma vez que uma transação tenha sido finalizada
com sucesso, os dados terão a garantia de terem sido armazenados corretamente –
independentemente da eventualidade de falhas, falta de energia, erros de aplicação etc.
Na opinião deste autor, é justamente a propriedade de durabilidade que faz com que os
bancos de dados sejam posicionados como “ferramentas sagradas” em muitas empresas.
Novamente, não há menosprezo algum em dizer que o mais importante é o código que atende
aos processos de negócios. Durabilidade é essencial: imagine qualquer empresa perdendo
todos os seus dados. A continuidade do próprio negócio está em risco. Mas mais importante
do que os dados em si está o uso que se faz deles.
28
BANCO DE DADOS | Educação a Distância
Sistemas tradicionais que vêm sendo desenvolvidos nas últimas décadas sempre tiveram como premissa em seus dados sua corretitude (grau em que o software executa suas funções de modo correto).
Isso normalmente implicou na utilização de um banco de dados que pudesse satisfazer as propriedades ACID.
Com o aumento da quantidade de informações e usuários nas aplicações, o fator disponibilidade passou em alguns casos a ser mais importante do que a própria consistência das informações.
Além do ACID, surgiu o acrônimo BASE (Basically Available, Soft state, Eventually consistent) – traduzidoliteralmentecomoBasicamenteDisponível,EstadoflexíveleEventualmenteconsistente.OBASE
tornou-se uma sigla bastante comum ao lidar com bancos de dados não relacionais.
Umareflexãoquevaleapenaserfeitaé:paraosnovosdesafioseempreitadasquevocês,futuros
profissionais,enfrentarão,emquaissituaçõesoACIDérecomendadoeemquaisoutrassituaçõeso
BASE mostra-se mais adequado?
Referência: <http://queue.acm.org/detail.cfm?id=1394128>. Acesso em 15 jul. 2012.
BANCO DE DADOS | Educação a Distância
29
Papéis assumidos pelos usuários de SGBDs
Desenvolvedores de SGBDs
São pessoas que projetam e codificam os SGBDs. Exemplos de pessoas nestes papéis incluem os funcionários de
empresas como Oracle, IBM e Microsoft que atuam diretamente na programação do software SGBD. No caso de
SBGDs livres, podem ser também voluntários ou pessoas
e empresas interessadas na evolução do software. Normalmente são programadores altamente qualificados que
trabalham no código-fonte do SBGD. Mas voluntários de
projetos de software livre também podem contribuir em outras atividades como documentação, por exemplo.
Desenvolvedores de aplicações e
Administradores de Bancos de Dados (DBAs – DataBase Administrators)
São pessoas que desenvolvem software que armazena
as informações num SGBD. Tradicionalmente, em abordagens mais tradicionais e conservadoras, as equipes de
desenvolvimento são separadas em desenvolvedores e
DBAs. Os primeiros desenvolvem o software que acessa
o SGBD. Os segundos projetam os bancos de dados e os
mantém. Em abordagens de desenvolvimento mais modernas tende-se a eliminar esta distinção entre os papéis,
pois quanto maior a distância entre os membros da equipe envolvidos no projeto de software, menor tende a ser a
qualidade do software entregue.
Usuários finais
São pessoas que não interagem diretamente com os
bancos de dados, e sim com as aplicações criadas pelos
desenvolvedores de software que armazenam suas informações em SGBDs. A maioria das pessoas enquadra-se
nesta categoria, e embora sejam os grandes beneficiados
pela tecnologia dos sistemas de bancos de dados, raramente possuem ciência do fato.
30
BANCO DE DADOS | Educação a Distância
<http://youtu.be/Car5V9l8BiQ>.
Klaus Wuestfeld – Prevayler
Neste vídeo Klaus Wuestfeld, um dos pioneiros do XP (eXtreme Programming) no Brasil e criador do
conceito de prevalência de objetos, mostra uma abordagem inovadora e de alto desempenho para
manipulação e persistência de objetos. Atualmente, alguns dos sistemas de transações mais rápidos
do mundo utilizam este conceito.
vANtAgENS DE SE utiliZAr um SgBD
Durante as seções anteriores, já citamos algumas vantagens de se utilizar um SGBD para
armazenar as informações de nossas aplicações. A seguir, as enumeraremos de um modo
mais detalhado, de forma a justificar seu uso numa diversidade de situações.
Diminuir a redundância e fornecer consistência
Imagine uma situação bastante comum: você resolve elaborar um documento e necessita da
colaboração de várias pessoas para fazê-lo. Você então cria o esboço deste documento e o
envia por e-mail a todos os interessados. Cada pessoa realiza as suas modificações em suas
próprias cópias dos documentos e depois repassa novamente por e-mail. Quem tem a última
versão do documento? Quais são os dados corretos? Estas são perguntas difíceis de serem
respondidas nesta abordagem, e provavelmente exigirá muito trabalho manual para se chegar
à versão final do documento.
Um SGBD centraliza todas estas informações, fazendo com que todos os usuários acessem
os mesmos dados. Desse modo, diminui-se a redundância: há somente uma cópia dos dados
BANCO DE DADOS | Educação a Distância
31
a serem manipulados. Isto permite também que o banco de dados sempre permaneça num
estado consistente, pois todos os usuários terão sempre a “última versão” dos dados. Não há
a possibilidade de alguém permanecer com um “pedaço” dos dados antigos e outro “pedaço”
com a informação atual.
Controle de acesso
Muitas informações armazenadas em sistemas são confidenciais. Ao mesmo tempo, é
necessário que esta informação seja compartilhada com as pessoas para que sejam
trabalhadas. Ao utilizar arquivos, é necessário que uma cópia seja enviada aos interessados.
Por múltiplos motivos, essas cópias podem acabar sendo enviadas por e-mail a pessoas
cujo acesso é indevido; ou a mesma pode ser deixada num dispositivo de armazenamento
removível esquecido em alguma mesa de reunião.
No mínimo um SGBD oferece uma combinação de login/senha para acesso a um determinado
banco de dados. Outras restrições relativas a qual usuário pode acessar quais dados também
costumam ser implementadas pela maioria dos SBGDs. Como o acesso é centralizado,
também tem-se uma única cópia para proteção.
Consultas eficientes
Como são aplicações de software de propósito específico, os SGBDs são especialmente
projetados para armazenar eficientemente os dados a eles delegados; e para permitir formas
de consulta eficientes aos mesmos dados. Cada SGBD possui sua estratégia interna para
transformar estas informações em bytes gravados no dispositivo de armazenamento, mas de
um modo geral, não há uma grande diferença de desempenho entre diferentes produtos em
uma quantidade razoável de aplicações.
Em casos de usos típicos, é muito mais importante a eficiência em consultas do que a
eficiência em armazenamento de informações. Assim, os SBGDs utilizam dispositivos como
índices (que são estruturas criadas para otimizar consultas baseadas em certos critérios) e
32
BANCO DE DADOS | Educação a Distância
cachês (caches) para armazenar em memória os dados mais frequentemente acessados.
Estes dispositivos permitem que as consultas possam ser executadas de modo mais rápido, e
em muitos SGBDs, adequar estes dispositivos de modo otimizado chega a quase ser uma arte,
tamanha a quantidade de opções disponíveis.
Backup e Restore
Para garantir a continuidade dos negócios, é essencial executar periodicamente o backup das
informações armazenadas no servidor. Ao invés de cópias físicas dos arquivos do SGBD, é
comum os próprios SGBDs fornecerem ferramentas que permitem a exportação dos dados
para um formato intermediário (texto ou binário) para backup. Estas mesmas ferramentas
suportam a restauração destes dados em caso de necessidade.
As rotinas de backup/restore também são uma ferramenta bastante útil na migração ou cópia
de servidores onde o mesmo SGBD esteja instalado. Situações de migração costumam ocorrer
em caso de falhas ou upgrade de equipamento. Cópias costumam ser utilizadas para permitir o
teste de aplicações em desenvolvimento.
CONSIDERAÇÕES FINAIS
Nesta unidade, pudemos perceber que os bancos de dados são uma coleção de dados
relacionados que representam, por meio de um nível determinado de abstração, o modelo
do mundo real de nossas aplicações de software. Boa parte das aplicações de software
desenvolvidas na atualidade envolve a manipulação, e principalmente, o armazenamento dos
dados – estes muitas vezes em enormes quantidades. Para manipular estes bancos de dados,
criou-se uma categoria de software específico denominada de sistemas gerenciadores de
bancos de dados (SGBDs). O banco de dados (os dados) e o sistema que o gerencia são
denominados conjuntamente de sistemas de bancos de dados.
Durante esta unidade também descrevemos as características que identificam as
propriedades de sistemas de bancos de dados quando comparados a abordagens tradicionais
de processamento de arquivos. Certamente que determinados casos de uso ainda exigem
a utilização de arquivos como meio de armazenamento das informações. Mas com as
informações que detalhamos como características destes sistemas de banco de dados,
esperamos que você, como desenvolvedor(a) possa ter argumentos suficientes para decidir
BANCO DE DADOS | Educação a Distância
33
adequadamente entre uma abordagem e outra.
Como existem muitos tipos de usuários diferentes que podem interagir com os sistemas de
bancos de dados, também apresentamos uma lista não exaustiva dos papéis que estes usuários
podem assumir nestas interações. Uma máxima que devemos sempre utilizar é a “técnica do
espelho”. Olhe sempre para o software que você desenvolve por meio dos olhos de quem usa.
Compreender as situações em que cada tipo de usuário interage com um sistema de banco
de dados permite que tenhamos uma consciência melhor das dificuldades e das necessidades
que os usuários possuem em cada caso de uso cotidiano da nossa vida profissional.
Por fim, tentamos discutir algumas vantagens da abordagem de sistemas de bancos de
dados em relação à implementação de aplicações sem a facilidade e funcionalidade de
um SGBD. Claro que, tendenciosamente, um estudioso de sistemas de bancos de dados
observaria argumentos bastante positivos em relação à abordagem dos SGBDs. O papel de
um desenvolvedor experiente é distanciar-se destes apegos a uma determinada tecnologia ou
outra e decidir sobriamente qual a solução mais adequada para a sua aplicação.
Uma vez entendidos estes conceitos, podemos nos dedicar a estudar melhor alguns dos
detalhes internos dos modelos utilizados pelos sistemas de bancos de dados e das arquiteturas
de software existentes que utilizam estes sistemas. Tais tópicos serão abordados em nossa
próxima unidade.
ATIVIDADE DE AUTOESTUDO
1. Transações tradicionalmente são melhor entendidas por meio do conjunto de suas propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade). Em quais situações da vida real você consegue enxergar a necessidade de se executar operações
com estas propriedades?
2. Ao enumerar as vantagens de se utilizar um SBGD, fizemos uma comparação com a
utilização de arquivos para armazenamento dos dados. Tendenciosamente, o SGBD
apareceu como o vencedor nas comparações. Quais seriam as situações em que os
arquivos seriam uma solução mais adequada? Você consegue exemplificar alguma
outra situação em que uma terceira alternativa seria mais viável?
3. Pense no SBGD como um módulo do sistema ou como uma outra aplicação a ser integrada (pois em muitas concepções modernas, é assim que ele deve ser tratado). Uma
das características dos SGBDs é o isolamento entre o programa e os dados. Quais
os benefícios deste isolamento? Em que outras partes do sistema esta característica
também pode trazer benefícios?
34
BANCO DE DADOS | Educação a Distância
Banco de Dados na Nuvem
Fonte: SHUTTERSTOCK.COM
Jin Zhang, Diretor de Programas da IBM
Profissionaisdedadosestãoadotandoconceitosdecomputaçãoemnuvemparaoferecerbancosde
dadoscomoumserviço–facilitandoasdificuldadesdegerenciamentoeenviandousuáriosparaa
nuvem nove.
“Levasemanasparaconfigurarumnovobancodedados.Precisodeleagora!”
“Nossos dados de desenvolvimento/teste estão uma bagunça. Por que eles nunca são limpos?”
Qualquerumadessasreclamaçõessoafamiliar?Provavelmentesim,sevocêforumprofissionalde
dados em uma grande empresa. Os departamentos de TI dos dias de hoje são afetados por uma lista
não processada de demandas de administração de dados. De solicitações por novos bancos de dados
de desenvolvimento e teste de aplicativos até o backup e a restauração de volumes de dados cada vez
mais crescentes, nunca há uma falta de muito trabalho para manter DBAs na correria.
Emumatentativademinimizarotempoqueosprofissionaisdedadosgastamnomodoreativo-respondendo a solicitações de usuários com tarefas sem parada de “banco de dados, clone, banco de
dados, clone” - algumas organizações estão tomando emprestado conceitos de autoatendimento do
domínio de computação em nuvem e indo em direção a um modelo de banco de dados como serviço
ou DBaaS, em que usuários podem simplesmente “acessar uma nuvem” e capturar um banco de
dados conforme necessário.
Éumaideiaprovocante—principalmenteparausuáriosfinais.Desenvolvedoresdesistemasede
software adoram o controle que eles obtêm com recursos de autoatendimento de DBaaS. Quando eles
estão na toada, em vez de esperando que o departamento de TI volte uma semana mais tarde com um
banco de dados de desenvolvimento/teste, eles podem solicitar e provisionar recursos imediatamente
— mantendo seu ímpeto ativo e suas ideias frescas.
Paratornaressavisãoumarealidade,noentanto,osprofissionaisdedadosnosbastidoresdevem
realizar uma quantia considerável de trabalho no backend. Desenvolver uma nuvem de dados privada
BANCO DE DADOS | Educação a Distância
35
e lançar com sucesso DBaaS para usuários finais requer que DBAs considerem diversos fatores, entre eles a infraestrutura de hardware subjacente da nuvem, as “boas práticas” de dados abrangentes
a serem implementadas e replicadas pela nuvem e, por fim, a interface de serviços que trará todos
esses itens de forma transparente aos usuários finais para concluir a imagem.
“Nossos dados de desenvolvimento/teste estão uma bagunça. Por que eles nunca são limpos?”
Penetrando as nuvens
Computação em nuvem refere-se a uma categoria de soluções de tecnologia que permite que usuários acessem recursos de computação (neste caso, recursos de dados) on demand, conforme necessário, sejam os recursos físicos ou virtuais, dedicados ou compartilhados e independentemente
de como são acessados (por meio de uma conexão direta, rede local [LAN], rede de longa distância
[WAN] ou a Internet).
Para oferecer DBaaS na nuvem, os departamentos de TI corporativos devem construir e gerenciar
uma nuvem de dados corporativa privada — uma plataforma que consiste em hardware de armazenamento, imagens virtuais, esquemas de banco de dados e mais — e disponibilizar essa nuvem a
usuários por meio de uma interface de serviços.
Quando esta infraestrutura estiver instaurada, à medida que necessidades de banco de dados surgem, os usuários podem simplesmente ir para a nuvem, solicitar os recursos que requerem e obter
acesso instantâneo a seu próprio banco de dados pessoal on demand. Quando eles não precisarem
mais dos ativos de dados, os ativos são reciclados de volta na nuvem para redesignação, em vez de
serem deixados desperdiçados e inativos.
Figura 1. Uma infraestrutura otimizada para entrega em nuvem do banco de dados enfatiza
simplicidade e eficiência por meio de automação e normatização de hardware.
36
BANCO DE DADOS | Educação a Distância
Etapa um: Desenvolver a base da nuvem
Sua primeira parada no caminho para construir um ambiente de computação em nuvem e entregar
DBaaS será considerar sua infraestrutura de hardware subjacente e assegurar que seja alinhada
aos objetivos de DBaaS (consulte a Figura 1). Devido à maneira como a maioria dos departamentos
de TI está estruturada, essas decisões de hardware provavelmente não ocorrerão em um vácuo. Na
verdade, a maioria do DBAs precisará colaborar com administradores de sistemas e contrapartes da
arquitetura corporativa para chegarem a um consenso sobre qual deve ser a infraestrutura de hardware. Esse processo pode requerer concessões de todos os lados, portanto, tente entrar na conversa
com um entendimento claro de suas principais prioridades de hardware e as “boas de ter”. Não tem
certeza de quais devem ser essas prioridades? Leia adiante.
Como em qualquer decisão de compra de hardware, muitos atributos afetarão a discussão — plataforma, tamanho de armazenamento, velocidade, custo e mais. Para suportar DBaaS na nuvem, acima
de tudo você irá querer assegurar que seu hardware seja o mais padronizado possível. Como é muito
mais fácil automatizar um script em execução em um sistema aberto homogêneo do que muitos scripts
diferentes em um heterogêneo, a normatização é a chave para automação. DBaaS em seu âmago é
nada mais que automação — a automação do processo de configuração e fornecimento de um banco
de dados — de forma que quanto mais uniforme for sua plataforma de hardware, mais simples será
configurar DbaaS.
Em seguida, dê uma olhada nas opções de armazenamento disponíveis para suportar seu banco de
dados. Certifique-se de que você tenha um entendimento claro dos tipos de recursos que receberá
prontos para uso - inclusive atributos como alta disponibilidade, recuperação de desastre e autonomia
- assim como a capacidade geral de armazenamento e recursos de sua infraestrutura de hardware.
Como essa plataforma formará por fim a base de sua oferta DBaaS, é crítico entender exatamente do
que é capaz - e o que é possível passar a seus usuários finais. Se você usar uma base de armazenamento que tenha recursos excepcionais de confiabilidade, disponibilidade e capacidade de manutenção (RAS), por exemplo, estará mais bem equipado a fornecer bancos de dados na nuvem que são
resilientes e altamente disponíveis também.
Etapa dois: Identificar cargas de trabalho comuns e melhores práticas
O próximo estágio de planejamento de DBaaS fornece a você, como um profissional de dados experiente com conhecimento íntimo dos funcionamentos internos de sua organização e suas estruturas
de dados, a chance de brilhar. A etapa mais crítica para a entrega de DBaaS que realmente traz valor
a seus usuários finais é decidir antecipadamente o tipo de modelos e imagens de banco de dados que
devem ser disponibilizados na nuvem. Para tomar tais decisões, você deve identificar as cargas de trabalho comuns e os processos chaves que ocorrem em seu ambiente de negócios e coletar melhores
práticas. Esses são os principais candidatos para automação e entrega por meio de DBaaS e a chave
para seu lançamento bem-sucedido.
Por exemplo, os DBAs podem trabalhar juntamente com os gerentes de linha de negócios para identificarem os conjuntos de dados que “precisam ter” e usarem essas informações para criarem modelos
de bancos de dados que conectem de forma eficiente a sistemas front-end, funcionem bem com ferramentas de consulta e possam ser facilmente clonados para fornecimento futuro por meio de DBaaS.
Em seguida, a equipe e os sistemas podem acessar a nuvem e ter acesso a todos os modelos que
contêm os dados mais recentes, informações atualizadas no minuto e estruturas de dados - sem criaBANCO DE DADOS | Educação a Distância
37
remasdificuldadesdeadministraçãodedadosdemudançasdeesquema,mapeamento,migração
de dados e mais.
Em outros ambientes corporativos, DBAs podem escolher imagens de bancos de dados - frequentementeincorporandometadadosespecíficosdosegmentodemercadoedadosdereferência-como
candidatos para automação. Um DBA familiarizado com os requisitos de negócios pode isolar uma instância de um banco de dados de produção que contenha um conjunto crítico de tabelas, visualizações,
acionadores e procedimentos armazenados - assim como dados de referência chave - para criar uma
imagem de banco de dados para ser automatizada por meio de DBaaS. Quando os negócios solicitam
umbancodedadosparasuportarumanovafilialouparatestarumaplicativo,nãohaveránenhuma
necessidade de esperar semanas enquanto DBAs o constroem. Em vez disso, ele estará disponível
instantaneamente por meio de DBaaS na nuvem.
Etapa três: Estabelecer um modelo de entrega
AgoraquevocêdecidiusobreasuainfraestruturadehardwareeidentificouosprocessoseprocedimentosaseremautomatizadospormeiodeDBaaS,suaetapafinalserátrabalharcomusuáriosfinais
para educar e ajudar os mesmos a selecionarem a interface por meio da qual esses serviços de dados
serão disponibilizados.
Hátrêsmétodos principais deacesso aDBaaS:pormeio deumainterface gráfica com ousuário
(GUI), uma interface da linha de comandos (CLI) ou diretamente por meio de uma interface representational state transfer (REST) padrão. Qual interface será empregada por fim dependerá muito
dapreferênciadousuáriofinal.Porexemplo,enquantoaGUIéaabordagemmaisfácilesimples
dastrês,seosusuáriosfinaisjáutilizaremaplicativosqueempregamCLI,podeserquenãoqueiram
alternar. Como alternativa, os usuários podem querer eliminar a necessidade de intervenção humana
inteiramente e promover uma integração mais forte com seu ambiente, programando aplicativos para
se comunicarem diretamente com DBaaS por meio de REST. Quando se sabe as opções, é possível
trabalhar com seus usuários e ajudar a guiá-los para a interface de DBaaS mais adequada para seus
desejosenecessidadesespecíficosejuntosselecionarowrapperqueunirátodoopacoteDBaaS.
uma nuvem com um raio de esperança
Não é nenhum segredo que gerenciar os valores de dados em rápida expansão e as necessidades
de administração de banco de dados das grandes empresas dos dias de hoje é uma grande proeza.
DBAs têm uma tarefa dura e não há outra maneira de descrever isso. A boa notícia é que com DBaaS,
osprofissionaisdedadosestãoemumaposiçãoexclusivanãosomentededaremaosusuáriosfinais
novos níveis de liberdade e serviço, mas também para saírem do ciclo vicioso de tarefas de dados
rotineiras e irem para as coisas boas. E apesar de isso poder exigir algum fundamento para chegar
lá, no que se refere a uma nuvem com um raio de esperança, isso é praticamente o melhor que se
pode obter.
Fonte: <http://www.ibm.com/developerworks/br/data/library/dmmag/DMMag_2011_Issue2/cloudDBaaS/>. Acesso em: 14 ago. 2012.
38
BANCO DE DADOS | Educação a Distância
UNIDADE II
OS BANCOS DE DADOS E O SOFTWARE
Professor Me. Edson Yanaga
Objetivos de Aprendizagem
• Apresentar as definições fundamentais de sistemas de bancos de dados.
• Descrever as arquiteturas de bancos de dados e suas características.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
• Conceituar schemas, instâncias, abstrações e as interfaces de interação com
o SGBD
• Estudo do histórico das arquiteturas de computação em geral e de sistemas
de banco de dados
• Classificação dos diferentes tipos de banco de dados de acordo com suas
características
Fonte: SHUTTERSTOCK.COM
INTRODUÇÃO
Nesta unidade, apresentaremos alguns conceitos fundamentais que serão utilizados nas demais
unidades. Para compreender adequadamente os sistemas de banco de dados, é necessário
diferenciar adequadamente os modelos das instâncias dos modelos – pois possuem ciclos de
vida e finalidades bastante distintas.
Diferentes tipos de interface de usuário são disponibilizadas para diferentes tipos de usuários
em vários produtos diferentes comercializados no mercado. Apresentaremos algumas delas
para que você, desenvolvedor(a), possa explorá-las posteriormente.
Entender como podem ser construídos sistemas com SGBDs implica em conhecer também a
história da arquitetura de sistemas de computação, que evoluíram do monolítico até o distribuído
em camadas. Cada geração possui suas particularidades, que também são refletidas na
construção dos diferentes SGBDs.
Apresentaremos também alguns critérios de classificação de SGBDs para que você, como
desenvolvedor(a) de software incumbido(a) da árdua tarefa de escolher um produto, possa
avaliar subjetivamente e objetivamente diferentes alternativas do mercado.
BANCO DE DADOS | Educação a Distância
41
SCHEMAS, INSTÂNCIAS E ABSTRAÇÕES
Uma característica fundamental de qualquer modelo de software (o que inclui o banco de
dados) é o seu nível de abstração. É impossível conseguir modelar todos os aspectos do
mundo real numa aplicação. Assim, decidimos adequadamente escolher somente os aspectos
mais relevantes para resolver um determinado problema, e representamos estes aspectos por
meio de um modelo – que é uma abstração dos dados do mundo real. Um modelo de dados
é uma coleção de conceitos que pode ser utilizada para descrever a estrutura de um banco
de dados. Por meio desses conceitos, conseguimos alcançar a abstração necessária para
construir o nosso modelo de software.
Em qualquer modelo de dados, é importante distinguir aquilo que representa a descrição do
banco de dados com o banco de dados em si. A descrição do banco de dados é denominada
de schema1, que é especificado durante o projeto do sistema de software.
Os dados realmente armazenados num banco de dados podem mudar com uma alta
frequência. No conjunto de contatos da minha agenda pessoal, esse banco de dados muda
toda vez que eu adiciono um novo contato ou altero um telefone ou e-mail deste contato. O
conjunto de dados de um banco de dados num determinado instante do tempo é denominado
de snapshot. Também é definido como o estado atual de todas as instâncias no banco de
dados. Uma instância é um item dentro do banco de dados que segue as definições de seu
schema correspondente.
A distinção entre o schema do banco de dados e o estado do banco de dados é muito importante.
No processo de desenvolvimento de software, quando definimos um novo banco de dados,
primeiro definimos o seu schema – que após criado representa um snapshot inicial vazio. Ao
manipularmos este banco de dados com operações de inserção, alteração e remoção, nós
modificamos o snapshot. O SGBD é responsável por garantir a consistência do snapshot em
O plural correto de schema é schemata, mas praticamente não é utilizado. Na área de tecnologia da informação,
costuma-se utilizar o plural schemas, mesmo sendo errado.
1
42
BANCO DE DADOS | Educação a Distância
qualquer momento do tempo.
Não é uma operação usual ter que realizar modificações no schema, mas elas são realizadas
toda vez que uma mudança nos requisitos do negócio demanda uma alteração no modelo de
dados. Este conjunto de alterações para acomodar mudanças no software é denominado de
schema evolution.
INTERFACES DOS SGBDS
Algumas das interfaces do SGBD com o usuário são:
Linha de Comando
Sem dúvida nenhuma a linha de comando é a interface mais poderosa e
flexível para a interação do usuário com o SGBD. Por este mesmo motivo,
normalmente não é uma opção que a maioria considere como amigável.
Mas desenvolvedores devem sem dúvida nenhuma dominá-la para poder
explorar os recursos do mesmo.
BANCO DE DADOS | Educação a Distância
43
Interfaces Web
44
Muitos SGBDs fornecem interfaces Web que podem ser acessadas por
meio de qualquer navegador para a administração e manipulação dos bancos de dados. Embora não sejam tão poderosas ou produtivas, são bastante amigáveis e possuem ainda a vantagem da disponibilização do acesso.
Muitos administradores de rede não se sentem confortáveis em permitir o
acesso direto ao banco de dados, mas não se importam em liberar o acesso por meio de HTTP (Web).
BANCO DE DADOS | Educação a Distância
Interfaces Desktop
São tão amigáveis quanto as Interfaces Web, mas costumam fornecer capacidades de manipulação gráfica de diagramas. Isso auxilia os desenvolvedores a “enxergar” os relacionamentos entre as entidades do banco de
dados.
BANCO DE DADOS | Educação a Distância
45
Interfaces baseadas
em formulários
O Oracle Forms é um exemplo clássico desta interface, típica de sistemas
implementados utilizando-se triggers e stored procedures. Os usuários finais conseguem executar seus processos de negócios por meio da própria
interface do SGBD, preenchendo formulários e interagindo com a interface
de controle.
ARQUITETURAS DE SISTEMAS DE BANCO DE DADOS
A arquitetura de sistemas de banco de dados confunde-se com a própria história da arquitetura
de sistemas de computação em geral. De fato, ao mesmo tempo em que as aplicações e os
modelos de arquitetura de aplicações evoluíram, também evoluíram os sistemas de banco de
dados. Dentre os fatores que influenciaram estas evoluções estão o aumento da capacidade
de processamento, o aumento da capacidade de armazenamento, o aumento da quantidade e
capacidade das redes de comunicação, a redução de custo dos equipamentos, o aumento do
número de usuários, o aumento da quantidade de informações e a universalização do acesso.
Não há como explicar adequadamente as arquiteturas de sistemas de banco de dados sem
descrever conjuntamente as arquiteturas de sistemas de computação em geral. Nas próximas
seções, apresentaremos e descreveremos concomitantemente estas diferentes arquiteturas,
da centralizada até o modelo em camadas.
46
BANCO DE DADOS | Educação a Distância
MODELO CENTRALIZADO
Os primeiros modelos computacionais eram centralizados, baseados num único mainframe
fornecendo processamento, armazenamento e interface de interação com o usuário no
mesmo equipamento/aplicação. Raros eram os mainframes (devido ao seu alto custo) e por
consequência também poucos eram os usuários que tinham acesso a aplicações baseadas
em mainframe. A interação dos usuários com as aplicações era realizada por meio de terminais
burros, que não possuíam poder de processamento: somente teclado; e exibiam telas geradas
no próprio mainframe e transmitidas até o monitor (usualmente de fósforo verde ou amarelo)
por meio de um cabo de comunicação. A Figura 1 retrata um típico sistema centralizado
baseado em mainframe.
Mainframe
Terminal
Burro
Terminal
Burro
Terminal
Burro
Figura 1
Fonte: o autor
BANCO DE DADOS | Educação a Distância
47
Costumamos retratar este modelo de computação como monolítico, pois todas as atividades
eram baseadas no mainframe. Naturalmente, as aplicações desenvolvidas para este tipo de
equipamento também foram concebidas e implementadas de modo monolítico. Isso significa
que não havia uma distinção clara entre o que era interface com o usuário ou o que era
código de negócios ou código responsável pelo armazenamento de dados. Esta situação é
denominada de sistema altamente acoplado, pois qualquer alteração numa pequena parte
do sistema costuma levar a várias outras alterações em cascata para diversas outras partes
do sistema.
Os bancos de dados eram então extensões da própria aplicação e eram baseados nos modelos
hierárquicos e em rede, que serão apresentados adiante.
Modelo cliente/servidor
Com a popularização dos PCs e o declínio de seus preços, iniciaram-se as primeiras
implantações da arquitetura cliente/servidor. A ideia é que ao invés de termos um grande
equipamento monolítico (mainframe), passamos a ter vários equipamentos menores (e de custo
e capacidade inferior) com propósito específico (banco de dados, arquivos, e-mail, impressão
etc.) interligados por meio de uma rede de comunicação. Cada servidor tornou-se um serviço
especializado (embora não seja incomum agrupar vários serviços num único equipamento,
dependendo da conveniência).
Os clientes, que também são PCs, podem acessar os recursos disponibilizados por estes
servidores por meio de rede. A Figura 2 mostra um esquema simplificado da arquitetura
cliente/servidor.
48
BANCO DE DADOS | Educação a Distância
Servidor
PC
Servidor
PC
PC
Servidor
PC
Figura 2
Fonte: o autor
Em termos de arquitetura das aplicações, denominamos o modelo cliente/servidor como modelo
de 2 camadas, respectivamente camada cliente e camada servidor. No lado cliente costumase implantar os recursos da aplicação relacionados à interface com o usuário, enquanto no
lado servidor implanta-se a lógica de negócios, armazenamento e controle transacional. Este
modelo tornou-se extremamente popular no final da década de 1980 e início da década de 1990,
e com ele também popularizou-se a prática do desenvolvimento de aplicações utilizando-se
triggers e stored procedures dentro do próprio SGBD. Cada cliente estabelece uma conexão
remota ao SGBD, que passa a executar a lógica de negócios, armazenar os dados e controlar
as transações.
O modelo cliente/servidor é bastante adequado quanto às aplicações que possuem um número
limitado de usuários concorrentes (de 100 a até 300 ou 400 usuários). A partir deste número,
BANCO DE DADOS | Educação a Distância
49
o desempenho desta arquitetura degrada-se consideravelmente, e o particionamento e
distribuição dos sistemas de banco de dados (escalabilidade horizontal) costuma ser bastante
dispendioso. Naturalmente, há um limite também para a troca do equipamento por um maior
(escalabilidade vertical). Surgiram então os modelos de 3 camadas para tentar resolver este
problema.
Modelo de 3 Camadas ou N-Camadas
Aplicações baseadas na Internet (web) costumam adicionar uma camada de software adicional
entre o cliente e o SGBD, como ilustrado na Figura 3.
PC
PC
Servidor de
aplicação
PC
Servidor de
aplicação
Servidor de Banco
de Dados
Figura 3
Fonte: o autor
50
BANCO DE DADOS | Educação a Distância
PC
Esta camada intermediária é denominada de camada de aplicação, e é responsável pela
execução da lógica de negócios. Separa-se então em 3 papéis distintos cada camada: a
camada mais próxima do usuário é responsável pela interface e interação com o usuário;
a camada intermediária é responsável pela lógica de negócios; e a camada do SGBD é
responsável pelo armazenamento dos dados. Como idealmente a camada de aplicações é
projetada de modo stateless (sem estado), a replicação horizontal torna-se bem mais simples
do que no modelo cliente/servidor. Toda a lógica de negócios que anteriormente era codificada
utilizando-se triggers e stored procedures passa a ser executada na camada intermediária
utilizando-se uma linguagem de propósito geral. A quantidade de conexões de rede com o
SGBD também diminui, pois agora os usuários não o acessam diretamente – esta tarefa passa
a ser responsabilidade da camada de aplicação.
Outras arquiteturas costumam subdividir a camada intermediária em outras 2 ou 3, criando
aplicações de 4, 5 ou N camadas. Podemos adicionar camadas de validação, auditoria,
comunicação distribuída etc. A quantidade de camadas fica a gosto do arquiteto que projeta a
arquitetura, mas a filosofia de todo este processo de divisão de camadas segue os princípios
já apresentados.
Este modelo de camadas é o modelo utilizado atualmente para suportar a imensidão de dados
e usuários das aplicações de Internet contemporâneas.
OmaioreventodacomunidadededesenvolvedoresdoBrasilereferênciaparaprofissionaisiniciantes
ou experientes nos mais variados assuntos, incluindo Arquitetura de Software, Banco de Dados, NoSQL e Cloud Computing:
<http://www.thedevelopersconference.com.br/>.
BANCO DE DADOS | Educação a Distância
51
Foto: SHUTTERSTOCK.COM
Sem Banco de Dados
Nos Estados Unidos, em 1920, a manufatura, venda e importação de bebidas alcoólicas foram proibidas por emenda constitucional. Esta emenda foi revogada treze anos depois. Durante aquele período
de proibição, a indústria de cerveja morreu.
Em 1933, quando a proibição foi encerrada, algumas gigantes empresas de grãos começaram a produzir cerveja. Eles monopolizaram completamente o mercado. E por quase 50 anos, nós nos Estados
Unidos bebemos este líquido encorpado efervescente e o chamado de “cerveja”. O único modo de
tolerar o sabor era bebê-lo bem gelado.
Comoumadolescentenosanos60,eununcaentendiaatração.Porquecerveja?Eraumfluidopálido, amarelo e desagradável derivado da urina de javalis doentes, e não possuía nenhuma qualidade
que eu pudesse observar.
Em 1984, eu fui à Inglaterra; e as escamas caíram dos meus olhos. Finalmente pude entender. Pela
primeira vez eu pude provar cerveja; e eu gostei.
Desde aqueles dias a situação da cerveja nos Estados Unidos melhorou dramaticamente. Novas
52
BANCO DE DADOS | Educação a Distância
cervejarias estão sendo criadas por todo o país; e em muitos casos a cerveja é realmente boa. Ainda
não temos nada tão bom quanto a cerveja inglesa; mas estamos chegando lá.
Nos anos 80 algumas poucas gigantes empresas de banco de dados monopolizaram o mercado.
Elas o fizeram ao promover o medo, incerteza e dúvida entre gerentes e profissionais de marketing. A
palavra “relacional” tornou-se sinônimo de “bom”; e quaisquer outros mecanismos de armazenamento
de dados foram proibidos.
Eu era o líder de equipe de uma startup naquele tempo. Nosso produto media a qualidade de linhas
de comunicação T1. Nosso modelo de dados era relativamente simples, e nós mantínhamos os dados
em arquivos texto. E funcionava bem.
Mas nosso responsável pelo marketing continuou insistindo que precisávamos utilizar um banco de
dados relacional. Ele disse que os clientes iriam demandar um banco de dados relacional. Eu achei
tudo aquilo um pedido estranho pois nós não tínhamos vendido nenhum sistema até aquele momento,
e nenhum cliente havia sequer questionado a nossa tecnologia de armazenamento de dados. Mas o
cara do marketing foi taxativo. Nós teríamos que utilizar um banco de dados relacional. Arquivos texto
estavam proibidos.
Como líder de equipe, e responsável pela qualidade do software, minha visão de um banco de dados
relacional era que ele seria um trambolho grande, indigesto, lento e caro. Nós não tínhamos consultas
complexas. Nós não precisávamos de relatórios com análises massivas. Certamente não precisávamos de um processo com múltiplos megabytes consumindo memória e desperdiçando ciclos de
processamento (lembrem-se, estávamos na década de 80). Portanto eu lutei contra esta idéia com
todos os recursos que eu tinha; porque era a solução técnica errada.
Esta não foi uma jogada politicamente acertada para mim. Durante um período de vários meses, um
engenheiro de hardware que tinha a capacidade de escrever algumas linhas de código foi alocado na
equipe de software. Gradualmente ele foi recebendo mais e mais responsabilidade, e eventualmente
foi nomeado meu cogerente. Ele e eu iríamos “dividir” a responsabilidade de liderar a equipe de
software.
Uh huh. Claro. Com certeza. Um cara de hardware com nenhuma experiência real em software iria me
“ajudar” a liderar a equipe. E qual você acha que foi o primeiro problema? Foi o de inserir um banco
de dados relacional no nosso sistema!
Eu saí um mês depois e iniciei minha carreira de consultor. Foi a melhor mudança que fiz na minha
carreira profissional. A empresa que eu deixei não existe mais. E eu também acredito que eles nunca
faturaram um centavo sequer.
Eu assisti ao crescimento do mercado de banco de dados relacionais durante os anos 90. Eu assisti às
outras tecnologias de armazenamento de dados, como banco de dados de objetos, e banco de dados
B-tree morrendo; assim como as cervejarias nos anos 20. Ao fim dos anos 90, sobraram somente os
BANCO DE DADOS | Educação a Distância
53
gigantes.
Estes gigantes estavam criando uma tempestade. Eles eram deuses. Eles eram soberanos. Durante a
bolha ponto com, um deles chegou a ter a audácia de comprar anúncios de televisão que diziam que
seu produto era “o poder que movia a Internet”. Isto me lembrou de um comercial de cerveja dos anos
80 “Ya gotta grab for all the gusto in life ya can”. Meu deus.
Durante este período eu assisti com horror a como uma equipe após a outra colocava o banco de dados no centro do seu sistema. Eles foram convencidos por um monte de propaganda que o modelo de
dados era o aspecto mais importante da arquitetura, e que o banco de dados era a alma e o coração
do seu projeto.
Eu testemunhei a criação de um novo tipo de emprego. O DBA! Meros programadores não eram confiáveis o suficiente para guardar os dados – assim diziam as propagandas. Os dados são tão preciosos,
tão frágeis, tão facilmente corrompíveis por estes palhaços indisciplinados. Nós precisamos de pessoas especiais para gerenciar os dados. Pessoas treinadas pelos fornecedores de banco de dados.
Pessoas que iriam garantir e divulgar a mensagem de marketing das grandes empresas de banco de
dados: que o banco de dados pertence ao centro. Ao centro do sistema, da empresa, do mundo e do
universo. MUAHAHAHAHAHAHAHA!
Eu assisti ao SQL ser enfiado em cada buraco e fenda do sistema. Eu fugi correndo de sistemas em
que o SQL havia contaminado a Interface do Usuário. Eu blasfemei incansavelmente contra a prática
de se mover toda a lógica de negócios em stored procedures. Eu fraquejei, tremi, resmunguei e rugi
enquanto observava programas de mala direta sendo escritos em SQL.
Eu ataquei e ataquei à medida que vi tabelas e linhas invadindo o código-fonte sistema após sistema.
Eu avisei sobre o perigo. Eu avisei que o schema havia se tornado o “Blob”, consumindo tudo à sua
vista. Mas eu sabia que meus ataques eram como jogar pedrinhas num behemoth.
E então, na primeira década no século 21, uma proibição foi revogada, e o movimento NoSQL nasceu.
Eu o considerei um milagre, uma luz brilhando no deserto. Finalmente, alguém percebeu que pode
haver alguns sistemas no mundo que não necessitam de um grande, gordo, lento e caro porco devorador de memória chamado banco de dados relacional!
Eu assisti com alegria ao nascimento de BigTable, Mongo, CouchDB, e a todos os outros pequenos
sistemas de armazenamento de dados florescendo; assim como as pequenas microcervejarias nos
anos 80. A cerveja estava de volta! E estava começando a ter um gosto bom.
Mas então eu percebi algo. Alguns dos sistemas utilizando estes bons, simples e saborosos banco de
dados não relacionais estavam sendo projetados ao redor dos bancos de dados. Os bancos de dados,
encapsulados em reluzentes novos frameworks, ainda estavam no centro da concepção do projeto!
O veneno das campanhas publicitárias das empresas de banco de dados relacionais ainda estava
ecoando na mente dos arquitetos. Eles ainda estavam cometendo o erro fatal.
54
BANCO DE DADOS | Educação a Distância
“Pare!”, eu gritei. “Pare! Vocês não entendem. Vocês não entendem.” Mas a inércia era muito grande.
Uma enorme onda de frameworks cresceu e esmagou a nossa própria indústria, levando tudo pelo
caminho. Estes frameworks encapsularam os bancos de dados e brigaram com unhas e dentes para
manter o centro de nossas aplicações. Eles afirmavam que eram o senhor e mestre dos banco de
dados. Eles até alegavam serem capazes de transformar um banco de dados num banco de dados
NoSQL. E os frameworks gritaram com uma poderosa voz ecoada por toda a a terra: “Dependa de
mim, e eu os libertarei!”
---------O nome deste artigo é “Sem Banco de Dados”. Talvez após ler todas estas lamentações você possa
entender o porquê do título.
O centro da sua aplicação não é o banco de dados. Nem é um ou outro framework que você possa
estar utilizando. O centro da sua aplicação são os casos de uso da sua aplicação.
Eu enlouqueço quando ouço um desenvolvedor de software descrever o seu sistema como “Um sistema no Tomcat utilizando Spring e Hibernate com Oracle.” As próprias palavras colocam os frameworks
e o banco de dados no centro.
Com o que você acha que a arquitetura desse sistema se parece? Você acredita que os casos de uso
são o centro do projeto? Ou você acha que encontrará o código-fonte adaptado para encaixar nos
padrões dos frameworks? Você suspeitaria de objetos de negócios que parecem linhas de banco de
dados? Será que o schema e os frameworks poluiriam tudo?
Isso é como uma aplicação deve parecer. Os casos de uso devem estar no nível mais alto e mais
visível das entidades arquiteturais. Os casos de uso estão no centro. Sempre! Banco de dados e
frameworks são detalhes! Você não tem que decidir utilizá-los prematuramente. Você pode postergar
esta decisão, até que todos seus casos de uso e regras de negócios tenham sido elaborados, codificados e testados.
Quando é a melhor hora de se determinar o seu modelo de dados? Quando você já conhece quais
são as entidades de dados, como elas se relacionam, e como são utilizadas. Quando você sabe isso?
Quando você já tem todos os casos de uso e regras de negócios escritas e testadas. Neste momento
você já terá identificado todas as consultas, todos os relacionamentos, todos os elementos de dados,
e estará capaz de construir um modelo de dados que encaixe perfeitamente no seu banco de dados.
Isso muda alguma coisa se você estiver utilizando um banco de dados NoSQL? Claro que não! Você
ainda focará em conseguir os casos de uso funcionando e testados antes de pensar no banco de
dados; não importa qual banco de dados você acabe escolhendo.
Se você envolve o banco de dados muito cedo, ele deturpará o seu projeto. Ele lutará para ganhar o
controle do centro da aplicação, e uma vez lá ele guardará o centro como um cachorro bravo. Você
tem que trabalhar duro para manter o banco de dados fora do centro de seus sistemas. Você deve
BANCO DE DADOS | Educação a Distância
55
continuamente dizer “Não” à tentação de envolver o banco de dados logo no início.
Estamos nos aproximando de uma época interessante. Uma época em que a proibição contra diferentes mecanismos de armazenamento foi revogada e em que estamos livres para experimentar muitas
abordagens novas e inovadoras. Mas à medida que brincamos com nossos CouchDBs, Mongos e
BigTables, lembrem-se: o banco de dados é só um detalhe e você não deve envolvê-lo logo no início.
Uncle Bob Martin é o Mestre Artesão de Software da 8th Light. Ele é um autor premiado, renomado
palestrante e super geek de software desde 1970.
Fonte: <http://blog.8thlight.com/uncle-bob/2012/05/15/NODB.html>. Acesso em: 12 ago. 2012.
Foto: SHUTTERSTOCK.COM
ClASSiFiCAçãO DOS SiStEmAS DE BANCO DE DADOS
Assim como na natureza, podemos utilizar vários critérios diferentes para classificar os
sistemas de banco de dados. Alguns desses critérios bastante comuns são modelos de dados,
número de usuários, número de instalações e custo. Nas próximas seções exploraremos como
utilizar esses critérios para classificação.
modelo de dados
Não tenha dúvidas: muitas pessoas relacionam o modelo relacional a banco de dados devido
à sua absoluta onipresença. Um argumento costumeiro na escolha do modelo relacional é
56
BANCO DE DADOS | Educação a Distância
que “ninguém será demitido por tê-lo escolhido”. De fato, antes do advento do termo NoSQL,
praticamente não havia outras opções a considerar.
Durante anos houve muita pesquisa e discussão sobre banco de dados orientado a objetos,
graças à grande popularização das linguagens orientadas a objetos. O pensamento da época
era que o desenvolvimento de aplicações seria muito mais simples se pudéssemos utilizar
linguagens e banco de dados orientados a objetos juntos. Mas dois fatores foram decisivos
para que isso não acontecesse. Primeiramente, o modelo relacional já era algo absolutamente
consolidado e otimizado. Baseado em fundamentos matemáticos extremamente simples, há
anos já havia obtido sua maturidade. Robustos e confiáveis, já eram utilizados em grandes
aplicações por empresas dos mais variados segmentos. O outro motivo foi que realmente os
bancos de dados orientados a objetos nunca se popularizaram comercialmente o suficiente
para criar um ecossistema rentável ao redor de si. Atualmente, são raros os exemplos de
sistemas de banco de dados deste tipo e não possuem uma fatia que possa ser considerada
significativa do mercado.
Sistemas de bancos de dados mais antigos (particularmente os baseados em mainframe)
utilizam o modelo hierárquico ou o modelo em rede. Mas não se engane ao considerar
que aplicações baseadas nestes modelos desapareceram. Grandes bancos são um segmento
tradicionalmente conservador em relação a tecnologias adotadas. É fato que boa parte deles
ainda roda seus mais importantes sistemas em mainframes com sistemas de banco de dados
hierárquicos ou em rede. É o caso, por exemplo, do Banco do Brasil. Há uma cumplicidade:
mainframes garantem a sobrevida do modelo hierárquico e em rede, e as aplicações baseadas
nestes modelos garantem a longevidade do mainframe.
Há outros modelos de dados bastante recentes (os oriundos do NoSQL), como os baseados
em chave-valor, baseados em grafos, baseados em documentos etc. Esses modelos mais
recentes não serão abordados neste material.
BANCO DE DADOS | Educação a Distância
57
Número de usuários
Em relação ao número de usuários, sistemas de banco de dados podem ser monousuários ou
multiusuários. Alguns raros exemplos atuais de banco de dados monousuários são os banco
de dados embarcados, que são projetados para serem pequenos e rápidos o suficiente para
serem embarcados dentro de uma aplicação. Alguns exemplos que poderíamos considerar
são o Apache Derby e o H2. Mas mesmo estes dois SBGDs podem se comportar como
monousuário ou multiusuário, dependendo do seu tipo de instalação.
Naturalmente, a grande maioria dos sistemas de banco de dados modernos suporta múltiplos
usuários concorrentes com acesso mediante algum protocolo de rede.
Número de instalações
Quanto à quantidade de instalações, podemos classificar os sistemas de banco de dados em
centralizados ou distribuídos. Sistemas centralizados são aqueles em que há uma única
instância do sistema de banco de dados sendo executada. São apropriados para quantidades
pequenas de dados ou em situações em que a disponibilidade do sistema não é crucial ao
negócio.
Sistemas distribuídos são aqueles em que há mais de uma instância (com a possibilidade de
várias) sendo executada. Em sistemas de banco de dados mais tradicionais, costuma-se utilizar
uma distribuição master-slave, em que as atualizações de dados são efetuadas no master e
as leituras são efetuadas em um ou mais slaves. Como a maioria das aplicações executa mais
leituras do que atualizações, o desempenho pode aumentar de modo significativo. Outros
tipos de distribuições de banco de dados podem envolver particionamento (dividir os dados
em instalações diferentes) e/ou replicação (duplicar os dados) para aumentar o desempenho
e/ou disponibilidade.
58
BANCO DE DADOS | Educação a Distância
Custo
É no critério custo em que amplitude de diferença entre os sistemas de banco de dados é
maior. Temos desde o gratuito até exemplares que podem custar alguns milhões de dólares.
No caso dos gratuitos, vale a pena distinguir entre os sistemas livres (software livre) e os
que representam versões reduzidas de produtos mais caros. Dois produtos livres bastante
populares são o MySQL (bem mais popular) e o PostgreSQL. O modelo de negócios de ambos
permite o livre uso e redistribuição; mas quando for necessário o suporte, pode-se optar por
contratá-lo de uma empresa terceirizada ou do próprio fornecedor (Oracle), no caso do MySQL.
Ambos possuem graus de maturidade, estabilidade e funcionalidade bastante elevados e não
devem nada a desejar em relação aos produtos pagos. Provavelmente em mais de 90% dos
casos de uso de aplicações tradicionais, não haveria diferença no uso entre um sistema de
banco de dados livre e outro pago. Nosso mercado consolidou-se a um ponto em que optar
entre uma solução e outra passou a ser uma questão de gosto ao invés de uma questão
puramente técnica.
Devido ao sucesso dos sistemas de banco de dados livres, produtos comerciais que
tradicionalmente eram bastante custosos passaram a oferecer versões gratuitas (limitadas
em número de processadores, quantidade de dados, instâncias etc.). É o caso de Oracle,
DB2 e SQL Server. Trata-se de uma estratégia comercialmente interessante, pois migrar de
um SGBD para outro não é uma tarefa simples, e permitir que empresas avaliem e usem
seus produtos de modo gratuito pode ajudar na tarefa de “aprisionar” o cliente. Assim, uma
startup que inicie seus negócios com uma versão gratuita poderá passar a pagar pelo uso dos
produtos mais “completos” quando a capacidade da versão gratuita for atingida. Nesse ponto
espera-se que a empresa já esteja com um faturamento considerável e provavelmente não se
importará com o investimento.
BANCO DE DADOS | Educação a Distância
59
<http://youtu.be/piSbDWeu3pM>.
Luciano Ramalho – MongoDB
Luciano Ramalho é um dos grandes experts em linguagens de programação dinâmica no Brasil, particularmente Python. Também é um dos pioneiros em NoSQL e especialista em MongoDB, um banco
de dados de documentos. Neste vídeo, Luciano apresenta as vantagens e as aplicações deste banco
de dados.
CONSiDErAçÕES FiNAiS
Nesta unidade nós aprendemos a distinguir o schema, que é um metamodelo do banco de dados,
de suas instâncias. Alterações no schema não costumam ser muito frequentes, enquanto que
as instâncias são manipuladas por meio de operações de inserção, remoção ou atualização.
A boa assimilação da distinção entre schema e instâncias é um conceito fundamental para
o uso efetivo de um sistema de banco de dados – aliás, esta diferenciação entre modelo,
metamodelo e instâncias do modelo é algo bastante frequente na área de software.
Existem diversos tipos de interfaces de interação dos usuários com o sistema de banco de
dados, e a escolha de qual interface utilizar depende muito do propósito e do papel do usuário
ao acessá-lo. Sempre há a avaliação entre os quesitos poder versus facilidade de uso. A
prática faz-se necessária para que um bom desenvolvedor possa escolher o meio de interação
mais adequado de acordo com a situação. Muitas vezes você necessitará do poder da linha
de comando; noutros, alguns cliques numa interface desktop serão mais cômodos. O seu
conhecimento permitirá que você tome a decisão acertada.
A apresentação das arquiteturas de computação em geral e das arquiteturas de sistemas
de bancos de dados pôde esclarecer a forma com que historicamente se desenvolve
estas arquiteturas de aplicações. O artigo apresentado no saiba mais promove uma
reflexão importantíssima para que você possa ponderar sabiamente durante o processo de
desenvolvimento de suas aplicações. Este autor concorda com a proposta do Uncle Bob
Martin, até porque vivemos um período em que muitos conceitos estabelecidos estão sendo
60
BANCO DE DADOS | Educação a Distância
questionados. Poder desenvolver o seu software objetivando o valor de negócios e os seus
usuários é muito mais importante do que quaisquer abstrações de armazenamento de dados
– inclusive o banco de dados. Concentre-se naquilo que é realmente importante para sua
aplicação e deixe o banco de dados como aquilo que ele realmente é: um detalhe. Um detalhe
importante, é verdade – mas continua sendo um detalhe.
Finalizando esta unidade, pudemos listar alguns critérios diferentes para a classificação de
diferentes produtos de sistemas de bancos de dados. Diferentes fornecedores com diferentes
produtos apresentarão uma infinidade de argumentos para que você decida entre um e
outro. Claro que os critérios comerciais influenciarão bastante sua decisão, mas a lista que
assimilamos nesta unidade poderá lhe nortear com alguns argumentos importantes.
Nossa escalada para o domínio dos sistemas de bancos de dados passará na próxima unidade
para um novo degrau: o modelo relacional – que em muitos casos já foi (ou ainda é) sinônimo
de banco de dados. Veremos o porquê de suas qualidades o tornarem tão bem conceituado.
ATIVIDADES DE AUTOESTUDO
1. Defina os seguintes termos: schema, instância, snapshot e schema evolution.
2. Qual a diferença entre sistemas de computação de duas e de três ou N camadas, e como
os sistemas de banco de dados interagem com estes sistemas de computação?
3. Escolha um caso de uso da vida real para avaliar a implementação de um software.
Baseado(a) nos critérios descritos nesta unidade, quais seriam suas considerações para
decidir entre um SGBD e outro?
BANCO DE DADOS | Educação a Distância
61
Fonte: SHUTTERSTOCK.COM
vida longa ao mainframe: a trajetória de um baby boomer
Luiz Fadel, primeiro distinguished engineer da IBM no Brasil, conta sua experiência de 40 anos como
profissional especializado na tecnologia.
Poucos são os profissionais de tecnologia que conseguem sobreviver por tantos anos no mundo
corporativo, em meio às constantes transformações provocadas pela era digital. Com a revolução da
internet, TI passou a ser uma área invadida e dominada, cada vez mais, pela intrigante geração Y –
formada por jovens entre 18 e 30 anos.
Venceralinhadotempoéumdesafio,principalmenteporqueasempresasvêmprivilegiandoo“sangue novo”. Uma dura realidade que atinge quase todos os que tentam o mercado de trabalho. Neste
cenário,édifícilencontrarprofissionaisquetenhampassadoacasados50,masumalevadeexecutivos resiste bravamente.
São os chamados “dinossauros” da indústria de tecnologia no Brasil. No bom sentido, claro. O engenheiro eletrônico paulistano Luiz A. Fadel é um deles. Formado em um dos mais renomados celeiros
deprofissionaisdeengenhariadoPaís,oInstitutoTecnológicodaAeronáutica(ITA),elecontacom
umatrajetóriaprofissionalímpar.
Assistiu aos efeitos da reserva de mercado - que protegeu a indústria nacional de informática - e ao
sobe e desce de uma tecnologia que depois de altos e baixos continua forte no Brasil – o mainframe.
Agora, aos 63 anos, e 40 de experiência em sistemas de grande porte, continua com o mesmo gás e
energia de quando começou a carreira. Reconhece que ainda tem muitos anos de estrada pela frente.
Fôlego de causar inveja a qualquer um que tenha se formado já na era digital.
“Desempregonãoéumapalavraquefazpartedovocabuláriodosespecialistasemmainframe”,afirmaFadel.“Nemmesmoparanósdageraçãobabyboomer”.Afaltadegentequalificadaparaatuar
com a tecnologia - que vive um momento de retomada no Brasil - tem trazido de volta ao mercado
muitosprofissionaisquejáhaviampenduradoaschuteiras.
62
BANCO DE DADOS | Educação a Distância
Sem planos de sair de cena, o executivo conta um pouco de sua experiência ao longo de duas décadas, toda construída na gigante IBM. Confira trechos da entrevista que Fadel concedeu à Computerworld:
Computerworld - Sua carreira foi construída em uma das tecnologias mais antigas e que ainda continua forte no mercado, sobretudo o brasileiro. Que razão o levou apostar nessa área?
Luiz A. Fadel - Sem dúvida, há muitas oportunidades interessantes que o mercado de mainframe
oferece. Em todos os meus 40 anos de carreira, só lembro um momento crítico para os profissionais
dessa tecnologia. Na década de 90, com o auge dos PCs, a demanda por sistemas de grande porte
sofreu retração. Quadro que anos depois teve recuperação.
Apesar dos percalços, a plataforma evoluiu bastante de 1964 (quando comecei) para cá. Não falo da
base dela, que permanece a mesma, mas do que é adicionado a ela, exigindo do profissional estar
sempre se atualizando. Todo dia há coisas novas.
E engana-se quem pensa que o mainframe morreu. Pelo contrário, é um sistema que completa o
parque de muitas empresas por atender a necessidade de transações mais robustas. Prova disso é
que ainda existe uma forte demanda.
CW – Desde que ingressou na IBM, que momentos o senhor elenca como os mais marcantes?
Fadel – Quando entrei, em 1969, a empresa era umas das poucas - fora ela, existiam só outras duas
- a atuar com sistemas de grande porte, os conhecidos mainframes. Logo de cara tive o privilégio de
participar de projetos envolvendo grandes bancos brasileiros que, na época, tornavam-se os maiores
consumidores da tecnologia. Também estive envolvido na primeira instalação do Mainframe Operating
Systems (Mainframe OS) no País, assim que fui promovido à analista de sistemas.
CW – Hoje acabou o tempo em que os profissionais “vestiam a camisa” da empresa. Como o senhor
enxerga a opção de ter feito carreira em uma única companhia?
Fadel - Comecei como trainee em vendas, assim que saí da faculdade, e estou na empresa até hoje
porque sempre vi grandes oportunidades de ascensão profissional dentro da carreira técnica. Nunca
precisei mudar de rumo para dar saltos. Tanto que hoje cheguei a um cargo equivalente ao de um
diretor com carreira em negócios, que a IBM chama de distinguished engineer.
É o posto mais alto da empresa na área técnica. Na subsidiária brasileira, só três profissionais têm
esse título. Eu fui o primeiro a conquistá-lo aqui, em 2003. No mundo, existem cerca de 200 pessoas
com o posto. Ou seja, uma grande realização na carreira que não posso ignorar.
Também não podemos esquecer que a IBM sempre foi uma multinacional sólida e de peso. Além de
abrir as portas para que os funcionários possam ter experiência profissional fora do Brasil. Eu mesmo
estive por duas vezes trabalhando nos Estados Unidos, somando um total de seis anos – a primeira
fase entre 1977 e 1980; a segunda de 1988 a 1991.
Nos dois casos, em Poughkeepsie, ao norte do estado de Nova York, onde está o centro de pesquisa
da IBM, que reúne os melhores especialistas da companhia do mundo. Isso quando éramos (os brasileiros) pouco respeitados, quanto ao aspecto técnico, no exterior.
CW – É fato que, por um lado, existe uma forte demanda de projetos e por outro, poucos profissionais
para desenvolvê-los. Esse quadro valoriza o profissional de mainframe, inclusive os mais seniores?
Fadel – Sim. A falta de pessoal especializado em sistemas de grande porte é enorme. Não há gente
BANCO DE DADOS | Educação a Distância
63
nomeiodapirâmideequempossuiexperiênciaestáempregado.PorissoaprópriaIBMfirmouparceria com as universidades do País para formar gente. Posso garantir que oportunidade é o que não
falta para especialistas em mainframe. Na empresa, por exemplo, somos extremamente valorizados.
Detalhe: há espaço para quem se aposentou e quer voltar e para quem não pretende pendurar as
chuteiras.
Fonte: <http://computerworld.uol.com.br/carreira/2009/09/03/vida-longa-ao-mainframe-a-trajetoria-de-um-baby-boomer/>. Acesso em: 1 ago. 2012.
64
BANCO DE DADOS | Educação a Distância
UNIDADE III
O MODELO RELACIONAL
Professor Me. Edson Yanaga
Objetivos de Aprendizagem
• Conceituar o modelo relacional.
• Conceituar as restrições do modelo relacional.
• Descrever as operações de manipulação de instâncias do modelo relacional.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
• Conceituar domínio, atributos, tuplas e relações
• Conceituar os diferentes tipos de restrições do modelo relacional e de banco
de dados
• Descrever as operações de INSERT, UPDATE e DELETE do modelo relacional
e como elas interagem com as restrições do banco de dados
Fonte: SHUTTERSTOCK.COM
INTRODUÇÃO
A partir desta unidade, abordaremos o modelo de dados relacional, que é o modelo utilizado
nos bancos de dados relacionais. O advento do modelo relacional é atribuído a Ted Codd da
IBM em 1970, e imediatamente se popularizou devido à sua simplicidade e sólidos fundamentos
matemáticos: é baseado na teoria geral dos conjuntos e em lógica matemática.
Os primeiros SGBDs relacionais apareceram na década de 1980, sucedendo os bancos de
dados hierárquicos e em rede predominantes em mainframes. Desde então, sua expansão
foi enorme, e acabou tornando-se sinônimo de “banco de dados”. Exemplos de produtos
populares são DB2 (IBM), Oracle e MySQL (Oracle), SQLServer (Microsoft) e PostgreSQL
(software livre).
Dada a relevância do assunto, tanto esta quanto as próximas duas unidades focarão no modelo
relacional de dados. Nesta unidade, introduziremos alguns conceitos fundamentais do modelo
relacional tentando nos distanciar um pouco da teoria geral dos conjuntos e nos aproximando
mais do nosso mundo cotidiano.
BANCO DE DADOS | Educação a Distância
67
CONCEITUAÇÃO
No modelo relacional, o banco de dados é representado como um conjunto de relações.
Podemos tentar entender uma relação como uma tabela ou uma planilha de cálculo.
Observando como uma tabela, cada linha representa uma coleção de valores relacionados.
De fato, cada linha de uma tabela no modelo relacional costuma representar uma entidade do
mundo real ou um relacionamento entre duas entidades.
Contato
Nome
Sobrenome
Nascimento
Ademir
Santos
20/12/1984
Carlos
Silva
26/04/1970
Justino
Carvalho
11/07/1981
Marcela
Moreno
03/06/1999
Figura 4
Fonte: o autor
Observando a Figura 4, verificamos que a tabela se chama Contato, pois representa um
conjunto de contatos numa agenda pessoal. Cada linha da tabela representa uma instância
de um contato real. Os nomes das colunas (Nome, Sobrenome, Nascimento) representam
informações sobre um Contato. Dentro de uma determinada coluna, todos os dados possuem
o mesmo tipo (String, data, inteiro, real etc.).
Definido de modo formal, uma linha é denominada de tupla, o nome de uma coluna é
denominado de atributo e a tabela é denominada de relação. O tipo de dado que pode ser
inserido em cada coluna é denominado de domínio, e representa os valores possíveis de cada
atributo.
Características de uma Relação
A seguir analisaremos as características atribuídas a uma relação (tabela) no modelo relacional:
68
BANCO DE DADOS | Educação a Distância
1. Ordem das tuplas. Como uma relação (tabela) representa a noção matemática de
conjunto, relações não possuem ordem. Isso significa que não há uma ordem natural
particular imposta dentro da relação. Como estes dados serão gravados em algum
dispositivo de armazenamento, é natural que sequencialmente eles estejam dispostos em alguma ordem – mas para efeitos do modelo relacional, deve-se assumir que
a ordem dos elementos é caótica. Durante o desenvolvimento de aplicações, não
se deve assumir nenhuma premissa sobre a ordem dos elementos dentro de uma
relação.
2. Atomicidade dos valores e o valor NULL. No modelo relacional, cada valor de
cada atributo dentro de uma tupla é atômico. Atômico no mesmo sentido de átomo
e em transações: estes valores não podem ser divididos em outros componentes.
Assim, ao menos no modelo relacional puro, não são possíveis valores compostos
ou múltiplos valores dentro de um mesmo atributo. Um conceito essencial e bastante
utilizado em atributos é o valor definido como NULL. NULL é um valor utilizado em
colunas para definir casos especiais em que: o valor pode não se aplicar àquela
tupla; o valor não possui valor definido; ou o valor é desconhecido. No caso da tabela
Contato, podemos definir como NULL o atributo Nascimento quando desconhecemos o dia em que nosso Contato nasceu.
3. Semântica de uma Relação. Relações podem representar situações factuais. Podemos considerar que cada tupla da relação Contato seja um fato: você, no mundo
real, possui um Contato verdadeiro que pode ser abstraído com os dados daquela
tupla. Algumas relações representam dados sobre entidades (como é o caso de Contato). Outras relações podem representar relacionamentos (como seriam os e-mails
ou os telefones de cada Contato). No modelo relacional, tanto entidades quanto relacionamentos entre entidades podem ser igualmente representados por relações
(tabelas). Isto simplifica muito o modelo e sua utilização, pois não precisamos de
notações nem de ferramentas para fazer distinção entre as entidades e os relacionamentos entre elas.
BANCO DE DADOS | Educação a Distância
69
Fonte: SHUTTERSTOCK.COM
Bancos de dados livres crescem no Brasil
Uma nova geração de bancos de dados livres começa a ganhar adesão de várias empresas do setor
financeiro e industrial do país, revela estudo.
GENILSON CEZAR, ESPECIAL PARA COMPUTERWORLD
Uma nova geração de bancos de dados livres começa a ganhar adesão de várias empresas do setor
financeiroeindustrialdopaís,paraaplicaçõesespecíficasouembarcadasemequipamentosdecomunicação, e já está criando um impacto positivo entre os desenvolvedores.
Essa é uma conclusão do consultor independente Fernando Lozano, community manager da Java.
net, apresentada na quarta-feira (17/08) no Developer’s World 2005, realizado pelo IDG Brasil, no
Hotel Jaraguá, em São Paulo.
Lozano vem trabalhando na implementação de projetos de banco de dados livres em várias empresas
como o Instituto Brasileiro de Petróleo e Gás, Elephant Internet, iBest e Amsterdam Sauer. “O banco
de dados livre é hoje uma alternativa viável e de alta performance, além de comercialmente atraente,
pois pode utilizar qualquer ferramenta de desenvolvimento para acesso aos dados”, diz ele.
Para Thiago José Macieira, desenvolvedor central do KDE, uma das principais comunidades de open
source do mundo, com quase 20 colaboradores brasileiros, o interesse pelo software livre no Brasil é
cada vez maior, principalmente depois que o governo federal decidiu estimular a adoção do produto
em licitações públicas.
“Muitos desenvolvedores estão decididos a contribuir para o avanço do open source, mesmo sem ter
qualquerespéciederetornofinanceiro,nomáximoumoutropatrocínioparaparticiparemcongressos
internacionais”,afirmaMacieira.
Fonte: <http://computerworld.uol.com.br/tecnologia/2005/08/18/idgnoticia.2006-05-15.4431159825/>.
Acesso em: 1 ago. 2012.
70
BANCO DE DADOS | Educação a Distância
RESTRIÇÕES DO MODELO RELACIONAL
Restrições no modelo relacional são uma forma de se restringir os valores que os atributos
das tuplas podem possuir num determinado snapshot. Essas restrições podem ser derivadas
dos próprios relacionamentos do modelo relacional ou de restrições de valores de negócios
impostos pelo modelo de software sendo desenvolvido.
Os tipos de restrições do modelo relacional são de domínio, de chave e de valores nulos, e de
integridade e integridade referencial. Estas são descritas nas seções seguintes.
Restrições de domínio
As restrições de domínio impõem ao banco de dados quais valores podem ser permitidos
em cada atributo dentro de cada tupla em cada tabela. Algumas destas restrições podem
ser de tipo (você não pode colocar um valor String num campo inteiro ou vice-versa). Outras
restrições possíveis podem restringir valores dentro de um tipo (somente os inteiros maiores
que zero). Exploraremos melhor estas restrições de domínio quando tratarmos das restrições
do SQL.
Restrições de chave e de valores nulos
Como uma relação (tabela) representa um conjunto na definição formal da teoria dos conjuntos,
não há a possibilidade de uma relação conter elementos repetidos; pois num conjunto, todos
os elementos são distintos. Desse modo, havendo ou não a possibilidade de se haver registros
com dados semelhantes dentro do modelo de negócios, utiliza-se uma restrição denominada
de chave primária que define de modo único cada registro dentro da relação. Esta chave
primária pode ser composta de um único atributo ou mesmo de um conjunto de atributos.
Não há verdades absolutas na área de Tecnologia da Informação, mas no passado foi bastante
comum a utilização de chaves primárias compostas para representar as tuplas de uma relação.
Matematicamente, não há diferença entre uma chave primária simples (um único atributo) e
BANCO DE DADOS | Educação a Distância
71
uma chave primária composta (múltiplos atributos). Baseando-se no princípio da Navalha de
Occam, preferimos optar pela solução mais simples: chaves primárias simples.
Outra prática atual diz respeito à visibilidade por parte do usuário do valor da chave primária. Em
aplicações legadas, é bastante comum visualizar este atributo em formulários cadastrais e em
listagens. Uma corrente de pensamento pondera que este número não faz sentido ao usuário
e não deve ser exibido. Não exibi-lo também permite que a chave primária seja trocada numa
eventualidade em que o particionamento ou a replicação de banco de dados seja necessária
e implique numa troca da chave primária. Pense: o usuário deseja ou precisa saber a chave
primária ou é a sua aplicação que foi projetada para obrigar o usuário a utilizá-la?
PrincípiodaNavalhadeOccam(ouOckham)
“Se em tudo o mais forem idênticas as várias explicações de um fenômeno, a mais simples é a melhor”
- William de Occam.
Popularmente costumamos citar este princípio como: “se há mais de uma explicação para um fenômeno, e todas parecem igualmente corretas, então a mais simples é a mais correta”.
Emqueoutraspartesdasuavidaprofissionalpoderíamosaplicarcomsucessoesteprincípio?
Outro tipo de restrição são as chaves ou chaves únicas: como o próprio nome já implica,
representam atributos dentro de uma tupla que não podem ter valores repetidos.
Valores nulos (NULL) podem ser restringidos com uma restrição de non-NULL. Atributos de
uma tupla com esta restrição obrigatoriamente devem possuir um valor válido que não seja
nulo.
72
BANCO DE DADOS | Educação a Distância
Integridade, Integridade referencial e chaves estrangeiras
A restrição de integridade estabelece que nenhuma tupla pode possuir uma chave primária
com valor NULL. Como a chave primária é utilizada para identificar de modo único cada tupla
da relação, permitir o valor NULL faria com que fosse possível ter duas tuplas com a mesma
chave primária nula – sendo impossível distinguir uma da outra.
A restrição de integridade referencial é especificada entre duas relações (tabelas) distintas, e
é utilizada para manter a consistência entre tuplas pertencentes às duas relações. Isto implica
que uma restrição de integridade referencial obriga uma tupla numa relação a referenciar a
uma tupla existente em outra relação – para as quais a integridade referencial foi definida.
Contato
ID
1
2
3
4
Nome
Ademir
Carlos
Justino
Marcela
Sobrenome
Santos
Silva
Carvalho
Moreno
Nascimento
20/12/1984
26/04/1970
11/07/1981
03/06/1999
Telefone
ID
1
2
Número
443032020
4420201010
contato_id
1
3
Figura 5
Fonte: o autor
Para compreender melhor este conceito, analisemos a Figura 5. Restrições de integridade
referencial são criadas entre duas tabelas diferentes (ou excepcionalmente na mesma tabela).
Veja o relacionamento entre as tabelas Contato e Telefone. Na tabela Telefone, o atributo
BANCO DE DADOS | Educação a Distância
73
contato_id referencia o contato ao qual o Telefone pertence. Neste caso, definimos que o
atributo contato_id é uma chave estrangeira da tabela Contato que referencia o relacionamento
entre as duas tabelas.
Fonte: SHUTTERSTOCK.COM
Estudo de caso:
DetrandoCearáeconomizouR$1,7milhãocombancodedadoslivre
Tomada há cerca de dois anos pelo governo do Ceará, a decisão de substituir a solução de banco de
dados da Oracle pelo PostgreSQL fez com que o Detran economizasse gastos com pagamento de
licenças e serviço de suporte técnico.
Em 2008, o administrador de banco de dados Nabucodonosor Coutinho foi convidado pelo Detran do
Ceará para cuidar do processo de migração do banco de dados. Em apresentação no IV Encontro
Nordestino de Software Livre, realizado semana passada em Natal (RN), ele explicou o projeto.
Como o Detran chegou ao seu nome?
O Detran tinha a seguinte arquitetura: um servidor de aplicação ligado a um servidor Oracle. Era nesta
situação que as 1.287 tabelas e 426 views do banco se encontravam. Gastava-se muito dinheiro com
o pagamento de licenças e o governador queria que o Detran utilizasse o Software Livre. Pensou-se
emutilizaroMySQL,masoptou-sepeloPostgreSQL,quejáeraobancodedadosoficialdoGoverno
do Ceará. Como trabalhava há cerca de 8 anos com o PostgreSQL, minha empresa foi chamada para
74
BANCO DE DADOS | Educação a Distância
participar do projeto.
Quaisforamasprincipaisdificuldadesencontradas?
Aprincipaldificuldadeeraqueaequipeestavaocupadacomastarefasdiáriasdemanutençãoedesenvolvimento de novas ferramentas para o órgão. Além disso, a base de dados era muito complexa
e utilizava muitos recursos que até então estavam disponíveis apenas no Oracle. Outro fator negativo
foi que poucos técnicos tinham conhecimento em PostgreSQL.
Como é a arquitetura do banco hoje?
Agora o servidor de aplicação é ligado diretamente a um balanceador de carga, que é ligado a dois
servidores do banco de dados.
Além da economia com as licenças, quais outros resultados positivos a nova arquitetura trouxe?
Asconsultasficarammaisrápidas.Temumaquelevava2horase,depoisdamigração,passouaser
realizada em 6 minutos. Na primeira vez, o responsável do Detran não acreditou e acabamos gastando as 2 horas tentando convencer que a consulta tinha sido mesmo realizada em 6 minutos.
Fonte: <http://www.softwarelivre.gov.br/noticias/detran-do-ceara-economizou-r-1-7-milhao-com-banco-de-dados-livre/>. Acesso em: 1 ago. 2012.
Operações de atualização do modelo relacional
Existem três operações básicas de atualização que podem alterar o snapshot do banco de
dados. Vamos nos referir a estas operações em seu termo em inglês, pois eles também
correspondem aos comandos em SQL que veremos nas próximas duas unidades. As
operações são: Insert (Inserção), Update (Modificação) e Delete (Remoção). A operação de
Insert é utilizada para inserir novas tuplas numa relação; a operação Update é utilizada para
atualizar valores de uma tupla já existente dentro de uma relação; e a operação Delete é
utilizada para remover uma tupla existente de uma relação. Em cada uma dessas operações,
são verificadas as restrições descritas nas seções anteriores. Caso alguma das restrições seja
violada, o SGBD reportará um erro e a operação não será completada com sucesso.
BANCO DE DADOS | Educação a Distância
75
Insert
A operação de Insert fornece os atributos de uma nova tupla para ser adicionada
na relação.
Restrições de domínio podem ser violadas se algum dos valores atribuídos não for
do tipo apropriado do atributo.
Restrições de chave podem ser violadas se alguma outra tupla possuir a mesma
chave repetida.
Restrições de integridade podem ser violadas se a chave primária atribuída for
NULL.
Restrições de integridade referencial podem ser violadas se o valor de qualquer
chave estrangeira atribuída não existir no relacionamento referenciado.
Update
A operação de Updatemodificaosvaloresdeumoumaisatributosemumaoumais
tuplas numa relação.
Restrições semelhantes à operação de Insert podem ser violadas na execução desta operação.
Delete
A operação de Delete remove uma tupla da relação. A única restrição que pode ser
violada pela operação Delete é a restrição de integridade referencial. Neste caso, a
tupla sendo removida é referenciada por uma outra tupla num relacionamento entre
duas relações.
<http://youtu.be/gx1xT_GzH_g>.
Alexandre Porcelli – SQL, NoSQL ou NewSQL: Onde armazenar meus dados? - DevInVale 2011
76
BANCO DE DADOS | Educação a Distância
Fonte: SHUTTERSTOCK.COM
Os bancos de dados relacionais estão condenados?
Recentemente uma grande leva de bancos de dados não relacionais surgiram tanto na nuvem quanto
fora dela. Uma das principais mensagens que este cenário nos traz é “se você precisa de uma grande
escalabilidade sob demanda, você precisa de um banco de dados não relacional”.
Se isto for verdade, então é um sinal de que o outrora todo poderoso banco de dados relacional perdeu seu trono? Seria este um sinal de que os bancos de dados relacionais estão com os dias contados
e irão declinar com o passar do tempo? Neste artigo nós analisaremos a tendência atual de se migrar
debancosdedadosrelacionaisemcertassituaçõeseoqueissosignificaparaofuturodosbancos
de dados relacionais.
Bancos de dados relacionais já estão presentes no mercado há mais de 30 anos. Durante este tempo,
muitas pseudo-revoluções surgiram e se foram, e todas elas supostamente deveriam acabar com os
bancos de dados relacionais. Todas estas revoluções fracassaram, claro, e nenhuma chegou a fazer
sequer um arranhão na dominância dos bancos de dados relacionais.
Primeiro,umpoucodehistórico
Um banco de dados relacional é essencialmente um grupo de tabelas (entidades). Tabelas são compostasdecolunaselinhas(tuplas).Estastabelaspossuemrestrições,erelacionamentossãodefinidos entre elas. Bancos de dados relacionais são consultados através da SQL, e os conjuntos de
BANCO DE DADOS | Educação a Distância
77
resultados são produzidos pelas consultas que acessam os dados de uma ou mais tabelas. Múltiplas
tabelas sendo acessadas numa única consulta são “unidas”, tipicamente por um critério definido nas
colunas de relacionamento das tabelas. Normalização é um modelo de estruturação de dados utilizado em bancos de dados relacionais que garante a consistência dos dados e remove sua duplicação.
Car
Color
Carkey
Markekey Colorkey Colorkey Year
Colorkey
Color
1
1
1
2
2003
1
Red
2
2
1
3
2005
2
Green
3
2
1
2
2005
3
Blue
MakeModel
Modelkey Makekey
1
1
1
2
2
1
Model
Pathfinder
Bluebird
Civic
Make
Makekey
1
2
Make
Nissan
Honda
Example of a Typical Data Model
Bancos de dados relacionais são facilitados através de Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDR). Praticamente todos os sistemas de bancos de dados em uso atualmente
são SGBDRs, incluindo Oracle, SQL Server, MySQL, Sybase, DB2, TeraData etc.
Os motivos para a dominância do modelo relacional não são triviais. Eles têm continuamente oferecido
o melhor conjunto de simplicidade, robustez, flexibilidade, desempenho, escalabilidade e compatibilidade no gerenciamento de dados genéricos.
Entretanto, para oferecer tudo isto, os bancos de dados tornaram-se incrivelmente complexos internamente. Por exemplo, um relativamente simples comando SELECT pode ter centenas de possíveis
caminhos de execução de consulta, os quais o otimizador deve avaliar em tempo de execução. Tudo
isto é escondido dos usuários, mas sob o capô os SGBDRs determinam o “plano de execução” que
melhor atende nossas requisições utilizando recursos como algoritmos baseados em custo.
O problema com bancos de dados relacionais
Mesmo que os SGBDRs forneçam aos usuários o melhor conjunto de simplicidade, robustez, flexibilidade, desempenho, escalabilidade e compatibilidade, seu desempenho em cada uma destas áreas
não é necessariamente melhor que o de uma solução alternativa buscando um destes benefícios
isolado. Isto não foi um grande problema até agora, pois a dominância universal dos SGBDRs tem
78
BANCO DE DADOS | Educação a Distância
compensado a necessidade de se quebrar essas barreiras. No entanto, se você realmente tem uma
necessidade que não pode ser atendida por um banco de dados relacional genérico, sempre houve
alternativas para atender estes nichos.
Atualmente vivemos uma situação um pouco diferente. Para um grande número de aplicações, estes
benefícios estão se tornando mais e mais críticos; e embora ainda sejam considerados um nicho,
estão se tornando populares, tanto que para muitos usuários de bancos de dados estes requisitos
estão começando a sobrepor os outros em importância. Este benefício é escalabilidade. À medida
que mais e mais aplicações são implantadas em ambientes que possuem cargas de trabalho massivas, tais como serviços web, seus requisitos de escalabilidade podem mudar rapidamente e crescer
a níveis muito elevados. O primeiro cenário pode ser difícil de gerenciar se você possui um banco de
dados relacional implantado em um único servidor. Por exemplo, se sua carga triplica de um dia para o
outro, quão rapidamente você pode ampliar o seu hardware? O segundo cenário pode ser complicado
demais para ser gerenciado por um banco de dados relacional de um modo geral.
Bancos de dados relacionais escalam bem, mas isto somente quando a escalada acontece num único servidor. Quando a capacidade daquele único servidor é alcançada, você precisa realizar uma
escalabilidade horizontal e distribuir a carga entre múltiplos servidores. Este é o momento em que a
complexidade dos bancos de dados relacionais limita o seu potencial de escalabilidade. Tente escalar
para centenas ou milhares de servidores, ao invés de apenas alguns, e as complexidades tornam-se
avassaladoras, e as características que tornam os SGBDRs tão atraentes drasticamente reduzem sua
viabilidade como plataforma para grandes sistemas distribuídos.
Os fornecedores de serviços na nuvem tiveram que tratar esta limitação, pois uma plataforma na nuvem sem uma base de dados escalável não chega a ser uma plataforma viável. Assim, para fornecer
aos clientes uma plataforma escalável para armazenar seus dados, os fornecedores tiveram uma
única solução. Estes fornecedores tiveram que implementar um novo tipo de sistema de banco de
dados que focasse em escalabilidade, ao custo de outros benefícios dos bancos de dados relacionais.
Estes esforços, combinados com aqueles de fornecedores de nichos de mercado, levaram à criação
de uma nova geração de sistemas gerenciadores de banco de dados.
A nova geração
Este novo tipo de sistema gerenciador de banco de dados é comumente chamado de chave-valor. De
fato, não há ainda um nome oficial, então é possível encontrar nomes como orientado a documentos, orientado a atributos, banco de dados distribuído (embora bancos de dados distribuídos também
possam ser relacionais), arrays particionados, tabelas hash distribuídas, e bancos de dados de chave-valor. Embora cada um destes nomes aponte para peculiaridades específicas desta nova abordagem,
são todas variações do mesmo tema, que chamaremos de bancos de dados de chave-valor.
Não importa como você chame, este “novo” tipo de banco de dados já está no mercado há algum
BANCO DE DADOS | Educação a Distância
79
tempo e tem sido utilizado em aplicações especializadas para as quais os bancos de dados relacionais
não serviam. Mas sem a escala que a web e a nuvem trouxeram, este novo tipo teria fica incógnito.
Atualmente o desafio é identificar se este novo tipo de banco de dados ou um banco de dados relacional é o mais adequado para uma aplicação particular.
Bancos de dados relacionais e bancos de dados de chave-valor são fundamentalmente diferentes e
projetados para atender diferentes requisitos. Uma comparação lado-a-lado permite comparar superficialmente estas diferenças e apresentamos uma inicial abaixo:
Definições de banco de dados
Bancos de dados relacionais
Bancos de dados de chave-valor
•
Bancos de dados contêm tabelas, tabelas
contêm linhas e colunas e linhas são compostas dos valores das colunas. Linhas
dentro de uma mesma tabela possuem
todas as mesmas definições de schema.
•
•
O modelo de dados é conhecido a priori.
Um schema é fortemente tipado e possui
restrições e relacionamentos que forçam a
integridade dos dados.
Domínios podem ser visualizados inicialmente como uma tabela, mas diferentemente de uma tabela você não precisa
definir um schema para um domínio. Um
domínio é basicamente um “balde” em
que você coloca itens. Itens dentro de
um mesmo domínio podem ter diferentes
schemas.
•
Itens são identificados por chaves, e um
dado item pode ter um conjunto de atributos dinâmicos associado.
•
Em algumas implementações, atributos
são do tipo String. Em outras implementações, atributos possuem tipos simples que
refletem os tipos do código tais como ints,
arrays de String e listas.
•
Não existem relacionamentos definidos de
modo explícito entre domínios ou mesmo
dentro de um mesmo domínio.
•
•
O modelo de dados é baseado numa
representação “natural” dos dados que
contém, e não nas funcionalidades da
aplicação.
O modelo de dados é normalizado para
remover duplicações de dados. A normalização estabelece relacionamentos entre
tabelas. Estes relacionamentos associam
os dados entre as tabelas.
Sem Join de Entidades
Bancos de dados de chave-valor são orientados a itens, o que significa que todos os dados relevantes
são armazenados dentro do próprio item. Um domínio (que você pode visualizar como uma tabela)
pode conter itens muito diferentes um do outro. Por exemplo, um domínio pode conter itens de clientes
e itens de pedidos. Isto significa que comumente os dados são duplicados entre itens num mesmo
domínio. Esta é uma prática aceitável porque espaço em disco é algo relativamente barato. Mas este
modelo permite que um único item contenha todos os itens relevantes, o que aumenta a escalabilida-
80
BANCO DE DADOS | Educação a Distância
de ao eliminar a necessidade de joins entre múltiplas tabelas. Com um banco de dados relacional, os
dados teriam que ser unidos para poder reagrupar todos os atributos relevantes.
Embora a necessidade de relacionamentos seja bastante reduzida com bancos de dados chave-valor, alguns ainda são inevitáveis. Estes relacionamentos costumam existir entre entidades chave
do modelo. Por exemplo, um sistema de pedidos pode ter itens que contenham dados sobre clientes,
produtos e outros. Não importa se estes dados residam no mesmo domínio ou em domínios diferentes; quando um cliente cria um pedido você provavelmente não quer armazenar os atributos tanto do
cliente quanto do produto no mesmo item do pedido.
Ao invés disso, pedidos precisam armazenar as chaves dos itens de cliente e produto. Embora isso
seja perfeitamente possível em bancos de dados chave-valor, estes relacionamentos não estão definidos no modelo de dados em si, e portanto o sistema gerenciador de banco de dados não pode forçar a
integridade dos relacionamentos. Isto significa que você pode excluir clientes e produtos que possuem
pedidos feitos. A responsabilidade por garantir a integridade dos dados cai toda sobre a aplicação.
Acesso a dados
Bancos de dados relacional
Banco de dados chave-valor
Dados são criados, atualizados, removidos e
consultados através de SQL.
Dados são criados, atualizados, removidos e
consultados através de APIs.
Consultas SQL podem acessar os dados de
uma única ou de múltiplas tabelas através de
joins.
Algumas implementações fornecem uma sintaxe básica parecida com SQL para definir critérios de filtragem.
Consultas SQL incluem funções de agregação
e filtros complexos.
Somente predicados básicos de filtragem podem ser aplicados na maioria das vezes.
Normalmente possuem meios de se embutir
lógica próximo aos dados através de triggers e
stored procedures.
A lógica de integridade da aplicação e seus
dados está toda implementada no código da
própria aplicação.
Interface com a aplicação
Bancos de dados relacional
Banco de dados chave-valor
Tendem a oferecer uma API própria ou uma API
genérica como o ODBC ou JDBC.
Tendem a oferecer APIs SOAP e/ou REST para
acesso aos dados.
Os dados são armazenados num formato que
representa sua estrutura natural, de modo que
deve haver um mapeamento entre as estruturas do código da aplicação e a estrutura relacional.
Os dados podem ser armazenados de modo
mais eficiente em compatibilidade com o código
da aplicação, requerendo pouca infraestrutura
para suportá-lo.
Vantagens de bancos de dados chave-valor
Existem duas claras vantagens dos bancos de dados chave-valor sobre os bancos de dados relacionais.
Adequado para a nuvem
O primeiro benefício é que os bancos de dados chave-valor são simples e portanto escalam melhor
que os bancos de dados relacionais atuais. Se você está desenvolvendo um sistema com uma equipe
BANCO DE DADOS | Educação a Distância
81
interna e pretende colocar dezenas ou centenas de servidores na sua base de dados para atender o
que você acredita que seja uma quantidade massiva de dados, então considere seriamente um banco
de dados chave-valor.
Como bancos de dados chave-valor escalam facilmente e de modo dinâmico, também são os banco
de dados preferidos de serviços de fornecedores de armazenamento através de web services com
potencial de escalabilidade. Usuários tipicamente pagam somente pelo que usam, mas seu uso aumenta à medida em que a demanda aumenta. Enquanto isso o fornecedor pode escalar a plataforma
dinamicamente baseado na carga total do usuário, com pouquíssimas limitações provocadas pelo
tamanho da plataforma.
Melhor adaptado para o código
Modelos de dados relacionais e modelos de código de aplicações são tipicamente construídos de
modo diferente, o que leva a incompatibilidades. Desenvolvedores normalmente superam estas incompatibilidades com código que mapeiam os seus objetos ao modelo relacional, um processo comumente denominado de mapeamento objeto-relacional. Este processo, que essencialmente requer
muito código de infraestrutura e não possui valor de negócios imediato, pode demandar uma parcela
considerável do tempo e do esforço do desenvolvimento da aplicação.
Outros argumentos a favor deste tipo de banco de dados, tais como “bancos de dados relacionais
podem se tornar pesados ou desajeitados” não são convincentes. Mas antes de entrar de cabeça no
mundo dos bancos de dados chave-valor, considere algumas limitações existentes.
Desvantagens de bancos de dados chave-valor
As restrições inerentes de um banco de dados relacional garantem que os dados em seu nível mais
baixo possuem integridade. Dados que violam as restrições de integridade não podem ser inseridos
fisicamente no banco de dados. Estas restrições não existem em bancos de dados de chave-valor,
então a responsabilidade de garantir a integridade dos dados é da aplicação. Mas o código da aplicação pode conter bugs. Bugs num banco de dados relacional devidamente projetado normalmente
não levam a problemas de integridade de dados; bugs num banco de dados chave-valor, entretanto,
facilmente levam a problemas de integridade de dados.
Um dos principais benefícios de um banco de dados relacional é que ele te força a um processo de
modelagem de dados. Se bem feito, o processo de modelagem cria uma estrutura lógica no banco
de dados que reflete os dados contidos, ao invés de refletir a estrutura da aplicação. Dados, então,
tornam-se quase que independentes de aplicação, o que reflete que outras aplicações podem utilizar o
mesmo conjunto de dados e a lógica da aplicação pode ser alterada sem modificar o modelo de dados.
Não se esqueça também da compatibilidade. Diferentemente de bancos de dados relacionais, bancos de dados na nuvem não costumam seguir padrões definidos. Embora todos tenham conceitos
similares, cada um possui sua própria API, interfaces de consulta específicas e peculiaridades. Desse
82
BANCO DE DADOS | Educação a Distância
modo, você terá que confiar em seu fornecedor, pois você não poderá simplesmente trocá-lo depois
se estiver descontente.
Limitações de análise
Na nuvem, bancos de dados chave-valor são compartilhados, o que significa que muitos usuários e
aplicações utilizam o mesmo sistema. Para prevenir que um único processo sobrecarregue o ambiente
compartilhado, muitos fornecedores na nuvem limitam o impacto total que uma consulta simples pode
causar. Por exemplo, no SimpleDB, você não pode executar uma consulta que leve mais que 5 segundos. Com o Google AppEngine, você não pode retornar mais que 1000 itens por consulta.
Estas limitações não são problemas para aplicações comuns com adição, atualização, remoção e
consulta de poucos itens. Mas o que ocorre quando sua aplicação torna-se bem sucedida? Você atraiu
muitos usuários e ganhou muitos dados, e agora você quer criar valor agregado para seus usuários ou
utilizar os dados para gerar outras fontes de receita. Neste caso talvez os limites de consulta impostos
pelos fornecedores de nuvem possam limitá-lo severamente. Situações como criação de padrões de
uso e fornecimento de recomendações baseado no histórico do usuário podem tornar-se difíceis e
talvez impossíveis em algumas plataformas.
Neste caso, você provavelmente irá implementar um banco de dados analítico em separado, populado
a partir de seu banco de dados chave-valor, para que estas análises sejam executadas. Planeje com
antecedência onde e como você o fará. Você o hospedaria na nuvem ou on premise? A latência entre
você e o provedor na nuvem seria um problema? Seu banco de dados chave-valor suporta isso? Se
você possui 100 milhões de itens em seu banco de dados chave-valor, e você pode somente consultar
1000 de cada vez, quantas consultas isso levaria?
Em último caso, embora escalabilidade seja um fator sério a considerar, mas se esqueça da sua
necessidade de converter os dados em uma fonte de receita. Toda a escalab do mundo é inútil se os
seus usuários migrarem para seu concorrente porque ele possui funcionalidades mais interessantes.
Competidores de serviços baseados em nuvem
Um bom número de fornecedores de serviços web agora oferece bancos de dados chave-valor compartilhados no estilo pague-pelo-uso. A maioria deles atende aos critérios definidos até agora, mas
cada um possui funcionalidades únicas que variam dos padrões que descrevemos até agora. Descreveremos agora de um modo geral alguns bancos de dados particulares, como o SimpleDB, Google
AppEngine Datastore e SQL Data Services.
Amazon: SimpleDB
BANCO DE DADOS | Educação a Distância
83
O SimpleDB é um banco de dados de chave-valor orientado a atributos disponível na plataforma da
Amazon Web Services.
O SimpleDB possui diversas limitações. Primeiro, uma consulta pode ser executada por no máximo
5 segundos. Segundo, não há tipos de dados além de Strings. Tudo é armazenado, recuperado e
comparado como uma String. Comparações de data não funcionarão a não ser que você converta
todas as datas para o formato ISO8601. Terceiro, o tamanho máximo de uma String é limitado a 1024
bytes, o que limita quanto de texto (por exemplo, descrições de produtos) você pode armazenar num
único atributo. Mas como o schema é dinâmico e flexível, você pode contornar este limite adicionado
“descricao1”, “descricao2” etc. O problema é que cada item é limitado em 256 atributos.
Uma característica chave do SimpleDB é o seu modelo de consistência eventual. Este modelo de
consistência é bom para concorrência, mas significa que se você alterou o atributo de um item, estas
mudanças não serão refletidas imediatamente nas operações de leitura. Embora as chances de algum
problema ocorrer em função disso sejam pequenas, você deve se preparar para estas situações. Por
exemplo, você não deseja vender o último ingresso de um show para cinco pessoas diferentes no seu
sistema de eventos.
Google AppEngine Data Store
O Google AppEngine Datastore é construído sobre o BigTable, o sistema interno do Google para
manipulação de dados estruturados. Em si, o AppEngine não é um mecanismo de acesso direto ao
BigTable, mas pode ser considerado como uma interface simplificada sobre o BigTable.
O AppEngine Datastore suporta muito mais tipos de dados que os itens do SimpleDB, incluindo tipos
de lista, que contém coleções de elementos num único item.
Você provavelmente utilizará este banco de dados se planeja construir aplicações no Google AppEngine. Entretanto, diferentemente do SimpleDB, você não consegue interfacear diretamente com o
AppEngine Datastore (ou com o BigTable) utilizando uma aplicação foram da nuvem do Google.
Microsoft: SQL Data Services
84
BANCO DE DADOS | Educação a Distância
O SQL Data Services é parte da plataforma de serviços web Microsoft Azure. O serviço do SDS é
na verdade uma aplicação em si que roda sobre vários SQL Servers, que formam o mecanismo de
armazenamento da plataforma. Embora os bancos de dados de infraestrutura sejam relacionais, você
não precisa acessá-los; SDS é um banco de dados chave-valor, assim como as outras plataformas
discutidas até agora.
A Microsoft parece estar sozinha neste cenário ao concordar que embora bancos de dados chave-valor sejam ótimo para escalabilidade, esta escalabilidade vem ao custo do gerenciamento de dados,
quando comparado a SGBDRs. A abordagem da Microsoft parece ser focar no fundamental para conseguir implementar os mecanismos de escalabilidade e distribuição direito, e com o passar do tempo,
adicionar funcionalidades que ajudarão a diminuir a diferença entre bancos de dados chave-valor e
relacionais.
Fornecedores on-premise
Fora da nuvem, existem vários produtos de bancos de dados chave-valor que podem ser instalados
on-premise. A maioria é open source; tendo acesso ao código-fonte talvez você possa analisar e
tornar-se melhor ciente de potenciais problemas e limitações – uma vantagem que você não teria em
fornecedores de código fechado.
CouchDB
CouchDB é um banco de dados orientado a documentos livre e open-source. Derivado de um banco
de dados chave-valor, utiliza JSON para definir o schema de seus itens. O CouchDB tenta diminuir
a distância entre bancos de dados orientados a documentos e relacionais ao permitir que “visões”
sejam criadas dinamicamente com JavaScript. Estas visões mapeiam os dados do documento numa
estrutura parecida com tabelas que podem ser indexadas e consultadas.
Até o momento, o CouchDB não é realmente um banco de dados distribuído. Ele possui funções
de replicação que permite que os dados sejam sincronizados entre servidores, mas não é o tipo de
distribuição suficiente para construir ambientes de alta escalabilidade. A comunidade do CouchDB,
entretanto, está trabalhando disso.
Projeto Voldemort
BANCO DE DADOS | Educação a Distância
85
O projeto Voldemort é um banco de dados distribuído chave-valor cujo objetivo é escalar horizontalmente num grande número de servidores. Ele surgiu como um trabalho desenvolvido no LinkedIn e é
utilizado no LinkedIn em alguns poucos sistemas que possuem requisitos elevados de escalabilidade.
O projeto Voldemort também utiliza um modelo de consistência eventual.
mongoDB
O MongoDB é um sistema de banco de dados desenvolvido pela 10gen por Geir Magnusson e Dwight
Merriman. Assim como o CouchDB, o MongoDB é um banco de dados orientado a documentos baseado em JSON, excetuando-se o fato de que ele é um verdadeiro banco de dados de objetos ao invés
de ser puramente chave-valor.
tomando uma decisão
Basicamente há quatro motivos para se escolher uma plataforma de banco de dados não relacional
chave-valor para sua aplicação:
1.
Seus dados são orientados a documentos, tornando-os uma escolha natural para o modelo de
chave-valor ao invés do modelo relacional.
2.
Seu ambiente de desenvolvimento é altamente orientado a objetos, e um banco de dados chave-valor pode diminuir a quantidade de código de infraestrutura.
3.
O banco de dados é barato e integra com sua plataforma de serviços web.
4.
Sua principal preocupação é a alta escalabilidade sob demanda – ou seja, uma escalabilidade
distribuída de larga escala que não pode ser obtida com escalabilidade vertical.
Ao tomar sua decisão, lembre-se das limitações e dos riscos que você corre ao sair da “zona de conforto” do modelo relacional.
Para todos os outros requisitos, provavelmente você estará melhor servidor pelo bom e velho modelo
relacional. Portanto, estariam os bancos de dados relacionais condenados? Claramente não. Pelo
menos por enquanto.
Fonte: <http://www.readwriteweb.com/enterprise/2009/02/is-the-relational-database-doomed.php>.
Acesso em: 14 ago. 2012.
86
BANCO DE DADOS | Educação a Distância
CONSIDERAÇÕES FINAIS
Nesta unidade, inicialmente descrevemos os conceitos de domínio, tuplas, atributos e
relações do modelo relacional. A abordagem deste autor para explicar o modelo relacional
é a de tentar fugir um pouco das definições formais matemáticas do modelo e focar nos
conceitos fundamentais do modo mais próximo possível ao cotidiano de desenvolvimento de
software. Propositadamente deixamos de lado aspectos de álgebra relacional, que podem ser
aprofundados em excelentes livros como o de Silberschatz (1999) e Date (1988).
No modelo relacional há uma série de restrições impostas para que se possa garantir a
consistência dos dados presentes nos diferentes domínios, bem como a consistência do
próprio modelo. As restrições discutidas foram de domínio, de chave, de valores nulos,
de integridade e de integridade referencial e chaves estrangeiras. Estas restrições são os
atributos que tornam o modelo relacional tão interessante e tão conceituado perante alguns
desenvolvedores e, claro, DBAs. Enxergar o sistema de banco de dados como uma aplicação
terceira que deve ser integrada ao software que desenvolvemos é uma visão que nos permite
entender o porquê de tamanha valorização das restrições. De fato, com estas restrições
(quando bem implementadas), há a garantia da integridade e consistência das informações
armazenadas.
As operações de modificação do modelo relacional descritas no modelo relacional são as
operações de Insert, Update e Delete e todas podem provocar violações do modelo – sendo
cada uma delas abordada em suas respectivas seções.
Agora que já temos toda a base conceitual do popular modelo de dados relacional, podemos
passar a interagir e executar operações com os sistemas de bancos de dados relacionais. Para
nossa sorte, há um padrão bem estabelecido e sólido de interação com os SGBDs relacionais,
que é a linguagem SQL. O assunto SQL é tão importante e será tão utilizado em sua vida
profissional que dedicaremos as duas próximas unidades para tratá-lo.
BANCO DE DADOS | Educação a Distância
87
ATIVIDADES DE AUTOESTUDO
1. Por que não existe uma ordem definida para as tuplas dentro de uma relação?
2. Quais são as situações em que é adequada a utilização de valores NULL?
3. Defina os conceitos de integridade e integridade referencial.
88
BANCO DE DADOS | Educação a Distância
UNIDADE IV
SQL Básico
Professor Me. Edson Yanaga
Objetivos de Aprendizagem
• Definir o que é SQL.
• Apresentar os comandos de definição e uso da SQL.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
• Definição e histórico da SQL
• Descrição dos comandos de definição de dados e tipos em SQL
• Descrição dos comandos de consulta básicos em SQL
• Descrição dos comandos de modificação de dados em SQL
Fonte: SHUTTERSTOCK.COM
INTRODUÇÃO
A primeira ideia que vem à cabeça de um desenvolvedor experiente quando se fala de banco
de dados relacionais é SQL. Realmente, talvez uma das boas razões pelas quais os SGBDs
relacionais são tão difundidos deve-se ao fato de que a SQL é uma ferramenta bastante
madura, elaborada e bem projetada.
Em português, pronuncia-se SQL como uma sigla, com o som de cada uma das letras
separadas, “esse-quê-ele”. Porém, nas conversas em projetos internacionais que você fará,
ou em conferências que você participará em sua vida profissional, perceberá que em inglês
SQL é pronunciado como “síquel”. O motivo é curioso e não tem a ver com a sigla SQL, e sim
com o nome original desta linguagem. Atualmente, a sigla SQL significa Structured Query
Language (Linguagem de Consulta Estruturada), mas originalmente seu nome era SEQUEL:
Structured English QUEry Language (Linguagem de Consulta em Inglês Estruturado) – daí o
motivo da pronúncia como “síquel”.
SQL é uma linguagem diferente das linguagens de programação que você provavelmente
aprendeu até agora. Em qualquer curso de programação, costuma-se ensinar inicialmente
linguagens de programação imperativas (como C, Pascal, Java ou Python), em que você
é responsável por escrever os comandos na ordem de execução esperada. Neste tipo de
BANCO DE DADOS | Educação a Distância
91
linguagem, preocupamo-nos em instruir o computador no modo como ele deve executar as
tarefas. O resultado de seu processamento é uma consequência daquilo que comandamos.
Já a SQL é uma linguagem declarativa, pois nela define-se o quê deve ser retornado como
resultado do processamento, sem especificar o como isso será feito.
Permita uma reflexão sobre a natureza declarativa da SQL. Na SQL, ao definirmos somente o
que esperamos de resultado ao invés do como, permitimos que o SGBD decida como é que
ele deve executar as instruções. Há 10 anos, este seria um fator determinante para decidir
entre um produto e outro. A evolução dos produtos comerciais e livres fez com que esta
diferença diminuísse de modo significativo – embora, dependendo dos casos de uso de sua
aplicação, a diferença ainda possa ser relevante. Em alguns casos, centenas de parâmetros
de configuração do produto permitem alterar a forma com que o SGBD executa o “como”:
uma tarefa que muitas vezes chega a ser minuciosa – tudo isso para conseguir aumentar o
desempenho do seu SGBD.
Para tentar diminuir as diferenças entre as diversas implementações e variantes da SQL utilizadas
em produtos distintos, a ANSI (American National Standards Institute) e a ISO (International
Standards Organization) uniram-se para criar um padrão para a SQL. A versão mais popular
deste padrão é a SQL-92, embora haja uma versão mais recente: a SQL:1999. Infelizmente, os
fabricantes de SGBDs não seguem 100% o padrão, o que torna a tarefa de migração de um
produto para outro um pouco mais difícil. Comercialmente, é uma estratégia interessante para
os fabricantes, pois baseia-se no aprisionamento do cliente: uma vez comprometido com um
produto, o custo para migração (em tempo e esforço) torna-se elevado o suficiente para que o
cliente desista da ideia. Já para os usuários, este é um fato infeliz. De positivo do padrão SQL92 temos que mesmo com as sutis diferenças entre as implementações da SQL em diferentes
produtos, as semelhanças se sobressaem e permitem que os desenvolvedores de software
possam aprender facilmente a lidar com produtos concorrentes.
A SQL possui comandos tanto para a criação de definições de dados (criação de schemas)
quanto para a execução de comandos de manipulação de banco de dados (consultas e
92
BANCO DE DADOS | Educação a Distância
atualizações). É uma linguagem bastante abrangente. É por este motivo que trataremos da
SQL em duas unidades distintas. Esta primeira abordará a criação de schemas e os comandos
básicos da linguagem, enquanto que a próxima unidade abordará os comandos um pouco
mais avançados.
DEFINIÇÕES DE DADOS E TIPOS EM SQL
Na unidade anterior, definimos os termos relação, tupla e atributo do modelo relacional. Em
SQL, estes termos são denominados respectivamente de tabela, linha e coluna. Boa parte
dos comandos SQL relacionados à criação e definição de dados utiliza o comando CREATE.
O conceito de schema
Em sua versão inicial, a SQL não possuía um mecanismo para agrupar tabelas relacionadas.
Como consequência, todas as tabelas no SGBD coexistiam dentro de um mesmo “ambiente”.
A partir do SQL-92, criou-se o conceito de schema, que é simplesmente um conjunto de
tabelas relacionadas. Do mesmo modo que em UML um pacote é um conjunto de classes
relacionadas, um schema é um conjunto de tabelas relacionadas. Por exemplo, o seguinte
comando cria um schema denominado de “agenda”. Todos os comandos em SQL são
finalizados por um ponto-e-vírgula:
create schema agenda;
Além de agrupar logicamente as tabelas, um schema também é convenientemente utilizado
para autorizar/restringir o acesso pelos usuários. Você pode autorizar determinados usuários
a acessar um schema e restringir o acesso a outros.
O comando CREATE TABLE
O comando CREATE TABLE é utilizado para criar uma nova tabela. O primeiro parâmetro do
BANCO DE DADOS | Educação a Distância
93
comando é o nome da tabela sendo criada, seguido dos atributos e seus respectivos tipos e
eventuais restrições do atributo. Restrições de integridade referencial podem ser definidas ao
final do comando.
contato
id
nome
sobrenome
nascimento
peso
email
id
email
contato_fk
telefone
contato_fk
telefone
id
grupo aflição
id
nome
grupo_fk
contato_fk
Figura 6
Fonte: o autor
Os seguintes comandos criam as tabelas definidas na Figura 6:
94
BANCO DE DADOS | Educação a Distância
CREATE TABLE contato (
id INT PRIMARY KEY,
nome VARCHAR(30) NOT NULL,
sobrenome VARCHAR(30) NOT NULL,
nascimento DATE,
peso DECIMAL(10,2)
);
CREATE TABLE email (
id INT PRIMARY KEY,
email VARCHAR(60) NOT NULL,
contato_fk INT,
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
CREATE TABLE telefone (
id INT PRIMARY KEY,
telefone VARCHAR(20) NOT NULL,
contato_fk INT,
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
CREATE TABLE grupo (
id INT PRIMARY KEY,
nome VARCHAR(30) NOT NULL
);
CREATE TABLE afiliacao (
grupo_fk INT NOT NULL,
contato_fk INT NOT NULL,
PRIMARY KEY (grupo_fk, contato_fk),
FOREIGN KEY (grupo_fk) REFERENCES grupo(id),
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
BANCO DE DADOS | Educação a Distância
95
Em algumas situações, não é possível definir as restrições de integridade referencial e chave
estrangeira no próprio CREATE TABLE, pois as tabelas referenciadas ainda não existem. Na
próxima unidade, abordaremos como resolver este impasse.
Tipos de dados
A SQL define um conjunto de tipos de dados básicos para os seus atributos. Diferentes
produtos adicionam tipos de dados diferentes ao conjunto suportado, mas todos os produtos
disponíveis no mercado suportam ao menos estes tipos básicos:
Tipos numéricos
Tipos de dados numéricos suportam dados inteiros (INT e SMALLINT)
e de ponto flutuante (FLOAT e DOUBLE). Números com precisão decimal (normalmente utilizados em cálculos de moeda, por exemplo)
são DECIMAL ou NUMERIC, declarados como DECIMAL(a,b) ou
NUMERIC(a,b) onde “a” é o número de dígitos inteiros e “b” é o número
de dígitos decimais.
Tipos Caractere
Tipos de caractere podem ser de tamanho fixo ou variável. Os atributos
de tamanho fixo podem ser declarados como CHAR(n) onde “n” é o
número máximo de caracteres suportado pelo atributo. Para especificar
um atributo de tamanho variável, utiliza-se o tipo VARCHAR(n).
Para se entender o critério de uso entre um e outro, é necessário entender como é a alocação de espaço destes tipos no arquivo físico. Se
o tamanho for fixo (CHAR), o SGBD já aloca este tamanho predefinido
no arquivo: as buscas podem ser mais rápidas, pois o SGBD já sabe o
tamanho do campo ao “pular bytes” na busca sequencial. Entretanto,
se o conteúdo dos atributos não preencher todo o tamanho definido, há
o desperdício de espaço de armazenamento. Por outro lado, utilizando-se VARCHAR, o SGBD aloca um ponteiro para determinar qual o tamanho do atributo: as buscas são mais lentas, mas não há desperdício
de espaço.
Tipos booleanos
96
Assim como em linguagens de programação, tipos booleanos podem
assumir os valores TRUE ou FALSE. Muitos SGBDs mapeiam estes
valores em “1” e “0”, respectivamente.
BANCO DE DADOS | Educação a Distância
Tipos temporais
O tipo DATE suporta dados temporais no formato AAAA-MM-DD (ano,
mês, dia), enquanto que o tipo TIME utiliza o formato HH:MM:SS (hora,
minuto e segundo). A própria SQL assegura representações temporais
válidas.
RESTRIÇÕES
Seguindo o nosso planejamento, abordaremos agora as restrições que podem ser declaradas
em SQL no comando CREATE TABLE. Restrições adicionais especificadas em outros
comandos serão abordadas na próxima unidade.
Valores NULL e valores padrão
A linguagem SQL permite que todos os atributos (com exceção daqueles que compõem a
chave primária) sejam nulos. Se o seu modelo de negócios não permite que um atributo seja
nulo, é necessário especificar uma restrição de NOT NULL na declaração do atributo.
Uma outra consideração (pequena talvez) sobre o NOT NULL é que no mínimo o SGBD terá
que gravar um bit (ou um byte) a mais em cada atributo em casos de campos NULL. Se um
atributo permitir nulos, então o SGBD terá que primeiramente saber se o campo é nulo ou não,
e depois armazenar o próprio conteúdo.
Além de valores nulos, também há possibilidade de se definir um valor padrão para os atributos
utilizando-se a cláusula DEFAULT <valor>. Caso este atributo seja omitido durante a inserção
de uma linha da tabela, assume-se o valor padrão.
Por padrão na SQL, caso nenhuma cláusula seja declarada, os atributos permitirão valores
nulos e o valor padrão também será nulo.
Como exemplo, poderíamos definir ‘Silva’ como o sobrenome padrão dos nossos contatos no
comando CREATE TABLE:
BANCO DE DADOS | Educação a Distância
97
CREATE TABLE contato (
id INT PRIMARY KEY,
nome VARCHAR(30) NOT NULL,
sobrenome VARCHAR(30) NOT NULL DEFAULT ‘Silva’,
nascimento DATE,
peso DECIMAL(10,2)
);
Chaves e integridade referencial
Para especificar uma chave primária, utiliza-se a cláusula PRIMARY KEY. Caso a chave
primária possua um único atributo, ela pode ser declarada no próprio atributo (como no
exemplo da tabela contato):
id INT PRIMARY KEY
Havendo mais de um atributo na chave primária, é necessário declará-la ao final (como no
exemplo da tabela grupo):
PRIMARY KEY (grupo_fk, contato_fk)
A cláusula UNIQUE especifica chaves únicas (não primárias) numa tabela. Poderíamos alterar
a definição da tabela email para garantir que não haja e-mails duplicados em nossa aplicação:
CREATE TABLE email (
id INT PRIMARY KEY,
email VARCHAR(60) NOT NULL UNIQUE,
contato_fk INT,
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
Já a integridade referencial e as chaves estrangeiras são definidas por meio da cláusula
98
BANCO DE DADOS | Educação a Distância
FOREIGN KEY, como utilizada já no nosso exemplo nas tabelas email e telefone:
CREATE TABLE email (
id INT PRIMARY KEY,
email VARCHAR(60) NOT NULL,
contato_fk INT,
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
CREATE TABLE telefone (
id INT PRIMARY KEY,
telefone VARCHAR(20) NOT NULL,
contato_fk INT,
FOREIGN KEY (contato_fk) REFERENCES contato(id)
);
CONSULTAS BÁSICAS EM SQL
O comando em SQL para a execução de operações de consulta é o SELECT, e as consultas que
podem ser elaboradas com este comando variam das mais simples até as bem complicadas.
Em sua forma fundamental, um comando de consulta SELECT assume a forma SELECT
<atributos> FROM <tabelas> WHERE <condições>.
De acordo com Silberschatz (1999), a expressão básica de consulta em SQL consiste de três
cláusulas: SELECT, FROM e WHERE:
1. A cláusula de SELECT é utilizada para listar os atributos desejados no resultado da
consulta.
2. A cláusula FROM lista as relações (tabelas) que devem ser examinadas na avaliação
da expressão SQL.
3. A cláusula WHERE corresponde ao predicado envolvendo os atributos das relações
que aparecem na cláusula FROM.
BANCO DE DADOS | Educação a Distância
99
As condições do comando SQL podem utilizar comparadores lógicos similares aos de outras
linguagens de programação já conhecidas, tais como = (igual), < (menor), <= (menor ou igual),
> (maior), >= (maior ou igual) e <> (diferente).
Provavelmente, uma das melhores formas de se aprender é por meio de exemplos. Ao invés de
nos atermos aos detalhes sintáticos e conceituais de cada tipo de consulta, apresentaremos
exemplos de como realizá-las a seguir.
Todos os exemplos de consulta serão realizados tendo-se como base a definição de esquema
proposta na Figura 6.
Exemplo 1: Selecione o nome e o telefone de todos os contatos cujo sobrenome seja ‘Silva’.
SELECT nome, telefone FROM contato, telefone WHERE contato.id = telefone.contato_fk AND contato.sobrenome = ‘Silva’;
Neste exemplo, a condição contato.sobrenome = ‘Silva’ é um predicado que seleciona
somente as linhas especificadas na tabela contato. A condição contato.id = telefone.contato_fk
é denominada de condição de join, pois combina duas tabelas diferentes baseadas, neste
caso, numa chave estrangeira de um relacionamento entre ambas.
Exemplo 2: Selecione o nome, o telefone e o e-mail de todos os contatos cujo nome seja
‘Edson’.
SELECT nome, telefone, email
FROM contato, telefone, email
WHERE contato.id = telefone.contato_fk AND contato.id = email.contato_fk AND contato.nome =
‘Edson’;
Neste exemplo pode-se notar que numa consulta é permitido realizar o join entre várias tabelas
diferentes; e novamente neste caso, todas estão relacionadas por meio de uma condição de
combinação baseada em chaves estrangeiras.
100 BANCO DE DADOS | Educação a Distância
Exemplo 3: Selecione o id do telefone de todos os contatos cujo peso seja maior que 70.
SELECT telefone.id
FROM contato, telefone
WHERE contato.peso > 70;
O exemplo 3 mostra como devemos definir os nomes dos atributos nas cláusulas quando há a
possibilidade de ambiguidade na definição dos nomes. Tanto a tabela contato quanto a tabela
telefone possuem um atributo denominado de “id”. Neste caso, devemos informar à SQL qual é
o atributo “id” que desejamos obter, prefixando o atributo com o nome de sua respectiva tabela.
No caso do exemplo, eliminamos a ambiguidade descrevendo o atributo como “telefone.id”.
Exemplo 4: Selecione o nome do grupo e o nome do contato de todos os contatos cujo nome
seja ‘Joaquim’.
SELECT contato.nome as n, grupo.nome as g
FROM contato, grupo, afiliacao
WHERE contato.id = afiliacao.contato_fk AND grupo.id = afiliacao.grupo_fk AND n = ‘Joaquim’;
Uma facilidade na construção de consultas que possuem termos repetidos sendo referenciados
é a criação de um alias. Um alias é um apelido definido para um determinado termo da consulta
SQL. No Exemplo 4, definimos que o atributo contato.nome possui um alias “n” e que o atributo
grupo.nome possui um alias “g”. Desse modo, no restante desta consulta, não precisamos
mais nos referenciar a estes atributos pela referência completa, e torna-se possível então
simplesmente escrevermos a condição final da consulta como sendo n = ‘Joaquim’.
Exemplo 5: Selecione o peso de todos os contatos com peso < 100.
SELECT c.peso
FROM contato c
WHERE c.peso < 100;
No exemplo 5, demonstramos que a definição de um alias não está restrita aos atributos; um
alias pode também ser definido como um apelido para uma tabela na consulta SQL.
BANCO DE DADOS | Educação a Distância
101
Exemplo 6: Selecione a data de nascimento de todos os contatos.
SELECT nascimento
FROM contato;
A cláusula WHERE de uma consulta SQL é opcional. Embora em muitos casos você, como
programador(a), deva se questionar se isto é oportuno ou não, já que potencialmente a
quantidade de registros numa tabela pode chegar aos milhões ou bilhões. Quando a cláusula
WHERE é omitida, a consulta irá processar todos os registros das tabelas referenciadas. No
Exemplo 6 demonstramos como obter todas as datas de nascimento por meio do processamento
de todas as linhas da tabela contato.
Exemplo 7: Selecione todos os atributos de contatos cujo peso = 75.
SELECT *
FROM contato
WHERE peso = 75;
Quando não se deseja limitar quais atributos devem ser retornados na consulta, pode-se
utilizar um asterisco (“*”) para determinar ao SQL que processe todos os atributos de todas as
tabelas da cláusula FROM no resultado da consulta SQL.
Exemplo 8: Selecione todos os sobrenomes distintos de todos os contatos.
SELECT DISTINCT sobrenome
FROM contato;
Embora o modelo relacional seja baseado na teoria geral dos conjuntos e matematicamente
em conjuntos não haja elementos repetidos, permite-se elementos repetidos em tabelas, e
consequentemente, nos resultados das consultas estes elementos repetidos são exibidos. Nas
situações em que se deseje eliminar as tuplas repetidas nos resultados das consultas, pode-se
utilizar a cláusula DISTINCT como no Exemplo 8.
102 BANCO DE DADOS | Educação a Distância
Exemplo 9: Selecione todos os telefones cujo número comece com ‘44’.
SELECT *
FROM telefone
WHERE telefone LIKE ‘44%’;
No Exemplo 9, utilizamos o comparador LIKE para definir uma busca por padrões em Strings.
O caractere ‘%’ é utilizado em condições LIKE para definir zero ou mais caracteres. Neste
exemplo, o ‘44%’ determina que a String deve iniciar com ‘44’ e pode possuir zero ou mais
caracteres posteriores.
Exemplo 10: Selecione todos os contatos que nasceram na década de 1980.
SELECT *
FROM contato
WHERE nascimento LIKE ‘198_-__-__’;
Um outro caractere especial que pode ser utilizado em condições LIKE é o ‘_’. Ele representa
um único caractere arbitrário utilizado na busca. Como as datas em SQL podem ser
representadas como uma String ‘AAAA-MM-DD’, utilizamos o ‘_’ para preencher os campos
da nossa busca.
Exemplo 11: Selecione todos os contatos cujo peso esteja entre 90 e 100.
SELECT *
FROM contato
WHERE peso BETWEEN 90 AND 100;
A condição BETWEEN da SQL pode ser utilizada para determinar intervalos de valor em
comparações.
BANCO DE DADOS | Educação a Distância
103
Exemplo 12: Selecione o nome de todos os contatos por ordem alfabética crescente.
SELECT nome
FROM contato
ORDER BY nome ASC;
A cláusula ORDER BY da SQL permite que o resultado da busca seja ordenado de acordo
com os parâmetros informados. Uma cláusula ORDER BY pode ordenar os resultados de
modo ascendente ou descendente. Para tanto, basta adicionar respectivamente o modificador
ASC ou DESC na cláusula. O valor ASC é o padrão e é o valor assumido caso o modificador
seja omitido.
Exemplo 13: Selecione o nome e o sobrenome de todos os contatos cujo sobrenome inicie
com ‘A’ e ordene por sobrenome em ordem decrescente e por nome em ordem crescente.
SELECT nome, sobrenome
FROM contato
WHERE sobrenome LIKE ‘A%’
ORDER BY sobrenome DESC, nome ASC;
No exemplo 13 demonstramos como ordenar o resultado de uma consulta a partir de dois
critérios diferentes. Os critérios são avaliados pela ordem em que são declarados.
COMANDOS DE MODIFICAÇÃO DE DADOS EM SQL
Até agora pudemos definir quais são os comandos básicos da SQL para a execução de
consultas básicas em nossos bancos de dados. Nesta seção abordaremos os comandos da
SQL que permitem a adição, atualização e remoção de tuplas (linhas), que respectivamente
correspondem ao INSERT, UPDATE e DELETE. Abordaremos cada um deles nas próximas
subseções.
104 BANCO DE DADOS | Educação a Distância
O comando INSERT
O comando INSERT é utilizado para inserir linhas numa determinada tabela. Devido à definição
formal do schema da tabela, precisamos informar os valores de inserção na tabela dentro de
uma ordem específica. Esta ordem pode ser a própria ordem determinada pela definição do
schema ou pode ser a ordem em que definimos os nomes das colunas da cláusula de INSERT.
O comando INSERT em sua forma mais simples pode ser exemplificado do seguinte modo:
INSERT INTO contato
VALUES (10, ‘Edson’, ‘Yanaga’, ‘1978-04-12’, 95);
Neste exemplo, determinamos que os valores da cláusula VALUES seguem a mesma ordem
da definição do schema, como definido no início desta unidade. Note que durante a inserção
os valores informados devem satisfazer as condições de restrições de domínio, integridade,
nulo e integridade referencial.
INSERT INTO contato (nome, sobrenome, peso, nascimento, id)
VALUES (‘Edson’, ‘Yanaga’, 95, ‘1978-04-12’, 10);
Nesta segunda forma do comando INSERT nós especificamos explicitamente qual a ordem
desejada de inserção de cada um dos atributos da tabela contato.
Uma questão que surge para os desenvolvedores é: qual seria a forma mais adequada?
Certamente não há uma resposta que possa ser considerada melhor ou pior, mas um argumento
a favor da segunda forma estabelece que quando a ordem dos argumentos é especificada no
próprio comando INSERT, evita-se que este torne-se inválido quando o schema da tabela for
modificado para adição ou alteração de ordem de alguma coluna. O fato do comando tornar-se
inválido provavelmente provocaria um erro da aplicação em tempo de execução, já que este
tipo de bug não pode ser identificado pelo compilador.
BANCO DE DADOS | Educação a Distância
105
Uma terceira forma do comando INSERT permite que os valores informados para inserção
sejam determinados por uma cláusula SELECT ao invés de serem argumentos literais na
própria cláusula. Podemos criar uma tabela adicional no nosso schema para armazenar estes
dados provenientes do comando SELECT:
CREATE TABLE lista_de_nomes (
nome varchar(30),
sobrenome varchar(30)
);
Baseando-se nos dados já existentes na tabela contato, a recém-criada tabela lista_de_nomes
poderia ser populada com o seguinte comando INSERT:
INSERT INTO lista_de_nomes (nome,sobrenome)
SELECT nome,sobrenome
FROM contato
WHERE nascimento > ‘1980-01-01’;
O comando UPDATE
O comando UPDATE modifica os valores de uma ou mais tuplas (linhas) das tabelas
selecionadas. Neste comando a cláusula WHERE determina quais são as linhas da tabela
selecionadas para modificação.
Em sua forma fundamental, um comando de modificação UPDATE assume a forma UPDATE
<tabela> SET <atributos e valores> WHERE <condições>.
Note que diferentemente do comando SELECT, um comando UPDATE só pode ser aplicado
numa única tabela. Caso seja necessário modificar os valores de atributos de mais de uma
tabela, vários comandos UPDATE terão que ser executados – todos possivelmente agrupados
dentro de uma única transação.
106 BANCO DE DADOS | Educação a Distância
UPDATE contato
SET peso = 99, nascimento = ‘1982-04-25’
WHERE nome = ‘Carlos’;
Neste exemplo do comando UPDATE, estamos modificando o valor de dois atributos das
tuplas cujo nome = ‘Carlos’. É uma prática bastante comum executarmos comandos UPDATE
no banco de dados somente identificando a chave primária na cláusula WHERE. Assim, temos
a garantia de que um único registro será modificado de cada vez (já que cada chave primária
é única dentro de uma mesma tabela), se assim for o caso de uso desejado.
UPDATE contato
SET peso = peso * 1.1;
Assim como no comando SELECT, a cláusula WHERE é opcional também no comando
UPDATE. Neste caso, todas as linhas da tabela informada serão selecionadas para a
execução das modificações solicitadas. No exemplo acima demonstramos que podemos
executar operações aritméticas com os valores dos atributos das tabelas. Neste exemplo,
atualizamos para 10% acima o peso de todos os contatos (no caso de uma hipotética epidemia
de obesidade).
UPDATE contato
SET nascimento = NULL;
O valor nulo também pode ser utilizado como valor de atribuição em comandos UPDATE,
desde que as restrições do schema do banco de dados assim o permita.
Assim como o comando INSERT – e de acordo com o já explanado na Unidade III – todas
as restrições do schema que se aplicam ao comando INSERT também são válidas para o
comando UPDATE.
BANCO DE DADOS | Educação a Distância
107
O comando DELETE
O comando DELETE na SQL remove linhas de uma determinada tabela. Assim como os
comandos INSERT e UPDATE, possui uma cláusula WHERE para limitar as linhas que serão
processadas pelo comando. Novamente, assim como nos comandos INSERT e UPDATE, a
ausência da cláusula WHERE implica que todas as linhas de uma determinada tabela serão
processadas – o que no caso do comando DELETE implica que o resultado será uma tabela
vazia.
Em sua forma fundamental, um comando de modificação DELETE assume a forma DELETE
FROM <tabela> WHERE <condições>.
DELETE FROM telefone
WHERE id = 5;
O exemplo acima é a forma mais comum de execução do comando DELETE. A exemplo do
comando UPDATE, o comando DELETE só pode ser aplicado em uma única tabela de cada
vez.
DELETE FROM contato;
Um caso extremo, este exemplo resultaria numa tabela contato vazia. Entretanto, como nas
operações de DELETE, as restrições de integridade referencial são verificadas, este comando
falharia com um erro caso alguma outra tabela (telefone, por exemplo) tivesse alguma chave
estrangeira apontando para uma linha da tabela contato.
108 BANCO DE DADOS | Educação a Distância
SugestãodeVídeo:
<http://youtu.be/HJre77TPpSw>.
Cezar Taurion, da IBM, fala das vantagens da computação em nuvem.
10 coisas que você deve saber sobre banco de dados NoSQl
Por um quarto de século, os Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDRs) têm
sido o modelo dominante para gerenciamento de banco de dados. Mas hoje, não relacionais, “cloud”
ou bancos de dados “NoSQL” estão ganhando atenção como um modelo alternativo para gerenciamento de banco de dados. Neste artigo, abordaremos os 10 aspectos principais destes bancos de
dadosNoSQLnãorelacionais:ascincoprincipaisvantagenseoscincodesafios.
Cinco vantagens do NoSQl
1.Escalabilidadeelástica
Por anos, administradores de banco de dados apoiaram-se na escalabilidade vertical – que consiste
na compra de servidores maiores à medida que a carga aumenta – ao invés da escalabilidade horizontal – distribuição dos bancos de dados em múltiplos servidores à medida que a carga aumenta.
Entretanto, à medida que os requisitos de carga de transações e disponibilidade aumentam, e os
banco de dados movem para a nuvem ou para ambientes virtualizados, as vantagens econômicas da
escalabilidade horizontal em hardware comoditizado tornam-se irresistíveis.
SGBDRs podem não escalar tão facilmente em clusters comoditizados, mas a nova geração de banco
de dados NoSQL é projetada para expandir-se transparentemente de modo a tirar proveito de novos
nós, e normalmente são concebidos com hardware de baixo custo em mente.
2. Big data
Assim como os níveis de transações cresceram absurdamente na última década, o volume de dados
BANCO DE DADOS | Educação a Distância
109
que está sendo armazenado também cresceu massivamente. O’Reilly chamou isto de “revolução industrial dos dados”. A capacidade dos SGBDRs tem crescido para se equiparar a estes aumentos,
mas assim como os níveis de transações, as restrições de volumes de dados que podem ser efetivamente gerenciados na prática por um único SGBDR tornaram-se intoleráveis para algumas empresas.
Atualmente, os volumes de “big data” que podem ser manipulados por sistemas NoSQL como o Hadoop superam em muito o que pode ser manipulado pelos maiores SGBDRs disponíveis.
3. Adeus DBAs (ou até logo?)
Apesar das muitas melhorias de gerenciamento alegadas pelos fornecedores de SGBDRs ao longo
dos anos, SGBDRs de alto nível só podem ser mantidos com a assistência de caros e altamente
treinados DBAs. DBAs estão intimamente envolvidos no projeto, instalação e otimização de sistemas
baseados em SGBDRs.
Bancos de dados NoSQL são normalmente concebidos para requerer menos gerenciamento: reparos
automáticos, distribuição de dados e modelos de dados mais simples tendem a requisitos de administração e otimização menores – na teoria. Na prática, é provável que os rumores da morte dos DBAs
tenham sido um pouco exagerado. Alguém sempre será responsável pelo desempenho e disponibilidade de um repositório de dados de missão crítica.
4. Economia
Bancos de dados NoSQL tipicamente utilizam clusters de servidores baratos para gerenciar a explosão
no volume de transações e dados, enquanto que SGBDRs tendem a depender de caros servidores e
dispositivos de armazenamento proprietários. O resultado é que o custo por gigabyte ou transações/
segundo para o NoSQL pode ser muitas vezes menor que o custo de SGBDRs, permitindo que você
armazene e processe os dados com um custo muito menor.
5. Modelos de dados flexíveis
Gerência de mudança é uma grande dor de cabeça para grandes SGBDRs em produção. Cada pequena mudança no modelo de dados deve ser cuidadosamente gerenciada e pode necessitar de
downtime ou níveis de serviço reduzidos.
Bancos de dados NoSQL possuem restrições de modelos de dados muito mais flexíveis – ou inexistentes. Bancos de dados NoSQL do tipo chave-valor ou de documentos permitem que a aplicação
virtualmente armazene qualquer estrutura num elemento de dado. Mesmo um banco de dados NoSQL
definido de modo mais rígido como aqueles baseados em BigTable (Cassandra e HBase) tipicamente
permitem o acréscimo de novas colunas sem maiores problemas.
O resultado é que as mudanças na aplicação e as mudanças no schema do banco de dados não
precisam mais ser gerenciadas como uma única e complicada mudança. Na teoria, isto permite que
as aplicações possuam ciclos de iteração mais rápidos, embora claramente possa haver efeitos colaterais indesejáveis caso a aplicação falhe em gerenciar a integridade dos dados.
Cinco desafios do NoSQL
A promessa dos bancos de dados NoSQL gerou muito entusiasmo, mas ainda há obstáculos a serem
superados antes que eles possam seduzir grandes empresas mais conservadoras. A seguir listamos
alguns dos principais desafios.
110 BANCO DE DADOS | Educação a Distância
1. Maturidade
SGBDRs já estão por aí há um longo tempo. Defensores do NoSQL argumentarão que sua idade
avançada é um sinal de sua obsolescência, mas para a maioria dos CIOs, a maturidade dos SGBDRs
é reconfortante. Para a maioria, SGBDRs são estáveis e ricos em funcionalidades. Em comparação,
muitas alternativas NoSQL são versões de pré-produção em que muitas funcionalidades importantes
ainda devem ser implementadas.
2. Suporte
Empresas querem a garantia de que se um sistema chave falhar, terão um suporte competente com
um tempo de resposta aceitável. Todos os fornecedores de SGBDRs trabalham bastante para conseguirem fornecer um elevado nível de suporte corporativo.
Em contraste, muitos sistemas NoSQL são projetos open-source, e embora existam muitas empresas
oferecendo suporte a banco de dados NoSQL, estas empresas normalmente são pequenas startups
sem o alcance global, recursos de suporte ou credibilidade de empresas como Oracle, Microsoft ou
IBM.
3. Business Intelligence e Business Analytics
Banco de bancos NoSQL evoluíram para atender a demanda de escala de modernas aplicações Web
2.0. Consequentemente, a maioria de suas funcionalidades está relacionada às demandas destas
aplicações. Entretanto, os dados de uma aplicação têm um valor para o negócio que vai além do ciclo
de insert-read-update-delete de uma típica aplicação Web. Empresas mineram informações em banco
de dados corporativos para melhorar sua eficiência e competitividade, e business intelligence (BI) é
um ativo valioso de TI para todas as médias e grandes empresas.
Bancos de dados NoSQL oferecem poucas funcionalidades para consultas e análises ad-hoc. Mesmo
uma simples consulta exige um domínio significativo de programação, e muitas ferramentas de BI
populares não fornecem conectividade a NoSQL.
Algum alívio é trazido pelo surgimento de solução como HIVE e PIG, que podem fornecer um fácil
acesso a dados em clusters Hadoop e eventualmente outros bancos de dados NoSQL. A Quest Software desenvolveu um produto – Toad for Cloud Databases – que pode fornecer a capacidade de
consultas ad-hoc em uma boa variedade de bancos de dados NoSQL.
4. Administração
Os objetivos de projeto do NoSQL podem ser o de fornecer uma solução com custo zero de administração, mas a realidade atual ainda não é esta. O NoSQL hoje requer muita habilidade para instalar e
muito esforço de manutenção.
5. Expertise
Existem literalmente milhões de desenvolvedores no mundo todo, em praticamente todo segmento
de negócios, que estão familiarizados com os conceitos e programação em SGBDRs. Em contraste,
praticamente todo desenvolver NoSQL ainda está em processo de aprendizado. Esta situação será
resolvida naturalmente com o passar do tempo, mas por enquanto, é muito mais fácil encontrar programadores ou administradores SGBDR que um expert em NoSQL.
Conclusão
Bancos de dados NoSQL estão se tornando uma crescente e importante parte do cenário de banBANCO DE DADOS | Educação a Distância
111
co de dados, e quando utilizados de modo apropriado, podem oferecer benefícios reais. Entretanto,
empresas devem proceder com cautela com total consciência das limitações e problemas que estão
associados com estes bancos de dados.
Guy Harrison é o diretor de pesquisa e desenvolvimento da Quest Software. Um reconhecido expert
em banco de dados com mais de 20 anos de experiência em aplicações, administração de banco de
dados, tuning de desempenho e desenvolvimento de software. Guy é autor de vários livros e diversos
artigos em tecnologias de banco de dados e um palestrante regular em conferências técnicas.
Fonte: <http://www.techrepublic.com/blog/10things/10-things-you-should-know-about-nosql-databases/1772>. Acesso em: 12 ago. 2012.
Blog do Cezar Taurion,
BigData e Cloud Computing:
Evangelista
da
IBM
no
Brasil
e
especialista
em
<https://www.ibm.com/developerworks/mydeveloperworks/blogs/ctaurion/?lang=pt_br>.
CONSiDErAçÕES FiNAiS
Finalizada a leitura desta unidade, já temos a convicção de que você, como profissional
comprometido(a) e fluente em inglês que é (sim, na área de Tecnologia da Informação
inglês é obrigatório e deveria ser o idioma principal), já abordará seus colegas, alunos(as)
e profissionais, falando “síquel” ao invés do famigerado “esse-quê-ele” quando se referir à
linguagem SQL.
Como toda tecnologia e assunto novo, SQL exige prática para o domínio. Este autor acredita
piamente na educação por meio de exemplos como a melhor forma de se formar profissionais
que consigam utilizar os conhecimentos assimilados na execução prática das tarefas. Durante
as seções desta unidade, pudemos estudar a formação dos comandos INSERT, UPDATE
e DELETE e suas respectivas sintaxes e cláusulas individuais. Em seguida, por meio de
exemplos, praticamos uma série de diferentes definições de comandos e explicamos o que se
esperava de cada um deles, bem como sua motivação. Crie seus próprios schemas baseado(a)
nas abstrações reais do mundo que o cerca. Exercite-se e execute consultas e comandos de
112 BANCO DE DADOS | Educação a Distância
modificação SQL nestes seus schemas. Com a prática cotidiana você perceberá que SQL
também é bastante simples.
Até agora fomos capazes de abordar as estruturas básicas da linguagem SQL. Na próxima
unidade, poderemos nos dedicar a alguns casos mais elaborados de uso desta popular
linguagem.
ATIVIDADE DE AUTOESTUDO
Todas as atividades de autoestudo desta unidade baseiam-se na Figura abaixo.
aluno
id
nome
sobrenome
ra
email
professor
id
nome
sobrenome
curso
id
titulação
matricula
nome
ano
disciplina_fk
aluno_fk
disciplina
id
nome
curso_fk
professor_fk
1. Considere o exemplo de schema da figura apresentada. Crie os comandos SQL para
definição e criação das tabelas.
a. Elabore consultas SQL para selecionar:
b. O nome de todos os alunos matriculados no curso com nome = ‘Banco de Dados’.
c. A titulação do professor da disciplina com nome = ‘SQL’.
BANCO DE DADOS | Educação a Distância
113
d. O nome, sobrenome e ra de todos os alunos matriculados nas disciplinas lecionadas pelo professor com nome ‘Edson’.
e. Todos os atributos de todos os cursos com ano > 1990.
3. Elabore comandos de modificação de dados para incluir, modificar e remover linhas
das diferentes tabelas deste schema.
114 BANCO DE DADOS | Educação a Distância
UNIDADE V
MAIS SQL
Professor Me. Edson Yanaga
Objetivos de Aprendizagem
• Definir consultas complexas em SQL.
• Apresentar os comandos de alteração de definições em SQL.
Plano de Estudo
A seguir, apresentam-se os tópicos que você estudará nesta unidade:
• Definição de consultas em SQL envolvendo NULL
• Descrição de consultas em SQL com subqueries
• Descrição de consultas em SQL com diferentes tipos de join
• Descrição de consultas em SQL com funções de agregação
• Descrição de comandos em SQL para alteração de schema
Fonte: SHUTTERSTOCK.COM
INTRODUÇÃO
Agora que já aprendemos a sintaxe básica dos comandos SQL, podemos nos aventurar
em consultas um pouco mais complexas. Em praticamente todos os sistemas de bancos de
dados disponíveis no mercado, sejam eles relacionais ou NoSQL, as funções de consulta e
manipulação básicas se equivalem. Isso significa que com o material estudado até a unidade
anterior, ainda não foi possível perceber um dos bons diferenciais competitivos dos bancos de
dados relacionais, que é justamente a capacidade de se executar estas consultas um pouco
mais complexas e sofisticadas.
Quando citamos estas consultas “um pouco mais complexas” do SQL, não o fazemos com o
propósito de intimidá-lo(a). Muito pelo contrário. Aprendemos com a Teoria Geral dos Sistemas
que sempre que há um problema “complexo”, é possível dividi-lo em problemas menores até
que estes sejam de fácil resolução. É com esta definição em mente que apresentaremos nesta
unidade uma grande variedade de exemplos que podem ser solucionados com estas consultas
mais elaboradas da SQL.
BANCO DE DADOS | Educação a Distância
117
Nas próximas seções, abordaremos consultas envolvendo valores nulos, subqueries, consultas
com joins e consultas com funções de agregação; além dos comandos de alteração de schema.
CONSULTAS ENVOLVENDO NULL
Nós já abordamos na Unidade III que o valor NULL representa um valor ausente, mas que
pode ter diferentes interpretações. Algumas possibilidades de uso para o valor NULL são:
•
O valor é desconhecido. Pensando na tabela telefone do exemplo da Unidade IV, um
telefone pode ser NULL se você não sabe o valor do telefone do contato.
•
O valor não está disponível. No caso do telefone, você conhece o número do telefone
do contato, mas não gostaria que ele fosse exibido ou armazenado, setando o valor
NULL para representá-lo.
•
O valor não é aplicável. Caso algum contato não tenha telefone, certamente não faz
sentido armazenar esta informação.
A avaliação de comandos de consulta SQL com valores NULL merece uma atenção especial.
Todos os fundamentos de computação baseiam-se na lógica booleana, o que implica que as
expressões possuem sempre somente dois valores possíveis: verdadeiro (TRUE) ou falso
(FALSE).
Como em SQL os atributos podem ter valor nulo, agora as expressões que envolvem os
atributos podem resultar em valores verdadeiros (TRUE), falso (FALSE) ou um terceiro valor
que é representado por NULL. Este terceiro valor pode ser checado de um modo especial com
os operadores SQL definidos, como IS e IS NOT. Ademais, todas as condições da cláusula
WHERE de comandos SQL filtram as linhas baseando-se no valor verdadeiro (TRUE) das
expressões. Nesse caso, linhas que sejam avaliadas pelas expressões da cláusula WHERE
como falso (FALSE) ou como o valor representado por NULL simplesmente são descartadas
(com exceção da operação de OUTER JOIN que veremos mais adiante nesta unidade).
118 BANCO DE DADOS | Educação a Distância
Comecemos com alguns exemplos ainda baseados no schema apresentado na Unidade IV.
Exemplo 1: Selecione todos os contatos que não possuem data de nascimento definida.
SELECT *
FROM contato
WHERE nascimento IS NULL;
Exemplo 2: Situação oposta a do Exemplo 1, selecionaremos todos os contatos que possuem
uma data de nascimento definida.
SELECT *
FROM contato
WHERE nascimento IS NOT NULL;
Consultas aninhadas (Subqueries)
Algumas consultas em SQL são mais facilmente construídas se pudermos buscar
primeiramente alguns valores das tabelas e utilizá-los posteriormente em nossa consulta.
Estas consultas diferenciadas podem ser formuladas com uma certa conveniência por meio
de consultas aninhadas (uma consulta dentro de outra) ou, como popularmente denominadas,
de subqueries.
Exemplo 3: Selecione todos os telefones de contatos com sobrenome = ‘Machado’.
SELECT telefone
FROM telefone, contato
WHERE contato.id = telefone.contato_fk and sobrenome = ‘Machado’;
A consulta acima foi criada utilizando-se um join normal. Agora no exemplo abaixo a
reescreveremos utilizando uma subquery.
BANCO DE DADOS | Educação a Distância
119
SELECT telefone
FROM telefone
WHERE contato_fk IN
(
SELECT id
FROM contato
WHERE sobrenome = ‘Machado’
);
Uma dúvida comum a muitos desenvolvedores está relacionada à frequência de uso de cada
opção. Matematicamente, de acordo com o modelo relacional, não há diferença entre as duas
consultas: são equivalentes. Toda consulta que utiliza um join pode ser reescrita na forma
de uma consulta aninhada (com subqueries). Decidir entre uma forma e outra passa a ser
uma questão de gosto, conveniência e legibilidade de código. Há alguns anos, poderia ser
argumentado que uma forma seria mais rápida que outra ou vice-versa. Entretanto, devido à
evolução dos interpretadores de SQL nos SGBDs modernos, esta diferença hoje é praticamente
nula: todos os SGBDs modificam internamente as consultas fornecidas e automaticamente já
escolhem o melhor plano de execução. Isto faz com que boa parte das supostas “otimizações”
que muitos DBAs realizam em consultas SQL tornem-se inócuas, pois o SGBD na maioria das
vezes reescreverá as consultas para a melhor forma possível2.
No exemplo acima, note o uso da cláusula IN (<subquery>). A cláusula IN espera um conjunto
de valores sendo retornado pela subquery dentro dos parênteses, que deve ser compatível
com o atributo sendo comparado pela cláusula IN. Na hipótese de você ter certeza da sua
subquery retornar um único valor ao invés de retornar um conjunto de valores, pode substituir
o IN pelo operador de igual (‘=’). Mas mesmo nas situações de um único valor sendo retornado
2
Justiça seja feita, em algumas situações (talvez 5% ou 10% dos casos), um bom conhecimento do funcionamento
do interpretador SQL do SGBD pode fazer diferença. Mas como já citou Knuth (1974, p.268), a “otimização prematura
é a raiz de todo o mal”. Primeiro implemente os casos de uso de seu software e depois, num eventual gargalo, otimize.
120 BANCO DE DADOS | Educação a Distância
o operador, IN continua equivalente. É por este motivo que muitos programadores acabam
adotando a convenção de se utilizar o operador IN em todas as consultas que envolvem
subqueries.
Considere nos exemplos a partir de agora o seguinte schema representado pela Figura 7:
funcionário
id
nome
sobrenome
cargo
subordinado
id
nome
sobrenome
superior_fk
Figura 7
Fonte: o autor
O schema da Figura 7 pode ser construído da seguinte forma:
BANCO DE DADOS | Educação a Distância
121
CREATE TABLE funcionario (
id int primary key,
nome varchar(30),
sobrenome varchar(30),
cargo varchar(30)
);
CREATE TABLE subordinado (
id int primary key,
nome varchar(30),
sobrenome varchar(30),
superior_fk int,
FOREIGN KEY (superior_fk) REFERENCES funcionario(id)
);
Exemplo 4 Selecione o nome e sobrenome de todos os funcionários que possuem subordinados
com o mesmo nome.
SELECT f.nome, f.sobrenome
FROM funcionario AS f, subordinado AS s
WHERE f.id = s.superior_fk AND f.nome = s.nome;
Reescrevendo o exemplo acima com uma subquery:
SELECT f.nome, f.sobrenome
FROM funcionario AS f
WHERE id IN(
SELECT superior_fk
FROM subordinado AS s
WHERE f.nome = s.nome
);
Este exemplo reescrito com uma subquery é um caso especial de consulta aninhada em
122 BANCO DE DADOS | Educação a Distância
SQL, pois como pode notar, a subquery utiliza atributos da consulta externa em sua cláusula
WHERE. Chamamos este caso especial de consultas aninhadas correlacionadas.
SELECT f.nome, f.sobrenome
FROM funcionario AS f
WHERE EXISTS (
SELECT *
FROM subordinado AS s
WHERE f.nome = s.nome
);
Apresentamos a mesma consulta do exemplo reescrita acima com um novo operador
denominado de EXISTS. Este operador retorna um resultado verdadeiro (TRUE) se a sua
subquery retornar ao menos uma linha de resultado e falso (FALSE) se o resultado for vazio.
Exemplo 5: Selecione o nome e o sobrenome de todos os funcionários que não possuem
subordinados.
SELECT f.nome, f.sobrenome
FROM funcionario AS f
WHERE NOT EXISTS (
SELECT *
FROM subordinado AS s
WHERE s.superior_fk = f.id
);
A exemplo do operador EXISTS, o operador NOT EXISTS retorna o oposto do operador
EXISTS, sendo falso (FALSE) se o resultado possui ao menos uma linha e verdadeiro (TRUE)
se o resultado for vazio.
BANCO DE DADOS | Educação a Distância
123
CONSULTAS UTILIZANDO JOINS
Na Unidade IV nós vimos que o conceito de join permite que façamos consultas que
utilizam duas ou mais tabelas, unidas por meio de uma ou mais condições que unem
os elementos das duas ou mais tabelas. Em alguns casos, é mais fácil compreender as
consultas se estas forem escritas na forma com join ao invés de misturar as condições de
join na cláusula WHERE.
Voltemos a utilizar o schema definido na Unidade IV em nossos exemplos abaixo.
Exemplo 6: Selecione o nome de todos os contatos cujo telefone inicie com ‘44’.
SELECT nome
FROM contato, telefone
WHERE contato.id = telefone.contato_fk and telefone.telefone LIKE ‘44%’;
Agora vejamos esta mesma consulta reescrita com um JOIN:
SELECT nome
FROM (contato JOIN telefone ON contato.id = telefone.contato_fk)
WHERE telefone.telefone LIKE ‘44%’;
Neste caso do exemplo reescrito com JOIN, a cláusula FROM possui uma joined table que
contém todos os atributos de ambas as tabelas unidas pelo JOIN e pela condição do JOIN,
que é o predicado após o ON.
Na SQL o tipo de JOIN padrão quando simplesmente declarado pela cláusula JOIN é o inner
join, que descarta todas as tuplas que não possuam um valor correspondente na segunda
tabela do JOIN. Os outros tipos de JOIN disponíveis são descritos na tabela a seguir:
124 BANCO DE DADOS | Educação a Distância
Tipo de JOIN
Semântica
INNER JOIN
É o tipo de JOIN padrão. Somente
tuplas que satisfaçam a condição do
JOIN são selecionadas.
LEFT OUTER JOIN ou LEFT JOIN
Todas as tuplas da tabela do lado esquerdo do ON são selecionadas. Caso
não haja uma tupla correspondente na
tabela do lado direito do JOIN, os valores são preenchidos com NULL.
RIGHT OUTER JOIN ou RIGHT JOIN
É a condição inversa do LEFT JOIN.
Todas as tuplas da tabela do lado
direito do ON são selecionadas. Caso
não haja uma tupla correspondente na
tabela do lado esquerdo do JOIN, os
valores são preenchidos com NULL.
FULL OUTER JOIN ou FULL JOIN
Todas as tuplas dos dois lados do
JOIN são selecionadas. Caso não
haja correspondência na condição do
JOIN, o lado vazio é preenchido com
NULL.
Exemplo 7: Selecione todos os nomes de contatos que iniciem com a letra ‘A’ e seus
respectivos telefones. Se o contato não tiver um telefone, mostre somente o nome e NULL
como o valor do telefone.
SELECT nome, telefone
FROM contato LEFT JOIN telefone ON contato.id = telefone.contato_fk
WHERE contato.nome LIKE ‘A%’;
Um caso típico de LEFT JOIN em que você deseja listar todos os contatos, tendo eles
telefone ou não.
BANCO DE DADOS | Educação a Distância
125
CONSULTAS COM FUNÇÕES DE AGREGAÇÃO
Uma das grandes vantagens da SQL e dos bancos de dados relacionais, se comparados
com outras alternativas não relacionais, são as suas funções de agregação. Estas funções
permitem uma análise resumida das informações armazenadas nas tabelas. Funções de
agregação populares da SQL incluem COUNT, SUM, MAX, MIN e AVG que executam as
funções matemáticas respectivas de contagem, soma, valor máximo, valor mínimo e média
aritmética.
Exemplo 8: Selecione o peso mínimo e máximo de todos os contatos.
SELECT MAX(peso), MIN(peso)
FROM contato;
As funções de agregação em SQL recebem como parâmetro o nome do atributo em que se
deseja aplicá-las. Neste exemplo, é o caso do atributo peso.
Exemplo 9: Selecione o número total de contatos cujo peso > 80;
SELECT COUNT(*)
FROM contato
WHERE peso > 80;
Neste uso da função COUNT, o asterisco (“*”) representa o número de linhas do resultado da
consulta, e é bastante utilizado para se determinar a quantidade de resultados retornados.
Exemplo 10: Selecione a quantidade de pesos distintos de todos os contatos.
SELECT COUNT(DISTINCT peso)
FROM contato;
Neste exemplo contamos a quantidade de pesos distintos de nossos contatos. Caso a cláusula
126 BANCO DE DADOS | Educação a Distância
DISTINCT não fosse aplicada, contaríamos somente a quantidade de pesos dos contatos.
Funções de agrupamento
Em muitas situações, desejamos aplicar as funções de agregação não em todos os itens
das tuplas selecionadas, mas em determinados grupos de tuplas – separados dentro da
tabela baseados em um determinado valor. Para conseguir este objetivo em SQL, utilizamos
a cláusula GROUP BY. Ao utilizarmos o GROUP BY, separamos as tuplas em grupos distintos
em que todas tuplas dentro de um determinado grupo possuem o mesmo valor avaliado pelas
condições do GROUP BY.
Exemplo 11: Selecione o sobrenome e quantidade de contatos que possuem o mesmo
sobrenome.
SELECT sobrenome, COUNT(*)
FROM contato
GROUP by sobrenome;
Na avaliação desta consulta, todas as tuplas da tabela contato são divididas em grupos cujo
sobrenome seja igual. Ao aplicarmos a função COUNT(*), ao invés dela contar todas as tuplas
da tabela, ela conta somente as tuplas de cada grupo. O resultado é uma lista que contém os
sobrenomes e as quantidades de contatos com cada sobrenome.
Exemplo 12: Selecione o sobrenome e quantidade de contatos que possuem o mesmo
sobrenome, desde que haja pelo menos dois contatos com o mesmo sobrenome.
SELECT sobrenome, COUNT(*)
FROM contato
GROUP by sobrenome
HAVING COUNT(*) > 1;
Em algumas situações, desejamos agrupar as tuplas em grupos, mas queremos selecionar
BANCO DE DADOS | Educação a Distância
127
apenas alguns destes grupos no resultado – e não todos. A cláusula que permite filtrar quais
grupos serão exibidos no resultado é a HAVING. Somente grupos que satisfaçam a condição
imposta pelo HAVING são selecionados no resultado.
É importante salientar a diferença entre as cláusulas WHERE e HAVING, pois
aparentemente ambas filtram os resultados da consulta. A cláusula WHERE filtra as tuplas
avaliadas primeiramente. Portanto, a cláusula WHERE é avaliada antes de qualquer função
de agregação ou qualquer agrupamento ser avaliado. Já a cláusula HAVING é avaliada
somente depois que os grupos já foram formados, e serve então para filtrar estes grupos
do resultado final.
COMANDOS DE ALTERAÇÃO DE SCHEMA
Nós definimos como schema evolution o processo de alterações da estrutura do schema.
Normalmente, estas alterações de estrutura não são frequentes e são motivadas por alterações
dos requisitos do negócio, e consequentemente também da aplicação.
Os comandos em SQL que podem alterar as definições de schema são os comandos para
adicionar, modificar e remover schemas, tabelas, atributos e restrições. Vamos abordá-los nos
exemplos seguintes.
Exemplo 13: Remova o schema agenda do banco de dados.
DROP SCHEMA agenda;
Este comando remove o schema, e por consequência, todas as tabelas dentro do schema. Há
uma certa controvérsia neste comando. Alguns SGBDs removem todas as tabelas do schema
ao remover o próprio schema. Outros só permitem a remoção do schema se ele não contiver
nenhuma tabela, sendo necessário remover todas as tabelas antecipadamente.
128 BANCO DE DADOS | Educação a Distância
Exemplo 14: Remova a tabela telefone do schema.
DROP TABLE telefone;
Neste exemplo, a tabela telefone seria removida do schema. É importante notar que a tabela
sendo removida do schema pode conter dependências de integridade referencial e chave
estrangeira em outras tabelas. Nesse caso, se alguma outra tabela depender da tabela sendo
removida, este comando irá falhar devido à restrição de integridade referencial do banco,
sendo necessário primeiro remover a integridade referencial.
Exemplo 15: Adicione uma coluna apelido na tabela contato contendo 15 caracteres.
ALTER TABLE contato ADD COLUMN apelido VARCHAR(15);
Este exemplo adiciona uma coluna denominada ‘apelido’ no final da definição da tabela contato
com o tipo definido de VARCHAR(15). Quando um valor DEFAULT não é especificado no ALTER
TABLE, todas as tuplas existentes na tabela recebem um valor NULL na coluna adicionada.
Exemplo 16: Adicione uma coluna apelido na tabela contato contendo 15 caracteres e com
valor padrão de ‘Senhor’.
ALTER TABLE contato ADD COLUMN apelido VARCHAR(15) DEFAULT ‘Senhor’;
O Exemplo 16 é a mesma situação do Exemplo 15, apenas definindo um valor padrão para a
coluna sendo adicionada.
Exemplo 17: Altere o tamanho da coluna apelido para 25 caracteres.
ALTER TABLE contato ALTER COLUMN apelido VARCHAR(25);
A definição da coluna apelido da tabela contato foi modificada e o seu tipo de dados agora
define a capacidade de 25 caracteres.
BANCO DE DADOS | Educação a Distância
129
Exemplo 18: Remova a coluna apelido da tabela contato.
ALTER TABLE contato DROP COLUMN apelido;
A coluna apelido é removida da tabela contato desde que não haja nenhuma restrição de
integridade referencial nesta coluna.
Exemplo 19: Supondo que ainda não houvesse uma integridade referencial entre a tabela
telefone e a tabela contato, adicione-a.
ALTER TABLE telefone ADD FOREIGN KEY (contato_fk) REFERENCES contato(id);
Este comando adiciona a restrição de integridade referecial entre a tabela telefone e a tabela
contato.
Também é possível remover as restrições de integridade referencial por meio do comando
ALTER TABLE <tabela> DROP FOREIGN KEY <nome>, mas para tanto, é necessário saber
o nome da restrição no banco de dados. Como os comandos para exibição das restrições das
tabelas variam muito de um produto para outro, deixaremos esta solução como uma sugestão
de estudo para você.
<http://youtu.be/S2iQ2RKMw-w>.
Entrevista com Fernando de la Riva, sócio-diretor da Concrete Solutions, falando das perspectivas
para o mercado em 2012, incluindo Cloud Computing e NoSQL.
130 BANCO DE DADOS | Educação a Distância
NoSQL,semproblemas
Uma introdução a banco de dados NoSQL
Desvendar o NoSQL e tentar explicar o que é e por que você deveria se interessar ou não é uma tarefa
difícil. Este artigo tenta dar uma introdução de alto nível ao NoSQL e fornece uma comparação das
últimas tecnologias disponíveis desta área.
introdução
Desvendar o NoSQL e tentar explicar o que é e por que você deveria se interessar ou não é uma tarefa
difícil. O termo cobre uma grande variedade de tecnologias, arquitetura de dados e prioridades; ele
representa tanto um movimento quanto a uma escola de pensamento ou uma tecnologia particular.
Mesmo o nome é confuso, pois para alguns, isto representa qualquer mecanismo de armazenamento
de dados que não utilize SQL, mas até agora a indústria parece ter estabelecido como “Not Only SQL”
(não somente SQL). À medida que o tempo passe, é provável que o termo cresça até o momento em
quepercaosentidoesubdivisõestornem-senecessáriasparaclarificarosignificadodotermo.
OqueéNoSQL?
O movimento NoSQL é um pedaço de um marketing de guerrilha que traz um grande grupo de tecnólogosetecnologiassobamesmabandeira.Asideiasquebaseiamainfinidadedesoluçãoqueexiste
sob o termo “NoSQL” antes estavam somente disponíveis para aqueles cujas necessidades tornaram
necessária uma implementação própria e específica. Nas áreas em que estas soluções são uma
necessidade, seu valor já foi provado, e agora o uso destas soluções passou a ser uma opção para
outros com um custo de investimento muito menor. Para qualquer organização que tenha que escolher
entre NoSQL e dados relacionais tradicionais, há a difícil questão de qual das duas utilizar. Ainda é
muitocedoparafornecerumarespostadecisivaedefinitiva,masestáclaroquemuitasorganizações
podemsebeneficiardeummodelodedadosqueseencaixemelhornostiposdearmazenamentoe
consulta que eles executam na prática do que na teoria. Também parece provável que a maioria das
soluções consistirá de um híbrido misto de tecnologias de armazenamento, assim como um misto
de estruturas de N-camadas e cliente-servidor tende a ser mais comum do que comprometimentos
absolutos com uma única estratégia.
Líderes técnicos têm um papel importante na compreensão das opções disponíveis e na adaptação do
software, produtos e serviços que mais se aplicam ao seu domínio de negócios. Possuir uma estratégia lógica e localizada para a adoção do que o NoSQL oferece de melhor será o fator que diferenciará
BANCO DE DADOS | Educação a Distância
131
o sucesso do fracasso em sua adoção.
Assim como o NoSQL apresenta novos desafios, ele também oferece recompensas significativas
àqueles que o incorporam com sucesso no seu portfolio de solução. Os principais benefícios virão
da maior compreensão sobre os dados, escalonamento flexível e produtividade. A rica variedade de
novos modelos de negócios possuem requisitos de armazenamento que são suportados pelo NoSQL
e as décadas de coerção de dados em modelos relacionais ficaram para trás.
NoSQL é uma área grande e em expansão. Para os propósitos deste artigo, as características mais
comuns de banco de dados NoSQL são:
1. Facilidade de uso em clusters com balanceamento de carga tradicionais;
2. Dados persistentes (não somente cachês);
3. Escalabilidade na memória disponível;
4. Não possuem schemas fixos e permitem a migração de schemas sem indisponibilidade;
5. Possui sistemas de consulta individuais ao invés de uma linguagem de consulta padrão;
6. São ACID dentro de um nó no cluster e eventualmente consistentes dentro do cluster.
Nem todos os produtos deste artigo possuem todas estas propriedades, mas a maioria dos bancos de
dados que discutiremos suporta boa parte destas características.
O que está acontecendo agora?
Movimentos em tecnologia ou em correntes de pensamento raramente acontecem de modo totalmente espontâneo. Existem três principais motivações por trás do elevado interesse em NoSQL. Primeiro
foi o surgimento de uma nova forma de perfil de tráfego provocada pelo que pode ser chamado de
Web 2.0 ou de Web Social, assim como a Internet de varejo.
“Web Scale”, como é comumente referido, é o problema de capacidade de planejamento, escala e
provisionamento que tornou-se crítico para muitos negócios na Web nos últimos cinco anos. À medida
que o mundo torna-se mais conectado, é possível que sites recebam variações enormes de tráfego.
Algumas destas estão relacionadas a eventos previsíveis: a Copa do Mundo ou o Natal; outros são
imprevisíveis e globais, como por exemplo, o 11 de Setembro. Sites como o Facebook tornaram fácil a
escalada de popularidade de sites à medida que itens tornam-se virais e são distribuídos pelo mundo
todo.
Conteúdos criados pelo usuário causam dores de cabeça particulares, pois os problemas relacionados a websites com “leitura intensiva” já são solucionados com a utilização de conteúdo estático e
CDNs (Content Distribution Networks – Redes de Distribuição de Conteúdo). Conteúdos criados pelo
usuário significam que os sites tornam-se mais equilibrados no quesito “leitura-escrita”. Sites como
o Twitter recebem montanhas de tráfego em intervalos muito curtos de tempo (um gol validado ou
invalidado, a apuração de uma votação ou o final de um seriado ou novela de TV), e sua infraestrutura
deve se adaptar rapidamente para não ficar indisponível na hora errada. A abordagem normal para
132 BANCO DE DADOS | Educação a Distância
escalabilidade tem sido adicionar novos servidores web, que funciona até o ponto em que o banco de
dados (que historicamente tem sido um único grande servidor) torna-se o gargalo. A resposta então
é comprar progressivamente um hardware cada vez mais poderoso até que o banco de dados possa
servir todo o tráfego. A Web Scale invalida este modelo quando você tem que enfrentar o dilema de
comprar um hardware caro para atender sua demanda de pico (Natal ou Copa do Mundo), mas que
ficará quase que totalmente ocioso no dia a dia. Para alguns empreendimentos, é simplesmente impossível comprar o hardware e as licenças de software para atender a demanda de pico através de
um único servidor. Estes empreendimentos têm procurado uma solução de dados escalável que possa
espelhar a estrutura da própria Web.
A segunda motivação é o fato de que os dados mudam com o passar do tempo. Com a evolução do
modelo de negócios, os modelos de dados normalmente contorcem-se para evoluir e manter o ritmo
das mudanças. O resultado normalmente é uma estrutura de dados repleta de linguagens arcaicas e
remendadas com dados adaptados. Qualquer um que já teve que explicar que o valor de uma coluna
possui um significado diferente dependendo se o valor for menor ou maior que 10 ou que “padaria”
na verdade significa “armazém” devido a um erro anterior, sabe que o peso do histórico no modelo de
dados pode ser um sério entrave na manutenção do sistema e na incorporação de novas ideias de
negócios.
A motivação final é que a tecnologia de NoSQL está começando a se tornar um commodity. Amazon
e Google não tiveram escolha no passado a não ser desenvolver sua própria solução para resolver
os problemas de escala. O custo de escrever tal solução impediu muitas empresas que não tinham
estes problemas no coração de seus negócios de explorar esta nova tecnologia. Recentemente uma
série de doações de código para entidades como a Apache Foundation ou outros grupos de open
source que fornecem desenvolvimento e suporte baseado em comunidades trouxe a possibilidade de
se utilizar código extremamente sofisticado com um baixo custo de manutenção. Tais código colocam
o NoSQL firmemente ao alcance de empresas menores. Ao invés de ser um assunto esotérico, agora
os bancos de dados NoSQL podem ser baixados e integrados à arquitetura corporativa em questão
de semanas.
Está sendo realmente utilizado?
Uma questão comum que se pergunta sobre o NoSQL é se ele realmente está sendo utilizado ou se
é somente uma moda. A resposta é que se você alguma vez já utilizou serviços da Amazon, Yahoo
ou Google então você teve os dados fornecidos através de uma solução NoSQL. Se você já utilizou
o eBay ou o Twitter, você indiretamente já utilizou bancos de dados que possuem muito pouco em
comum com bancos de dados tradicionais, (por exemplo, o eBay não utiliza transações e o Twitter
utiliza um banco de dados de grafos para saber quem segue quem).
Normalmente a questão realmente significa se pessoas como eu estão realmente utilizando NoSQL.
BANCO DE DADOS | Educação a Distância
133
A resposta é que se você está enfrentando problemas lidando com certos tipos de dados, então há
um diferencial competitivo em potencial ao se avaliar uma solução NoSQL. A área é nova o suficiente
para que muitos negócios sintam-se desconfortáveis executando trabalho crítico em qualquer outro
software que não seja um maduro banco de dados relacional, mesmo que estes bancos de dados
relacionais causem vários problemas e tenham suas diversas limitações.
Por que você utilizaria um banco de dados NoSQL?
Uma das principais motivações é se você tiver problemas em seu negócio que são difíceis de se
resolver utilizando a tecnologia de banco de dados relacional. Se você possui um excelente modelo
relacional com um banco de dados maduro que fornece todas as funcionalidades que você precisa,
então há pouca necessidade de se alterar seu mecanismo de armazenamento de dados.
A seguir estão alguns casos de uso em que é subótimo utilizar um banco de dados relacional:
•
Seu banco de dados relacional não escalará seu tráfego a um custo aceitável;
•
Seus dados são fornecidos em pequenas mudanças ao longo do tempo, de modo que o número de tabelas necessárias para manter a forma normal cresceu desproporcionalmente em
relação aos dados sendo mantidos. Informalmente, se você não consegue mais imprimir o seu
DER num papel A3, você deve ter alcançado este problema ou você está armazenando muita
coisa num único banco de dados;
•
Seu modelo de negócios gera muitos dados temporários que não pertencem ao banco de
dados principal. Exemplos comuns incluem carrinhos de compras, critérios de pesquisa salvos,
personalização do site e questionários de usuário incompletos;
•
Seu banco de dados relacional está denormalizado por motivos de desempenho ou por conveniência ao manipular dados na aplicação;
•
Seus conjuntos de dados consistem em grandes quantidades de texto ou imagens e as definições de coluna são simples LOBs (CLOB ou BLOB);
•
Você tem que executar consultas em seus dados que não envolvem simples relações hierárquicas; exemplos comuns são questões de recomendações ou de business intelligence que
envolvem a ausência de dados;
•
Você possui transações de dados que não precisam de muita durabilidade. Por exemplo, o
“curtir” de itens em websites: criar transações para este tipo de interação são um exagero, pois
se a ação falhar o usuário provavelmente irá repetir a ação até que funcione. Websites com
muito AJAX tendem a ter muitos desses casos de uso.
Maturidade da linguagem de consultas
Uma das queridinhas que corre o risco de ser deixada de lado é a SQL. O NoSQL escolheu a SQL
como o monstro a ser derrotado, mesmo que na realidade a SQL seja somente um padrão muitas
134 BANCO DE DADOS | Educação a Distância
vezes deturpado por implementações customizadas. A SQL possui muitas vantagens que os produtos
NoSQL terão que tratar ao longo do tempo. Primeiramente, ela é madura, refinada e geralmente atende às expectativas dos usuários. Possui uma sintaxe coerente e rica em funcionalidades, o que significa que pessoas que produzem consultas SQL complexas certamente reclamarão se tiverem que replicar operadores como SUM, ORDER BY e GROUP numa tarefa do tipo map-reduce em JavaScript.
Mesmo os fornecedores reconhecem este problema. Se eles não forem capazes de encontrar um
conjunto comum de operações de manipulação de dados, então é provável que uma outra implementação torne-se popular e seus usuários migrarão para este outro produto. Ou todos os fornecedores
terão que implementar o mesmo conjunto de comandos do líder de mercado para manterem-se competitivos.
Já há alguns padrões disponíveis como a SparQL, um padrão para fazer consultas em RDF ou dados
em tuplas. Este poderia ser adaptado para bancos de dados de documentos e grafos, mas mesmo
assim ainda não há nada que forneça um conjunto modular de comandos de consulta que possa ser
comparado à SQL.
É uma ironia que os produtos NoSQL mais complexos que os bancos de dados de chave-valor terão
que implementar algo muito similiar à SQL se quiserem ter o mesmo nível de utilização que os produtos de dados relacionais têm hoje. Em alguns casos este fato se esconde por trás do slogan “Not Only
SQL”, concordando que simplesmente jogar fora a SQL seria doloroso demais.
Novas tecnologias, novos desafios
Na tentativa de se incorporar o NoSQL em sistemas de larga escala existentes, vê-se que é obviamente mais fácil se a sua aplicação possui um baixo acoplamento entre os componentes. Nesta situação é
mais fácil identificar áreas que se beneficiariam da solução NoSQL e implementar esta integração aos
poucos. Na situação em que o armazenamento de dados é monolítico e que os sistemas dependem
de certas propriedades do modelo relacional – por exemplo, tipos de dados ou consistência transacional – então o problema é muito mais difícil. Em alguns casos o desacoplamento dos dados é a primeira
tarefa a ser executada ao invés da migração do armazenamento dos dados.
Do ponto de vista da solução, há a necessidade de se analisar claramente quais dados são relacionais
e quais dados estão armazenados em bancos de dados relacionais por falta de outra alternativa. Também é importante revisar decisões históricas e verificar se estas foram feitas com restrições históricas
em mente. Um exemplo particular é o uso de bancos de dados de grafos ao invés de uma estrutura
complexa de tabelas relacionais. É perfeitamente possível criar conjuntos de relacionamentos N-N em
dados relacionais e então consultar as intersecções destes relacionamentos, mas expressar somente
os relacionamentos num banco de dados de grafos é uma solução muito mais simples.
Existem algumas áreas óbvias em que o NoSQL pode ser aplicado imediatamente. Conteúdo de
websistes pode ser geralmente expresso em bancos de dados de documentos ou de chave-valor.
BANCO DE DADOS | Educação a Distância
135
Exemplos particulares destas situações são as metáforas de formulários e de wizards de formulários.
Qualquer formulário pode ser expresso diretamente na forma de um documento. Dados de buscas são
outro exemplo, pois muitos dados de referência consistem em mapas, listas e conjuntos, referências,
países, estados, cidades etc. Analisando estes padrões nos dados, devem surgir novas oportunidades
de uso do NoSQL.
Analisando de um modo mais estratégico, sistemas que precisam evoluir e mudar seus dados com
frequência possuem uma boa chance de utilizar um banco de dados sem schema. Se a migração de
estruturas de dados sem indisponibilidade for um diferencial competitivo, então este é um forte indicador de que o uso de uma solução NoSQL seria valioso.
Tipos de bancos de dados NoSQL
As próximas seções descrevem os diferentes tipos de bancos de dados NoSQL.
Bancos de dados chave-valor
Exemplos: Tokyo Cabinet/Tyrant, Redis, Voldemort e Oracle BDB.
Aplicações Típicas: Cachê de conteúdo.
Pontos Fortes: Acesso rápido.
Pontos Fracos: Os dados armazenados não têm schema.
Aplicação de exemplo: Você está escrevendo um software de fórum em que a página do perfil fornece
as estatísticas do usuário (mensagens postadas etc.) e as últimas dez mensagens escritas por ele. A
página lê estes dados baseada numa chave que é o id do usuário e recupera uma String JSON que
representa todas estas informações. Um processo em background recalcula esta informação a cada
15 minutos e grava no banco de dados de modo independente.
Banco de dados de documentos
Exemplos: CouchDB e MongoDB.
Aplicações Típicas: Aplicações Web.
Pontos Fortes: Tolerância com dados incompletos.
Pontos Fracos: Desempenho em consultas, não há uma sintaxe de consulta padrão.
Aplicação de exemplo: Você está criando um software que cria perfis de crianças refugiadas com o
propósito de reuni-las novamente com suas famílias. Os detalhes que você precisa gravar de cada
criança podem variar muito de acordo com as circunstâncias do evento e elas são construídas aos
poucos. Por exemplo, uma criança pequena pode saber o seu primeiro nome e você pode tirar uma
foto dela, mas pode não saber os nomes de seus pais. Mais tarde um conhecido pode reconhecer a
criança e fornecer informações adicionais que você pode querer gravar, mas até conseguir confirmar,
você terá que tratar estas informações com ceticismo.
136 BANCO DE DADOS | Educação a Distância
Banco de dados de grafos
Exemplos: Neo4J, InfoGrid e Infinite Graph.
Aplicações Típicas: Redes sociais.
Pontos Fortes: Algoritmos de grafos, por exemplo: caminho mais curto, conectividade, graus de relacionamento etc.
Pontos Fracos: Tem que percorrer todo o grafo de modo a encontrar uma resposta. Não é simples de
clusterizar.
Aplicação de exemplo: Qualquer aplicação que requeira conectividade social é uma candidata a um
banco de dados de grafos. Este mesmo princípio pode ser estendido a qualquer aplicação em que
você precisa saber o que as pessoas estão fazendo, comprando ou curtindo de modo a recomendar
ações futuras. Em qualquer momento você pode responder a questões como “Quais restaurantes
receberam votos negativos das irmãs de pessoas com mais de 40 que gostam de esquiar e que
visitaram o Quênia?”.
Bancos de dados de XML
Exemplos: Exist, Oracle, MarkLogic.
Aplicações Típicas: Publicação.
Pontos Fortes: Tecnologias de busca maduras e validação de schema XML.
Pontos Fracos: Não é uma solução binária pura, é mais fácil reescrever um documento do que atualizá-lo.
Aplicação de exemplo: Uma editora que utiliza formatos XML para produzir versões web, impressa e
eBook de seus artigos. Os editores precisam fazer buscas rápidas tanto no texto quanto em seções
semânticas do XML. Eles armazenam o XML dos artigos finalizados no banco de dados XML e os encapsulam em web services para os sistemas de produção de documentos. Quando mudanças são necessárias, atualizações utilizando XQuery modificam todos os documentos XML para o novo formato.
Bancos de dados ponto-a-ponto distribuídos
Exemplos: Cassandra, HBase e Riak.
Aplicações Típicas: Sistemas de arquivo distribuídos.
Pontos Fortes: Buscas rápidas e boa distribuição do armazenamento dos dados.
Pontos Fracos: API de baixo nível.
Aplicação de exemplo: Você possui um site de notícias em que qualquer tipo de conteúdo (artigos,
comentários, perfis de autores etc.) pode ser votado e pode ter um comentário opcional no voto. Você
pode criar uma base por usuário e uma base por tipo de conteúdo utilizando um UUID como chave
BANCO DE DADOS | Educação a Distância
137
(gerado a partir de cada tipo de conteúdo e usuário). O “bucket” do usuário mantém cada voto dele,
enquanto que o “bucket” do conteúdo contém uma cópia de cada voto que já foi feito para aquele
conteúdo.Duranteanoite,umprocessobatchidentificaemquaisconteúdososusuáriosvotarame
você gera uma lista de conteúdo que possui muitos votos para cada usuário, mas que os usuários
aindanãovotaram.Estalistaéumalistadeartigosrecomendadosparaousuárioeficaarmazenada
no “bucket” de recomendações.
Banco de dados de objetos
Exemplos: Oracle Coherence, db4o, ObjectStore, GemStone e Polar.
AplicaçõesTípicas:Sistemasfinanceiros.
PontosFortes:Refleteoparadigmadedesenvolvimentoorientadoaobjetos,baixalatênciaACIDe
tecnologia madura.
Pontos Fracos: Consultas limitadas ou operações de múltiplas atualizações.
Aplicação de exemplo: Uma empresa de comércio internacional quer fazer transações a partir do
JapãoeNovaYorkeverificá-lasatravésdeumprocessodeanálisederiscoemLondres.Umobjeto
representando a transação é gravado no banco de dados de objetos e o analisador de riscos está
aguardandopelasnotificaçõesdeobjetosdetransações.Quandoumobjetoéreplicadonodatacenter
europeu,oanalisadorderiscoslêatransaçãoeverificaoriscodamesma.Eleentãoreescreveo
objeto para informar que a transação foi autorizada e gera uma venda. O cliente está aguardando por
mudançasnosobjetoserecebeumanotificaçãodequeasuatransaçãofoiaprovada.
Conclusão
Dados tabulares permanecem tabulares e a planilha de cálculo ainda é a ferramenta de modelagem
de dados favorita no mundo dos negócios. SQL não vai morrer tão cedo. Entretanto, até agora nós
temos criado sistemas baseados nas restrições de um típico banco de dados relacional. O NoSQL
oferece a chance de se pensar de um modo diferente sobre os dados e é uma possibilidade extremamente excitante.
Robert Rees.
Fonte: <http://www.thoughtworks.com/articles/nosql-comparison>. Acesso em: 13 ago. 2012.
CONSiDErAçÕES FiNAiS
Finalmente chegamos ao fim de nossa última unidade deste material. Neste ponto, você
138 BANCO DE DADOS | Educação a Distância
provavelmente já terá assimilado conteúdo suficiente para poder já desenvolver algumas
aplicações utilizando sistemas de bancos de dados.
Como descrevemos no início da unidade, é bastante provável que você se depare em sua
vida profissional com consultas um tanto quanto complexas. Lembre-se que todo problema
pode ser decomposto em partes menores de fácil solução. Utilize esta técnica e aplique os
conceitos assimilados com os exemplos apresentados nesta unidade para resolvê-los. Teoria
é importantíssima, mas a prática é uma atividade fundamental para que você possa converter
toda esta teoria aprendida em resultados – tanto pessoais quanto profissionais.
A prática das atividades de autoestudo pode auxiliá-lo(a) na trabalhosa tarefa de assimilação
dos conceitos apresentados nesta unidade. Analise-as com carinho e tenha um bom proveito.
ATIVIDADE DE AUTOESTUDO
Todas as atividades de autoestudo desta unidade baseiam-se na Figura abaixo.
beneficiario
id
nome
sobrenome
altura
plano_fk
dependente
id
nome
sobrenome
beneficiario_fk
plano
id
nome
valor
1. Considere o exemplo de schema da figura apresentada. Crie os comandos SQL para
definição e criação das tabelas.
2. Elabore consultas SQL para:
a. Selecione todos os beneficiários que possuem dependentes com o mesmo nome
utilizando uma condição de JOIN.
BANCO DE DADOS | Educação a Distância
139
b. Execute a mesma consulta anterior utilizando uma subquery.
c. Execute a mesma consulta anterior utilizando uma cláusula EXISTS.
d. Selecione o beneficiário que contém dependente que possui a maior altura entre
todos.
3. Utilizando a cláusula de GROUP BY, elabore consultas para:
a. Agrupe os beneficiários por nome e selecione o sobrenome e altura de cada um deles.
b. Selecione todos os beneficiários que contêm mais de um dependente com o mesmo
sobrenome.
c. Selecione todos os planos que contêm mais de um beneficiário com altura > 1.75.
140 BANCO DE DADOS | Educação a Distância
CONCLUSÃO
Se há uma palavra que possa descrever meu sentimento ao concluir este livro, esta talvez
seja “alívio”. Sim, entre outras emoções que certamente passam pela minha cabeça neste
momento, o alívio de poder concluir este material se destaca. Já dizia um antigo ditado sobre a
arte da escrita, e que era direcionado àqueles que pretendiam produzir qualquer texto: “o que
é escrito sem esforço é lido sem prazer”.
Não posso me assegurar que você, caríssimo(a) leitor(a), conseguirá ler este material com
o prazer que eu gostaria que lhe proporcionasse – mas não duvide, certamente as palavras
organizadas neste material foram fruto de um enorme esforço. E não somente de esforço:
também de dor, privação de certas liberdades que me foram tomadas pelo tempo dedicado,
desespero por querer mais tempo para poder esculpir melhor alguns parágrafos e a angústia
de saber que na verdade o trabalho nunca termina – ele apenas possui uma data de término.
Tivesse mais seis meses ou um ano, certamente não o terminaria antes do prazo final. Mas
assim o é também em tudo aquilo que nos dedicamos.
Antoine de Saint-Exupéry escreveu que “tu te tornas eternamente responsável por aquilo que
cativas”. Espero que eu possa ter cativado algo com este material e talvez alguém, pois esforço
não faltou na elaboração do mesmo.
Certamente durante a leitura de alguns pontos do material, você pôde perceber a grande
inspiração que tenho ao falar de desenvolvimento de software. Sou partidário da corrente que
acredita que o mais importante de todo e qualquer software é o problema que ele resolve e o
quão satisfatório ele é para seus usuários. Considero a utilidade do software como mecanismo
fundamental para qualquer inovação do conhecimento humano atual. E não me agrada observar
alguns programadores valorizando uma ferramenta qualquer em detrimento da utilidade do
software sendo desenvolvido. Este é um dos motivos pelos quais eu considero o banco de
dados como apenas um detalhe diante de um projeto maior, que é o uso do próprio software.
Como já enfatizado nas unidades do material, o banco de dados é apenas um detalhe. Um
detalhe importante, é verdade. Mas apenas um detalhe dentro de um escopo muito maior que
é a inovação que o software pode proporcionar.
Ao término deste material você provavelmente já terá todas as habilidades necessárias para
integrar um sistema de banco de dados relacional ao software que você desenvolve. Saberá
escolher as opções do mercado baseado(a) nos critérios de classificação que apresentamos
BANCO DE DADOS | Educação a Distância
141
– e terá com certeza uma pontinha de dúvida se deve mesmo utilizar um banco de dados
relacional. Afinal, as leituras complementares, os vídeos e os estudos de caso apresentados no
material tinham como objetivo provocar o senso crítico para libertá-lo(a) da “prisão relacional”.
Abra a sua mente e liberte-se de paradigmas preestabelecidos. Saiba decidir qual sistema de
banco de dados deve escolher baseado nos requisitos e utilidade da sua aplicação, ao invés
de tomar decisões baseadas em medo, incerteza e dúvida.
Se optar por manter-se no ambiente dos sistemas de bancos de dados relacionais, já terá
todos os meios para criar, manipular, popular e consultar bancos de dados relacionais graças
aos conhecimentos de SQL adquiridos. A lista deste material certamente não é exaustiva, mas
é também um bom começo. Afinal, a jornada do conhecimento nunca acaba.
Baseado(a) em tudo o que você pode aprender, aproveite bem e utilize todo o conteúdo que
tentamos transmitir para desenvolver um bom software; software inovador. É isto o que eu
sinceramente desejo para sua frutífera jornada. E que está apenas começando... Bom proveito,
boa sorte e acima de tudo, muito sucesso.
Um grande abraço.
Edson Yanaga.
142 BANCO DE DADOS | Educação a Distância
REFERÊNCIAS
DATE, C. J. Bancos de dados: tópicos avançados. Rio de Janeiro: Campus, 1988.
KNUTH, Donald. Structured Programming with go to Statements. ACM Journal Computing
Surveys, 6 (4): 268. Dezembro de 1974.
NAVATHE, Shamkant B.; ELMASRI, Ramez. Sistemas de Banco de Dados.
6. ed. Pearson - Addison Wesley, 2011.
SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Sistema de banco
de dados. São Paulo: Makron Books do Brasil, 1999.
BANCO DE DADOS | Educação a Distância
143
Download