Prévia do material em texto
<p>BANCO DE</p><p>DADOS</p><p>Professor Me. Edson Yanaga</p><p>Professor Esp. Victor de Marqui Pedroso</p><p>GRADUAÇÃO</p><p>Unicesumar</p><p>C397 CENTRO UNIVERSITÁRIO DE MARINGÁ. Núcleo de Educação a</p><p>Distância; YANAGA, Edson; PEDROSO, Victor de Marqui.</p><p>Banco de Dados. Edson Yanaga; Victor de Marqui Pedroso Maringá-</p><p>Pr.: Unicesumar, 2016. Reimpresso em 2024.</p><p>176 p.</p><p>“Graduação - EaD”.</p><p>1. Banco. 2. Dados . 3. EaD. I. Título.</p><p>ISBN 978-85-459-0100-6</p><p>CDD - 22 ed. 005</p><p>CIP - NBR 12899 - AACR/2</p><p>Ficha catalográfica elaborada pelo bibliotecário</p><p>João Vivaldo de Souza - CRB-8 - 6828</p><p>Impresso por:</p><p>Reitor</p><p>Wilson de Matos Silva</p><p>Vice-Reitor</p><p>Wilson de Matos Silva Filho</p><p>Pró-Reitor Executivo de EAD</p><p>William Victor Kendrick de Matos Silva</p><p>Pró-Reitor de Ensino de EAD</p><p>Janes Fidélis Tomelin</p><p>Presidente da Mantenedora</p><p>Cláudio Ferdinandi</p><p>NEAD - Núcleo de Educação a Distância</p><p>Diretoria Executiva</p><p>Chrystiano Minco�</p><p>James Prestes</p><p>Tiago Stachon</p><p>Diretoria de Graduação e Pós-graduação</p><p>Kátia Coelho</p><p>Diretoria de Permanência</p><p>Leonardo Spaine</p><p>Diretoria de Design Educacional</p><p>Débora Leite</p><p>Head de Produção de Conteúdos</p><p>Celso Luiz Braga de Souza Filho</p><p>Head de Curadoria e Inovação</p><p>Tania Cristiane Yoshie Fukushima</p><p>Gerência de Produção de Conteúdo</p><p>Diogo Ribeiro Garcia</p><p>Gerência de Projetos Especiais</p><p>Daniel Fuverki Hey</p><p>Gerência de Processos Acadêmicos</p><p>Taessa Penha Shiraishi Vieira</p><p>Supervisão de Produção de Conteúdo</p><p>Nádila Toledo</p><p>Coordenador de Conteúdo</p><p>Danillo Xavier Saes</p><p>Design Educacional</p><p>Paulo Victor Souza e Silva</p><p>Projeto Gráfico</p><p>Jaime de Marchi Junior</p><p>José Jhonny Coelho</p><p>Arte Capa</p><p>Arthur Cantareli Silva</p><p>Editoração</p><p>Melina Belusse Ramos</p><p>Revisão Textual</p><p>Keren Pardini</p><p>Yara Martins Dias</p><p>Simone Morais Limonta</p><p>Ilustração</p><p>André Luis Onishi</p><p>Viver e trabalhar em uma sociedade global é um</p><p>grande desafio para todos os cidadãos. A busca</p><p>por tecnologia, informação, conhecimento de</p><p>qualidade, novas habilidades para liderança e so-</p><p>lução de problemas com eficiência tornou-se uma</p><p>questão de sobrevivência no mundo do trabalho.</p><p>Cada um de nós tem uma grande responsabilida-</p><p>de: as escolhas que fizermos por nós e pelos nos-</p><p>sos farão grande diferença no futuro.</p><p>Com essa visão, o Centro Universitário Cesumar</p><p>assume o compromisso de democratizar o conhe-</p><p>cimento por meio de alta tecnologia e contribuir</p><p>para o futuro dos brasileiros.</p><p>No cumprimento de sua missão – “promover a</p><p>educação de qualidade nas diferentes áreas do</p><p>conhecimento, formando profissionais cidadãos</p><p>que contribuam para o desenvolvimento de uma</p><p>sociedade justa e solidária” –, o Centro Universi-</p><p>tário Cesumar busca a integração do ensino-pes-</p><p>quisa-extensão com as demandas institucionais</p><p>e sociais; a realização de uma prática acadêmica</p><p>que contribua para o desenvolvimento da consci-</p><p>ência social e política e, por fim, a democratização</p><p>do conhecimento acadêmico com a articulação e</p><p>a integração com a sociedade.</p><p>Diante disso, o Centro Universitário Cesumar al-</p><p>meja ser reconhecido como uma instituição uni-</p><p>versitária de referência regional e nacional pela</p><p>qualidade e compromisso do corpo docente;</p><p>aquisição de competências institucionais para</p><p>o desenvolvimento de linhas de pesquisa; con-</p><p>solidação da extensão universitária; qualidade</p><p>da oferta dos ensinos presencial e a distância;</p><p>bem-estar e satisfação da comunidade interna;</p><p>qualidade da gestão acadêmica e administrati-</p><p>va; compromisso social de inclusão; processos de</p><p>cooperação e parceria com o mundo do trabalho,</p><p>como também pelo compromisso e relaciona-</p><p>mento permanente com os egressos, incentivan-</p><p>do a educação continuada.</p><p>Seja bem-vindo(a), caro(a) acadêmico(a)! Você está</p><p>iniciando um processo de transformação, pois quando</p><p>investimos em nossa formação, seja ela pessoal ou</p><p>profissional, nos transformamos e, consequentemente,</p><p>transformamos também a sociedade na qual estamos</p><p>inseridos. De que forma o fazemos? Criando oportu-</p><p>nidades e/ou estabelecendo mudanças capazes de</p><p>alcançar um nível de desenvolvimento compatível com</p><p>os desafios que surgem no mundo contemporâneo.</p><p>O Centro Universitário Cesumar mediante o Núcleo de</p><p>Educação a Distância, o(a) acompanhará durante todo</p><p>este processo, pois conforme Freire (1996): “Os homens</p><p>se educam juntos, na transformação do mundo”.</p><p>Os materiais produzidos oferecem linguagem dialógica</p><p>e encontram-se integrados à proposta pedagógica, con-</p><p>tribuindo no processo educacional, complementando</p><p>sua formação profissional, desenvolvendo competên-</p><p>cias e habilidades, e aplicando conceitos teóricos em</p><p>situação de realidade, de maneira a inseri-lo no mercado</p><p>de trabalho. Ou seja, estes materiais têm como principal</p><p>objetivo “provocar uma aproximação entre você e o</p><p>conteúdo”, desta forma possibilita o desenvolvimento</p><p>da autonomia em busca dos conhecimentos necessá-</p><p>rios para a sua formação pessoal e profissional.</p><p>Portanto, nossa distância nesse processo de cresci-</p><p>mento e construção do conhecimento deve ser apenas</p><p>geográfica. Utilize os diversos recursos pedagógicos</p><p>que o Centro Universitário Cesumar lhe possibilita.</p><p>Ou seja, acesse regularmente o Studeo, que é o seu</p><p>Ambiente Virtual de Aprendizagem, interaja nos fóruns</p><p>e enquetes, assista às aulas ao vivo e participe das dis-</p><p>cussões. Além disso, lembre-se que existe uma equipe</p><p>de professores e tutores que se encontra disponível para</p><p>sanar suas dúvidas e auxiliá-lo(a) em seu processo de</p><p>aprendizagem, possibilitando-lhe trilhar com tranqui-</p><p>lidade e segurança sua trajetória acadêmica.</p><p>A</p><p>U</p><p>TO</p><p>RE</p><p>S</p><p>Professor Esp. Victor de Marqui Pedroso</p><p>Possui Pós-Graduação em Banco de dados Oracle e DB2 pelo Centro</p><p>Universitário de Maringá (2009), Graduação em Tecnologia em Processamento</p><p>de Dados pelo Centro Universitário de Maringá (2003). Também atua como</p><p>analista de sistemas, analista de suporte, documentador, homologador</p><p>e programador de software. Possui experiência em desenvolvimento,</p><p>utilizando a ferramenta Delphi com bancos de dados relacionais. Trabalhou</p><p>como Professor Mediador e atualmente trabalha como Professor Formador</p><p>dos cursos de Análise e Desenvolvimento de Sistemas e Sistemas para</p><p>Internet, ministrando as disciplinas de Banco de Dados e Design de Interação.</p><p>Professor Me. Edson Yanaga</p><p>Possui graduação em Ciência da Computação pela Universidade Estadual de</p><p>Maringá (1999) e mestrado em Engenharia Elétrica e Informática Industrial</p><p>pela Universidade Tecnológica Federal do Paraná (2002). Tem experiência</p><p>na área de Ciência da Computação, com ênfase em Engenharia de Software,</p><p>atuando, principalmente, nos seguintes temas: processos, métricas, modelos,</p><p>produtos e ip.</p><p>APRESENTAÇÃO</p><p>BANCO DE DADOS</p><p>SEJA BEM-VINDO(A)!</p><p>Salve, caríssimo(a) leitor(a)! Temos o enorme prazer em apresentar-lhe o livro de Banco</p><p>de Dados I, elaborado especificamente para contribuir com sua formação, como futu-</p><p>ro(a) desenvolvedor(a) de software. Esperamos que você tenha um bom proveito do</p><p>material.</p><p>Confessamos que foi um tremendo desafio escrever este material. Até certo ponto, é</p><p>uma repetição cansativa dizer que o ritmo das mudanças e das inovações cada vez mais</p><p>se acelera, mas, a princípio, o tema “Banco de Dados” aparentaria ser algo tranquilo, pelo</p><p>fato de ser uma área de conhecimento bastante consolidada. Ledo engano. Nos últimos</p><p>cinco anos, a disciplina de Banco de Dados passou por profundas transformações que</p><p>chacoalharam os alicerces de fundamentos criados e utilizados desde a década de 1970.</p><p>Os desafios dos sistemas de informação atuais exigem que manipulemos não gigabytes</p><p>ou terabytes de informações, e sim petabytes, exabytes e zetabytes.</p><p>Os sistemas de informação das gerações anteriores tinham como objetivo gerar infor-</p><p>mações que pudessem agregar valor aos processos de negócios. Pois bem, esse objetivo</p><p>foi alcançado. Com a tão aguardada e estimulada “onipresença” de software, a magnitu-</p><p>de dessas informações geradas cresceu. Redes sociais, smartphones, tablets, sensores</p><p>de automação e vários outros dispositivos geram inúmeros bits de informação em todo</p><p>momento. Conceitos</p><p>os pós-relacionais, modelos orien-</p><p>tados a objetos, objeto relacional, temporal e geográfico. O Modelo relacional</p><p>tem uma sólida base formal, construído sob a teoria dos conjuntos, seu nome é</p><p>devido à relação matemática da teoria dos conjuntos e não aos relacionamen-</p><p>tos, como muitos pensam. Trata-se de um modelo com estruturas de tabelas e</p><p>alguns conceitos.</p><p>O modelo relacional permite a representação da estrutura lógica do projeto</p><p>com uma visão genérica. Sua estrutura é feita de forma clara e simples, possibili-</p><p>tando representar os dados do mundo real como objetos denominados entidades</p><p>ou conjunto de entidade.</p><p>Neste livro, estaremos utilizando a notação de Peter Chen (1990), notação</p><p>esta que fora criada, em 1976, pelo Dr. Peter Pin-Shan Chen, que é um cientista</p><p>da computação americano e professor de ciência da computação na Louisiana</p><p>State University, conhecido como criador do modelo entidade relacionamento.</p><p>O Modelo Relacional</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>47</p><p>Entidade:</p><p>ouAtributo:</p><p>Relacionamento:</p><p>Figura 2: Componentes DER (Diagrama Entidade e Relacionamento)</p><p>Fonte: os autores.</p><p>ENTIDADES (TABELAS)</p><p>A entidade ou tabela trata-se de uma representação gráfica de um conjunto,</p><p>conjunto este cuja representação física ou gráfica padrão é feita por meio de</p><p>um retângulo com o nome da entidade dentro dele. Para identificarmos uma</p><p>entidade, devemos considerar os objetos, coisas ou algo que seja relevante no</p><p>levantamento dos dados. Segue abaixo alguns exemplos (Figura 3 e Figura 4):</p><p>Alunos</p><p>Carros</p><p>Viagem</p><p>Aluguel</p><p>Figura 3: Exemplo de Entidades</p><p>Fonte: os autores.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E48</p><p>No exemplo dado na Figura 3, temos uma entidade Alunos, em que é repre-</p><p>sentado um conjunto de Alunos. Da mesma forma, podemos dizer que a Entidade</p><p>Carros representa um conjunto de Carros, e assim sucessivamente.</p><p>Baseados no conceito de Entidade, podemos classificar as Entidades em</p><p>Concretas e Abstratas, em que entidades Concretas são entendidas como objeto do</p><p>mundo real que pode ser separado e distinguível de outro objeto. Já as Entidades</p><p>Abstratas são aquelas que não temos de maneira tangível (intangível). Com isso,</p><p>vale lembrar que, em ambos os Tipos de Entidades, a representação é a mesma.</p><p>A seguir (Figura 4), iremos classificar algumas Entidades:</p><p>Alunos</p><p>Carro</p><p>Livro</p><p>Funcionário</p><p>Viagem</p><p>Aluguel</p><p>Compra</p><p>Empréstimo</p><p>Exemplos de Entidades Concretas Exemplos de Entidades Abstratas</p><p>Figura 4: Exemplo de Entidades Concretas e Entidades Abstratas</p><p>Fonte: os autores.</p><p>INTRODUÇÃO À MODELAGEM</p><p>Agora que já sabemos o que é uma entidade, é importante entendermos o motivo</p><p>pelo qual ela será criada, para isso, podemos utilizar a Descrição Textual Narrativa,</p><p>sendo essa nada mais que o levantamento de requisitos junto ao cliente, ou seja,</p><p>uma entrevista em que iremos retirar as informações devidas para a implemen-</p><p>tação do nosso sistema. Nesse momento, é importante anotarmos TODAS as</p><p>necessidades do nosso cliente e, a partir dessas anotações, iremos analisar os</p><p>Introdução à Modelagem</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>49</p><p>substantivos das frases e, caso esse substantivo seja relevante ao sistema, pode-</p><p>remos transformá-lo em uma entidade, por exemplo:</p><p>Na frase: “a bibliotecária empresta um livro”, podemos retirar duas possí-</p><p>veis entidades, sendo elas:</p><p>Bibliotecária Livro</p><p>Figura 5: Exemplo de Entidades</p><p>Fonte: os autores.</p><p>Já na frase: “o carro percorre vários itinerários”, podemos retirar duas possíveis</p><p>entidades, sendo elas:</p><p>Carro Itinerário</p><p>Figura 6: Exemplo de Entidades</p><p>Fonte: os autores.</p><p>E, assim, iremos popular o nosso sistema com as entidades necessárias para a</p><p>implementação, porém, vale lembrar que essa fase é IMPORTANTÍSSIMA e</p><p>deve ser feita com muita atenção. Você pode estar se perguntando o motivo de</p><p>tanta importância, vou exemplificar de maneira prática. A comparação dessa fase</p><p>inicial é a mesma de uma obra de uma casa, pois, uma vez que for mal dimen-</p><p>sionada a estrutura, podemos ter sérios e irreversíveis problemas no futuro. A</p><p>seguir, seguem dois exemplos de uma análise a partir de uma Descrição Textual</p><p>Narrativa.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E50</p><p>Exemplo 1:</p><p>O atendente solicita os dados pessoais do cliente</p><p>no momento do seu cadastro, aproveita, inclusive, para</p><p>perguntar quais são os gêneros de sua preferência.</p><p>Funcionário Cliente Gênero</p><p>Figura 7: Exemplo 1 de Descrição Textual Narrativa</p><p>Fonte: os autores.</p><p>Analisando o Exemplo 1 (Figura 7), temos como substantivos atendente, que</p><p>podemos nomear como funcionário e temos, também, as palavras cliente e gêne-</p><p>ros. Com isso, para a implementação do que fora relatado e do que é relevante,</p><p>teremos a necessidade de criação de 3 entidades, sendo elas: FUNCIONÁRIO,</p><p>CLIENTE E GÊNERO.</p><p>Exemplo 2:</p><p>O nosso cliente entra aqui na loja e escolhe o �lme</p><p>que deseja ver, os �lmes estão separados nas prateleiras</p><p>pelo gênero ao qual eles pertencem, facilitando assim a</p><p>sua localização</p><p>Cliente Filme Gênero</p><p>Figura 8: Exemplo 2 de Descrição Textual Narrativa</p><p>Fonte: os autores.</p><p>Introdução à Modelagem</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>51</p><p>Analisando o Exemplo 2 (Figura 8), temos como substantivos as palavras cliente,</p><p>loja, filme, filmes, prateleiras e gênero. Veja que riscamos a palavra prateleiras,</p><p>pois não temos a necessidade de cadastrar as prateleiras e a localização pode ser</p><p>cadastrada diretamente na entidade Filme. Outra palavra riscada foi loja, sendo</p><p>que essa seria relevante e poderia ser aproveitada apenas se tivéssemos mais de</p><p>uma loja, ou seja, tudo varia da regra do negócio que está sendo analisado. Com</p><p>isso, concluímos que as entidades que serão implementadas serão: CLIENTE,</p><p>FILME E GÊNERO.</p><p>Dicas para uma boa modelagem:</p><p>• Ter em mente o cenário a ser modelado.</p><p>• Detectar os substantivos no momento da análise do sistema.</p><p>• Nomear apropriadamente as entidades detectadas.</p><p>• Padronizar os nomes (plural, singular, abreviações).</p><p>• Fazer o diagrama em um rascunho de próprio punho em papel.</p><p>• Definir o tipo de organização mais adequado.</p><p>• Realizar um bom levantamento do método manual e do procedimento manu-</p><p>al junto ao principal usuário.</p><p>Fonte: Roberto Yukio Nishimura</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E52</p><p>10 curiosidades sobre o Google</p><p>O Google está na mídia o tempo todo, mas existem dados sobre a compa-</p><p>nhia que algumas pessoas ainda desconhecem. O Business Insider reuniu</p><p>10 fatos curiosos, sobre a gigante da web, que merecem atenção. Confira</p><p>abaixo.</p><p>1. O Google.com, que abriga as mais importantes empresas do mundo, con-</p><p>tém 23 erros em seu código.</p><p>2. A empresa já fotografou mais de 8 milhões de quilômetros para o Street</p><p>View.</p><p>3. Originalmente a companhia se chamaria ‘Googol’, mas os investidores es-</p><p>creveram ‘Google’ no primeiro cheque de contribuição e o nome permane-</p><p>ceu.</p><p>4. O banco de dados de buscas do Google tem mais 100 milhões de giga-</p><p>bytes. Seria necessário 100 mil HD externos de 1 terabyte para armazenar</p><p>todos esses dados.</p><p>5. O mundo assiste mais de 450 mil anos de vídeos no YouTube por mês. Isso</p><p>é mais do que o dobro de anos de existência dos humanos modernos.</p><p>6. O Google usa o captcha para ensinar computadores a ler textos digitaliza-</p><p>dos de livros. São 200 milhões de captchas resolvidos por dia.</p><p>7. A página do Google tem um layout simples, porque Sergey Brin e Larry</p><p>Page não sabiam HTML. A dupla decidiu deixar o site da mesma forma para</p><p>reforçar</p><p>a identidade.</p><p>8. A gigante da web deve ser a única companhia que tem como objetivo</p><p>explícito reduzir o tempo que as pessoas passam em seu site.</p><p>9. Na média, a companhia adquiriu mais de uma empresa por semana desde</p><p>2010.</p><p>10. Em 2011, 96% dos US$ 37,6 bilhões em receita do Google vieram apenas</p><p>de anúncios.</p><p>Fonte: Olhar Digital - 10 Curiosidades (2013, online).</p><p>Atributos</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>53</p><p>ATRIBUTOS</p><p>Os atributos são propriedades utilizadas para descrever uma entidade, podemos</p><p>afirmar que os Atributos são as características contidas nas Entidades, por exem-</p><p>plo, em uma Entidade Cliente, podemos relacionar os atributos CPF, NOME,</p><p>IDADE, ENDEREÇO, BAIRRO, CIDADE etc. Vamos ao exemplo passo a passo:</p><p>1°) Vamos imaginar uma Entidade Produto.</p><p>Ela será simbolizada da seguinte maneira:</p><p>Produto</p><p>2°) Agora, iremos relacionar alguns Atributos a essa Entidade:</p><p>Produto</p><p>Código</p><p>Descrição</p><p>Valor_Venda</p><p>Valor_Custo</p><p>Figura 9: Exemplo de Atributos em uma Entidade</p><p>Fonte: os autores.</p><p>3°) Outra maneira de demonstrar uma Entidade e Atributos é em forma de</p><p>Planilha:</p><p>Observando a Figura 10, verificamos que a tabela PRODUTOS contém</p><p>Atributos que são os nomes das colunas e um conceito novo chamado de TUPLA.</p><p>Definindo de modo formal, uma linha é denominada de Tupla.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E54</p><p>Código Descrição Valor_Custo Valor_Venda</p><p>Entidade</p><p>Atributos</p><p>Tupla01 Lápis 1,00 2,00</p><p>02 Borracha 1,50 3,00</p><p>03 Mouse 10,00 20,00</p><p>PRODUTOS</p><p>Figura 10: Exemplo de uma entidade em formato de colunas</p><p>Fonte: os autores.</p><p>TIPOS DE ATRIBUTOS</p><p>■ Atributo Simples: o Atributo Simples contém um único valor para cada</p><p>elemento da entidade. Nesse caso, pode ocorrer uma informação repetida,</p><p>ou seja, para uma entidade Cliente, temos um nome para cada cliente,</p><p>podendo acontecer de dois clientes terem o mesmo nome, mas infor-</p><p>mando um dado para cada Cliente. A seguir, temos a representação do</p><p>atributo simples:</p><p>Tipos de Atributos</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>55</p><p>Funcionário</p><p>Nome</p><p>Nome</p><p>CPF</p><p>Matrícula Local</p><p>ou</p><p>ou</p><p>Cliente</p><p>Nome</p><p>CPF</p><p>Cliente</p><p>Funcionário</p><p>Nome</p><p>Matrícula Local</p><p>Figura 11: Exemplo de tipos de atributos</p><p>Fonte: os autores.</p><p>■ Atributo Multivalorado: o Atributo Multivalorado permite conter informa-</p><p>ções com diversos valores. É a solução do problema quando, por exemplo,</p><p>você tem vários telefones para um Funcionário. A seguir, temos a repre-</p><p>sentação do atributo multivalorado:</p><p>Funcionário</p><p>Matrícula</p><p>Data_Nascimento</p><p>Telefones</p><p>Sexo</p><p>Figura 12: Exemplo de um atributo do tipo multivalorado</p><p>Fonte: os autores.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E56</p><p>■ Atributo Composto: o Atributo Composto nos permite indicar um atributo</p><p>que pode ser dividido em outros. Um exemplo pode ser o endereço, que</p><p>podemos dividir em rua, cidade, estado e CEP. A seguir, temos a repre-</p><p>sentação do atributo composto:</p><p>Funcionário</p><p>Data_Nascimento</p><p>Sexo</p><p>Matrícula Endereço</p><p>Logradouro</p><p>Complemento</p><p>Cidade</p><p>Bairro</p><p>Figura 13: Exemplo de um atributo do tipo composto</p><p>Fonte: os autores.</p><p>■ Atributo-Chave: quando temos os atributos de uma entidade, é impor-</p><p>tante sempre indicarmos um identificador, que podemos chamar também</p><p>de Atributo-Chave. Esse atributo irá identificar o item da entidade de</p><p>maneira única (sem repetição) no conjunto de elementos.</p><p>O Atributo-Chave deve ser íntegro, ou seja, sem repetições, e também não</p><p>pode ser nulo (valores vazios). A sua representação pode ser demonstrada de</p><p>maneira sublinhada ou com o círculo destacado na borda em negrito, conforme</p><p>a Figura 14:</p><p>Código ou Código</p><p>Figura 14: Exemplo de um atributo do tipo Chave</p><p>Fonte: os autores.</p><p>Tipos de Atributos</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>57</p><p>Exemplificando:</p><p>Para a entidade Funcionários, temos os seguintes atributos:</p><p>Endereço: analisando esse atributo, sabemos que pode haver mais de um</p><p>funcionário morando no mesmo endereço, logo, ele não poderia ser classificado</p><p>como atributo identificador.</p><p>Nome: esse atributo pode confundir um pouco, pois cada funcionário tem</p><p>seu nome, porém, pode haver funcionários com o mesmo nome, logo, pode-</p><p>mos perceber que o nome ser utilizado como um identificador pode nos trazer</p><p>problemas.</p><p>Matrícula: para cada funcionário, é gerado um número de matrícula que</p><p>o identificará na empresa e que não pode se repetir. Esse atributo pode sim ser</p><p>classificado como Atributo-Chave, devendo ser destacado entre os demais.</p><p>A seguir, temos a representação do exemplo Atributo-Chave em uma</p><p>Entidade (Figura 15):</p><p>Funcionário</p><p>Endereço Nome</p><p>Matrícula</p><p>Figura 15: Exemplo de um atributo Chave em uma entidade</p><p>Fonte: os autores.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E58</p><p>DOMÍNIO</p><p>As restrições de domínio especificam que o valor de cada atributo deve ser um</p><p>valor atômico que, para cada atributo criado, devemos associar um tipo a ele. A</p><p>essa associação, damos o nome de domínio. A seguir, demonstraremos alguns</p><p>tipos:</p><p>■ Numéricos: inteiros e reais.</p><p>■ Caracteres.</p><p>■ Booleanos.</p><p>■ Cadeias de caracteres de tamanho fixo e tamanho variável.</p><p>■ Data.</p><p>■ Hora.</p><p>A seguir, iremos criar uma tabela chamada Funcionário, contendo NOME DO</p><p>CAMPO, TIPOS e TAMANHO para exemplificar a aplicação dos tipos.</p><p>Propriedades dos campos da tabela Funcionário:</p><p>NOME DO CAMPOS TIPO DO CAMPO TAMANHO</p><p>Matrícula Inteiro 3</p><p>Nome Caractere 40</p><p>Idade Inteiro 3</p><p>Data Admissão Data 8</p><p>Fonte: os autores.</p><p>Chave Estrangeira (Foreign Key)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>59</p><p>CHAVE ESTRANGEIRA (FOREIGN KEY)</p><p>Em nossos estudos, não podemos deixar de estudar sobre a chave estrangeira</p><p>ou, em inglês, foreign key, a qual trata-se de um campo que aponta para a chave</p><p>primária de outra tabela. Nessa relação entre linhas (tuplas) de duas entidades, o</p><p>objetivo da chave estrangeira é garantir a integridade dos dados referenciais, pois</p><p>,nesses casos, serão permitidos valores que irão aparecer na base de dados. Vale</p><p>lembrar que, após estabelecer uma chave estrangeira, o atributo marcado não</p><p>permitirá a exclusão, inserção ou modificação de dados em tabelas que estejam</p><p>dependentes umas das outras (“foreign key”), tendo que ter uma maior atenção</p><p>dos administradores do banco de dados.</p><p>A seguir, exemplificaremos uma chave estrangeira entre duas tabelas (enti-</p><p>dades) em que o relacionamento é 1:N:</p><p>Figura 17: Exemplo da aplicação de uma chave estrangeira entre duas tabelas</p><p>Fonte: os autores.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E60</p><p>Outro exemplo:</p><p>Tabela: Professor</p><p>Tabela: Departamento</p><p>Tabela: Curso</p><p>Depto_Cod</p><p>Pro_Cod</p><p>Cur_Cod Cur_Nome</p><p>Depto_Nome</p><p>CodDepto</p><p>CodDeptoPro_idadePro_cpf Pro_DtNasc</p><p>Figura 18: Exemplo da aplicação de uma chave estrangeira entre duas tabelas</p><p>Fonte: os autores.</p><p>RELACIONAMENTOS</p><p>Analisando o Modelo Relacional, as entidades não podem ficar isoladas, uma</p><p>vez que as informações estarão organizadas futuramente para o acesso de forma</p><p>integrada. Para essa organização sem perda de conteúdo, as entidades devem</p><p>estar associadas, ligadas entre si. No Modelo Entidade Relacionamento (MER),</p><p>não é permitido ligar uma entidade diretamente à outra. Quando há uma asso-</p><p>ciação, ela é representada por um relacionamento. Quando há uma associação,</p><p>ela é representada por um relacionamento e o relacionamento é apresentado</p><p>na</p><p>forma de um losango e, para a associação entre entidades, deve seguir a notação</p><p>básica, que são entidades ligadas ao relacionamento por linhas retas, conforme</p><p>a Figura 19. Sempre que um relacionamento for indicado, é necessário verifi-</p><p>car validade nos 2 sentidos. Atenção! As setas não fazem parte do diagrama, são</p><p>apenas para ilustrar os sentidos.</p><p>Relacionamentos</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>61</p><p>Funcionário Setor</p><p>Figura 19: Exemplo de notação básica de relacionamentos</p><p>Fonte: os autores.</p><p>Para definir um relacionamento entre duas entidades, devemos verificar se há</p><p>correlação entre elas e podemos fazer isso colocando um verbo para tentar asso-</p><p>ciá-las. É importante averiguar se a associação entre as entidades é verdadeira em</p><p>ambos os sentidos. Para entender melhor, podemos, na situação a seguir (Figura</p><p>20), descrever dizendo que “o funcionário trabalha no setor”.</p><p>Funcionário Trabalhar Setor</p><p>Figura 20: Exemplo de notação básica de relacionamentos</p><p>Fonte: os autores.</p><p>Tipos de Relacionamentos:</p><p>A classificação dos relacionamentos é baseada no número de entidades que par-</p><p>ticiparem em um conjunto de relacionamentos, o que determina também o grau</p><p>desse conjunto.</p><p>■ Autorrelacionamento ou Relacionamento Recursivo: nesse caso, são enqua-</p><p>drados relacionamentos com apenas uma entidade. Exemplo:</p><p>Alunos</p><p>Monitorar</p><p>Pessoas</p><p>Casar</p><p>Figura 21: Exemplo de relacionamento Recursivo ou Autorrelacionamento</p><p>Fonte: os autores.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E62</p><p>■ Relacionamento Binário: o relacionamento binário é de grau dois, pois</p><p>temos duas entidades. Exemplo:</p><p>Professor Ministrar Disciplina</p><p>Figura 22: Exemplo de relacionamento binário</p><p>Fonte: os autores.</p><p>■ Relacionamento Ternário: o relacionamento ternário é de grau três, pois</p><p>temos três entidades associadas no relacionamento. Exemplo:</p><p>Professor Ensinar Curso</p><p>Disciplina</p><p>Figura 23: Exemplo de relacionamento Ternário</p><p>Fonte: Cardoso (2012).</p><p>Vale lembrar que, entre duas entidades, também pode haver relacionamento, ou</p><p>seja, uma entidade pode estar associada a outra por mais de um relacionamento,</p><p>conforme o exemplo a seguir:</p><p>Gestor Executa</p><p>Gerenciar</p><p>Projetos</p><p>Figura 24: Exemplo de mais de um relacionamento entre duas entidades</p><p>Fonte: Cardoso (2012).</p><p>Cardinalidade</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>63</p><p>Outra particularidade de um relacionamento é que os relacionamentos podem</p><p>conter atributos, eles não fazem parte de maneira obrigatória das propriedades</p><p>das entidades, porém, quando inserimos um atributo associado a um relacio-</p><p>namento, ele deve ser comum às duas entidades. A seguir, vamos mostrar um</p><p>exemplo relativo a esse tipo de relacionamento:</p><p>Horário</p><p>Palestrante Ministrar Tema</p><p>Figura 25: Exemplo de relacionamento contendo um atributo</p><p>Fonte: Cardoso (2012).</p><p>Conforme o exemplo citado (Figura 25), podemos dizer que o atributo horá-</p><p>rio faz parte comum às entidades associadas no relacionamento, em que esse</p><p>informa em que horário que o Palestrante ministra o referido tema.</p><p>CARDINALIDADE</p><p>A cardinalidade permite expressar o número de ocorrências com que uma enti-</p><p>dade pode tomar parte em um relacionamento. Permite também expressar as</p><p>possibilidades e restrições de associações entre uma entidade e outra.</p><p>Podemos também definir como a “regra de negócio” entre as entidades</p><p>envolvidas no relacionamento ou até mesmo a frequência com que essas fun-</p><p>cionalidades podem ocorrer.</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E64</p><p>Notação:</p><p>(x : y)</p><p>Cardinalidade Máxima</p><p>Cardinalidade Mínima</p><p>Cardinalidade Máxima</p><p>Trata-se do limite máximo de ocorrências de uma entidade em relação à outra:</p><p>■ Um para Um (1:1).</p><p>■ Um para Muitos (1:N).</p><p>■ Muitos para Muitos (N:N) ou N:M.</p><p>Cardinalidade Um para Um (1:1):</p><p>Acontece quando a ocorrência de uma entidade se relaciona com (no máximo)</p><p>uma ocorrência de outra e vice-versa.</p><p>Exemplo:</p><p>Leitura direta: o Cliente compra no máximo 1 Produto</p><p>Leitura inversa: 1 Produto é comprado pelo Cliente</p><p>Cliente</p><p>1</p><p>1</p><p>1</p><p>1</p><p>ProdutoCompra</p><p>Figura 26: Exemplo de Cardinalidade Um para Um</p><p>Fonte: Cardoso (2012).</p><p>Cardinalidade</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>65</p><p>Cardinalidade Um para Muitos (1:N):</p><p>A ocorrência de uma entidade se relaciona com (no máximo) muitas ocor-</p><p>rências de outra, porém a ocorrência de outra entidade se relaciona com (no</p><p>máximo) uma ocorrência da primeira.</p><p>Leitura direta: o Cliente compra no máximo muitos Produtos</p><p>Leitura inversa: o Produto é comprado por no máximo um Cliente</p><p>Cliente</p><p>1</p><p>1</p><p>N</p><p>1</p><p>ProdutoCompra</p><p>Figura 27: Exemplo de Cardinalidade Um para N</p><p>Fonte: Cardoso (2012).</p><p>Cardinalidade Muitos para Muitos (N:N) ou (N:M):</p><p>Acontece quando a ocorrência de uma entidade se relaciona com (no máximo)</p><p>muitas ocorrências de outra e vice-versa. Exemplo:</p><p>Leitura direta: o Cliente compra no máximo muitos Produtos</p><p>Leitura inversa: o Produto é comprado por no máximo vários Cliente</p><p>Cliente</p><p>1</p><p>N</p><p>N</p><p>1</p><p>ProdutoCompra</p><p>Figura 28: Exemplo de Cardinalidade N para N</p><p>Fonte: Cardoso (2012).</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E66</p><p>Quando a leitura é feita de (1:N) em ambos os sentidos das entidades.</p><p>Teremos, assim, um resultado (N:N), conforme a seguir (Figura 29):</p><p>Leitura direta: o Cliente compra no máximo muitos Produtos</p><p>Leitura inversa: o Produto é comprado por no máximo vários Cliente</p><p>vários Clientes</p><p>1</p><p>N</p><p>N</p><p>1</p><p>ProdutoCompra</p><p>Figura 29: Exemplo de Cardinalidade N para N.</p><p>Fonte: Cardoso (2012).</p><p>Cardinalidade Mínima</p><p>Trata-se do mínimo de ocorrências de uma entidade em relação à outra:</p><p>■ Opcional (0) - é quando uma ocorrência se relaciona com (no mínimo)</p><p>nenhuma de outra entidade. Abaixo temos a representação:</p><p>■ (0:1) - Nesse caso, a representação textual seria “no mínimo nenhuma</p><p>ocorrência em uma entidade para no máximo uma ocorrência na outra</p><p>entidade”.</p><p>■ (0:N) - Nesse caso, a representação textual seria “no mínimo nenhuma</p><p>ocorrência em uma entidade para no máximo muitas ocorrências na</p><p>outra entidade”.</p><p>■ Obrigatória (1) - uma ocorrência se relaciona com (no mínimo) uma de</p><p>outra entidade.</p><p>No exemplo abaixo (Figura 30), devemos analisar a regra de negócio que, de</p><p>acordo com a cardinalidade mínima ser marcada como 0 (zero), significa que o</p><p>Cliente não é obrigatório no momento da venda do produto e que o Produto é</p><p>comprado por, no máximo, um Cliente.</p><p>Considerações Finais</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>67</p><p>Cliente 0,N 1,N ProdutoCompra</p><p>Figura 30: Exemplo de Cardinalidade N para N</p><p>Fonte: Cardoso (2012).</p><p>CONSIDERAÇÕES FINAIS</p><p>Nesta unidade, procuramos demonstrar os assuntos de maneira que você possa</p><p>entender melhor as questões que permeiam os conceitos básicos do Modelo</p><p>Relacional de Banco de dados.</p><p>Vale enfatizar que, nesta unidade, tivemos a oportunidade de estudar a</p><p>respeito de conceitos básicos do Modelo Relacional, como o DER (Diagrama</p><p>Entidade e Relacionamento), Tuplas, Entidades, Atributos, Relacionamentos,</p><p>Cardinalidades etc. Esses conceitos são importantes para quem deseja apren-</p><p>der, de maneira correta, a iniciar a criação de um projeto de banco de dados,</p><p>tendo como seu principal objetivo dar ao aluno uma melhor aplicabilidade no</p><p>momento da iniciação de um projeto.</p><p>Espero que esses conceitos tenham sido explanados de maneira clara e obje-</p><p>tiva, sempre buscando exemplificar para que fique claro e, assim, possa facilitar</p><p>o seu estudo, entendimento</p><p>e aprendizado. Aproveito o momento para deixar</p><p>aqui o meu incentivo à fixação desse conteúdo, pois esses conceitos são impres-</p><p>cindíveis para quem deseja iniciar o desenvolvimento de um banco de dados.</p><p>1. A partir do estudado nesta unidade, defina Entidades Concretas e Entidades</p><p>Abstratas.</p><p>2. Crie uma Entidade Produtos com os seguintes atributos:</p><p>a. Código do Produto.</p><p>b. Descrição do Produto.</p><p>c. Unidade do Produto.</p><p>d. Valor do Produto.</p><p>e. Classificação do Produto.</p><p>f. Valor Custo do Produto.</p><p>3. Analise as frases abaixo e crie as possíveis entidades:</p><p>a. “o atendente matricula o aluno no curso de Administração”.</p><p>b. “ a secretária agenda pacientes para atendimento médico”.</p><p>c. “ é necessário cadastrar os produtos para realizar as vendas aos clientes”.</p><p>69</p><p>BANCOS DE DADOS LIVRES CRESCEM NO BRASIL</p><p>Uma nova geração de bancos de dados livres começa a ganhar adesão de várias empre-</p><p>sas do setor financeiro e industrial do país, revela estudo.</p><p>Uma nova geração de bancos de dados livres começa a ganhar adesão de várias empre-</p><p>sas do setor financeiro e industrial do país, para aplicações específicas ou embarcadas</p><p>em equipamentos de comunicação, e já está criando um impacto positivo entre os de-</p><p>senvolvedores.</p><p>Essa é uma conclusão do consultor independente Fernando Lozano, community mana-</p><p>ger da Java.net, apresentada na quarta-feira (17/08) no Developer’s World 2005, realiza-</p><p>do pelo IDG Brasil, no Hotel Jaraguá, em São Paulo.</p><p>Lozano vem trabalhando na implementação de projetos de banco de dados livres em</p><p>várias empresas, como o Instituto Brasileiro de Petróleo e Gás, Elephant Internet, iBest</p><p>e Amsterdam Sauer. “O banco de dados livre é hoje uma alternativa viável e de alta per-</p><p>formance, além de comercialmente atraente, pois pode utilizar qualquer ferramenta de</p><p>desenvolvimento para acesso aos dados”, diz ele.</p><p>Para Thiago José Macieira, desenvolvedor central do KDE, uma das principais comunida-</p><p>des de open source do mundo, com quase 20 colaboradores brasileiros, o interesse pelo</p><p>software livre no Brasil é cada vez maior, principalmente depois que o governo federal</p><p>decidiu estimular a adoção do produto em licitações públicas.</p><p>“Muitos desenvolvedores estão decididos a contribuir para o avanço do open source,</p><p>mesmo sem ter qualquer espécie de retorno financeiro, no máximo um outro patrocínio</p><p>para participar em congressos internacionais”, afirma Macieira.</p><p>Fonte: Cesar (2005, online).</p><p>MATERIAL COMPLEMENTAR</p><p>Acesse este link para assistir a uma aula do Professor Marcelo Assis sobre como deve ser feito o</p><p>Modelo Relacional Normalizado:</p><p>Disponível em: <https://www.youtube.com/watch?v=eiBbG9bVljs>.</p><p>Acesso em: 03 jul. 2015.</p><p>U</p><p>N</p><p>ID</p><p>A</p><p>D</p><p>E III</p><p>Professor Me. Edson Yanaga</p><p>SQL BÁSICO</p><p>Objetivos de Aprendizagem</p><p>■ Definir o que é SQL.</p><p>■ Apresentar os comandos de definição e uso da SQL.</p><p>Plano de Estudo</p><p>A seguir, apresentam-se os tópicos que você estudará nesta unidade:</p><p>■ Definir o que é SQL</p><p>■ Apresentar os comandos de definição e uso da SQL</p><p>INTRODUÇÃO</p><p>A primeira ideia que vem à cabeça de um desenvolvedor experiente, quando</p><p>se fala de banco de dados relacionais, é SQL. Talvez uma das boas</p><p>razões pelas quais os SGBDs relacionais são tão difundidos</p><p>deva-se ao fato de que a SQL é uma ferramenta bas-</p><p>tante madura, elaborada e bem projetada.</p><p>Em português, pronuncia-se SQL como uma</p><p>sigla, com o som de cada uma das letras separadas,</p><p>“esse-quê-ele”. Porém, nas conversas em projetos</p><p>internacionais que você fará ou em conferências</p><p>das quais você participará em sua vida profissional,</p><p>perceberá que, em inglês, SQL é pronunciado como</p><p>“síquel”. O motivo é curioso e não tem a ver com a sigla</p><p>SQL, e sim com o nome original dessa linguagem. Atualmente,</p><p>a sigla SQL significa Structured Query Language (Linguagem de</p><p>Consulta Estruturada), mas originalmente seu nome era SEQUEL – Structured</p><p>English QUEry Language (Linguagem de Consulta em Inglês Estruturado) –</p><p>por isso o motivo da pronúncia como “síquel”.</p><p>SQL é uma linguagem diferente das linguagens de programação que você</p><p>provavelmente aprendeu até agora. Em qualquer curso de programação, costu-</p><p>ma-se ensinar inicialmente linguagens de programação imperativas (como C,</p><p>Pascal, Java ou Python), em que você é responsável por escrever os comandos</p><p>na ordem de execução esperada. Nesse tipo de linguagem, preocupamo-nos em</p><p>instruir o computador no modo como ele deve executar as tarefas. O resultado</p><p>de seu processamento é uma consequência daquilo que comandamos. Já a SQL</p><p>é uma linguagem declarativa, pois nela define-se o que deve ser retornado como</p><p>resultado do processamento, sem especificar o como isso será feito.</p><p>Permita uma reflexão sobre a natureza declarativa da SQL. Na SQL, ao defi-</p><p>nirmos somente o que esperamos de resultado ao invés do como, permitimos</p><p>que o SGBD decida como é que ele deve executar as instruções. Há 10 anos, esse</p><p>seria um fator determinante para decidir entre um produto e outro. A evolu-</p><p>ção dos produtos comerciais e livres fez com que essa diferença diminuísse de</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>73</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E74</p><p>modo significativo – embora, dependendo dos casos de uso de sua aplicação, a</p><p>diferença ainda possa ser relevante. Em alguns casos, centenas de parâmetros</p><p>de configuração do produto permitem alterar a forma com que o SGBD executa</p><p>o “como”: uma tarefa que, muitas vezes, chega a ser minuciosa – tudo isso para</p><p>conseguir aumentar o desempenho do seu SGBD.</p><p>Para tentar diminuir as diferenças entre as diversas implementações e varian-</p><p>tes da SQL utilizadas em produtos distintos, a ANSI (American National Standards</p><p>Institute) e a ISO (International Standards Organization) uniram-se para criar</p><p>um padrão para a SQL. A versão mais popular desse padrão é a SQL-92, embora</p><p>haja uma versão mais recente: a SQL:1999. Infelizmente, os fabricantes de SGBDs</p><p>não seguem 100% o padrão, o que torna a tarefa de migração de um produto</p><p>para outro um pouco mais difícil. Comercialmente, é uma estratégia interes-</p><p>sante para os fabricantes, pois se baseia no aprisionamento do cliente: uma vez</p><p>comprometido com um produto, o custo para migração (em tempo e esforço)</p><p>torna-se elevado o suficiente para que o cliente desista da ideia. Já para os usu-</p><p>ários, esse é um fato infeliz. De positivo do padrão SQL-92 temos que, mesmo</p><p>com as sutis diferenças entre as implementações da SQL em diferentes produtos,</p><p>as semelhanças se sobressaem e permitem que os desenvolvedores de software</p><p>possam aprender facilmente a lidar com produtos concorrentes.</p><p>A SQL possui comandos tanto para a criação de definições de dados (criação</p><p>de schemas) quanto para a execução de comandos de manipulação de banco de</p><p>dados (consultas e atualizações). É uma linguagem bastante abrangente. É por</p><p>esse motivo que trataremos da SQL em duas unidades distintas. A unidade III</p><p>abordará a criação de schemas e os comandos básicos da linguagem, enquanto</p><p>que a unidade IV abordará os comandos um pouco mais avançados</p><p>Definições de Dados e Tipos em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>75</p><p>DEFINIÇÕES DE DADOS E TIPOS EM SQL</p><p>Na unidade anterior, definimos os termos relação, tupla e atributo do modelo</p><p>relacional. Em SQL, esses termos são denominados respectivamente de tabela,</p><p>linha e coluna. Boa parte dos comandos SQL relacionados à criação e definição</p><p>de dados utiliza o comando CREATE.</p><p>O CONCEITO DE SCHEMA</p><p>Em sua versão inicial, a SQL não possuía um mecanismo para agrupar tabelas</p><p>relacionadas. Como consequência, todas as tabelas no SGBD coexistiam dentro</p><p>de um mesmo “ambiente”. A partir do SQL-92, criou-se o conceito de schema,</p><p>que é simplesmente um conjunto de tabelas relacionadas. Do mesmo modo</p><p>que</p><p>em UML um pacote é um conjunto de classes relacionadas, um schema é um</p><p>conjunto de tabelas relacionadas. Por exemplo, o seguinte comando cria um</p><p>schema denominado de “agenda”. Todos os comandos em SQL são finalizados</p><p>por um ponto-e-vírgula:</p><p>create schema agenda;</p><p>Além de agrupar logicamente as tabelas, um schema também é convenientemente</p><p>utilizado para autorizar/restringir o acesso pelos usuários. Você pode autori-</p><p>zar determinados usuários a acessar um schema e restringir o acesso a outros.</p><p>O comando CREATE TABLE</p><p>O comando CREATE TABLE é utilizado para criar uma nova tabela. O primeiro</p><p>parâmetro do comando é o nome da tabela sendo criada, seguido dos atributos</p><p>e de seus respectivos tipos e eventuais restrições do atributo. Restrições de inte-</p><p>gridade referencial podem ser definidas ao final do comando.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E76</p><p>contato</p><p>email</p><p>telefone</p><p>grupo a�liação</p><p>id nome</p><p>id nome</p><p>sobrenome</p><p>id email contato_fk</p><p>id telefone contato_fk</p><p>grupo_fk contato_fk</p><p>nascimento peso</p><p>Figura 31: Exemplo da estrutura de Tabelas e seus respectivos atributos</p><p>Fonte: os autores.</p><p>Os seguintes comandos criam as tabelas definidas na Figura 31:</p><p>CREATE TABLE contato (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30) NOT NULL,</p><p>sobrenome VARCHAR(30) NOT NULL,</p><p>nascimento DATE,</p><p>peso DECIMAL(10,2)</p><p>);</p><p>Definições de Dados e Tipos em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>77</p><p>CREATE TABLE email (</p><p>id INT PRIMARY KEY,</p><p>email VARCHAR(60) NOT NULL,</p><p>contato_fk INT,</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>CREATE TABLE telefone (</p><p>id INT PRIMARY KEY,</p><p>telefone VARCHAR(20) NOT NULL,</p><p>contato_fk INT,</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>CREATE TABLE grupo (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30) NOT NULL</p><p>);</p><p>CREATE TABLE afiliacao (</p><p>grupo_fk INT NOT NULL,</p><p>contato_fk INT NOT NULL,</p><p>PRIMARY KEY (grupo_fk, contato_fk),</p><p>FOREIGN KEY (grupo_fk) REFERENCES grupo(id),</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>Em algumas situações, não é possível definir as restrições de integridade referen-</p><p>cial e chave estrangeira no próprio CREATE TABLE, pois as tabelas referenciadas</p><p>ainda não existem. Na próxima unidade, abordaremos como resolver esse impasse.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E78</p><p>TIPOS DE DADOS</p><p>A SQL define um conjunto de tipos de dados básicos para os seus atributos.</p><p>Diferentes produtos adicionam tipos de dados diferentes ao conjunto supor-</p><p>tado, mas todos os produtos disponíveis no mercado suportam ao menos estes</p><p>tipos básicos:</p><p>TIPOS NUMÉRICOS</p><p>Tipos de dados numéricos suportam dados inteiros (INT</p><p>e SMALLINT) e de ponto flutuante (FLOAT e DOUBLE).</p><p>Números com precisão decimal (normalmente utilizados</p><p>em cálculos de moeda, por exemplo) são DECIMAL</p><p>ou NUMERIC, declarados como DECIMAL(a,b) ou</p><p>NUMERIC(a,b), em que “a” é o número de dígitos inteiros e</p><p>“b” é o número de dígitos decimais.</p><p>TIPOS CARACTERE</p><p>Tipos de caractere podem ser de tamanho fixo ou variável.</p><p>Os atributos de tamanho fixo podem ser declarados como</p><p>CHAR(n), em que “n” é o número máximo de caracteres</p><p>suportado pelo atributo. Para especificar um atributo de</p><p>tamanho variável, utiliza-se o tipo VARCHAR(n).</p><p>Para se entender o critério de uso entre um e outro, é neces-</p><p>sário entender como é a alocação de espaço desses tipos</p><p>no arquivo físico. Se o tamanho for fixo (CHAR), o SGBD já</p><p>aloca esse tamanho predefinido no arquivo: as buscas po-</p><p>dem ser mais rápidas, pois o SGBD já sabe o tamanho do</p><p>campo ao “pular bytes” na busca sequencial. Entretanto, se</p><p>o conteúdo dos atributos não preencher todo o tamanho</p><p>definido, há o desperdício de espaço de armazenamento.</p><p>Por outro lado, utilizando-se VARCHAR, o SGBD aloca um</p><p>ponteiro para determinar qual o tamanho do atributo: as</p><p>buscas são mais lentas, mas não há desperdício de espaço.</p><p>TIPOS BOOLEANOS</p><p>Assim como em linguagens de programação, tipos boo-</p><p>leanos podem assumir os valores TRUE ou FALSE. Muitos</p><p>SGBDs mapeiam esses valores em “1” e “0”, respectivamen-</p><p>te.</p><p>TIPOS TEMPORAIS</p><p>O tipo DATE suporta dados temporais no formato AAAA-</p><p>-MM-DD (ano, mês, dia), enquanto que o tipo TIME utiliza</p><p>o formato HH:MM:SS (hora, minuto e segundo). A própria</p><p>SQL assegura representações temporais válidas.</p><p>Restrições</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>79</p><p>RESTRIÇÕES</p><p>Seguindo o nosso planejamento, abordaremos agora, as restrições que podem ser</p><p>declaradas em SQL no comando CREATE TABLE. Restrições adicionais especi-</p><p>ficadas em outros comandos serão abordadas na próxima unidade.</p><p>VALORES NULL E VALORES PADRÃO</p><p>A linguagem SQL permite que todos os atributos (com exceção daqueles que</p><p>compõem a chave primária) sejam nulos. Se o seu modelo de negócios não per-</p><p>mite que um atributo seja nulo, é necessário especificar uma restrição de NOT</p><p>NULL na declaração do atributo.</p><p>Outra consideração (pequena talvez) sobre o NOT NULL é que no mínimo o</p><p>SGBD terá que gravar um bit (ou um byte) a mais em cada atributo em casos de</p><p>campos NULL. Se um atributo permitir nulos, então o SGBD terá que, primeira-</p><p>mente, saber se o campo é nulo ou não e depois armazenar o próprio conteúdo.</p><p>Além de valores nulos, também há possibilidade de se definir um valor padrão</p><p>para os atributos utilizando-se a cláusula DEFAULT <valor>. Caso esse atributo</p><p>seja omitido durante a inserção de uma linha da tabela, assume-se o valor padrão.</p><p>Por padrão na SQL, caso nenhuma cláusula seja declarada, os atributos per-</p><p>mitirão valores nulos e o valor padrão também será nulo.</p><p>Como exemplo, poderíamos definir ‘Silva’ como o sobrenome padrão dos</p><p>nossos contatos no comando CREATE TABLE:</p><p>CREATE TABLE contato (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30) NOT NULL,</p><p>sobrenome VARCHAR(30) NOT NULL DEFAULT ‘Silva’,</p><p>nascimento DATE,</p><p>peso DECIMAL(10,2)</p><p>);</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E80</p><p>Chaves e integridade referencial</p><p>Para especificar uma chave primária, utiliza-se a cláusula PRIMARY KEY. Caso</p><p>a chave primária possua um único atributo, ela pode ser declarada no próprio</p><p>atributo (como no exemplo da tabela contato):</p><p>id INT PRIMARY KEY</p><p>Havendo mais de um atributo na chave primária, é necessário declará-la ao final</p><p>(como no exemplo a seguir ):</p><p>PRIMARY KEY (grupo_fk, contato_fk)</p><p>A cláusula UNIQUE especifica chaves únicas (não primárias) em uma tabela.</p><p>Poderíamos alterar a definição da tabela email para garantir que não haja e-mails</p><p>duplicados em nossa aplicação:</p><p>CREATE TABLE email (</p><p>id INT PRIMARY KEY,</p><p>email VARCHAR(60) NOT NULL UNIQUE,</p><p>contato_fk INT,</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>Já a integridade referencial e as chaves estrangeiras são definidas por meio da</p><p>cláusula FOREIGN KEY, como utilizada já no nosso exemplo nas tabelas email</p><p>e telefone:</p><p>Consultas Básicas em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>81</p><p>CREATE TABLE email (</p><p>id INT PRIMARY KEY,</p><p>email VARCHAR(60) NOT NULL,</p><p>contato_fk INT,</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>CREATE TABLE telefone (</p><p>id INT PRIMARY KEY,</p><p>telefone VARCHAR(20) NOT NULL,</p><p>contato_fk INT,</p><p>FOREIGN KEY (contato_fk) REFERENCES contato(id)</p><p>);</p><p>CONSULTAS BÁSICAS EM SQL</p><p>O comando em SQL para a execução de operações de consulta é o SELECT, e as</p><p>consultas que podem ser elaboradas com esse comando variam das mais simples</p><p>até as bem complicadas. Em sua forma fundamental, um comando de con-</p><p>sulta SELECT assume a forma SELECT <atributos> FROM <tabelas> WHERE</p><p><condições>.</p><p>De acordo com Silberschatz (1999), a expressão básica de</p><p>consulta em SQL</p><p>consiste em três cláusulas: SELECT, FROM e WHERE:</p><p>1. A cláusula de SELECT é utilizada para listar os atributos desejados no</p><p>resultado da consulta.</p><p>2. A cláusula FROM lista as relações (tabelas) que devem ser examinadas</p><p>na avaliação da expressão SQL.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E82</p><p>3. A cláusula WHERE corresponde ao predicado envolvendo os atributos</p><p>das relações que aparecem na cláusula FROM.</p><p>As condições do comando SQL podem utilizar comparadores lógicos simila-</p><p>res aos de outras linguagens de programação já conhecidas, tais como = (igual),</p><p>< (menor), <= (menor ou igual), > (maior), >= (maior ou igual) e <> (diferente).</p><p>Provavelmente uma das melhores formas de se aprender é por meio de exem-</p><p>plos. Ao invés de nos atermos aos detalhes sintáticos e conceituais de cada tipo</p><p>de consulta, apresentaremos exemplos de como as consultas a seguir.</p><p>Todos os exemplos de consulta serão realizados tendo-se como base a defi-</p><p>nição de esquema proposta na Figura 6 .</p><p>Exemplo 1: Selecione o nome e o telefone de todos os contatos cujo sobre-</p><p>nome seja ‘Silva’.</p><p>SELECT nome, telefone FROM contato, telefone WHERE contato.id = tele-</p><p>fone.contato_fk AND contato.sobrenome = ‘Silva’;</p><p>Nesse exemplo, a condição contato.sobrenome = ‘Silva’ é um predicado que sele-</p><p>ciona somente as linhas especificadas na tabela contato. A condição contato.id</p><p>= telefone.contato_fk é denominada de condição de join, pois combina duas</p><p>tabelas diferentes baseadas, nesse caso, em uma chave estrangeira de um rela-</p><p>cionamento entre ambas.</p><p>Exemplo 2: Selecione o nome, o telefone e o e-mail de todos os contatos</p><p>cujo nome seja ‘Edson’.</p><p>SELECT nome, telefone, email</p><p>FROM contato, telefone, email</p><p>WHERE contato.id = telefone.contato_fk AND contato.id = email.con-</p><p>tato_fk AND contato.nome = ‘Edson’;</p><p>Consultas Básicas em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>83</p><p>Nesse exemplo, pode-se notar que em uma consulta é permitido realizar o join</p><p>entre várias tabelas diferentes, e, novamente nesse caso, todas estão relaciona-</p><p>das por meio de uma condição de combinação baseada em chaves estrangeiras.</p><p>Exemplo 3: Selecione o id do telefone de todos os contatos cujo peso seja</p><p>maior que 70.</p><p>SELECT telefone.id</p><p>FROM contato, telefone</p><p>WHERE telefone.contato_fk = contato.id</p><p>AND contato.peso >70</p><p>O Exemplo 3 mostra como devemos definir os nomes dos atributos nas cláusu-</p><p>las quando há a possibilidade de ambiguidade na definição dos nomes. Tanto</p><p>a tabela contato quanto a tabela telefone possuem um atributo denominado de</p><p>“id”. Nesse caso, devemos informar à SQL qual é o atributo “id” que desejamos</p><p>obter, prefixando o atributo com o nome de sua respectiva tabela. No caso do</p><p>exemplo, eliminamos a ambiguidade descrevendo o atributo como “telefone.id”.</p><p>Exemplo 4: Selecione o nome do grupo e o nome do contato de todos os</p><p>contatos cujo nome seja ‘Joaquim’.</p><p>SELECT contato.nome as n, grupo.nome as g</p><p>FROM contato, grupo, afiliacao</p><p>WHERE contato.id = afiliacao.contato_fk AND grupo.id = afiliacao.grupo_</p><p>fk AND n = ‘Joaquim’;</p><p>Uma facilidade na construção de consultas que possuem termos repetidos sendo</p><p>referenciados é a criação de um alias. Um alias é um apelido definido para um</p><p>determinado termo da consulta SQL. No Exemplo 4, definimos que o atributo</p><p>contato.nome possui um alias “n” e que o atributo grupo.nome possui um alias</p><p>“g”. Desse modo, no restante dessa consulta, não precisamos mais nos referenciar</p><p>a esses atributos pela referência completa, torna-se possível, então, simplesmente</p><p>escrevermos a condição final da consulta como sendo n = ‘Joaquim’.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E84</p><p>Exemplo 5: Selecione o peso de todos os contatos com peso < 100.</p><p>SELECT c.peso</p><p>FROM contato c</p><p>WHERE c.peso < 100;</p><p>No Exemplo 5, demonstramos que a definição de um alias não está restrita</p><p>aos atributos; um alias pode também ser definido como um apelido para uma</p><p>tabela na consulta SQL.</p><p>Exemplo 6: Selecione a data de nascimento de todos os contatos.</p><p>SELECT nascimento</p><p>FROM contato;</p><p>A cláusula WHERE de uma consulta SQL é opcional. Embora, em muitos casos,</p><p>você, como programador(a), deva se questionar se isso é oportuno ou não, já</p><p>que, potencialmente, a quantidade de registros em uma tabela pode chegar aos</p><p>milhões ou bilhões. Quando a cláusula WHERE é omitida, a consulta irá proces-</p><p>sar todos os registros das tabelas referenciadas. No Exemplo 6, demonstramos</p><p>como obter todas as datas de nascimento por meio do processamento de todas</p><p>as linhas da tabela contato.</p><p>Exemplo 7: Selecione todos os atributos de contatos cujo peso = 75.</p><p>SELECT *</p><p>FROM contato</p><p>WHERE peso = 75;</p><p>Quando não se deseja limitar quais atributos devem ser retornados na consulta,</p><p>pode-se utilizar um asterisco (“*”) para determinar ao SQL que processe todos</p><p>os atributos de todas as tabelas da cláusula FROM no resultado da consulta SQL.</p><p>Consultas Básicas em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>85</p><p>Exemplo 8: Selecione todos os sobrenomes distintos de todos os contatos.</p><p>SELECT DISTINCT sobrenome</p><p>FROM contato;</p><p>Embora o modelo relacional seja baseado na teoria geral dos conjuntos e, mate-</p><p>maticamente, em conjuntos não hajam elementos repetidos, permite-se elementos</p><p>repetidos em tabelas e, consequentemente, nos resultados das consultas, esses ele-</p><p>mentos repetidos são exibidos. Nas situações em que se deseje eliminar as tuplas</p><p>repetidas nos resultados das consultas, pode-se utilizar a cláusula DISTINCT</p><p>como no Exemplo 8.</p><p>Exemplo 9: Selecione todos os telefones cujo número comece com ‘44’.</p><p>SELECT *</p><p>FROM telefone</p><p>WHERE telefone LIKE ‘44%’;</p><p>No Exemplo 9, utilizamos o comparador LIKE para definir uma busca por padrões</p><p>em Strings. O caractere ‘%’ é utilizado em condições LIKE para definir zero ou</p><p>mais caracteres. Nesse exemplo, o ‘44%’ determina que a String deve iniciar com</p><p>‘44’ e pode possuir zero ou mais caracteres posteriores.</p><p>Exemplo 10: Selecione todos os contatos que nasceram na década de 1980.</p><p>SELECT *</p><p>FROM contato</p><p>WHERE nascimento LIKE ‘198_-__-__’;</p><p>Outro caractere especial que pode ser utilizado em condições LIKE é o ‘_’. Ele</p><p>representa um único caractere arbitrário utilizado na busca. Como as datas em</p><p>SQL podem ser representadas como uma String ‘AAAA-MM-DD’, utilizamos o</p><p>‘_’ para preencher os campos da nossa busca.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E86</p><p>Exemplo 11: Selecione todos os contatos cujo peso esteja entre 90 e 100.</p><p>SELECT *</p><p>FROM contato</p><p>WHERE peso BETWEEN 90 AND 100;</p><p>A condição BETWEEN da SQL pode ser utilizada para determinar intervalos</p><p>de valor em comparações.</p><p>Exemplo 12: Selecione o nome de todos os contatos por ordem alfabética</p><p>crescente.</p><p>SELECT nome</p><p>FROM contato</p><p>ORDER BY nome ASC;</p><p>A cláusula ORDER BY da SQL permite que o resultado da busca seja ordenado de</p><p>acordo com os parâmetros informados. Uma cláusula ORDER BY pode ordenar</p><p>os resultados de modo ascendente ou descendente. Para tanto, basta adicio-</p><p>nar respectivamente o modificador ASC ou DESC na cláusula. O valor ASC é o</p><p>padrão e o valor assumido caso o modificador seja omitido.</p><p>Exemplo 13: Selecione o nome e o sobrenome de todos os contatos cujo</p><p>sobrenome inicie com ‘A’ e ordene por sobrenome em ordem decrescente e por</p><p>nome em ordem crescente.</p><p>SELECT nome, sobrenome</p><p>FROM contato</p><p>WHERE sobrenome LIKE ‘A%’</p><p>ORDER BY sobrenome DESC, nome ASC;</p><p>Comandos de Modificação de Dados em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>87</p><p>No Exemplo 13, demonstramos</p><p>como ordenar o resultado de uma consulta a</p><p>partir de dois critérios diferentes. Os critérios são avaliados pela ordem em que</p><p>são declarados.</p><p>COMANDOS DE MODIFICAÇÃO DE DADOS EM SQL</p><p>Até agora, pudemos definir quais são os comandos básicos da SQL para a execu-</p><p>ção de consultas básicas em nossos bancos de dados. Neste tópico, abordaremos</p><p>os comandos da SQL que permitem a adição, a atualização e a remoção de tuplas</p><p>(linhas), que respectivamente correspondem ao INSERT, UPDATE e DELETE.</p><p>Abordaremos cada um deles a seguir</p><p>O comando INSERT</p><p>O comando INSERT é utilizado para inserir linhas em uma determinada tabela.</p><p>Devido à definição formal do schema da tabela, precisamos informar os valores</p><p>de inserção na tabela dentro de uma ordem específica. Essa ordem pode ser a</p><p>própria ordem determinada pela definição do schema ou pode ser a ordem em</p><p>que definimos os nomes das colunas da cláusula de INSERT.</p><p>O comando INSERT, em sua forma mais simples, pode ser exemplificado</p><p>do seguinte modo:</p><p>INSERT INTO contato</p><p>VALUES (10, ‘Edson’, ‘Yanaga’, ‘1978-04-12’, 95);</p><p>Nesse exemplo, determinamos que os valores da cláusula VALUES seguem a</p><p>mesma ordem da definição do schema, como definido no início desta unidade.</p><p>Note que, durante a inserção, os valores informados devem satisfazer as condi-</p><p>ções de restrições de domínio, de integridade nula e de integridade referencial.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E88</p><p>INSERT INTO contato (nome, sobrenome, peso, nascimento, id)</p><p>VALUES (‘Edson’, ‘Yanaga’, 95, ‘1978-04-12’, 10);</p><p>Nessa segunda forma do comando INSERT, nós especificamos explicitamente</p><p>qual a ordem desejada de inserção de cada um dos atributos da tabela contato.</p><p>Uma questão que surge para os desenvolvedores é: qual seria a forma mais</p><p>adequada? Certamente não há uma resposta que possa ser considerada melhor</p><p>ou pior, mas um argumento a favor da segunda forma estabelece que, quando a</p><p>ordem dos argumentos é especificada no próprio comando INSERT, evita-se que</p><p>este torne-se inválido, quando o schema da tabela for modificado para adição ou</p><p>alteração de ordem de alguma coluna. O fato de o comando tornar-se inválido</p><p>provavelmente provocaria um erro da aplicação em tempo de execução, já que</p><p>esse tipo de bug não pode ser identificado pelo compilador.</p><p>Uma terceira forma do comando INSERT permite que os valores informados</p><p>para inserção sejam determinados por uma cláusula SELECT ao invés de serem</p><p>argumentos literais na própria cláusula. Podemos criar uma tabela adicional no</p><p>nosso schema para armazenar esses dados provenientes do comando SELECT:</p><p>CREATE TABLE lista_de_nomes (</p><p>nome varchar(30),</p><p>sobrenome varchar(30)</p><p>);</p><p>Baseando-se nos dados já existentes na tabela contato, a recém-criada tabela</p><p>lista_de_nomes poderia ser populada com o seguinte comando INSERT:</p><p>INSERT INTO lista_de_nomes (nome,sobrenome)</p><p>SELECT nome,sobrenome</p><p>FROM contato</p><p>WHERE nascimento > ‘1980-01-01’;</p><p>Comandos de Modificação de Dados em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>89</p><p>O comando UPDATE</p><p>O comando UPDATE modifica os valores de uma ou mais tuplas (linhas) das</p><p>tabelas selecionadas. Nesse comando, a cláusula WHERE determina quais são</p><p>as linhas da tabela selecionadas para modificação. Em sua forma fundamental,</p><p>um comando de modificação UPDATE assume a forma UPDATE <tabela> SET</p><p><atributos e valores> WHERE <condições>.</p><p>Note que, diferentemente do comando SELECT, o comando UPDATE só</p><p>pode ser aplicado em uma única tabela. Caso seja necessário modificar os valo-</p><p>res de atributos de mais de uma tabela, vários comandos UPDATE terão que ser</p><p>executados – todos possivelmente agrupados dentro de uma única transação.</p><p>UPDATE contato</p><p>SET peso = 99, nascimento = ‘1982-04-25’</p><p>WHERE nome = ‘Carlos’;</p><p>Nesse exemplo do comando UPDATE, estamos modificando o valor de dois</p><p>atributos das tuplas cujo nome = ‘Carlos’. É uma prática bastante comum execu-</p><p>tarmos comandos UPDATE no banco de dados somente identificando a chave</p><p>primária na cláusula WHERE. Assim temos a garantia de que um único regis-</p><p>tro será modificado de cada vez (já que cada chave primária é única dentro de</p><p>uma mesma tabela), se assim for o caso de uso desejado.</p><p>UPDATE contato</p><p>SET peso = peso * 1.1;</p><p>Assim como no comando SELECT, a cláusula WHERE é opcional também no</p><p>comando UPDATE. Nesse caso, todas as linhas da tabela informada serão sele-</p><p>cionadas para a execução das modificações solicitadas. No exemplo acima,</p><p>demonstramos que podemos executar operações aritméticas com os valores dos</p><p>atributos das tabelas. Nesse exemplo, atualizamos para 10% acima o peso de todos</p><p>os contatos (no caso de uma hipotética epidemia de obesidade).</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E90</p><p>UPDATE contato</p><p>SET nascimento = NULL;</p><p>O valor nulo também pode ser utilizado como valor de atribuição em comandos</p><p>UPDATE, desde que as restrições do schema do banco de dados assim o permitam.</p><p>Assim como o comando INSERT – vale lembrar que todas as restrições do</p><p>schema que se aplicam ao comando INSERT também são válidas para o comando</p><p>UPDATE.</p><p>O comando DELETE</p><p>O comando DELETE na SQL remove linhas de uma determinada tabela. Assim</p><p>como os comandos INSERT e UPDATE, ele possui uma cláusula WHERE para</p><p>limitar as linhas que serão processadas pelo comando. Novamente, assim como</p><p>nos comandos INSERT e UPDATE, a ausência da cláusula WHERE implica que</p><p>todas as linhas de uma determinada tabela serão processadas – o que no caso do</p><p>comando DELETE implica que o resultado será uma tabela vazia.</p><p>Em sua forma fundamental, um comando de modificação DELETE assume</p><p>a forma DELETE FROM <tabela> WHERE <condições>.</p><p>DELETE FROM telefone</p><p>WHERE id = 5;</p><p>O exemplo acima é a forma mais comum de execução do comando DELETE. A</p><p>exemplo do comando UPDATE, o comando DELETE só pode ser aplicado em</p><p>uma única tabela de cada vez.</p><p>DELETE FROM contato;</p><p>Comandos de Modificação de Dados em SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>91</p><p>Em um caso extremo, esse exemplo resultaria em uma tabela contato vazia.</p><p>Entretanto como nas operações de DELETE, as restrições de integridade refe-</p><p>rencial são verificadas, esse comando falharia com um erro caso alguma outra</p><p>tabela (telefone, por exemplo) tivesse alguma chave estrangeira apontando para</p><p>uma linha da tabela contato.</p><p>Cezar Taurion, da IBM, fala das vantagens da computação em nuvem</p><p>Disponível em: <http://youtu.be/HJre77TPpSw>. Acesso em: 8 jul. 2015.</p><p>10 COISAS QUE VOCÊ DEVE SABER SOBRE BANCO DE DADOS NoSQL</p><p>Por um quarto de século, os Sistemas Gerenciadores de Banco de Dados Relacionais</p><p>(SGBDRs) têm sido o modelo dominante para gerenciamento de banco de dados. Mas</p><p>hoje, não relacionais, “cloud” ou bancos de dados “NoSQL” estão ganhando atenção</p><p>como um modelo alternativo para gerenciamento de banco de dados. Neste artigo,</p><p>abordaremos os 10 aspectos principais desses bancos de dados NoSQL não relacionais:</p><p>as cinco principais vantagens e os cinco desafios.</p><p>Cinco vantagens do NoSQL</p><p>1. Escalabilidade elástica</p><p>Por anos, administradores de banco de dados apoiaram-se na escalabilidade vertical –</p><p>que consiste na compra de servidores maiores à medida que a carga aumenta – ao invés</p><p>da escalabilidade horizontal – distribuição dos bancos de dados em múltiplos servido-</p><p>res à medida que a carga aumenta. Entretanto à medida que os requisitos de carga de</p><p>transações e disponibilidade aumentam e os bancos de dados movem para a nuvem ou</p><p>para ambientes virtualizados, as vantagens econômicas da escalabilidade horizontal em</p><p>hardware comoditizado tornam-se irresistíveis.</p><p>SGBDRs podem não escalar tão facilmente em clusters comoditizados, mas a nova ge-</p><p>ração de banco de dados NoSQL é projetada</p><p>para expandir-se transparentemente de</p><p>modo a tirar proveito de novos nós, e normalmente o banco de dados NoSQL é conce-</p><p>bido com hardware de baixo custo em mente.</p><p>2. Big data</p><p>Assim como os níveis de transações cresceram absurdamente na última década, o vo-</p><p>lume de dados que está sendo armazenado também cresceu massivamente. O’Reilly</p><p>chamou isso de “revolução industrial dos dados”. A capacidade dos SGBDRs tem crescido</p><p>para se equiparar a esses aumentos, mas assim como os níveis de transações, as restri-</p><p>ções de volumes de dados que podem ser efetivamente gerenciados na prática por um</p><p>único SGBDR tornaram-se intoleráveis para algumas empresas. Atualmente, os volumes</p><p>de “big data” que podem ser manipulados por sistemas NoSQL como o Hadoop superam</p><p>em muito o que pode ser manipulado pelos maiores SGBDRs disponíveis.</p><p>3. Adeus DBAs (ou até logo?)</p><p>Apesar das muitas melhorias de gerenciamento alegadas pelos fornecedores de SGBDRs</p><p>ao longo dos anos, SGBDRs de alto nível só podem ser mantidos com a assistência de</p><p>93</p><p>caros e altamente treinados DBAs. DBAs estão intimamente envolvidos no projeto, ins-</p><p>talação e otimização de sistemas baseados em SGBDRs.</p><p>Bancos de dados NoSQL são normalmente concebidos para requerer menos gerencia-</p><p>mento: reparos automáticos, distribuição de dados e modelos de dados mais simples</p><p>tendem a requisitos de administração e otimização menores – na teoria. Na prática, é</p><p>provável que os rumores da morte dos DBAs tenham sido um pouco exagerados. Al-</p><p>guém sempre será responsável pelo desempenho e disponibilidade de um repositório</p><p>de dados de missão crítica.</p><p>4. Economia</p><p>Bancos de dados NoSQL tipicamente utilizam clusters de servidores baratos para geren-</p><p>ciar a explosão no volume de transações e dados, enquanto que SGBDRs tendem a de-</p><p>pender de caros servidores e dispositivos de armazenamento proprietários. O resultado</p><p>é que o custo por gigabyte ou transações/segundo para o NoSQL pode ser muitas vezes</p><p>menor que o custo de SGBDRs, permitindo que você armazene e processe os dados com</p><p>um custo muito menor.</p><p>5. Modelos de dados flexíveis</p><p>Gerência de mudança é uma grande dor de cabeça para grandes SGBDRs em produção.</p><p>Cada pequena mudança no modelo de dados deve ser cuidadosamente gerenciada e</p><p>pode necessitar de downtime ou níveis de serviço reduzidos.</p><p>Bancos de dados NoSQL possuem restrições de modelos de dados muito mais flexíveis</p><p>– ou inexistentes. Bancos de dados NoSQL do tipo chave-valor ou de documentos per-</p><p>mitem que a aplicação virtualmente armazene qualquer estrutura em um elemento de</p><p>dado. Mesmo um banco de dados NoSQL definido de modo mais rígido, como aqueles</p><p>baseados em BigTable (Cassandra e HBase), tipicamente permitem o acréscimo de no-</p><p>vas colunas sem maiores problemas.</p><p>O resultado é que as mudanças na aplicação e as mudanças no schema do banco de</p><p>dados não precisam mais ser gerenciadas como uma única e complicada mudança. Na</p><p>teoria, isso permite que as aplicações possuam ciclos de iteração mais rápidos, embora</p><p>claramente possa haver efeitos colaterais indesejáveis, caso a aplicação falhe em geren-</p><p>ciar a integridade dos dados.</p><p>Cinco desafios do NoSQL</p><p>A promessa dos bancos de dados NoSQL gerou muito entusiasmo, mas ainda há obstá-</p><p>culos a serem superados antes que eles possam seduzir grandes empresas mais conser-</p><p>vadoras. A seguir, listamos alguns dos principais desafios.</p><p>1. Maturidade</p><p>SGBDRs já estão por aí há um longo tempo. Defensores do NoSQL argumentarão que</p><p>sua idade avançada é um sinal de sua obsolescência, mas, para a maioria dos CIOs, a</p><p>maturidade dos SGBDRs é reconfortante. Para a maioria, SGBDRs são estáveis e ricos em</p><p>funcionalidades. Em comparação, muitas alternativas NoSQL são versões de pré-produ-</p><p>ção em que muitas funcionalidades importantes ainda devem ser implementadas.</p><p>2. Suporte</p><p>Empresas querem a garantia de que, se um sistema chave falhar, terão um suporte com-</p><p>petente com um tempo de resposta aceitável. Todos os fornecedores de SGBDRs traba-</p><p>lham bastante para conseguir fornecer um elevado nível de suporte corporativo.</p><p>Em contraste, muitos sistemas NoSQL são projetos open-source e, embora existam mui-</p><p>tas empresas oferecendo suporte a banco de dados NoSQL, essas empresas normal-</p><p>mente são pequenas startups sem o alcance global, recursos de suporte ou credibilida-</p><p>de de empresas como Oracle, Microsoft ou IBM.</p><p>3. Business Intelligence e Business Analytics</p><p>Banco de bancos NoSQL evoluíram para atender à demanda de escala de modernas</p><p>aplicações Web 2.0. Consequentemente, a maioria de suas funcionalidades está relacio-</p><p>nada às demandas dessas aplicações. Entretanto, os dados de uma aplicação têm um</p><p>valor para o negócio que vai além do ciclo de insert-read-update-delete de uma típica</p><p>aplicação Web. Empresas mineram informações em banco de dados corporativos para</p><p>melhorar sua eficiência e competitividade, e Business Intelligence (BI) é um ativo valioso</p><p>de TI para todas as médias e grandes empresas.</p><p>Bancos de dados NoSQL oferecem poucas funcionalidades para consultas e análises ad-</p><p>-hoc. Mesmo uma simples consulta exige um domínio significativo de programação, e</p><p>muitas ferramentas de BI populares não fornecem conectividade a NoSQL.</p><p>Algum alívio é trazido pelo surgimento de solução como HIVE e PIG, que podem forne-</p><p>cer um fácil acesso a dados em clusters Hadoop e eventualmente a outros bancos de</p><p>dados NoSQL. A Quest Software desenvolveu um produto – Toad for Cloud Databases –</p><p>que pode fornecer a capacidade de consultas ad-hoc em uma boa variedade de bancos</p><p>de dados NoSQL.</p><p>95</p><p>4. Administração</p><p>Os objetivos de projeto do NoSQL podem ser o de fornecer uma solução com custo zero</p><p>de administração, mas a realidade atual ainda não é essa. O NoSQL hoje requer muita</p><p>habilidade para instalar e muito esforço de manutenção.</p><p>5. Expertise</p><p>Existem literalmente milhões de desenvolvedores no mundo todo, em praticamente</p><p>todo segmento de negócios, que estão familiarizados com os conceitos e a programa-</p><p>ção em SGBDRs. Em contraste, praticamente todo desenvolver NoSQL ainda está em</p><p>processo de aprendizado. Essa situação será resolvida naturalmente com o passar do</p><p>tempo, mas, por enquanto, é muito mais fácil encontrar programadores ou administra-</p><p>dores SGBDR que um expert em NoSQL.</p><p>Conclusão</p><p>Bancos de dados NoSQL estão se tornando uma crescente e importante parte do cená-</p><p>rio de banco de dados e, quando utilizados de modo apropriado, podem oferecer bene-</p><p>fícios reais. Entretanto empresas devem proceder com cautela com total consciência das</p><p>limitações e problemas que estão associados com esses bancos de dados.</p><p>Guy Harrison é o diretor de pesquisa e desenvolvimento da Quest Software. Um reco-</p><p>nhecido expert em banco de dados com mais de 20 anos de experiência em aplicações,</p><p>administração de banco de dados, tuning de desempenho e desenvolvimento de sof-</p><p>tware. Guy é autor de vários livros e diversos artigos em tecnologias de banco de dados</p><p>e um palestrante regular em conferências técnicas.</p><p>Fonte: Harrison (2010, online).</p><p>Blog do Cezar Taurion, Evangelista da IBM no Brasil e especialista em BigData</p><p>e Cloud Computing:</p><p><https://www.ibm.com/developerworks/mydeveloperworks/blogs/ctau-</p><p>rion/?lang=pt_br>.</p><p>SQL BÁSICO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIIU N I D A D E96</p><p>CONSIDERAÇÕES FINAIS</p><p>Finalizada a leitura desta unidade, já temos a convicção de que você, como pro-</p><p>fissional comprometido(a) e fluente em inglês (sim, na área de Tecnologia da</p><p>Informação, inglês é obrigatório e deveria ser o idioma principal), já abordará</p><p>seus(suas) colegas, alunos(as) e profissionais, falando “síquel” ao invés do fami-</p><p>gerado “esse-quê-ele”, quando se referir à linguagem SQL.</p><p>Como toda tecnologia e assunto novo, SQL exige prática para o domínio.</p><p>Acreditamos piamente na educação por meio de exemplos como a melhor forma</p><p>de se formar profissionais que consigam utilizar os conhecimentos assimilados</p><p>na execução prática das tarefas. Durante esta unidade, pudemos estudar a</p><p>for-</p><p>mação dos comandos INSERT, UPDATE e DELETE e suas respectivas sintaxes e</p><p>cláusulas individuais. Em seguida, por meio de exemplos, praticamos uma série</p><p>de diferentes definições de comandos e explicamos o que se esperava de cada um</p><p>deles, bem como sua motivação. Crie seus próprios schemas baseado(a) nas abs-</p><p>trações reais do mundo que o cerca, exercite-se e execute consultas e comandos</p><p>de modificação SQL nesses seus schemas! Com a prática cotidiana, você perce-</p><p>berá que SQL também é bastante simples.</p><p>Até agora, fomos capazes de abordar as estruturas básicas da linguagem SQL.</p><p>Na próxima unidade, poderemos nos dedicar a alguns casos mais elaborados de</p><p>uso dessa popular linguagem.</p><p>97</p><p>Todas as atividades de autoestudo desta unidade baseiam-se na figura abaixo.</p><p>aluno</p><p>professor</p><p>curso</p><p>disciplina</p><p>matrícula</p><p>id nome</p><p>id nome curso_fk professor_fk</p><p>sobrenome</p><p>id nome sobrenome titulação</p><p>id nome ano curso_fk aluno_fk</p><p>ra email</p><p>1. Considere o exemplo de schema da figura apresentada. Crie os comandos SQL</p><p>para definição e criação das tabelas.</p><p>2. Elabore consultas SQL para selecionar:</p><p>a. O nome de todos os alunos matriculados no curso com nome = ‘Banco de</p><p>Dados’.</p><p>b. A titulação do professor da disciplina com nome = ‘SQL’.</p><p>c. O Nome, sobrenome e RA de todos os alunos matriculados nas disciplinas</p><p>lecionadas pelo professor com nome ‘Edson’.</p><p>d. Todos os atributos de todos os cursos com ano > 1990.</p><p>3. Elabore comandos de modificação de dados para incluir, modificar e remover</p><p>linhas das diferentes tabelas desse schema.</p><p>U</p><p>N</p><p>ID</p><p>A</p><p>D</p><p>E IV</p><p>Professor Me. Edson Yanaga</p><p>MAIS SQL</p><p>Objetivos de Aprendizagem</p><p>■ Definir consultas complexas em SQL.</p><p>■ Apresentar os comandos de alteração de definições em SQL.</p><p>Plano de Estudo</p><p>A seguir, apresentam-se os tópicos que você estudará nesta unidade:</p><p>■ Consultas envolvendo NULL</p><p>■ Consultas aninhadas (subqueries)</p><p>■ Consultas utilizando joins</p><p>■ Consultas com funções de agregação</p><p>■ Comandos de alteração de schema</p><p>INTRODUÇÃO</p><p>Agora que já aprendemos a sintaxe básica dos comandos SQL, podemos nos</p><p>aventurar em consultas um pouco mais complexas. Em praticamente todos os</p><p>sistemas de bancos de dados disponíveis no mercado, sejam eles relacionais ou</p><p>NoSQL, as funções de consulta e manipulação básicas se equivalem. Isso signi-</p><p>fica que, com o material estudado até a unidade anterior, ainda não foi possível</p><p>perceber um dos bons diferenciais competitivos dos bancos de dados relacio-</p><p>nais, que é justamente a capacidade de se executar essas consultas um pouco</p><p>mais complexas e sofisticadas.</p><p>Quando citamos essas consultas “um pouco mais complexas” do SQL, não o</p><p>fazemos com o propósito de intimidá-lo(a). Muito pelo contrário. Aprendemos</p><p>com a Teoria Geral dos Sistemas que sempre que há um problema “complexo” é</p><p>possível dividi-lo em problemas menores até que estes sejam de fácil resolução.</p><p>É com essa definição em mente que apresentaremos nesta unidade uma grande</p><p>variedade de exemplos que podem ser solucionados com essas consultas mais</p><p>elaboradas da SQL.</p><p>Abordaremos consultas envolvendo valores nulos, subqueries, consultas</p><p>com joins e consultas com funções de agregação, além dos comandos de altera-</p><p>ção de schema.</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>101</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E102</p><p>CONSULTAS ENVOLVENDO NULL</p><p>Nós já abordamos na unidade III que o valor NULL representa um valor ausente,</p><p>mas que pode ter diferentes interpretações. Algumas possibilidades de uso para</p><p>o valor NULL são:</p><p>■ O valor é desconhecido. Pensando na tabela telefone do exemplo da uni-</p><p>dade III, um telefone pode ser NULL se você não sabe o valor do telefone</p><p>do contato.</p><p>■ O valor não está disponível. No caso do telefone, você conhece o número</p><p>do telefone do contato, mas não gostaria que ele fosse exibido ou arma-</p><p>zenado, setando o valor NULL para representá-lo.</p><p>■ O valor não é aplicável. Caso algum contato não tenha telefone, certa-</p><p>mente não faz sentido querer armazenar essa informação.</p><p>A avaliação de comandos de consulta SQL com valores NULL merece uma</p><p>atenção especial. Todos os fundamentos de computação baseiam-se na lógica</p><p>booleana, o que implica que as expressões possuem sempre somente dois valo-</p><p>res possíveis: verdadeiro (TRUE) ou falso (FALSE).</p><p>Como em SQL os atributos podem ter valor nulo, agora as expressões que</p><p>envolvem os atributos podem resultar em valores verdadeiros (TRUE), falso</p><p>(FALSE) ou em um terceiro valor, que é representado por NULL. Esse terceiro</p><p>valor pode ser checado de um modo especial com os operadores SQL defini-</p><p>dos, como IS e IS NOT. Ademais, todas as condições da cláusula WHERE de</p><p>comandos SQL filtram as linhas baseando-se no valor verdadeiro (TRUE) das</p><p>expressões. Nesse caso, linhas que sejam avaliadas pelas expressões da cláusula</p><p>WHERE como falso (FALSE) ou como o valor representado por NULL simples-</p><p>mente são descartadas (com exceção da operação de OUTER JOIN, que veremos</p><p>mais adiante nesta unidade).</p><p>Comecemos com alguns exemplos ainda baseados no schema apresentado</p><p>na unidade III.</p><p>Exemplo 1: Selecione todos os contatos que não possuem data de nasci-</p><p>mento definida.</p><p>Consultas Aninhadas (Subqueries)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>103</p><p>SELECT *</p><p>FROM contato</p><p>WHERE nascimento IS NULL;</p><p>Exemplo 2: Situação oposta a do Exemplo 1. Selecionaremos todos os contatos</p><p>que possuem uma data de nascimento definida.</p><p>SELECT *</p><p>FROM contato</p><p>WHERE nascimento IS NOT NULL;</p><p>CONSULTAS ANINHADAS (SUBQUERIES)</p><p>Algumas consultas em SQL são mais facilmente construídas se pudermos bus-</p><p>car primeiramente alguns valores das tabelas e utilizá-los posteriormente em</p><p>nossa consulta. Essas consultas diferenciadas podem ser formuladas com certa</p><p>conveniência por meio de consultas aninhadas (uma consulta dentro de outra)</p><p>ou, como popularmente denominadas, de subqueries.</p><p>Exemplo 3: Selecione todos os telefones de contatos com sobrenome =</p><p>‘Machado’.</p><p>SELECT telefone</p><p>FROM telefone, contato</p><p>WHERE contato.id = telefone.contato_fk and sobrenome = ‘Machado’;</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E104</p><p>A consulta acima foi criada utilizando-se um join normal. Agora, no exemplo</p><p>abaixo, a reescreveremos utilizando uma subquery.</p><p>SELECT telefone</p><p>FROM telefone</p><p>WHERE contato_fk IN</p><p>(</p><p>SELECT id</p><p>FROM contato</p><p>WHERE sobrenome = ‘Machado’</p><p>);</p><p>Uma dúvida comum a muitos desenvolvedores está relacionada à frequência de</p><p>uso de cada opção. Matematicamente, de acordo com o modelo relacional, não</p><p>há diferença entre as duas consultas: são equivalentes. Toda consulta que utiliza</p><p>um join pode ser reescrita na forma de uma consulta aninhada (com subqueries).</p><p>Decidir entre uma forma e outra passa a ser uma questão de gosto, conveniên-</p><p>cia e legibilidade de código. Há alguns anos, poderia ser argumentado que uma</p><p>forma seria mais rápida que outra ou vice-versa. Entretanto, devido à evolução</p><p>dos interpretadores de SQL nos SGBDs modernos, essa diferença hoje é prati-</p><p>camente nula: todos os SGBDs modificam internamente as consultas fornecidas</p><p>e automaticamente já escolhem o melhor plano de execução. Isso faz que boa</p><p>parte das supostas “otimizações” que muitos DBAs realizam em consultas SQL</p><p>tornem-se inócuas, pois o SGBD, na maioria das vezes, reescreverá as consultas</p><p>para a melhor forma possível .</p><p>No exemplo acima, note o uso da cláusula IN (<subquery>). A cláusula IN</p><p>espera um conjunto de valores sendo retornado pela subquery dentro dos parên-</p><p>teses, que deve ser compatível com o atributo sendo comparado pela cláusula</p><p>IN. Na hipótese de você ter certeza da sua subquery retornar um único valor ao</p><p>invés de retornar um conjunto de valores, pode substituir</p><p>o IN pelo operador</p><p>de igual (‘=’). Mas mesmo nas situações de um único valor sendo retornado, o</p><p>operador IN continua equivalente. É por esse motivo que muitos programadores</p><p>Consultas Aninhadas (Subqueries)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>105</p><p>acabam adotando a convenção de se utilizar o operador IN em todas as consul-</p><p>tas que envolvem subqueries.</p><p>Considere nos exemplos a partir de agora o seguinte schema representado</p><p>pela Figura 32:</p><p>funcionário</p><p>subordinado</p><p>id nome sobrenome</p><p>id nome sobrenome superior_fk</p><p>cargo</p><p>Figura 32: Exemplo das tabelas Funcionário e Subordinado</p><p>Fonte: os autores.</p><p>O schema da Figura 32 pode ser construído da seguinte forma:</p><p>CREATE TABLE funcionario (</p><p>id int primary key,</p><p>nome varchar(30),</p><p>sobrenome varchar(30),</p><p>cargo varchar(30)</p><p>);</p><p>CREATE TABLE subordinado (</p><p>id int primary key,</p><p>nome varchar(30),</p><p>sobrenome varchar(30),</p><p>superior_fk int,</p><p>FOREIGN KEY (superior_fk) REFERENCES funcionario(id)</p><p>);</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E106</p><p>Exemplo 4: Selecione o nome e sobrenome de todos os funcionários que</p><p>possuem subordinados com o mesmo nome.</p><p>SELECT f.nome, f.sobrenome</p><p>FROM funcionario AS f, subordinado AS s</p><p>WHERE f.id = s.superior_fk AND f.nome = s.nome;</p><p>Reescrevendo o exemplo acima com uma subquery:</p><p>SELECT f.nome, f.sobrenome</p><p>FROM funcionario AS f</p><p>WHERE id IN(</p><p>SELECT superior_fk</p><p>FROM subordinado AS s</p><p>WHERE f.nome = s.nome</p><p>);</p><p>Esse exemplo reescrito com uma subquery é um caso especial de consulta ani-</p><p>nhada em SQL, pois, como pode notar, a subquery utiliza atributos da consulta</p><p>externa em sua cláusula WHERE. Chamamos esse caso especial de consultas</p><p>aninhadas correlacionadas.</p><p>SELECT f.nome, f.sobrenome</p><p>FROM funcionario AS f</p><p>WHERE EXISTS (</p><p>SELECT *</p><p>FROM subordinado AS s</p><p>WHERE f.nome = s.nome</p><p>);</p><p>Consultas Utilizando Joins</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>107</p><p>Apresentamos a mesma consulta do exemplo reescrito acima com um novo ope-</p><p>rador denominado de EXISTS. Esse operador retorna um resultado verdadeiro</p><p>(TRUE), se a sua subquery retornar ao menos uma linha de resultado, e falso</p><p>(FALSE), se o resultado for vazio.</p><p>Exemplo 5: Selecione o nome e o sobrenome de todos os funcionários que</p><p>não possuem subordinados.</p><p>SELECT f.nome, f.sobrenome</p><p>FROM funcionario AS f</p><p>WHERE NOT EXISTS (</p><p>SELECT *</p><p>FROM subordinado AS s</p><p>WHERE s.superior_fk = f.id</p><p>);</p><p>A exemplo do operador EXISTS, o operador NOT EXISTS retorna o oposto do</p><p>operador EXISTS, sendo falso (FALSE), se o resultado possui ao menos uma</p><p>linha, e verdadeiro (TRUE), se o resultado for vazio.</p><p>CONSULTAS UTILIZANDO JOINS</p><p>Na unidade III, nós vimos que o conceito de join permite que façamos consultas</p><p>que utilizam duas ou mais tabelas, unidas por meio de uma ou mais condições</p><p>que unem os elementos das duas ou mais tabelas. Em alguns casos, é mais fácil</p><p>compreender as consultas se estas forem escritas na forma com join ao invés de</p><p>misturar as condições de join na cláusula WHERE.</p><p>Voltemos a utilizar o schema definido na unidade III em nossos exemplos</p><p>a seguir.</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E108</p><p>Exemplo 6: Selecione o nome de todos os contatos cujo telefone inicie com ‘44’.</p><p>SELECT nome</p><p>FROM contato, telefone</p><p>WHERE contato.id = telefone.contato_fk and telefone.telefone LIKE</p><p>‘44%’;</p><p>Agora vejamos essa mesma consulta reescrita com um JOIN:</p><p>SELECT nome</p><p>FROM (contato JOIN telefone ON contato.id = telefone.contato_fk)</p><p>WHERE telefone.telefone LIKE ‘44%’;</p><p>Nesse caso do exemplo reescrito com JOIN, a cláusula FROM possui uma joined</p><p>table que contém todos os atributos de ambas as tabelas unidas pelo JOIN e pela</p><p>condição do JOIN, que é o predicado após o ON.</p><p>Na SQL, o tipo de JOIN padrão, quando simplesmente declarado pela cláu-</p><p>sula JOIN, é o inner join, que descarta todas as tuplas que não possuam um valor</p><p>correspondente na segunda tabela do JOIN. Os outros tipos de JOIN disponí-</p><p>veis são descritos na tabela abaixo:</p><p>TIPO DE JOIN SEMÂNTICA</p><p>INNER JOIN É o tipo de JOIN padrão. Somente tuplas que satisfa-</p><p>çam a condição do JOIN são selecionadas.</p><p>LEFT OUTER JOIN ou</p><p>LEFT JOIN</p><p>Todas as tuplas da tabela do lado esquerdo do ON são</p><p>selecionadas. Caso não haja uma tupla corresponden-</p><p>te, na tabela do lado direito do JOIN, os valores são</p><p>preenchidos com NULL.</p><p>RIGHT OUTER JOIN ou</p><p>RIGHT JOIN</p><p>É a condição inversa do LEFT JOIN. Todas as tuplas da</p><p>tabela do lado direito do ON são selecionadas. Caso</p><p>não haja uma tupla correspondente na tabela do lado</p><p>esquerdo do JOIN, os valores são preenchidos com</p><p>NULL.</p><p>FULL OUTER JOIN ou</p><p>FULL JOIN</p><p>Todas as tuplas dos dois lados do JOIN são seleciona-</p><p>das. Caso não haja correspondência na condição do</p><p>JOIN, o lado vazio é preenchido com NULL.</p><p>Consultas Utilizando Joins</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>109</p><p>Exemplo 7: Selecione todos os nomes de contatos que iniciem com a letra ‘A’</p><p>e seus respectivos telefones. Se o contato não tiver um telefone, mostre somente</p><p>o nome e NULL como o valor do telefone.</p><p>SELECT nome, telefone</p><p>FROM contato LEFT JOIN telefone ON contato.id = telefone.contato_fk</p><p>WHERE contato.nome LIKE ‘A%’;</p><p>É um caso típico de LEFT JOIN, em que você deseja listar todos os contatos,</p><p>tendo eles telefone ou não.</p><p>CONSULTAS COM FUNÇÕES DE AGREGAÇÃO</p><p>Uma das grandes vantagens da SQL e dos bancos de dados relacionais, se compa-</p><p>rados com outras alternativas não relacionais, são as suas funções de agregação.</p><p>Essas funções permitem uma análise resumida das informações armazenadas</p><p>nas tabelas. Funções de agregação populares da SQL incluem COUNT, SUM,</p><p>MAX, MIN e AVG que executam as funções matemáticas respectivas de conta-</p><p>gem, soma, valor máximo, valor mínimo e média aritmética.</p><p>Exemplo 8: Selecione o peso mínimo e máximo de todos os contatos.</p><p>SELECT MAX(peso), MIN(peso)</p><p>FROM contato;</p><p>As funções de agregação em SQL recebem como parâmetro o nome do atributo</p><p>em que se deseja aplicá-las. Nesse exemplo, é o caso do atributo peso.</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E110</p><p>Exemplo 9: Selecione o número total de contatos cujo peso > 80;</p><p>SELECT COUNT(*)</p><p>FROM contato</p><p>WHERE peso > 80;</p><p>Nesse uso da função COUNT, o asterisco (“*”) representa o número de linhas</p><p>do resultado da consulta e é bastante utilizado para se determinar a quantidade</p><p>de resultados retornados.</p><p>Exemplo 10: Selecione a quantidade de pesos distintos de todos os contatos.</p><p>SELECT COUNT(DISTINCT peso)</p><p>FROM contato;</p><p>Nesse exemplo, contamos a quantidade de pesos distintos de nossos contatos.</p><p>Caso a cláusula DISTINCT não fosse aplicada, contaríamos somente a quanti-</p><p>dade de pesos dos contatos.</p><p>FUNÇÕES DE AGRUPAMENTO</p><p>Em muitas situações, desejamos aplicar as funções de agregação não em todos</p><p>os itens das tuplas selecionadas, mas em determinados grupos de tuplas – sepa-</p><p>rados dentro da tabela, baseados em um determinado valor. Para conseguir esse</p><p>objetivo em SQL, utilizamos a cláusula GROUP BY. Ao utilizarmos o GROUP</p><p>BY, separamos as tuplas em grupos distintos em que todas as tuplas dentro de</p><p>um determinado grupo possuem o mesmo valor avaliado pelas condições do</p><p>GROUP BY.</p><p>Exemplo 11: Selecione o sobrenome e quantidade de contatos que possuem</p><p>o mesmo sobrenome.</p><p>Consultas Utilizando Joins</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>111</p><p>SELECT sobrenome, COUNT(*)</p><p>FROM contato</p><p>GROUP by sobrenome;</p><p>Na avaliação dessa consulta, todas as tuplas da tabela contato são divididas em</p><p>antigos já não são soberanos nesses inóspitos ambientes atuais.</p><p>Diante desses cenários, surgiram os conceitos de Big Data e NoSQL.</p><p>Mas, para irmos mais longe e chegarmos a esse ponto, devemos dar o primeiro passo.</p><p>Este material aborda os conceitos que até recentemente eram considerados como as</p><p>“regras sagradas” de banco de dados: os bancos de dados relacionais. E não se engane,</p><p>caro(a) leitor(a), esses fundamentos de bancos de dados relacionais são imprescindíveis</p><p>para que se possa dar o “próximo passo” rumo ao conhecimento de Big Data e NoSQL.</p><p>Na unidade I, teremos a apresentação de tópicos conceituais e definições sobre bancos</p><p>de dados, sistemas gerenciadores de bancos de dados e os tipos de usuários que intera-</p><p>gem com esses sistemas. Teremos também uma breve explanação sobre o conceito de</p><p>transações, que é uma ferramenta essencial no desenvolvimento de aplicações mais tra-</p><p>dicionais como aquelas que envolvem dados financeiros. Como leitura complementar,</p><p>temos um texto de Cezar Taurion (Evangelista Técnico da IBM) falando sobre Big Data.</p><p>Afinal, é importante darmos um passo no presente, mas sempre com um olho no futuro.</p><p>Essa será a tônica das nossas leituras complementares e sugestões de vídeos: apresen-</p><p>tar-lhe sempre os conceitos de vanguarda que já são aplicados em muitos casos de uso</p><p>em aplicações modernas.</p><p>A unidade II apresentará a terminologia e outros conceitos básicos que serão utiliza-</p><p>dos no restante deste material, descrevendo o modelo relacional de banco de dados</p><p>propriamente dito que será abordado na unidade V. A partir desse ponto, você estará</p><p>apto(a) a identificar as características de modelos relacionais e passar a construir seus</p><p>próprios modelos de dados baseado(a) nos fundamentos apresentados. Na modelagem</p><p>relacional, você identificará entidades do seu domínio de negócios, suas restrições</p><p>e os relacionamentos entre as diversas entidades modeladas.</p><p>Nas unidades III e IV, aprenderemos a linguagem SQL (Structured Query Language),</p><p>que é uma ferramenta dominada por 10 em cada 10 desenvolvedores de software</p><p>que utilizam sistemas de banco de dados. De conceito simples, acreditamos que</p><p>não será um problema para você, futuro(a) desenvolvedor(a) de software. Mas con-</p><p>vém ressaltar que SQL possui uma natureza declarativa, que é diferente das lingua-</p><p>gens imperativas, como Java, C ou Pascal. Após sua criação, a SQL tornou-se um</p><p>padrão de facto para manipular informações em sistemas de banco de dados por</p><p>meio de seus comandos para inserção, atualização, remoção e consulta de instân-</p><p>cias de dados. Na unidade V, você terá um estudo de caso completo que o(a) ajudará</p><p>na compreensão de todo o conteúdo estudado.</p><p>E, antes que você possa apreciar o conteúdo do material, permita-nos apresentar</p><p>nosso ponto de vista para reflexão: em muitas empresas, o sistema de banco de</p><p>dados tornou-se o repositório “sagrado” das informações, trancado a sete chaves</p><p>e reservado ao guardião denominado de DBA (DataBase Administrator). Aliás, é</p><p>bastante comum que os alunos aprendam ou venham a concluir que o banco de</p><p>dados é o coração de um sistema de informação – baseados nessas falsas impres-</p><p>sões transmitidas, até certo ponto, em grande quantidade. Para nós e também para</p><p>muitos autores renomados do mundo do software, o banco de dados é apenas uma</p><p>ferramenta utilizada na construção de nossos sistemas de informação. E, como toda</p><p>e qualquer ferramenta, não pode ficar acima do próprio código que atende ao pro-</p><p>cesso de negócios da empresa. Isso diminui sua importância? Certamente que não!</p><p>Porém, quando você modelar seu sistema de informação, pense primeiro no seu</p><p>modelo de negócios e postergue até o último momento a sua visão sobre o banco</p><p>de dados. Tenho certeza de que isso tornará a sua aplicação muito melhor projetada</p><p>e permitirá que ela ofereça um retorno muito melhor ao seu negócio.</p><p>O banco de dados é só um detalhe, um detalhe importante, mas o considere um</p><p>detalhe. O coração da sua aplicação é o código bem feito que você elaborará para</p><p>atender ao seu negócio. Pense nisso e, a cada batida desse coração, você poderá</p><p>usufruir de muito retorno (e muito dinheiro, espero).</p><p>Um bom proveito e uma ótima leitura!</p><p>Prof. Me. Edson Yanaga</p><p>Prof. Esp. Victor de Marqui Pedroso</p><p>APRESENTAÇÃO</p><p>SUMÁRIO</p><p>09</p><p>UNIDADE I</p><p>CONCEITOS DE BANCOS</p><p>DE DADOS</p><p>15 Introdução</p><p>21 Características de Sistemas de Bancos de Dados</p><p>27 Transações</p><p>31 Vantagens de se Utilizar um SGBD</p><p>39 Considerações Finais</p><p>UNIDADE II</p><p>MODELO RELACIONAL</p><p>45 Introdução</p><p>46 O Modelo Relacional</p><p>48 Introdução à Modelagem</p><p>53 Atributos</p><p>54 Tipos de Atributos</p><p>58 Domínio</p><p>59 Chave Estrangeira (Foreign Key)</p><p>60 Relacionamentos</p><p>63 Cardinalidade</p><p>67 Considerações Finais</p><p>SUMÁRIO</p><p>UNIDADE III</p><p>SQL BÁSICO</p><p>73 Introdução</p><p>75 Definições de Dados e Tipos em SQL</p><p>79 Restrições</p><p>81 Consultas Básicas em SQL</p><p>87 Comandos de Modificação de Dados em SQL</p><p>96 Considerações Finais</p><p>UNIDADE IV</p><p>MAIS SQL</p><p>101 Introdução</p><p>102 Consultas Envolvendo NULL</p><p>103 Consultas Aninhadas (Subqueries)</p><p>107 Consultas Utilizando Joins</p><p>112 Comandos de Alteração de Schema</p><p>124 Considerações Finais</p><p>SUMÁRIO</p><p>11</p><p>UNIDADE V</p><p>ESTUDO DE CASO</p><p>129 Introdução</p><p>134 Descrevendo o Estudo de Caso</p><p>135 Criando as Entidades e os Relacionamentos (DER)</p><p>143 Trabalhando com SQL</p><p>162 Considerações Finais</p><p>169 CONCLUSÃO</p><p>172 GABARITO</p><p>U</p><p>N</p><p>ID</p><p>A</p><p>D</p><p>E I</p><p>Professor Me. Edson Yanaga</p><p>CONCEITOS DE BANCOS</p><p>DE DADOS</p><p>Objetivos de Aprendizagem</p><p>■ Apresentar os conceitos fundamentais envolvendo dados e bancos</p><p>de dados em sistemas computacionais.</p><p>■ Descrever as formas de interação dos usuários com os bancos de</p><p>dados.</p><p>■ Comparar as vantagens dessa abordagem em relação a outras</p><p>similares.</p><p>Plano de Estudo</p><p>A seguir, apresentam-se os tópicos que você estudará nesta unidade:</p><p>■ Características de Sistemas de Bancos de Dados</p><p>■ Transações</p><p>■ Vantagens de se utilizar um SGBD</p><p>INTRODUÇÃO</p><p>“Scientia potentia est”: “Conhecimento é poder”.</p><p>Sim, caro(a) leitor(a), conhecimento é poder. Informação é poder. Na sociedade</p><p>do século XXI, temos informação em abundância e chamamos as informações</p><p>armazenadas em sistemas computacionais de dados. O desafio crescente dos pró-</p><p>ximos anos é encontrar formas eficientes de processar os dados que já temos e</p><p>ainda criar para gerar conhecimento e, consequentemente, riqueza.</p><p>Nas últimas décadas, boa parte do software desenvolvido envolve mais do</p><p>que processamento de informações. As informações de entrada e de saída do</p><p>software (além de outras metainformações intermediárias) devem ser armaze-</p><p>nadas em um mecanismo confiável e que possibilite o acesso simples e rápido à</p><p>leitura e escrita dessas informações.</p><p>Há alguns anos, escrever sobre o tema “banco de dados” seria uma tarefa</p><p>relativamente tranquila, pois muitos acreditavam tratar-se de um assunto abso-</p><p>lutamente consolidado. Mas o nosso mundo está em constante mudança e os</p><p>modelos de negócios que surgiram recentemente provocaram uma ruptura na</p><p>forma de se pensar o armazenamento de informações em bancos de dados.</p><p>Mas de onde vem esse termo, que conhecemos como “banco de dados”?</p><p>Pois, em inglês, o termo refere-se a databases, que em uma tradução literal defi-</p><p>niríamos como “base de dados”. Um bom palpite quanto a isso, remete a uma</p><p>visão generalizada de que as instituições denominadas de “bancos”, guardam de</p><p>modo bastante seguro o nosso dinheiro. Os “bancos de dados” seriam, então,</p><p>ferramentas que guardariam nossas informações (dados) de modo também</p><p>supostamente seguro e confiável.</p><p>Outra confusão bastante comum e plenamente justificada refere-se à dife-</p><p>rença entre os termos “banco de dados” e os sistemas que o gerenciam. Segue</p><p>uma definição, segundo Navathe (2011, p. 3):</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>15</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal</p><p>grupos cujo sobrenome seja igual. Ao aplicarmos a função COUNT(*), ao invés</p><p>dela contar todas as tuplas da tabela, ela conta somente as tuplas de cada grupo.</p><p>O resultado é uma lista que contém os sobrenomes e as quantidades de conta-</p><p>tos com cada sobrenome.</p><p>Exemplo 12: Selecione o sobrenome e a quantidade de contatos que pos-</p><p>suem o mesmo sobrenome, desde que haja pelo menos dois contatos com o</p><p>mesmo sobrenome.</p><p>SELECT sobrenome, COUNT(*)</p><p>FROM contato</p><p>GROUP by sobrenome</p><p>HAVING COUNT(*) > 1;</p><p>Em algumas situações, desejamos agrupar as tuplas em grupos, mas queremos</p><p>selecionar apenas alguns desses grupos no resultado – e não todos. A cláu-</p><p>sula que permite filtrar quais grupos serão exibidos no resultado é a HAVING.</p><p>Somente grupos que satisfaçam a condição imposta pelo HAVING são selecio-</p><p>nados no resultado.</p><p>É importante salientar a diferença entre as cláusulas WHERE e HAVING,</p><p>pois aparentemente ambas filtram os resultados da consulta. A cláusula WHERE</p><p>filtra as tuplas avaliadas primeiramente. Portanto a cláusula WHERE é avaliada</p><p>antes de qualquer função de agregação ou qualquer agrupamento ser avaliado.</p><p>Já a cláusula HAVING é avaliada somente depois que os grupos já foram forma-</p><p>dos e serve, então, para filtrar esses grupos do resultado final.</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E112</p><p>COMANDOS DE ALTERAÇÃO DE SCHEMA</p><p>Nós definimos como schema evolution o processo de alterações da estrutura do</p><p>schema. Normalmente essas alterações de estrutura não são frequentes e são</p><p>motivadas por alterações dos requisitos do negócio e, consequentemente, tam-</p><p>bém da aplicação.</p><p>Os comandos em SQL que podem alterar as definições de schema são os</p><p>comandos para adicionar, modificar e remover schemas, tabelas, atributos e res-</p><p>trições. Vamos abordá-los nos exemplos seguintes.</p><p>Exemplo 13: Remova o schema agenda do banco de dados.</p><p>DROP SCHEMA agenda;</p><p>Esse comando remove o schema e, por consequência, todas as tabelas dentro do</p><p>schema. Há certa controvérsia nesse comando. Alguns SGBDs removem todas</p><p>as tabelas do schema ao remover o próprio schema. Outros só permitem a remo-</p><p>ção do schema se ele não contiver nenhuma tabela, sendo necessário remover</p><p>todas as tabelas antecipadamente.</p><p>Exemplo 14: Remova a tabela telefone do schema.</p><p>DROP TABLE telefone;</p><p>Nesse exemplo, a tabela telefone seria removida do schema. É importante notar</p><p>que a tabela sendo removida do schema pode conter dependências de integri-</p><p>dade referencial e chave estrangeira em outras tabelas. Nesse caso, se alguma</p><p>outra tabela depender da tabela removida, esse comando irá falhar devido à res-</p><p>trição de integridade referencial do banco, sendo necessário primeiro remover</p><p>à integridade referencial.</p><p>Comandos de Alteração de Schema</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>113</p><p>Exemplo 15: Adicione uma coluna apelido na tabela contato contendo 15</p><p>caracteres.</p><p>ALTER TABLE contato ADD COLUMN apelido VARCHAR(15);</p><p>Esse exemplo adiciona uma coluna denominada ‘apelido’ no final da definição</p><p>da tabela contato com o tipo definido de VARCHAR(15). Quando um valor</p><p>DEFAULT não é especificado no ALTER TABLE, todas as tuplas existentes na</p><p>tabela recebem um valor NULL na coluna adicionada.</p><p>Exemplo 16: Adicione uma coluna apelido na tabela contato contendo 15</p><p>caracteres e com valor padrão de ‘Senhor’.</p><p>ALTER TABLE contato ADD COLUMN apelido VARCHAR(15) DEFAULT ‘Senhor’;</p><p>O Exemplo 16 é a mesma situação do Exemplo 15, apenas definindo um valor</p><p>padrão para a coluna que está sendo adicionada.</p><p>Exemplo 17: Altere o tamanho da coluna apelido para 25 caracteres.</p><p>ALTER TABLE contato ALTER COLUMN apelido VARCHAR(25);</p><p>A definição da coluna apelido da tabela contato foi modificada e o seu tipo de</p><p>dados agora define a capacidade de 25 caracteres.</p><p>Exemplo 18: Remova a coluna apelido da tabela contato.</p><p>ALTER TABLE contato DROP COLUMN apelido;</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E114</p><p>A coluna apelido é removida da tabela contato desde que não haja nenhuma res-</p><p>trição de integridade referencial nessa coluna.</p><p>Exemplo 19: Supondo que ainda não houvesse uma integridade referencial</p><p>entre a tabela telefone e a tabela contato, adicione-a.</p><p>ALTER TABLE telefone ADD FOREIGN KEY (contato_fk) REFERENCES</p><p>contato(id);</p><p>Esse comando adiciona a restrição de integridade referecial entre a tabela tele-</p><p>fone e a tabela contato.</p><p>Também é possível remover as restrições de integridade referencial por meio</p><p>do comando ALTER TABLE <tabela> DROP FOREIGN KEY <nome>, mas,</p><p>para tanto, é necessário saber o nome da restrição no banco de dados. Como os</p><p>comandos para exibição das restrições das tabelas variam muito, de um produto</p><p>para outro, deixaremos essa solução como uma sugestão de estudo para você.</p><p>Entrevista com Fernando de la Riva, sócio-diretor da Concrete Solutions, falando das perspectivas</p><p>para o mercado em 2012, incluindo Cloud Computing e NoSQL.</p><p>Disponível em: <http://youtu.be/S2iQ2RKMw-w>. Acesso em: 8 jul. 2015.</p><p>115</p><p>NOSQL, SEM PROBLEMAS</p><p>Uma introdução a banco de dados NoSQL</p><p>Desvendar o NoSQL e tentar explicar o que é e por que você deveria se interessar ou</p><p>não é uma tarefa difícil. Este artigo tenta dar uma introdução de alto nível ao NoSQL e</p><p>fornece uma comparação das últimas tecnologias disponíveis dessa área.</p><p>Introdução</p><p>Desvendar o NoSQL e tentar explicar o que é e por que você deveria se interessar ou não</p><p>é uma tarefa difícil. O termo cobre uma grande variedade de tecnologias, arquitetura de</p><p>dados e prioridades; ele representa tanto um movimento quanto a uma escola de pen-</p><p>samento ou uma tecnologia particular. Mesmo o nome é confuso, pois, para alguns, isso</p><p>representa qualquer mecanismo de armazenamento de dados que não utilize SQL, mas</p><p>até agora a indústria parece ter estabelecido como “Not Only SQL” (não somente SQL). À</p><p>medida que o tempo passe, é provável que o termo cresça até o momento em que perca</p><p>o sentido e subdivisões tornem-se necessárias para clarificar o significado do termo.</p><p>O que é NoSQL?</p><p>O movimento NoSQL é um pedaço de um marketing de guerrilha que traz um grande</p><p>grupo de tecnólogos e tecnologias sob a mesma bandeira. As ideias que baseiam a infi-</p><p>nidade de solução que existe sob o termo “NoSQL” antes estavam somente disponíveis</p><p>para aqueles cujas necessidades tornaram necessária uma implementação própria e es-</p><p>pecífica. Nas áreas em que essas soluções são uma necessidade, seu valor já foi provado,</p><p>e agora o uso dessas soluções passou a ser uma opção para outros com um custo de</p><p>investimento muito menor. Para qualquer organização que tenha que escolher entre</p><p>NoSQL e dados relacionais tradicionais, há a difícil questão de qual das duas utilizar.</p><p>Ainda é muito cedo para fornecer uma resposta decisiva e definitiva, mas está claro que</p><p>muitas organizações podem se beneficiar de um modelo de dados que se encaixe me-</p><p>lhor nos tipos de armazenamento e consulta que eles executam na prática do que na te-</p><p>oria. Também parece provável que a maioria das soluções consistirá de um híbrido misto</p><p>de tecnologias de armazenamento, assim como um misto de estruturas de N-camadas</p><p>e cliente-servidor tende a ser mais comum do que comprometimentos absolutos com</p><p>uma única estratégia.</p><p>Líderes técnicos têm um papel importante na compreensão das opções disponíveis e na</p><p>adaptação do software, produtos e serviços que mais se aplicam ao seu domínio de ne-</p><p>gócios. Possuir uma estratégia lógica e localizada para a adoção do que o NoSQL oferece</p><p>de melhor será o fator que diferenciará o sucesso do fracasso em sua adoção.</p><p>Assim como o NoSQL apresenta novos desafios, ele também oferece recompensas sig-</p><p>nificativas àqueles que o incorporam com sucesso no seu portfólio de solução. Os prin-</p><p>cipais benefícios virão da maior compreensão sobre os dados, escalonamento flexível e</p><p>produtividade.</p><p>A rica variedade de novos modelos de negócios possuem requisitos de</p><p>armazenamento que são suportados pelo NoSQL e as décadas de coerção de dados em</p><p>modelos relacionais ficaram para trás.</p><p>NoSQL é uma área grande e em expansão. Para os propósitos deste artigo, as caracterís-</p><p>ticas mais comuns de banco de dados NoSQL são:</p><p>1. Facilidade de uso em clusters com balanceamento de carga tradicionais.</p><p>2. Dados persistentes (não somente cachês).</p><p>3. Escalabilidade na memória disponível.</p><p>4. Não possuem schemas fixos e permitem a migração de schemas sem indispo-</p><p>nibilidade.</p><p>5. Possui sistemas de consulta individuais ao invés de uma linguagem de consulta</p><p>padrão.</p><p>6. São ACID dentro de um nó no cluster e eventualmente consistentes dentro do</p><p>cluster.</p><p>Nem todos os produtos deste artigo possuem todas essas propriedades, mas a maioria</p><p>dos bancos de dados que discutiremos suporta boa parte dessas características.</p><p>O que está acontecendo agora?</p><p>Movimentos em tecnologia ou em correntes de pensamento raramente acontecem de</p><p>modo totalmente espontâneo. Existem três principais motivações por trás do elevado</p><p>interesse em NoSQL. Primeiro foi o surgimento de uma nova forma de perfil de tráfego</p><p>provocada pelo que pode ser chamado de Web 2.0 ou de Web Social, assim como a</p><p>Internet de varejo.</p><p>“Web Scale”, como é comumente referido, é o problema de capacidade de planejamen-</p><p>to, escala e provisionamento que tornou-se crítico para muitos negócios na Web nos úl-</p><p>timos cinco anos. À medida que o mundo torna-se mais conectado, é possível que sites</p><p>recebam variações enormes de tráfego. Algumas destas estão relacionadas a eventos</p><p>previsíveis: a Copa do Mundo ou o Natal; outros são imprevisíveis e globais, como, por</p><p>exemplo, o 11 de Setembro. Sites como o Facebook tornaram fácil a escalada de popula-</p><p>ridade de sites à medida que itens tornam-se virais e são distribuídos pelo mundo todo.</p><p>Conteúdos criados pelo usuário causam dores de cabeça particulares, pois os proble-</p><p>mas relacionados a websites com “leitura intensiva” já são solucionados com a utilização</p><p>de conteúdo estático e CDNs (Content Distribution Networks – Redes de Distribuição de</p><p>Conteúdo). Conteúdos criados pelo usuário significam que os sites tornam-se mais equi-</p><p>librados no quesito “leitura-escrita”. Sites como o Twitter recebem montanhas de tráfego</p><p>em intervalos muito curtos de tempo (um gol validado ou invalidado, a apuração de</p><p>117</p><p>uma votação ou o final de um seriado ou novela de TV), e sua infraestrutura deve se</p><p>adaptar rapidamente para não ficar indisponível na hora errada. A abordagem normal</p><p>para escalabilidade tem sido adicionar novos servidores web, que funciona até o ponto</p><p>em que o banco de dados (que historicamente tem sido um único grande servidor) tor-</p><p>na-se o gargalo. A resposta então é comprar progressivamente um hardware cada vez</p><p>mais poderoso até que o banco de dados possa servir todo o tráfego. A Web Scale invali-</p><p>da esse modelo quando você tem que enfrentar o dilema de comprar um hardware caro</p><p>para atender sua demanda de pico (Natal ou Copa do Mundo), mas que ficará quase que</p><p>totalmente ocioso no dia a dia. Para alguns empreendimentos, é simplesmente impos-</p><p>sível comprar o hardware e as licenças de software para atender à demanda de pico por</p><p>meio de um único servidor. Esses empreendimentos têm procurado uma solução de</p><p>dados escalável que possa espelhar a estrutura da própria Web.</p><p>A segunda motivação é o fato de que os dados mudam com o passar do tempo. Com</p><p>a evolução do modelo de negócios, os modelos de dados normalmente contorcem-se</p><p>para evoluir e manter o ritmo das mudanças. O resultado normalmente é uma estrutura</p><p>de dados repleta de linguagens arcaicas e remendadas com dados adaptados. Qualquer</p><p>um que já teve que explicar que o valor de uma coluna possui um significado diferente</p><p>dependendo de se o valor for menor ou maior que 10 ou que “padaria”, na verdade, sig-</p><p>nifica “armazém”, devido a um erro anterior, sabe que o peso do histórico no modelo de</p><p>dados pode ser um sério entrave na manutenção do sistema e na incorporação de novas</p><p>ideias de negócios.</p><p>A motivação final é que a tecnologia de NoSQL está começando a se tornar um</p><p>commodity. Amazon e Google não tiveram escolha no passado a não ser desenvolver</p><p>sua própria solução para resolver os problemas de escala. O custo de escrever tal so-</p><p>lução impediu muitas empresas que não tinham esses problemas no coração de seus</p><p>negócios de explorar essa nova tecnologia. Recentemente uma série de doações de có-</p><p>digo para entidades como a Apache Foundation ou outros grupos de open source que</p><p>fornecem desenvolvimento e suporte baseado em comunidades trouxe a possibilidade</p><p>de se utilizar código extremamente sofisticado com um baixo custo de manutenção.</p><p>Tais códigos colocam o NoSQL firmemente ao alcance de empresas menores. Ao invés</p><p>de ser um assunto esotérico, agora os bancos de dados NoSQL podem ser baixados e</p><p>integrados à arquitetura corporativa em questão de semanas.</p><p>Está sendo realmente utilizado?</p><p>Uma questão comum que se pergunta sobre o NoSQL é se ele realmente está sendo</p><p>utilizado ou se é somente uma moda. A resposta é que se você alguma vez já utilizou</p><p>serviços da Amazon, Yahoo ou Google então você teve os dados fornecidos por meio</p><p>de uma solução NoSQL. Se você já utilizou o eBay ou o Twitter, você indiretamente já</p><p>utilizou bancos de dados que possuem muito pouco em comum com bancos de dados</p><p>tradicionais (por exemplo, o eBay não utiliza transações e o Twitter utiliza um banco de</p><p>dados de grafos para saber quem segue quem).</p><p>Normalmente, a questão realmente significa se pessoas como eu estão realmente utili-</p><p>zando NoSQL. A resposta é que se você está enfrentando problemas lidando com certos</p><p>tipos de dados, então há um diferencial competitivo em potencial ao se avaliar uma so-</p><p>lução NoSQL. A área é nova o suficiente para que muitos negócios sintam-se desconfor-</p><p>táveis executando trabalho crítico em qualquer outro software que não seja um maduro</p><p>banco de dados relacional, mesmo que esses bancos de dados relacionais causem vários</p><p>problemas e tenham suas diversas limitações.</p><p>Por que você utilizaria um banco de dados NoSQL?</p><p>Uma das principais motivações é se você tiver problemas, em seu negócio, que são di-</p><p>fíceis de resolver utilizando a tecnologia de banco de dados relacional. Se você possui</p><p>um excelente modelo relacional com um banco de dados maduro que fornece todas as</p><p>funcionalidades que você precisa, então há pouca necessidade de se alterar seu meca-</p><p>nismo de armazenamento de dados.</p><p>A seguir, estão alguns casos de uso em que é ótimo utilizar um banco de dados relacional:</p><p>• Seu banco de dados relacional não escalará seu tráfego a um custo aceitável.</p><p>• Seus dados são fornecidos em pequenas mudanças ao longo do tempo, de modo</p><p>que o número de tabelas necessárias para manter a forma normal cresceu despro-</p><p>porcionalmente em relação aos dados sendo mantidos. Informalmente, se você não</p><p>consegue mais imprimir o seu DER em um papel A3, você deve ter alcançado esse</p><p>problema ou você está armazenando muita coisa em um único banco de dados.</p><p>• Seu modelo de negócios gera muitos dados temporários que não pertencem ao</p><p>banco de dados principal. Exemplos comuns incluem carrinhos de compras, critérios</p><p>de pesquisa salvos, personalização do site e questionários de usuário incompletos.</p><p>• Seu banco de dados relacional está desnormalizado por motivos de desempenho</p><p>ou por conveniência ao manipular dados na aplicação.</p><p>• Seus conjuntos de dados consistem em grandes quantidades de texto ou imagens</p><p>e as definições de coluna são simples LOBs (CLOB ou BLOB).</p><p>• Você tem que executar consultas em seus dados que não envolvem simples rela-</p><p>ções hierárquicas; exemplos comuns são questões de recomendações ou de business</p><p>intelligence que envolvem a ausência de dados.</p><p>• Você possui transações de dados que não precisam de muita durabilidade. Por</p><p>exemplo, o “curtir” de itens em websites: criar transações para esse tipo de interação</p><p>é um exagero, pois, se a ação</p><p>falhar, o usuário provavelmente irá repetir a ação até</p><p>que funcione. Websites com muito AJAX tendem a ter muitos desses casos de uso.</p><p>119</p><p>Maturidade da linguagem de consultas</p><p>Uma das queridinhas que corre o risco de ser deixada de lado é a SQL. O NoSQL escolheu</p><p>a SQL como o monstro a ser derrotado, mesmo que na realidade a SQL seja somente um</p><p>padrão muitas vezes deturpado por implementações customizadas. A SQL possui mui-</p><p>tas vantagens de que os produtos NoSQL terão que tratar ao longo do tempo. Primeira-</p><p>mente, ela é madura, refinada e geralmente atende às expectativas dos usuários. Possui</p><p>uma sintaxe coerente e rica em funcionalidades, o que significa que pessoas que produ-</p><p>zem consultas SQL complexas certamente reclamarão se tiverem que replicar operado-</p><p>res como SUM, ORDER BY e GROUP em uma tarefa do tipo map-reduce em JavaScript.</p><p>Mesmo os fornecedores reconhecem esse problema. Se eles não forem capazes de en-</p><p>contrar um conjunto comum de operações de manipulação de dados, então é provável</p><p>que outra implementação torne-se popular e seus usuários migrarão para esse outro</p><p>produto. Ou todos os fornecedores terão que implementar o mesmo conjunto de co-</p><p>mandos do líder de mercado para manterem-se competitivos.</p><p>Já há alguns padrões disponíveis como a SparQL, um padrão para fazer consultas em</p><p>RDF ou dados em tuplas. Este poderia ser adaptado para bancos de dados de documen-</p><p>tos e grafos, mas mesmo assim ainda não há nada que forneça um conjunto modular de</p><p>comandos de consulta que possa ser comparado à SQL.</p><p>É uma ironia que os produtos NoSQL mais complexos que os bancos de dados de cha-</p><p>ve-valor terão que implementar algo muito similiar à SQL se quiserem ter o mesmo nível</p><p>de utilização que os produtos de dados relacionais têm hoje. Em alguns casos, esse fato</p><p>se esconde por trás do slogan “Not Only SQL”, concordando que simplesmente jogar fora</p><p>a SQL seria doloroso demais.</p><p>Novas tecnologias, novos desafios</p><p>Na tentativa de incorporar o NoSQL em sistemas de larga escala existentes, vê-se que é</p><p>obviamente mais fácil se a sua aplicação possui um baixo acoplamento entre os com-</p><p>ponentes. Nessa situação, é mais fácil identificar áreas que se beneficiariam da solução</p><p>NoSQL e implementar essa integração aos poucos. Na situação em que o armazenamen-</p><p>to de dados é monolítico e que os sistemas dependem de certas propriedades do mo-</p><p>delo relacional – por exemplo, tipos de dados ou consistência transacional – o problema</p><p>é muito mais difícil. Em alguns casos, o desacoplamento dos dados é a primeira tarefa a</p><p>ser executada ao invés da migração do armazenamento dos dados.</p><p>Do ponto de vista da solução, há a necessidade de se analisar claramente quais dados</p><p>são relacionais e quais dados estão armazenados em bancos de dados relacionais por</p><p>falta de outra alternativa. Também é importante revisar decisões históricas e verificar</p><p>se foram feitas com restrições históricas em mente. Um exemplo particular é o uso de</p><p>bancos de dados de grafos ao invés de uma estrutura complexa de tabelas relacionais. É</p><p>perfeitamente possível criar conjuntos de relacionamentos N-N em dados relacionais e</p><p>consultar as intersecções desses relacionamentos, mas expressar somente os relaciona-</p><p>mentos em um banco de dados de grafos é uma solução muito mais simples.</p><p>Existem algumas áreas óbvias em que o NoSQL pode ser aplicado imediatamente. Con-</p><p>teúdo de websistes pode ser geralmente expresso em bancos de dados de documentos</p><p>ou de chave-valor. Exemplos particulares dessas situações são as metáforas de formu-</p><p>lários e de wizards de formulários. Qualquer formulário pode ser expresso diretamente</p><p>na forma de um documento. Dados de buscas são outro exemplo, pois muitos dados de</p><p>referência consistem em mapas, listas e conjuntos, referências, países, estados, cidades</p><p>etc. Analisando esses padrões nos dados, devem surgir novas oportunidades de uso do</p><p>NoSQL.</p><p>Analisando de um modo mais estratégico, sistemas que precisam evoluir e mudar seus</p><p>dados com frequência possuem uma boa chance de utilizar um banco de dados sem</p><p>schema. Se a migração de estruturas de dados sem indisponibilidade for um diferencial</p><p>competitivo, então este é um forte indicador de que o uso de uma solução NoSQL seria</p><p>valioso.</p><p>Tipos de bancos de dados NoSQL</p><p>Abaixo há a descrição dos diferentes tipos de bancos de dados NoSQL.</p><p>Bancos de dados chave-valor</p><p>Exemplos: Tokyo Cabinet/Tyrant, Redis, Voldemort e Oracle BDB.</p><p>Aplicações Típicas: Cachê de conteúdo.</p><p>Pontos Fortes: Acesso rápido.</p><p>Pontos Fracos: Os dados armazenados não têm schema.</p><p>Aplicação de exemplo: você está escrevendo um software de fórum em que a página</p><p>do perfil fornece as estatísticas do usuário (mensagens postadas etc.) e as últimas dez</p><p>mensagens escritas por ele. A página lê esses dados baseada em uma chave que é o id</p><p>do usuário e recupera uma String JSON que representa todas essas informações. Um</p><p>processo em background recalcula essa informação a cada 15 minutos e grava no banco</p><p>de dados de modo independente.</p><p>Banco de dados de documentos</p><p>Exemplos: CouchDB e MongoDB.</p><p>Aplicações Típicas: Aplicações Web.</p><p>121</p><p>Pontos Fortes: Tolerância com dados incompletos.</p><p>Pontos Fracos: Desempenho em consultas, não há uma sintaxe de consulta padrão.</p><p>Aplicação de exemplo: você está criando um software que cria perfis de crianças re-</p><p>fugiadas com o propósito de reuni-las novamente com suas famílias. Os detalhes que</p><p>você precisa gravar de cada criança podem variar muito de acordo com as circunstân-</p><p>cias do evento e elas são construídas aos poucos. Por exemplo, uma criança pequena</p><p>pode saber o seu primeiro nome e você pode tirar uma foto dela, mas pode não saber</p><p>os nomes de seus pais. Mais tarde um conhecido pode reconhecer a criança e fornecer</p><p>informações adicionais que você pode querer gravar, mas, até conseguir confirmar, você</p><p>terá que tratar dessas informações com ceticismo.</p><p>Banco de dados de grafos</p><p>Exemplos: Neo4J, InfoGrid e Infinite Graph.</p><p>Aplicações Típicas: Redes sociais.</p><p>Pontos Fortes: Algoritmos de grafos, por exemplo: caminho mais curto, conectividade,</p><p>graus de relacionamento etc.</p><p>Pontos Fracos: Tem que percorrer todo o grafo de modo a encontrar uma resposta. Não</p><p>é simples de clusterizar.</p><p>Aplicação de exemplo: qualquer aplicação que requeira conectividade social é uma can-</p><p>didata a um banco de dados de grafos. Esse mesmo princípio pode ser estendido a qual-</p><p>quer aplicação em que você precisa saber o que as pessoas estão fazendo, comprando</p><p>ou curtindo de modo a recomendar ações futuras. Em qualquer momento, você pode</p><p>responder a questões como “Quais restaurantes receberam votos negativos das irmãs</p><p>de pessoas com mais de 40 que gostam de esquiar e que visitaram o Quênia?”.</p><p>Bancos de dados de XML</p><p>Exemplos: Exist, Oracle, MarkLogic.</p><p>Aplicações Típicas: Publicação.</p><p>Pontos Fortes: Tecnologias de busca maduras e validação de schema XML.</p><p>Pontos Fracos: Não é uma solução binária pura, é mais fácil reescrever um documento</p><p>do que atualizá-lo.</p><p>Aplicação de exemplo: uma editora que utiliza formatos XML para produzir versões web,</p><p>impressa e eBook de seus artigos. Os editores precisam fazer buscas rápidas tanto no</p><p>texto quanto em seções semânticas do XML. Eles armazenam o XML dos artigos finali-</p><p>zados no banco de dados XML e os encapsulam em web services para os sistemas de</p><p>produção de documentos. Quando mudanças são necessárias, atualizações utilizando</p><p>XQuery modificam todos os documentos XML para o novo formato.</p><p>Bancos de dados ponto a ponto distribuídos</p><p>Exemplos: Cassandra, HBase e Riak.</p><p>Aplicações Típicas: Sistemas de arquivo distribuídos.</p><p>Pontos Fortes: Buscas rápidas e boa distribuição do armazenamento dos dados.</p><p>Pontos Fracos: API de baixo nível.</p><p>Aplicação de exemplo: você possui um site de notícias em que qualquer tipo de con-</p><p>teúdo (artigos, comentários, perfis de autores etc.) pode ser votado e pode ter um co-</p><p>mentário opcional no voto. Você pode criar uma base por usuário e uma base por tipo</p><p>de conteúdo utilizando um UUID como chave (gerado a</p><p>partir de cada tipo de conteúdo</p><p>e usuário). O “bucket” do usuário mantém cada voto dele, enquanto que o “bucket” do</p><p>conteúdo contém uma cópia de cada voto que já foi feito para aquele conteúdo. Duran-</p><p>te a noite, um processo batch identifica em quais conteúdos os usuários votaram e você</p><p>gera uma lista de conteúdo que possui muitos votos para cada usuário, mas que os usu-</p><p>ários ainda não votaram. Essa lista é uma lista de artigos recomendados para o usuário e</p><p>fica armazenada no “bucket” de recomendações.</p><p>Banco de dados de objetos</p><p>Exemplos: Oracle Coherence, db4o, ObjectStore, GemStone e Polar.</p><p>Aplicações Típicas: Sistemas financeiros.</p><p>Pontos Fortes: Reflete o paradigma de desenvolvimento orientado a objetos, baixa la-</p><p>tência ACID e tecnologia madura.</p><p>Pontos Fracos: Consultas limitadas ou operações de múltiplas atualizações.</p><p>Aplicação de exemplo: uma empresa de comércio internacional quer fazer transações a</p><p>partir do Japão e Nova York e verificá-las por meio de um processo de análise de risco</p><p>em Londres. Um objeto representando a transação é gravado no banco de dados de</p><p>objetos e o analisador de riscos está aguardando pelas notificações de objetos de tran-</p><p>sações. Quando um objeto é replicado no datacenter europeu, o analisador de riscos lê</p><p>a transação e verifica o risco da mesma. Ele então reescreve o objeto para informar que</p><p>a transação foi autorizada e gera uma venda. O cliente está aguardando por mudanças</p><p>nos objetos e recebe uma notificação de que a sua transação foi aprovada.</p><p>123</p><p>Conclusão</p><p>Dados tabulares permanecem tabulares e a planilha de cálculo ainda é a ferramenta de</p><p>modelagem de dados favorita no mundo dos negócios. SQL não vai morrer tão cedo.</p><p>Entretanto, até agora nós temos criado sistemas baseados nas restrições de um típico</p><p>banco de dados relacional. O NoSQL oferece a chance de se pensar de um modo diferen-</p><p>te sobre os dados e é uma possibilidade extremamente excitante.</p><p>Fonte: adaptado de Rees (2010, online).</p><p>MAIS SQL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IVU N I D A D E124</p><p>CONSIDERAÇÕES FINAIS</p><p>Finalmente, chegamos ao fim de nossa unidade. Nesse ponto, você provavel-</p><p>mente já terá assimilado conteúdo suficiente para poder desenvolver algumas</p><p>aplicações utilizando sistemas de bancos de dados.</p><p>Como descrevemos no início da unidade, é bastante provável que você se</p><p>depare, em sua vida profissional, com consultas um tanto quanto complexas.</p><p>Lembre-se de que todo problema pode ser decomposto em partes menores</p><p>de fácil solução. Utilize essa técnica e aplique os conceitos assimilados com os</p><p>exemplos apresentados nesta unidade para resolvê-los. A teoria é importantís-</p><p>sima, mas a prática é uma atividade fundamental para que você possa converter</p><p>toda essa teoria aprendida em resultados – tanto pessoais quanto profissionais.</p><p>A prática das atividades de autoestudo pode auxiliá-lo(a) na trabalhosa tarefa</p><p>de assimilação dos conceitos apresentados nesta unidade. Analise-as com cari-</p><p>nho e tenha um bom proveito.</p><p>125</p><p>Todas as atividades de autoestudo desta unidade baseiam-se na figura abaixo.</p><p>bene�ciário</p><p>dependente</p><p>plano</p><p>id nome sobrenome</p><p>id nome sobrenome bene�ciário_fk</p><p>id nome valor</p><p>altura plano_fk</p><p>1. Considere o exemplo de schema da figura apresentada. Crie os comandos</p><p>SQL para definição e criação das tabelas.</p><p>2. Elabore consultas SQL para:</p><p>a. Selecione todos os beneficiários que possuem dependentes com o mesmo</p><p>nome utilizando uma condição de JOIN.</p><p>b. Execute a mesma consulta anterior utilizando uma subquery.</p><p>c. Execute a mesma consulta anterior utilizando uma cláusula EXISTS.</p><p>d. Selecione o beneficiário que contém dependente que possui a maior</p><p>altura entre todos.</p><p>3. Utilizando a cláusula de GROUP BY, elabore consultas para:</p><p>a. Agrupe os beneficiários por nome e selecione o sobrenome e a altura de</p><p>cada um deles.</p><p>b. Selecione todos os beneficiários que contêm mais de um dependente com</p><p>o mesmo sobrenome.</p><p>c. Selecione todos os planos que contêm mais de um beneficiário com altura</p><p>> 1.75.</p><p>U</p><p>N</p><p>ID</p><p>A</p><p>D</p><p>E V</p><p>Professor Esp. Victor de Marqui Pedroso</p><p>ESTUDO DE CASO</p><p>Objetivos de Aprendizagem</p><p>■ Demonstrar ao aluno a prática na criação de um Banco de dados.</p><p>Plano de Estudo</p><p>A seguir, apresentam-se os tópicos que você estudará nesta unidade:</p><p>■ Descrevendo o Estudo de Caso</p><p>■ Criando as Entidades e os Relacionamentos (DER)</p><p>■ Trabalhando com SQL</p><p>INTRODUÇÃO</p><p>Caro(a) aluno(a), até o momento estudamos os conceitos de Bancos de dados,</p><p>englobando alguns assuntos como: SGDBS (Sistemas Gerenciadores de Banco</p><p>de Dados), em que vimos os tipos existentes e como funcionam; vimos também</p><p>a Teoria Relacional, em que englobamos toda análise de como iniciar a criação</p><p>de um banco de dados e seus respectivos relacionamentos; aprendemos tam-</p><p>bém a respeito de SQL (Structured Query Language) tanto os tipos DML (Data</p><p>Manipulation Language) como DDL (Data Definition Language), sendo esses</p><p>conceitos imprescindíveis para a implementação prática de Bancos de dados</p><p>Relacionais.</p><p>Em nossa disciplina de Banco de Dados, saber a respeito dos conceitos é</p><p>muito importante, porém, para uma melhor aplicabilidade da disciplina, temos</p><p>que fazer que essa teoria estudada seja concretizada e a melhor maneira de fazer</p><p>isso é realizando as atividades de maneira prática.</p><p>Nesta unidade, teremos como objetivo principal o estudo e a demonstração</p><p>prática de tudo que fora aprendido nas unidades anteriores. Espero que você</p><p>tenha esta unidade como um auxiliador no processo de criação de um projeto</p><p>de banco de dados, podendo realizar consultas constantes.</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>129</p><p>9 ÁREAS DA TECNOLOGIA COM CARREIRAS PROMISSORAS (E COMO</p><p>APROVEITÁ-LAS)</p><p>Trabalhar com tecnologia vai muito além do que estamos acostumados a imaginar. Não</p><p>são somente as empresas que trabalham com esse segmento do mercado que preci-</p><p>sam dela e por isso é importante saber que excelentes vagas podem estar onde menos</p><p>imaginamos. Por exemplo: grandes instituições bancárias precisam de especialistas em</p><p>construção de sistemas digitais e segurança avançada e isso exige profissionais qualifi-</p><p>cados.</p><p>Mas não são apenas os bancos que precisam desses trabalhadores, praticamente qual-</p><p>quer empresa que trabalha com informações e isso também cria um mercado em ascen-</p><p>são. Quer saber quais outras habilidades podem fazer sua carreira decolar? Então confira</p><p>agora mesmo a seleção que trouxemos com os principais segmentos da tecnologia para</p><p>quem quer ter bons salários.</p><p>1. Programação ainda em alta</p><p>Assim como aconteceu no ano anterior, em 2014 grande parte das empresas de tec-</p><p>nologia disseram que estão em busca de bons programadores e desenvolvedores de</p><p>aplicações. De acordo com pesquisas realizadas nos Estados Unidos, 48% das empresas</p><p>ligadas a esse mercado planejam abrir novas vagas em 2015, sendo que nem todas elas</p><p>serão preenchidas tão rapidamente.</p><p>Diversas empresas enfrentam dificuldades para encontrar colaboradores com as habili-</p><p>dades desejadas para certos projetos. Segundo o VentureBeat, uma das linguagens que</p><p>mais vem sendo procurada atualmente é a R (uma linguagem voltada para objetos). Há</p><p>cargos desse tipo que ultrapassam a faixa dos R$ 350 mil anuais, sendo que pessoas com</p><p>mais experiência em gerenciamento podem ir ainda além.</p><p>2. Gerenciamento de banco de dados</p><p>O termo RDBMS significa “Relational Database Management System” (Sistema de Geren-</p><p>ciamento de Bancos de Dados Relacionados). O trabalhador é mais conhecido em todo</p><p>o mundo pela redução ao “Database”, que exige amplos conhecimentos em sistemas</p><p>de bancos de dados — como Oracle, Microsoft SQL Server ou IBM DB2. Há mais de mil</p><p>vagas desse tipo nos EUA e a média salarial é de US$ 365 mil ao ano.</p><p>Administrar bancos de dados não é uma tarefa fácil, mas rentável. Mais de 25% das com-</p><p>panhias de tecnologia dos Estados Unidos</p><p>estão em busca de gerentes para database.</p><p>Mais do que isso, no ano passado, um estudo da Robert Half Technology apontava para</p><p>um número bem impressionante: 52% dos executivos de TI dizem que conhecimentos</p><p>no assunto são vitais para os melhores empregos.</p><p>131</p><p>3. Gerenciamento de projetos</p><p>Um bom gerente de projetos precisa ter conhecimentos amplos no mercado de negó-</p><p>cios e de tecnologia. Essa exigência acaba excluindo muitos concorrentes das melhores</p><p>vagas, pois é difícil encontrar quem tenha experiência nesse quesito. Alguns executivos</p><p>afirmam que compreendem o aumento da demanda por causa de necessidades cada</p><p>vez mais específicas.</p><p>Há empresas que precisam de gerentes de projetos com metodologias Agile e outras</p><p>com Waterfall. É quase impossível encontrar quem domine perfeitamente os dois con-</p><p>ceitos e ainda consiga aplicar isso ao mundo Tech. Não é à toa que bons trabalhadores</p><p>nessa área conseguem ganhar mais de R$ 300 mil por ano — sem contar os grandes</p><p>ganhos em consultoria.</p><p>4. Suporte técnico de novas ferramentas</p><p>Colaboradores para suporte técnico já foram mais requisitados, mas ainda fazem parte</p><p>de um grande volume de vagas de emprego em todo o mundo. Mas é preciso ter em</p><p>mente que isso não significa apenas trabalhar com assistência para resolver problemas</p><p>genéricos de máquinas e periféricos. O mercado de suporte vai muito além do que esta-</p><p>mos acostumados a imaginar. Em resumo: é preciso renovação.</p><p>Como já dissemos, o mercado de tecnologia está cada vez mais fragmentado — em</p><p>questão de linguagens, métodos e mesmo hardware. Com isso, torna-se mais necessária</p><p>a especialização em determinados campos, uma vez que grandes empresas trabalham</p><p>cada vez com mais tipos de equipamentos. Por essa razão, ter capacidades de suporte</p><p>para novas ferramentas pode ser um grande diferencial no mercado.</p><p>5. Governança de segurança</p><p>Com sistemas baseados em computadores e grandes volumes de dados circulando a</p><p>todo instante, não há como imaginar uma empresa que não invista em segurança digi-</p><p>tal. A quantidade de dinheiro que pode ser perdida em vazamentos e invasões faz valer</p><p>a injeção de dinheiro e grandes empresas têm sido prova disso. Como o Computer World</p><p>lembra, a HMS dos EUA triplicou a equipe de segurança digital nos últimos cinco anos.</p><p>Mais do que apenas localizar bugs e neutralizar ameaças, há também uma exigência</p><p>cada vez maior por pessoas que saibam lidar com as situações de crise. A mesma HMS</p><p>afirma que sempre está em busca de especialistas que sejam capazes de gerenciar as</p><p>situações de incidentes, pois esse é um grande diferencial atualmente. Ou seja, bons</p><p>trabalhadores na área de segurança não ficarão desempregados.</p><p>6. Desenvolvimento para a Web</p><p>Muitos desenvolvedores conseguiram crescer no mercado offline, mas em relação ao</p><p>desenvolvimento web, os números ainda são menos impressionantes. Existe uma gran-</p><p>de demanda por pessoas com habilidades em diversos tipos de aplicação e isso reflete</p><p>no aumento das ofertas salariais. Como mostra o VentureBeat, isso também anda junto</p><p>com a Computação em Nuvens.</p><p>Muitas das empresas que vendem tecnologia nos Estados Unidos estão investindo pe-</p><p>sado em plataformas PaaS (Plataforma como um Serviço, em português). Trata-se de um</p><p>sistema de computação em nuvens, que leva os desenvolvedores a programarem dire-</p><p>tamente na nuvem, sendo que ele fica disponível no mesmo local. Há empregos nessa</p><p>área nos EUA que pagam mais de R$ 400 mil ao ano.</p><p>7. Mobile: crescimento constante</p><p>Como você já sabe, os portáteis fazem cada dia mais parte da vida dos consumidores e</p><p>aos poucos eles vão tomando o lugar dos computadores em nível de importância. Logo,</p><p>as empresas de tecnologia também estão se adaptando a essas novas demandas e já</p><p>buscam desenvolvedores e especialistas em segurança que consigam criar bons siste-</p><p>mas voltados aos dispositivos Mobile.</p><p>A criação de ferramentas que permitam o controle de sistemas por meio de smartpho-</p><p>nes e tablets é um grande desafio e quem souber fazer isso com qualidade, certamente</p><p>será recompensado. Algumas das linguagens em que isso será evidenciado em breve</p><p>são ABAP (Advanced Business Application Programming) e Cassandra (database de alto</p><p>volume voltado às nuvens).</p><p>8. Big Data</p><p>Esse termo se refere à grande quantidade de informações e à demanda por velocidade</p><p>no atendimento às requisições. As empresas precisam entregar dados e precisam fazer</p><p>isso na hora que os consumidores exigem. Vagas de emprego relacionadas à “Big Data”</p><p>aumentam todos os anos e o motivo para isso é bem claro: cada dia existem mais pes-</p><p>soas conectadas à internet e as conexões mais velozes fazem que a demanda por dados</p><p>cresça ainda mais.</p><p>Mas não basta saber como isso acontece para prosperar no mercado, pois é preciso</p><p>saber como fazer tudo funcionar corretamente. Por isso, o domínio de sistemas como</p><p>Sqoop vem sendo cada vez mais exigido pelos empregadores. A já mencionada pro-</p><p>gramação em R também diz respeito a amplos volumes de transmissão, assim como o</p><p>gerenciamento de databases.</p><p>Por causa do crescimento do Big Data, o profissional “analista de dados” voltou a ser</p><p>133</p><p>valorizado sob o nome de “cientista de dados” — sendo exigido um bom conhecimento</p><p>para transformar “números e informações em dados relevantes”. Outro cargo bem valo-</p><p>rizado nesse segmento é o dos “Arquitetos de Informação” — responsáveis pelo design</p><p>dos sistemas de TI para o armazenamento e acesso dinâmico ao que for requisitado.</p><p>9. Computação em nuvens</p><p>Apesar de a computação em nuvens estar presente em quase tudo o que falamos ante-</p><p>riormente, é importante falar sobre ela em separado. Atualmente, muitas informações</p><p>passam a ser colocadas em servidores externos para facilitar o acesso de consumidores</p><p>e clientes, ao mesmo tempo em que isso pode tornar sistemas mais seguros — depen-</p><p>dendo da contratação de cada serviço, é claro.</p><p>Hoje, alguns dos grandes serviços e gerenciadores de Cloud Computing podem ser aces-</p><p>sados por qualquer pessoa por serem opensource — como o CloudStack, OpenStack e</p><p>a aclamada Hadoop. Mas também há algumas plataformas fechadas, como a NoSQL e a</p><p>Cloudera (uma versão mais comercial do Hadoop). Além de fazer o controle dos dados</p><p>entre nuvem e cliente, esses serviços também podem ser usados para uma série de so-</p><p>luções de segurança digital. Vale a pena investir!</p><p>.....</p><p>Como você pôde perceber, existem muitos conhecimentos que podem ser alimentados</p><p>para que uma carreira de sucesso seja construída. É claro que você não precisa saber</p><p>tudo o que foi mencionado aqui para conseguir um emprego, mas vale a pena ir atrás</p><p>de novas ferramentas nas áreas em que você deseja trabalhar. Isso certamente fará dife-</p><p>rença na hora de enviar o seu currículo.</p><p>Você já sabe em que área pretende trabalhar? A tecnologia pode ser uma aliada na hora</p><p>de fazer que seu trabalho se transforme em uma carreira? Esperamos que as dicas que</p><p>trouxemos hoje possam ajudar você nessa guinada.</p><p>Fonte: Hamann (2015, online).</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E134</p><p>DESCREVENDO O ESTUDO DE CASO</p><p>A empresa TOP UNIFORMES deseja um sistema que gerencie as vendas da</p><p>empresa. Nestas vendas, seria importante termos o controle dos clientes que</p><p>compraram, um controle de produtos com seus respectivos preços e também</p><p>um controle de vendedores para que seja possível a distribuição da comissão.</p><p>Restrições e premissas:</p><p>■ Uma Venda pode ter apenas um Cliente.</p><p>■ Uma Venda pode ter apenas um Vendedor.</p><p>■ Uma Venda pode ter vários itens, porém, esses itens podem ter apenas</p><p>um produto cada.</p><p>■ Não teremos cadastros de Empresas, pois não temos Filiais.</p><p>Vamos analisar o Estudo de Caso:</p><p>O passo inicial que podemos tomar é a análise dos substantivos, no estudo</p><p>de caso, conforme vimos na unidade II. Vamos à análise:</p><p>A empresa TOP UNIFORMES deseja um sistema que gerencie as vendas</p><p>da empresa, nestas vendas seria importante termos o controle dos clientes</p><p>que compraram, um controle</p><p>de produtos com seus respectivos preços e</p><p>também um controle de vendedores para que seja possível a distribuição</p><p>da comissão.</p><p>No link abaixo, você terá mais informações sobre o gerenciador de banco de</p><p>dados POSTGRE, neste link, teremos incluída toda a documentação, infor-</p><p>mações de eventos, downloads e muitas outras informações:</p><p>Fonte: PostgreSQL (online). Disponível em: <http://www.postgresql.org.br>.</p><p>Acesso em: 8 jul. 2015.</p><p>Criando as Entidades e os Relacionamentos (DER)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>135</p><p>Após a análise, retiramos as possíveis entidades:</p><p>■ Empresa</p><p>■ Vendas</p><p>■ Produtos</p><p>■ Clientes</p><p>■ Vendedores</p><p>Importante: a entidade Empresa existe no texto do estudo de caso, porém</p><p>conforme a restrição nos determina, não será criada por não haver Filiais.</p><p>CRIANDO AS ENTIDADES E OS RELACIONAMENTOS</p><p>(DER)</p><p>Para facilitar o mapeamento do DER, é importante que ele seja feito em etapas,</p><p>para não perdermos nenhuma informação e restrição imposta pelo projeto. De</p><p>acordo com as restrições passadas no estudo de caso, iremos abordar cada um</p><p>dos casos:</p><p>1° Relacionamento:</p><p>■ Uma venda pode ter apenas um Cliente.</p><p>Clientes</p><p>(1,1) (1,N)</p><p>VendaPossui</p><p>Figura 33: Exemplo de Relacionamento em que uma venda pode ter apenas um Cliente</p><p>Fonte: o autor.</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E136</p><p>CLIENTES</p><p>VENDA</p><p>Figura 34: Exemplo de Relacionamento em que uma Venda pode ter apenas um Vendedor demonstrado em</p><p>formato de tabela</p><p>Fonte: os autores.</p><p>No exemplo acima, temos a representação em forma de tabela do relacionamento</p><p>entre as entidades CLIENTE e VENDA, em que a representação simboliza que</p><p>a tabela VENDA receberá o código do cliente.</p><p>2° Relacionamento:</p><p>■ Uma venda pode ter apenas um Vendedor.</p><p>Vendedor</p><p>(1,1) (1,N)</p><p>VendaContém</p><p>Figura 35: Exemplo de Relacionamento em que uma Venda pode ter apenas um Vendedor.</p><p>Fonte: os autores.</p><p>Criando as Entidades e os Relacionamentos (DER)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>137</p><p>VENDEDOR</p><p>VENDA</p><p>Figura 36: Exemplo de Relacionamento em que uma Venda pode ter apenas um Vendedor demonstrado em</p><p>formato de tabelas</p><p>Fonte: os autores.</p><p>No exemplo acima, temos a representação em forma de tabela do relacionamento</p><p>entre as entidades VENDEDOR e VENDA, em que a representação simboliza</p><p>que a tabela VENDA receberá o código do vendedor.</p><p>3° Relacionamento:</p><p>■ Uma venda pode ter vários itens.</p><p>Venda</p><p>(1,1) (1,N)</p><p>Venda_ItensContém</p><p>Figura 37: Exemplo de Relacionamento em que uma Venda pode ter apenas vários itens</p><p>Fonte: os autores.</p><p>No exemplo a seguir, temos a representação em forma de tabela do relaciona-</p><p>mento entre as entidades VENDA e VENDA_ITENS, em que a representação</p><p>simboliza que a tabela VENDA_ITENS receberá o código da venda e não há</p><p>problemas em haver repetições, pois vale lembrar que a chave nessa tabela é</p><p>composta (VDI_CHAVE_VDA e VDI_NSEQUEN) e o campo VDI_NSEQUEN</p><p>deverá ser preenchido de maneira sequencial e, assim, não teremos o risco de</p><p>haver tuplas (linhas) duplicadas.</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E138</p><p>VENDA</p><p>VENDA_ITENS</p><p>Figura 38: Exemplo de Relacionamento em que uma Venda pode ter apenas vários itens demonstrado em</p><p>formato de tabelas.</p><p>Fonte: os autores.</p><p>4° Relacionamento:</p><p>■ Um produto pode estar em vários itens.</p><p>Produtos</p><p>(1,1) (1,1)</p><p>Venda_ItensEstá</p><p>Figura 39: Exemplo de Relacionamento em que um produto pode estar em vários itens</p><p>Fonte: os autores.</p><p>Criando as Entidades e os Relacionamentos (DER)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>139</p><p>VENDA_ITENS</p><p>PRODUTOS</p><p>Figura 40: Exemplo de Relacionamento em que um produto pode estar em vários itens demonstrado em</p><p>formato de tabelas</p><p>Fonte: os autores.</p><p>No exemplo acima, temos a representação em forma de tabela do relacionamento</p><p>entre as entidades PRODUTOS e VENDA_ITENS, em que a representação sim-</p><p>boliza que a tabela VENDA_ITENS receberá o código do produto.</p><p>DER (Diagrama de Entidade e Relacionamento) - Completo</p><p>Para uma melhor visualização dos relacionamentos das entidades, utilizamos o</p><p>DER (Diagrama de Entidade e Relacionamento). Veja, na sequência, a represen-</p><p>tação completa das entidades relativas ao nosso estudo de caso:</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E140</p><p>Produtos</p><p>(1,1) (1,1)</p><p>Venda_ItensEstá</p><p>Contém</p><p>Clientes</p><p>Venda</p><p>(1,1)</p><p>(1,1)</p><p>(1,N) (1,N)</p><p>(1,N)</p><p>(1,1)</p><p>Vendedor</p><p>ContémPossui</p><p>Figura 41: DER (Diagrama de Entidade e Relacionamento)</p><p>Fonte: os autores.</p><p>AS ENTIDADES E SEUS ATRIBUTOS</p><p>A seguir, do lado esquerdo, teremos a descrição das entidades e seus atributos</p><p>de maneira individual, conforme o modelo lógico, e, do lado direito, temos a</p><p>representação da entidade e seus atributos no modelo conceitual, conforme a</p><p>notação de Peter Chen (1976).</p><p>Criando as Entidades e os Relacionamentos (DER)</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>141</p><p>Figura 42: Exemplo da tabela Produtos e seus atributos</p><p>Fonte: os autores.</p><p>Figura 43: Exemplo da tabela Clientes e seus atributos</p><p>Fonte: os autores.</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E142</p><p>Figura 44: Exemplo da tabela Vendedor e seus atributos</p><p>Fonte: os autores.</p><p>Figura 45: Exemplo da tabela Venda e seus atributos</p><p>Fonte: os autores.</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>143</p><p>Figura 46: Exemplo da tabela Venda_Itens e seus atributos</p><p>Fonte: os autores.</p><p>TRABALHANDO COM SQL</p><p>Neste tópico, vamos trabalhar com a implementação das entidades criadas</p><p>no Estudo de Caso, abordando tanto as metodologias do modelo DDL (Data</p><p>Definition Language) e DML (Data Manipulation Language).</p><p>TRABALHANDO COM DDL – DATA DEFINITION LANGUAGE</p><p>■ Criando as Tabelas</p><p>Para criar tabelas, utilizamos o comando CREATE TABLE. A seguir, demons-</p><p>traremos cada tabela:</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E144</p><p>■ PRODUTOS</p><p>CREATE TABLE PRODUTOS (</p><p>PROD_CHAVE INTEGER PRIMARY KEY,</p><p>PROD_DESCRI VARCHAR(60),</p><p>PROD_VPRECO NUMERIC(18,4),</p><p>PROD_UNIDAD VARCHAR(5),</p><p>PROD_FAMILI VARCHAR(10)</p><p>);</p><p>■ CLIENTES</p><p>CREATE TABLE CLIENTES (</p><p>CLI_CHAVE INTEGER PRIMARY KEY,</p><p>CLI_TIPOPESSOA CHAR(1),</p><p>CLI_STATUS VARCHAR(15),</p><p>CLI_BAIRRO VARCHAR(30),</p><p>CLI_ESTADO CHAR(2),</p><p>CLI_PAIS VARCHAR(6),</p><p>CLI_INSCRESTADUAL VARCHAR(25),</p><p>CLI_CEP VARCHAR(9),</p><p>CLI_CIDADE VARCHAR(35),</p><p>CLI_CNPJ_CPF VARCHAR(18),</p><p>CLI_ENDERE VARCHAR(60),</p><p>CLI_RAZAOSOCIAL VARCHAR(60),</p><p>CLI_NOMEFANTASIA VARCHAR(30),</p><p>CLI_EMAIL VARCHAR(60)</p><p>);</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>145</p><p>■ VENDEDOR</p><p>CREATE TABLE VENDEDOR (</p><p>VEN_CHAVE INTEGER PRIMARY KEY,</p><p>VEN_NOME VARCHAR(30),</p><p>VEN_CNPJ_CPF VARCHAR(18),</p><p>VEN_TIPOPESSOA CHAR(1),</p><p>VEN_INSCRESTADUAL VARCHAR(25),</p><p>VEN_STATUS VARCHAR(15),</p><p>VEN_EMAIL VARCHAR(60),</p><p>VEN_VPERCENT_COMIS NUMERIC(5,4)</p><p>);</p><p>■ VENDA</p><p>CREATE TABLE VENDA (</p><p>VDA_CHAVE INTEGER PRIMARY KEY,</p><p>VDA_DMOVTO DATE,</p><p>VDA_VDINHEIRO NUMERIC(18,2),</p><p>VDA_VCARTAO NUMERIC(18,2),</p><p>VDA_VCHEQUE NUMERIC(18,2),</p><p>VDA_VPRAZO NUMERIC(18,2),</p><p>VDA_VOUTROS NUMERIC(18,2),</p><p>VDA_VTOTAL NUMERIC(18,2),</p><p>VDA_VRECEB NUMERIC(18,2),</p><p>VDA_VTROCO NUMERIC(18,2),</p><p>VDA_CODCLI_CLI INTEGER,</p><p>VDA_CODVEN_VEN INTEGER,</p><p>VDA_VDESC NUMERIC(18,2),</p><p>FOREIGN KEY (VDA_CODCLI_CLI) REFERENCES CLIENTES(CLI_CHAVE),</p><p>FOREIGN KEY (VDA_CODVEN_VEN) REFERENCES VENDEDOR(VEN_CHAVE));</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E146</p><p>■ VENDA_ITENS</p><p>CREATE TABLE VENDA_ITENS (</p><p>VDI_CHAVE_VDA INTEGER,</p><p>VDI_NSEQUEN INTEGER,</p><p>VDI_CODPRO_PROD INTEGER,</p><p>VDI_QQUANTI NUMERIC(18,2),</p><p>VDI_VPREUNI NUMERIC(18,2),</p><p>VDI_VALORITEM NUMERIC(18,2),</p><p>VDI_PERCENTDESC NUMERIC(5,2),</p><p>VDI_QTDEDEVOLV NUMERIC(18,2),</p><p>VDI_DESCPROD VARCHAR(255),</p><p>PRIMARY KEY(VDI_CHAVE_VDA,VDI_NSEQUEN),</p><p>FOREIGN KEY (VDI_CHAVE_VDA) REFERENCES VENDA (VDA_CHAVE),</p><p>FOREIGN KEY (VDI_CODPRO_PROD) REFERENCES PRODUTOS (PROD_CHAVE));</p><p>■ Inserindo Atributos nas Tabelas</p><p>Para inserir ATRIBUTOS nas tabelas, utilizamos o comando ALTER TABLE</p><p>ADD. A seguir, estaremos incluindo alguns atributos para cada tabela:</p><p>■ PRODUTOS</p><p>ALTER TABLE PRODUTOS ADD PROD_DTVENCIMENTO DATE;</p><p>ALTER TABLE PRODUTOS ADD PROD_DESCRCOMPLETA VARCHAR(255);</p><p>ALTER TABLE PRODUTOS ADD PROD_PRECOVENDA NUMERIC(18,4);</p><p>■ CLIENTES</p><p>ALTER TABLE CLIENTES ADD CLI_FONECONTATO VARCHAR(14);</p><p>ALTER TABLE CLIENTES ADD CLI_CONTATO VARCHAR(30);</p><p>ALTER TABLE CLIENTES ADD CLI_COMPLEMENTOEND VARCHAR(30);</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>147</p><p>■ VENDEDOR</p><p>ALTER TABLE VENDEDOR ADD VEN_FONECONTATO VARCHAR(14);</p><p>ALTER TABLE VENDEDOR ADD VEN_ENDERECO VARCHAR(60);</p><p>ALTER TABLE VENDEDOR ADD VEN_ESTADO VARCHAR(2);</p><p>■ VENDA</p><p>ALTER TABLE VENDA ADD VDA_STATUS CHAR(1);</p><p>ALTER TABLE VENDA ADD VDA_CFOP VARCHAR(7);</p><p>ALTER TABLE VENDA ADD VDA_DTENVIO DATE;</p><p>■ VENDA_ITENS</p><p>ALTER TABLE VENDA_ITENS ADD VDI_PERCENTICMS NUMERIC(5,4);</p><p>ALTER TABLE VENDA_ITENS ADD VDI_TOTALICMS NUMERIC(18,4);</p><p>ALTER TABLE VENDA_ITENS ADD VDI_VALORIPI NUMERIC(18,4);</p><p>■ Deletando os Atributos nas Tabelas</p><p>Para deletar ATRIBUTOS nas tabelas, utilizamos o comando ALTER TABLE</p><p>DROP. A seguir, estaremos excluindo alguns atributos para cada tabela:</p><p>■ PRODUTOS</p><p>ALTER TABLE PRODUTOS DROP PROD_FAMILI;</p><p>ALTER TABLE PRODUTOS DROP PROD_UNIDAD;</p><p>ALTER TABLE PRODUTOS DROP PROD_VPRECO;</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E148</p><p>■ CLIENTES</p><p>ALTER TABLE CLIENTES DROP CLI_PAIS;</p><p>ALTER TABLE CLIENTES DROP CLI_BAIRRO;</p><p>ALTER TABLE CLIENTES DROP CLI_STATUS;</p><p>■ VENDEDOR</p><p>ALTER TABLE VENDEDOR DROP VEN_EMAIL;</p><p>ALTER TABLE VENDEDOR DROP VEN_INSCRESTADUAL;</p><p>ALTER TABLE VENDEDOR DROP VEN_STATUS;</p><p>■ VENDA</p><p>ALTER TABLE VENDA DROP VDA_VTROCO;</p><p>ALTER TABLE VENDA DROP VDA_VPRAZO;</p><p>ALTER TABLE VENDA DROP VDA_VOUTROS;</p><p>■ VENDA_ITENS:</p><p>ALTER TABLE VENDA_ITENS DROP VDI_QQUANTI;</p><p>ALTER TABLE VENDA_ITENS DROP VDI_VPREUNI;</p><p>ALTER TABLE VENDA_ITENS DROP VDI_VALORITEM;</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>149</p><p>■ Deletando as Tabelas</p><p>Para deletar as TABELAS, utilizamos o comando DROP TABLE. A seguir, esta-</p><p>remos excluindo as tabelas do sistema:</p><p>DROP TABLE PRODUTOS;</p><p>DROP TABLE CLIENTES;</p><p>DROP TABLE VENDEDOR;</p><p>DROP TABLE VENDA_ITENS;</p><p>DROP TABLE VENDA;</p><p>Trabalhando com DML – DATA MANIPULATION LANGUAGE</p><p>Agora, iremos trabalhar com os comandos de manipulação de dados. Esses</p><p>comandos nos ajudam a implementar e trabalhar com o conteúdo das tabelas</p><p>e, para isso, utilizaremos comandos de inserção, alteração, seleção e deleção.</p><p>■ Inserindo novos registros nas Tabelas</p><p>Para inserir registros em uma tabela, utilizamos o comando INSERT. A seguir,</p><p>estaremos demonstrando a cada tabela como devemos proceder:</p><p>■ PRODUTOS</p><p>/* Inserindo Registros na tabela Produtos*/</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (1, ‘NOBREAK’, 200, ‘UN’, ‘ESCRITÓRIO’);</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (2, ‘NOTEBOOK’, 2500, ‘UN’, ‘ESCRITÓRIO’);</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (3, ‘SABÃO EM PÓ’, 9.00, ‘UN’, ‘LIMPEZA’);</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E150</p><p>■ CLIENTES</p><p>/* Inserindo Registros na tabela Clientes*/</p><p>INSERT INTO CLIENTES (CLI_CHAVE, CLI_TIPOPESSOA, CLI_STATUS, CLI_</p><p>BAIRRO, CLI_ESTADO, CLI_PAIS, CLI_INSCRESTADUAL, CLI_CEP, CLI_CIDADE,</p><p>CLI_CNPJ_CPF, CLI_ENDERE, CLI_RAZAOSOCIAL, CLI_NOMEFANTASIA, CLI_EMAIL)</p><p>VALUES (1, ‘F’, ‘ATIVO’, ‘JARDIM COLINA’, ‘SP’, ‘BRASIL’, ‘ISENTO’,</p><p>‘67009-490’, ‘CAMPINAS’, ‘090.345.729-49’, ‘RUA JOÃO DE BARRO 946’,</p><p>‘RONALDO DA SILVA’, ‘RONALDO DA SILVA’, ‘ronaldoteste@hotmail.com’);</p><p>INSERT INTO CLIENTES (CLI_CHAVE, CLI_TIPOPESSOA, CLI_STATUS, CLI_</p><p>BAIRRO, CLI_ESTADO, CLI_PAIS, CLI_INSCRESTADUAL, CLI_CEP, CLI_CIDADE,</p><p>CLI_CNPJ_CPF, CLI_ENDERE, CLI_RAZAOSOCIAL, CLI_NOMEFANTASIA, CLI_EMAIL)</p><p>VALUES (2, ‘J’, ‘ATIVO’, ‘ZONA 1’, ‘PR’, ‘BRASIL’, ‘123.123.234’, ‘87009-</p><p>678’, ‘MARINGÁ’, ‘73.486.451/0001-54’, ‘AV. BRASIL 1001’, ‘MERCADO REDE</p><p>CIDADE LTDA’, ‘MERCADO REDE CIDADE’, ‘adm@redecidade.com.br’);</p><p>■ VENDEDOR</p><p>/* Inserindo Registros na tabela Vendedor*/</p><p>INSERT INTO VENDEDOR (VEN_CHAVE, VEN_NOME, VEN_CNPJ_CPF, VEN_</p><p>TIPOPESSOA, VEN_INSCRESTADUAL, VEN_STATUS, VEN_EMAIL, VEN_VPERCENT_COMIS)</p><p>VALUES (1, ‘MARIA DAS GRAÇAS’, ‘302.027.591-13’, ‘F’, ‘ISENTO’, ‘ATIVO’,</p><p>‘vendas@hotmail.com’, 1.5);</p><p>INSERT INTO VENDEDOR (VEN_CHAVE, VEN_NOME, VEN_CNPJ_CPF, VEN_</p><p>TIPOPESSOA, VEN_INSCRESTADUAL, VEN_STATUS, VEN_EMAIL, VEN_VPERCENT_COMIS)</p><p>VALUES (2, ‘MALU REPRESENTAÇÃO’, ‘48.825.337/0001-64’, ‘J’, ‘ISENTO’,</p><p>‘ATIVO’, ‘comercial@malurepresenta.com.br’, 2.0);</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>151</p><p>■ VENDA</p><p>/* Inserindo Registros na tabela Venda*/</p><p>INSERT INTO VENDA (VDA_CHAVE, VDA_DMOVTO, VDA_VDINHEIRO, VDA_VCARTAO,</p><p>VDA_VCHEQUE, VDA_VPRAZO, VDA_VOUTROS, VDA_VTOTAL, VDA_VRECEB, VDA_VTROCO,</p><p>VDA_CODCLI_CLI, VDA_CODVEN_VEN, VDA_VDESC) VALUES (1, ‘23/01/2015’, 0,</p><p>0, 0, 0, 0, 10900, 10900, 0, 1, 1, 0);</p><p>INSERT INTO VENDA (VDA_CHAVE, VDA_DMOVTO, VDA_VDINHEIRO, VDA_VCARTAO,</p><p>VDA_VCHEQUE, VDA_VPRAZO, VDA_VOUTROS, VDA_VTOTAL, VDA_VRECEB, VDA_VTROCO,</p><p>VDA_CODCLI_CLI, VDA_CODVEN_VEN, VDA_VDESC) VALUES (2, ‘15/02/2015’, 0,</p><p>0, 0, 0, 0, 4800, 5000, 0, 2, 2, 200);</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E152</p><p>■ VENDA_ITENS</p><p>/* Inserindo Registros na tabela Venda_Itens*/</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 1, 1, 5, 200, 1000, 0, 0, ‘NOBREAK’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 2, 1, 9, 1000, 9000, 0, 0, ‘NOTEBOOK’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 3, 1, 100, 9.00, 900, 0, 0, ‘SABAO EM PÓ’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (2, 1, 1, 5, 1000, 5000, 0, 0, ‘NOTEBOOK’);</p><p>■ Alterando registros das Tabelas</p><p>Para realizarmos alterações nos registros em uma tabela, utilizamos o comando</p><p>UPDATE. Vale lembrar que temos que ter uma certa atenção com esse comando,</p><p>pois ele normalmente vem acompanhado da cláusula WHERE, o que causa uma</p><p>restrição/limite nas alterações.</p><p>Por isso, caso você omita o comando WHERE</p><p>dentro do comando UPDATE, o mesmo será executado em TODA a TABELA,</p><p>e caso esta não seja a pretensão, o dano pode ser grande, portanto, atenção ao</p><p>executar esse comando. A seguir, estarei demonstrando, em algumas tabelas,</p><p>como devemos proceder para alterarmos algum registro:</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>153</p><p>■ PRODUTOS</p><p>/* Neste comando iremos modificar a descrição do produto cujo código</p><p>chave é igual a 1*/</p><p>UPDATE PRODUTOS</p><p>SET PROD_DESCRI = ‘NOBREAK 700VA’</p><p>WHERE PROD_CHAVE = 1;</p><p>/* Neste comando iremos modificar a família do produto cujo código</p><p>chave é igual a 1*/</p><p>UPDATE PRODUTOS</p><p>SET PROD_FAMIL = ‘CONSUMO’</p><p>WHERE PROD_CHAVE = 1;</p><p>■ CLIENTES</p><p>/* Neste comando iremos modificar o Status de TODOS os Clientes para</p><p>INATIVO*/</p><p>UPDATE CLIENTES</p><p>SET CLI_STATUS = ‘INATIVO’;</p><p>/* Neste comando iremos modificar o Bairro do cliente 1 para Jardim</p><p>Paulista III*/</p><p>UPDATE CLIENTES</p><p>SET CLI_BAIRRO = ‘JARDIM PAULISTA III’</p><p>WHERE CLI_CHAVE = 1;</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E154</p><p>■ VENDEDOR</p><p>/* Neste comando iremos modificar o nome do vendedor 1 para Maria</p><p>das Graças da Silva*/</p><p>UPDATE VENDEDOR</p><p>SET VEN_NOME = ‘MARIA DAS GRAÇAS DA SILVA’</p><p>WHERE VEN_CHAVE = 1;</p><p>/* Neste comando iremos modificar o percentual de comissão do ven-</p><p>dedor 1 para 2.0*/</p><p>UPDATE VENDEDOR</p><p>SET VEN_VPERCENT_COMIS = 2.0</p><p>WHERE VEN_CHAVE = 1;</p><p>■ Deletando registros das Tabelas</p><p>Em um banco de dados, podemos excluir os registros em uma tabela utilizando o</p><p>comando DELETE. É importante lembrar que a exclusão só é possível se não há</p><p>nenhuma dependência desse registro em outra tabela. Vamos a alguns exemplos:</p><p>■ PRODUTOS</p><p>/* Com o comando abaixo, iremos apagar todos os registros da Tabela</p><p>Produtos*/</p><p>DELETE FROM PRODUTOS;</p><p>/*Neste comando será deletado o produto cujo código chave é igual</p><p>a 1 */</p><p>DELETE FROM PRODUTOS</p><p>WHERE PROD_CHAVE = 1;</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>155</p><p>■ CLIENTES</p><p>/*Neste comando será deletado o cliente cujo código chave deste</p><p>cliente é igual a 1*/</p><p>DELETE FROM CLIENTES</p><p>WHERE CLI_CHAVE = 1;</p><p>■ VENDEDOR</p><p>/*Neste comando será deletado o Vendedor cujo código chave deste</p><p>Vendedor é igual a 1*/</p><p>DELETE FROM VENDEDOR</p><p>WHERE VEN_CHAVE = 1;</p><p>É IMPORTANTE saber que os comandos UPDATE e DELETE devem ser utili-</p><p>zados de maneira cuidadosa, pois alguns dados, depois de inseridos no sistema,</p><p>não podem ser modificados e/ou excluídos. Um exemplo claro do nosso dia-a-dia</p><p>é a NF-e (Nota Fiscal Eletrônica), em que, após o envio dessa nota à SEFAZ</p><p>(Secretaria da Fazenda), ela não pode ser modificada e, caso haja a modificação</p><p>e a empresa sofra uma auditoria, essa pode ser acusada de fraude e responder</p><p>gravemente por essa modificação, portanto, tenha sempre em mente que é muito</p><p>grande a nossa responsabilidade com os dados inseridos em um banco de dados.</p><p>■ Selecionando os registros de Tabelas</p><p>Demonstraremo agora o comando SELECT, comando este que nos ajuda no</p><p>momento da busca de dados no banco de dados de maneira organizada. Seguem</p><p>alguns exemplos:</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E156</p><p>■ CLIENTES</p><p>/*Este comando seleciona todos os registros da tabela juntamente com</p><p>todos os seus atributos */</p><p>SELECT * FROM CLIENTES;</p><p>/*Seleciona o Cliente cuja chave é igual a 1, juntamente com todos</p><p>os seus campos por conta do * (asterisco) */</p><p>SELECT *</p><p>FROM CLIENTES</p><p>WHERE CLI_CHAVE = 1;</p><p>/*Seleciona o Cliente cujo Nome fantasia inicia com M, trazendo os</p><p>respectivos atributos específicos conforme descrito abaixo*/</p><p>SELECT</p><p>CLI_CHAVE,</p><p>CLI_TIPOPESSOA,</p><p>CLI_STATUS,</p><p>CLI_NOMEFANTASIA,</p><p>CLI_ESTADO,</p><p>CLI_PAIS</p><p>FROM CLIENTES</p><p>WHERE CLI_NOMEFANTASIA LIKE ‘M%’;</p><p>Trabalhando com SQL</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>157</p><p>■ VENDAS</p><p>/* Selecionando todas as vendas cuja Data da Venda seja maior que</p><p>01/01/2015 */</p><p>SELECT *</p><p>FROM VENDA</p><p>WHERE VDA_DMOVTO > ‘01/01/2015’;</p><p>/* Selecionando a data da Venda cujo valor total seja maior que</p><p>6000.00 */</p><p>SELECT VDA_DMOVTO</p><p>FROM VENDA</p><p>WHERE VDA_VTOTAL > 6000.00;</p><p>/* Selecionando o valor da maior venda */</p><p>SELECT MAX(VDA_VTOTAL)</p><p>FROM VENDA;</p><p>■ VENDA e VENDAS_ITENS</p><p>/* Na consulta a seguir, temos a seleção de campos da tabela Venda e</p><p>Venda_itens. neste caso utilizamos o JOIN para que independente se temos</p><p>itens correspondentes ou não a aquela venda a mesma seja retornada. */</p><p>SELECT</p><p>VENDA.VDA_CHAVE AS “Cód. Venda”,</p><p>VENDA.VDA_DMOVTO AS “Dt. Movimento”,</p><p>VENDA.VDA_VTOTAL AS “Total da Venda”,</p><p>VENDA_ITENS.VDI_CODPRO_PROD AS “Código do Produto”,</p><p>VENDA_ITENS.VDI_QQUANTI AS “Quantidade”,</p><p>VENDA_ITENS.VDI_VPREUNI AS “Preço Unitário”,</p><p>VENDA_ITENS.VDI_VALORITEM AS “Valor Item”</p><p>FROM VENDA INNER JOIN VENDA_ITENS ON VENDA.VDA_CHAVE = VENDA_ITENS.</p><p>VDI_CHAVE_VDA;</p><p>MATERIAL COMPLEMENTAR</p><p>Nos links abaixo, temos duas vídeoaulas com que você pode complementar seus estudos,</p><p>revisando e aprendendo novos conceitos, estudando a criação de bancos de dados, de tabelas e</p><p>de alguns conceitos novos, utilizando o PostgreSQL:</p><p>VIDEOAULA 1: <https://www.youtube.com/watch?v=IBiw9xXO5_Y>. Acesso em: 8 jul. 2015.</p><p>VIDEOAULA 2: <https://www.youtube.com/watch?v=zgFoOg9N43s>. Acesso em: 8 jul. 2015.</p><p>Sistemas de Banco de Dados</p><p>Elmasri e Navathe</p><p>Editora: Person</p><p>Sinopse: disponibilizado na Biblioteca Pearson, esse livro</p><p>reúne teoria e exemplos práticos com as mais modernas</p><p>tecnologias. Ele introduz os conceitos fundamentais</p><p>necessários para projetar, usar e implementar os sistemas</p><p>de banco de dados e suas aplicações. De fácil compreensão,</p><p>o texto aborda com profundidade a modelagem e o projeto</p><p>de banco de dados, suas linguagens e as funcionalidades</p><p>dos sistemas de gerenciamento de banco de dados e as</p><p>técnicas de implementação desses sistemas. Data mining.</p><p>Sistemas de banco de dados destina-se a estudantes de graduação, pós-graduação ou a usuários</p><p>familiarizados com programação e conceitos de estruturação de dados e organização básica de</p><p>computadores.</p><p>159</p><p>POSTGRESQL: UM BANCO DE DADOS PARA TODOS</p><p>Por Cláudio Bezerra Leopoldino, graduado em Computação, mestre em Administração,</p><p>especialista em Banco de Dados e Analista de Desenvolvimento de Software do Serpro</p><p>desde 2004. Utiliza o PostgreSQL como ferramenta de ensino de Banco de Dados, mas</p><p>de vez em quando implementa alguma coisa. É colunista dos sítios “Meu Blog de Post-</p><p>greSQL” e “Planeta PostgreSQL-BR”.</p><p>Receber, processar e realizar consultas a informações são as operações fundamentais</p><p>de qualquer banco de dados. A essas funções básicas podem ser adicionadas a gestão</p><p>de disponibilidade, a confiabilidade, a segurança e a escalabilidade. Em um mundo de</p><p>bancos de dados complexos, com centenas de tabelas, compostos por vários terabytes</p><p>de dados e que são acessados por milhares de usuários simultâneos, que são uma rea-</p><p>lidade, a ferramenta livre PostgreSQL é uma alternativa atual, viável e dotada de muitos</p><p>recursos para os desenvolvedores de soluções informatizadas de todas as naturezas.</p><p>Histórico</p><p>O PostgreSQL, que pode ser chamado simplesmente de Postgres, é um software de</p><p>banco de dados livre. Seu mascote é o elefante, o animal que “nunca esquece”. Uma</p><p>das razões do sucesso dessa ferramenta é o seu extenso período de desenvolvimento</p><p>razoavelmente contínuo.</p><p>Em 1986, surge o projeto Postgres, liderado por Michael Stonebraker, financiado princi-</p><p>palmente por verbas militares e de pesquisas científicas. Influenciado pelo sucesso do</p><p>banco de dados relacional Ingres, o desenvolvimento visava criar um banco</p><p>de dados</p><p>com recursos “pós-ingres”, daí o nome empregado até os dias atuais. Em 1994, foi adi-</p><p>cionado um interpretador de SQL ao Postgres em substituição à linguagem PostQUEL,</p><p>criando o Postgres95. O nome foi alterado já no ano seguinte para PostgreSQL. A data</p><p>oficial de aniversário é 8 de julho.</p><p>Após um relativo sucesso no ambiente unix/linux, o PostgreSQL passou a ser disponi-</p><p>bilizado para windows a partir da versão 8.0.0, lançada oficialmente em 19 de janeiro</p><p>de 2005. O grande aumento na difusão do Postgres, com a conquista do ambiente win-</p><p>dows, consolidou-se nas versões posteriores. A versão mais atual é a 8.4, lançada oficial-</p><p>mente em 2009, mas já está disponível a versão alfa da futura 8.5.</p><p>Visão Geral</p><p>O PostgreSQL é um banco de dados cliente-servidor, padrão utilizado pela maioria das</p><p>aplicações atuais. Trata da entrada, do processamento e da saída de grandes quantida-</p><p>des de dados e implementa a linguagem SQL – Structured Query Language, o padrão</p><p>mundial para consulta, definição e manipulação de informações. Implementa tanto o</p><p>padrão relacional quanto os recursos de gerenciamento de dados objeto-relacionais.</p><p>Permite a criação de tabelas, visões, índices e triggers. Implementa a integridade refe-</p><p>rencial por meio de chaves primárias e estrangeiras, além de outras constraints diversas</p><p>definíveis pelos desenvolvedores.</p><p>Suporta diversos sistemas operacionais, facilitando a migração, reutilização e atualiza-</p><p>ção de servidores – Linux, Unix, computadores com Mac e Windows são contemplados.</p><p>Também é compatível com plataformas de hardware de 32 bits e 64 bits, além de siste-</p><p>mas RAID, o que permite grande variedade de fornecedores e arquiteturas.</p><p>Para os desenvolvedores, além da implementação de padrões SQL 92 e 99, o Postgres</p><p>oferece linguagens para funções armazenadas no banco e nas interfaces de programa-</p><p>ção para praticamente todas as principais linguagens do mercado: C/C++, Java, .Net,</p><p>Perl, Python, Ruby, TCL, PHP, entre outras. Trabalha em conjunto com frameworks como</p><p>Struts, Hibernate e o brasileiro Demoiselle.</p><p>Por ser software livre, mantido por uma comunidade bastante ativa, esse banco de da-</p><p>dos tem crescido em sofisticação, confiabilidade e performance. Cada nova versão tam-</p><p>bém oferece novos recursos de gerenciamento.</p><p>Funcionalidades</p><p>Para o desenvolvedor de soluções de banco de dados, a</p><p>variedade de funcionalidades oferecidas permite toda</p><p>uma gama de opções, o que torna essa ferramenta um</p><p>bom concorrente para qualquer banco de dados livre ou</p><p>comercial. As funcionalidades que destaco nesta seção são</p><p>apenas relatório bastante sumário.</p><p>Utilitários nativos tratam de backup e recuperação de</p><p>dados. A implementação de tablespaces e schemas</p><p>permite a organização física e lógica dos componentes</p><p>de um banco de dados de forma simplificada. As opções</p><p>para a padronização de segurança de acesso são bastante robustas e os recursos de</p><p>indexação oferecidos compreendem, além dos índices básicos, os parciais e os basea-</p><p>dos em expressões – recursos de desempenho pouco explorados por outros bancos de</p><p>dados.</p><p>161</p><p>A implementação do conceito de transações assegura sua atomicidade, sua consistên-</p><p>cia, seu isolamento e sua durabilidade. As facilidades para replicação assíncrona e recu-</p><p>peração pós-falha permitem a recuperação da consistência do banco de dados mesmo</p><p>após quedas de sistema catastróficas.</p><p>O suporte aos padrões SQL 92 e SQL 99 facilita a aprendizagem, e a possibilidade das</p><p>codificações de funções dentro do banco permite que o servidor de banco de dados</p><p>hospede parte das lógicas de negócio das aplicações. Todos os tipos de dados tradi-</p><p>cionais são suportados, além do suporte ao armazenamento de large objects (BLOBs e</p><p>CLOBs). O Postgres apresenta ainda recursos como window functions, que permitem</p><p>ranqueamento, geração de numeração e classificação de dados, cláusulas que expan-</p><p>dem a função dos comandos SQL tradicionais e comandos exclusivos, como o COPY.</p><p>Todas essas funcionalidades se completam com opções avançadas para monitoramen-</p><p>to, configuração e administração de bancos de dados.</p><p>Conclusão: Qual é a sua Necessidade?</p><p>Se você precisa de um banco de dados, acredito que o Postgres é uma boa opção – pela</p><p>falta de limitações de uso; pela disponibilidade de opções que é oferecida; pela credi-</p><p>bilidade de uma ferramenta com mais de uma década de desenvolvimento sem inter-</p><p>rupções, com uma comunidade ativa e produtiva; pela crescente base de usuários que</p><p>muitas vezes desconhecem o banco de dados que utilizam, pela ausência de problemas</p><p>em produção.</p><p>Empresas privadas, instituições sem fins lucrativos, órgãos públicos das esferas muni-</p><p>cipal, estadual e federal já apresentam cases de utilização dentro e fora do país. Não</p><p>importa a sua aplicação de banco de dados, essa é uma opção a ser considerada.</p><p>DataWarehouse, aplicações cliente-servidor ou na web? O Postgres suporta.</p><p>Sistema operacional? O Postgres está em todos os maiores, incluindo Windows e Linux.</p><p>Hardware? Não há incompatibilidades.</p><p>Curva de aprendizado? Esse é o menor obstáculo. Existem cursos nas faculdades e em-</p><p>presas especializadas, sítios oficiais e não oficiais com grande quantidade de conteúdo.</p><p>Fonte: Campos (2009, online).</p><p>ESTUDO DE CASO</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>VU N I D A D E162</p><p>CONSIDERAÇÕES FINAIS</p><p>No estudo de banco de dados, nada melhor que a prática aliada à teoria. Nesta</p><p>unidade, tivemos como objetivo demonstrar um passo-a-passo de como é a cria-</p><p>ção de um banco de dados, partindo desde o momento em que as características</p><p>são passadas pelo cliente (Análise dos Requisitos) até o momento da criação prá-</p><p>tica utilizando a linguagem SQL (Structured Query Language ou Linguagem de</p><p>Consulta Estruturada).</p><p>Nesta unidade, demonstramos alguns comandos que nos ajudam tanto na</p><p>criação como na manutenção de um banco de dados. Um ponto importante a</p><p>respeito desta unidade é tê-la como base de consulta em seus estudos diários,</p><p>assim poderá não apenas saber os comandos ensinados, mas também aplicá-los</p><p>de maneira correta, sempre que necessário.</p><p>Contudo vale enfatizar que o aprendizado de Banco de dados e SQL demanda</p><p>muita leitura e também muita prática/treino. Nossa sugestão é que você tente</p><p>sempre fazer os exercícios e, em seguida, possa revisá-los para que a fixação do</p><p>conteúdo seja ainda melhor.</p><p>163</p><p>1. A atividade a seguir propõe colocar em prática o conteúdo estudado, será dispo-</p><p>nibilizado na sequência o SCRIPT e os comandos em ordem para que você possa</p><p>digitar e executar a criação de um banco de dados. Lembro que a proposta deste</p><p>exercício é que não seja apenas digitado, mas compreendido.</p><p>Algumas dicas ou sugestões:</p><p>• Você pode digitar isto em um arquivo texto e abrir no Gerenciador de banco</p><p>de dados onde pode ser executado como script.</p><p>• Você pode digitar diretamente no gerenciador, mas tem que ser executado</p><p>como SCRIPT.</p><p>DROP TABLE VENDA;</p><p>DROP TABLE VENDA_ITENS;</p><p>DROP TABLE PRODUTOS;</p><p>DROP TABLE CLIENTES;</p><p>DROP TABLE VENDEDOR;</p><p>CREATE TABLE PRODUTOS (</p><p>PROD_CHAVE INTEGER PRIMARY KEY,</p><p>PROD_DESCRI VARCHAR(60),</p><p>PROD_VPRECO NUMERIC(18,4),</p><p>PROD_UNIDAD VARCHAR(5),</p><p>PROD_FAMILI VARCHAR(10)</p><p>);</p><p>CREATE TABLE CLIENTES (</p><p>CLI_CHAVE INTEGER PRIMARY KEY,</p><p>CLI_TIPOPESSOA CHAR(1),</p><p>CLI_STATUS VARCHAR(15),</p><p>CLI_BAIRRO VARCHAR(30),</p><p>CLI_ESTADO CHAR(2),</p><p>CLI_PAIS VARCHAR(6),</p><p>CLI_INSCRESTADUAL VARCHAR(25),</p><p>CLI_CEP VARCHAR(9),</p><p>CLI_CIDADE VARCHAR(35),</p><p>CLI_CNPJ_CPF VARCHAR(18),</p><p>CLI_ENDERE VARCHAR(60),</p><p>CLI_RAZAOSOCIAL VARCHAR(60),</p><p>CLI_NOMEFANTASIA VARCHAR(30),</p><p>CLI_EMAIL VARCHAR(60)</p><p>);</p><p>CREATE TABLE VENDEDOR (</p><p>VEN_CHAVE INTEGER PRIMARY KEY,</p><p>VEN_NOME VARCHAR(30),</p><p>VEN_CNPJ_CPF VARCHAR(18),</p><p>VEN_TIPOPESSOA CHAR(1),</p><p>VEN_INSCRESTADUAL VARCHAR(25),</p><p>VEN_STATUS VARCHAR(15),</p><p>VEN_EMAIL VARCHAR(60),</p><p>VEN_VPERCENT_COMIS NUMERIC(5,4)</p><p>);</p><p>165</p><p>CREATE TABLE VENDA (</p><p>VDA_CHAVE INTEGER PRIMARY KEY,</p><p>VDA_DMOVTO</p><p>DATE,</p><p>VDA_VDINHEIRO NUMERIC(18,2),</p><p>VDA_VCARTAO NUMERIC(18,2),</p><p>VDA_VCHEQUE NUMERIC(18,2),</p><p>VDA_VPRAZO NUMERIC(18,2),</p><p>VDA_VOUTROS NUMERIC(18,2),</p><p>VDA_VTOTAL NUMERIC(18,2),</p><p>VDA_VRECEB NUMERIC(18,2),</p><p>VDA_VTROCO NUMERIC(18,2),</p><p>VDA_CODCLI_CLI INTEGER,</p><p>VDA_CODVEN_VEN INTEGER,</p><p>VDA_VDESC NUMERIC(18,2),</p><p>FOREIGN KEY (VDA_CODCLI_CLI) REFERENCES VENDA(CLI_CHAVE),</p><p>FOREIGN KEY (VDA_CODVEN_VEN) REFERENCES VENDEDOR(VEN_CHAVE));</p><p>CREATE TABLE VENDA_ITENS (</p><p>VDI_CHAVE_VDA INTEGER,</p><p>VDI_NSEQUEN INTEGER,</p><p>VDI_CODPRO_PROD INTEGER,</p><p>VDI_QQUANTI NUMERIC(18,2),</p><p>VDI_VPREUNI NUMERIC(18,2),</p><p>VDI_VALORITEM NUMERIC(18,2),</p><p>VDI_PERCENTDESC NUMERIC(5,2),</p><p>VDI_QTDEDEVOLV NUMERIC(18,2),</p><p>VDI_DESCPROD VARCHAR(255),</p><p>PRIMARY KEY(VDI_CHAVE_VDA,VDI_NSEQUEN),</p><p>FOREIGN KEY (VDI_CHAVE_VDA) REFERENCES VENDA(VEN_CHAVE),</p><p>FOREIGN KEY (VDI_CODPRO_PROD) REFERENCES PRODUTOS (PROD_CHAVE));</p><p>DELETE FROM VENDA_ITENS;</p><p>DELETE FROM VENDA;</p><p>DELETE FROM PRODUTOS;</p><p>DELETE FROM CLIENTES;</p><p>DELETE FROM VENDEDOR;</p><p>COMMIT;</p><p>/* Inserindo Registros na tabela Produtos*/</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (1, ‘NOBREAK’, 200, ‘UN’, ‘ESCRITÓRIO’);</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (2, ‘NOTEBOOK’, 2500, ‘UN’, ‘ESCRITÓRIO’);</p><p>INSERT INTO PRODUTOS (PROD_CHAVE, PROD_DESCRI, PROD_VPRECO, PROD_</p><p>UNIDAD, PROD_FAMILI) VALUES (3, ‘SABÃO EM PÓ’, 9.00, ‘UN’, ‘LIMPEZA’);</p><p>/* Inserindo Registros na tabela Clientes*/</p><p>INSERT INTO CLIENTES (CLI_CHAVE, CLI_TIPOPESSOA, CLI_STATUS, CLI_</p><p>BAIRRO, CLI_ESTADO, CLI_PAIS, CLI_INSCRESTADUAL, CLI_CEP, CLI_CIDADE,</p><p>CLI_CNPJ_CPF, CLI_ENDERE, CLI_RAZAOSOCIAL, CLI_NOMEFANTASIA, CLI_EMAIL)</p><p>VALUES (1, ‘F’, ‘ATIVO’, ‘JARDIM COLINA’, ‘SP’, ‘BRASIL’, ‘ISENTO’,</p><p>‘67009-490’, ‘CAMPINAS’, ‘090.345.729-49’, ‘RUA JOÃO DE BARRO 946’,</p><p>‘RONALDO DA SILVA’, ‘RONALDO DA SILVA’, ‘ronaldoteste@hotmail.com’);</p><p>INSERT INTO CLIENTES (CLI_CHAVE, CLI_TIPOPESSOA, CLI_STATUS, CLI_</p><p>BAIRRO, CLI_ESTADO, CLI_PAIS, CLI_INSCRESTADUAL, CLI_CEP, CLI_CIDADE,</p><p>CLI_CNPJ_CPF, CLI_ENDERE, CLI_RAZAOSOCIAL, CLI_NOMEFANTASIA, CLI_EMAIL)</p><p>VALUES (2, ‘J’, ‘ATIVO’, ‘ZONA 1’, ‘PR’, ‘BRASIL’, ‘123.123.234’, ‘87009-</p><p>678’, ‘MARINGÁ’, ‘73.486.451/0001-54’, ‘AV. BRASIL 1001’, ‘MERCADO REDE</p><p>CIDADE LTDA’, ‘MERCADO REDE CIDADE’, ‘adm@redecidade.com.br’);</p><p>167</p><p>/* Inserindo Registros na tabela Vendedor*/</p><p>INSERT INTO VENDEDOR (VEN_CHAVE, VEN_NOME, VEN_CNPJ_CPF, VEN_</p><p>TIPOPESSOA, VEN_INSCRESTADUAL, VEN_STATUS, VEN_EMAIL, VEN_VPERCENT_COMIS)</p><p>VALUES (1, ‘MARIA DAS GRAÇAS’, ‘302.027.591-13’, ‘F’, ‘ISENTO’, ‘ATIVO’,</p><p>‘vendas@hotmail.com’, 1.5);</p><p>INSERT INTO VENDEDOR (VEN_CHAVE, VEN_NOME, VEN_CNPJ_CPF, VEN_</p><p>TIPOPESSOA, VEN_INSCRESTADUAL, VEN_STATUS, VEN_EMAIL, VEN_VPERCENT_COMIS)</p><p>VALUES (2, ‘MALU REPRESENTAÇÃO’, ‘48.825.337/0001-64’, ‘J’, ‘ISENTO’,</p><p>‘ATIVO’, ‘comercial@malurepresenta.com.br’, 2.0);</p><p>INSERT INTO VENDA (VDA_CHAVE, VDA_DMOVTO, VDA_VDINHEIRO, VDA_VCARTAO,</p><p>VDA_VCHEQUE, VDA_VPRAZO, VDA_VOUTROS, VDA_VTOTAL, VDA_VRECEB, VDA_VTROCO,</p><p>VDA_CODCLI_CLI, VDA_CODVEN_VEN, VDA_VDESC) VALUES (1, ‘23/01/2015’, 0,</p><p>0, 0, 0, 0, 10900, 10900, 0, 1, 1, 0);</p><p>INSERT INTO VENDA (VDA_CHAVE, VDA_DMOVTO, VDA_VDINHEIRO, VDA_VCARTAO,</p><p>VDA_VCHEQUE, VDA_VPRAZO, VDA_VOUTROS, VDA_VTOTAL, VDA_VRECEB, VDA_VTROCO,</p><p>VDA_CODCLI_CLI, VDA_CODVEN_VEN, VDA_VDESC) VALUES (2, ‘15/02/2015’, 0,</p><p>0, 0, 0, 0, 4800, 5000, 0, 2, 2, 200);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 1, 1, 5, 200, 1000, 0, 0, ‘NOBREAK’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 2, 1, 9, 1000, 9000, 0, 0, ‘NOTEBOOK’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (1, 3, 1, 100, 9.00, 900, 0, 0, ‘SABAO EM PÓ’);</p><p>INSERT INTO VENDA_ITENS (VDI_CHAVE_VDA, VDI_NSEQUEN, VDI_CODPRO_PROD,</p><p>VDI_QQUANTI, VDI_VPREUNI, VDI_VALORITEM, VDI_PERCENTDESC, VDI_QTDEDEVOLV,</p><p>VDI_DESCPROD) VALUES (2, 1, 1, 5, 1000, 5000, 0, 0, ‘NOTEBOOK’);</p><p>COMMIT;</p><p>ALTER TABLE PRODUTOS ADD PROD_DTVENCIMENTO DATE;</p><p>ALTER TABLE PRODUTOS ADD PROD_DESCRCOMPLETA VARCHAR(255);</p><p>ALTER TABLE PRODUTOS ADD PROD_PRECOVENDA NUMERIC(18,4);</p><p>ALTER TABLE CLIENTES ADD CLI_FONECONTATO VARCHAR(14);</p><p>ALTER TABLE CLIENTES ADD CLI_CONTATO VARCHAR(30);</p><p>ALTER TABLE CLIENTES ADD CLI_COMPLEMENTOEND VARCHAR(30);</p><p>ALTER TABLE VENDEDOR ADD VEN_FONECONTATO VARCHAR(14);</p><p>ALTER TABLE VENDEDOR ADD VEN_ENDERECO VARCHAR(60);</p><p>ALTER TABLE VENDEDOR ADD VEN_ESTADO VARCHAR(2);</p><p>ALTER TABLE VENDA ADD VDA_STATUS CHAR(1);</p><p>ALTER TABLE VENDA ADD VDA_CFOP VARCHAR(7);</p><p>ALTER TABLE VENDA ADD VDA_DTENVIO DATE;</p><p>ALTER TABLE VENDA_ITENS ADD VDI_PERCENTICMS NUMERIC(5,4);</p><p>ALTER TABLE VENDA_ITENS ADD VDI_TOTALICMS NUMERIC(18,4);</p><p>ALTER TABLE VENDA_ITENS ADD VDI_VALORIPI NUMERIC(18,4);</p><p>CONCLUSÃO</p><p>169</p><p>Se há uma palavra que possa descrever meu sentimento ao concluir este livro, essa</p><p>talvez seja “alívio”. Sim, entre outras emoções que certamente passam pela minha</p><p>cabeça neste momento, o alívio de poder concluir este material se destaca. Já dizia</p><p>um antigo ditado sobre a arte da escrita e que era direcionado àqueles que preten-</p><p>diam produzir qualquer texto: “o que é escrito sem esforço é lido sem prazer”.</p><p>Não posso assegurar que você, caríssimo(a) leitor(a), conseguirá ler este material</p><p>com o prazer que eu gostaria que lhe proporcionasse – mas não duvide, certamen-</p><p>te, as palavras organizadas neste material foram fruto de um enorme esforço. E não</p><p>somente de esforço, mas também de dor, privação de certas liberdades que me fo-</p><p>ram tomadas pelo tempo dedicado, desespero por querer mais tempo para poder</p><p>esculpir melhor alguns parágrafos e a angústia de saber que, na verdade, o trabalho</p><p>nunca termina – ele apenas possui uma data de término. Tivesse mais seis meses ou</p><p>um ano, certamente não o terminaria antes do prazo final. Mas assim o é também</p><p>em tudo aquilo a que nos dedicamos.</p><p>Certamente, durante a leitura de alguns pontos do material, você pôde perceber a</p><p>grande inspiração que tenho ao falar de desenvolvimento de software. Sou partidário</p><p>da corrente que acredita que o mais importante de todo e qualquer software é o</p><p>problema que ele resolve e o quão satisfatório ele é para seus usuários. Considero</p><p>a utilidade do software como mecanismo fundamental para qualquer inovação</p><p>do conhecimento humano atual. Não me agrada observar alguns programadores</p><p>valorizando uma ferramenta qualquer em detrimento da utilidade do software</p><p>sendo desenvolvido. Esse é um dos motivos pelos quais eu considero o banco de</p><p>dados como apenas um detalhe diante de um projeto maior, que é o uso do próprio</p><p>software. Como já enfatizado nas unidades do material, o banco de dados é apenas</p><p>um detalhe, um detalhe importante, é verdade, mas apenas um detalhe dentro de</p><p>um escopo muito maior, que é a inovação que o software pode proporcionar.</p><p>Ao término deste material, você provavelmente já terá todas as habilidades ne-</p><p>cessárias para integrar um sistema de banco de dados relacional ao software que</p><p>você desenvolve. Saberá escolher as opções do mercado baseado(a) nos critérios</p><p>de classificação que apresentamos – e terá, com certeza, uma pontinha de dúvida a</p><p>respeito de se deve mesmo utilizar um banco de dados relacional. Afinal, as leituras</p><p>complementares, os vídeos e os estudos de caso apresentados no material tinham</p><p>como objetivo provocar o senso crítico para libertá-lo(a) da “prisão relacional”. Abra</p><p>a sua mente e liberte-se de paradigmas preestabelecidos! Saiba decidir qual sistema</p><p>de banco de dados deve escolher baseado(a) nos requisitos e utilidade da sua apli-</p><p>cação, ao invés de tomar decisões baseadas em medo, incerteza e dúvida.</p><p>Se optar por manter-se no</p><p>e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E16</p><p>Um banco de dados é uma coleção de dados relacionados. Os dados</p><p>são fatos que podem ser gravados e que possuem um significado im-</p><p>plícito. Por exemplo, considere nomes, números telefônicos e endere-</p><p>ços de pessoas que você conhece. Esses dados podem ter sido escritos</p><p>em uma agenda de telefones ou armazenados em um computador, por</p><p>meio de programas como o Microsoft Access ou Excel. Essas informa-</p><p>ções são uma coleção de dados com um significado implícito, conse-</p><p>quentemente, um banco de dados.</p><p>Nossos bancos de dados podem ser coleções de dados relacionados dos mais</p><p>diversos tamanhos. Desde uma pequena agenda, contendo números e contatos</p><p>de pessoas, até um índice gigantesco de páginas de Internet e buscas relaciona-</p><p>das ou todas as mensagens e informações trocadas entre bilhões de usuários de</p><p>uma rede social.</p><p>Em termos computacionais, há uma categoria de software especializado que</p><p>é desenvolvido especificamente com o propósito de se gerenciar essas coleções de</p><p>dados: os sistemas gerenciadores de banco de dados – popularmente reconhecidos</p><p>pela sigla SGBD (ou DBMS – DataBase Management Systems, na sigla original</p><p>em inglês). Segue mais uma definição de Navathe (2011, p. 3) sobre o termo:</p><p>Um sistema gerenciador de banco de dados (SGBD) é uma coleção</p><p>de programas que permite aos usuários criar e manter um banco de</p><p>dados. O SGBD é, portanto, um sistema de software de propósito geral</p><p>que facilita os processos de definição, construção, manipulação e com-</p><p>partilhamento de bancos de dados entre vários usuários e aplicações. A</p><p>definição de um banco de dados implica especificar os tipos de dados,</p><p>as estruturas e as restrições para os dados a serem armazenados em um</p><p>banco de dados.</p><p>Embora não seja necessário utilizar um SGBD para se desenvolver quaisquer</p><p>sistemas de software, tal opção não se mostra viável. Relembrando o nosso con-</p><p>ceito, de que a importância do software consiste em sua capacidade de se gerar</p><p>valor com as informações que manipula, tem-se que implementar nosso pró-</p><p>prio mecanismo de manipulação de dados lembrando que nossas aplicações</p><p>não geram valor, somente custo. É por esse motivo que atualmente definimos</p><p>os SGBDs em uma categoria de software que consideramos como commodity.</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>17</p><p>Exemplos de SGBDs relacionais (mais tradicionais e consolidados) incluem</p><p>Oracle, DB2, SQL Server, Access, PostgreSQL, MySQL, Derby e H2. Já exem-</p><p>plos de SGBDs não relacionais (também conhecidos como NoSQL) incluem</p><p>MongoDB, Redis, Neo4j e Riak.</p><p>Para propósitos de definição, finalizaremos denominando o conjunto for-</p><p>mado pelo banco de dados e o sistema que o gerencia, o SGBD, de Sistema de</p><p>Banco de Dados.</p><p>BANCOS DE DADOS OPEN SOURCE: PRESENTE OU FUTURO?</p><p>Cezar Taurion</p><p>Nos eventos sobre Open Source, volta e meia surge uma pergunta sobre bancos de da-</p><p>dos Open Source. Bem, tenho minha opinião pessoal e quero compartilhar com você.</p><p>Vamos ver se vai gerar muita discordância.</p><p>Os softwares de banco de dados são um dos mais importantes componentes de softwa-</p><p>re de uma organização. Nesse ambiente, as alternativas de software livre já são bastante</p><p>conhecidas e frequentemente são mencionadas na mídia, como MySQL, PostgreSQL,</p><p>Ingres e Derby.</p><p>O MySQL é um produto de uma empresa privada, a MySQL AB. Seu código é desenvolvi-</p><p>do pelos funcionários da empresa e com isso ela garante a propriedade intelectual sobre</p><p>o produto. Existe uma comunidade envolvida, mas submissões de código são restritas</p><p>apenas à correção de bugs. Uma pergunta: o MySQL pode ser considerado realmente</p><p>Open Source, uma vez que não adota o modelo de desenvolvimento colaborativo? O</p><p>MySQL é ofertado tanto em GPL como sob licença comercial. As duas versões são fun-</p><p>cionalmente equivalentes, sendo diferenciadas pelo nível de suporte e certificação. In-</p><p>discutivelmente é o banco de dados Open Source mais popular, com o maior mindshare</p><p>do setor.</p><p>Outro software é o PostgreSQL, que tem suas origens no Postgres desenvolvido pela</p><p>Universidade de Berkeley. Podemos citar também o Ingres, que foi um banco de dados</p><p>da Computer Associates e agora pertence a uma organização independente, a Ingres</p><p>Corporation (<www.ingres.com>) e o Derby, originalmente o Cloudscape da IBM e re-</p><p>centemente doado para a Apache Software Foundation, onde agora é o projeto Derby.</p><p>O Derby (<http://db.apache.org/derby/>) é um banco de dados em Java, geralmente</p><p>embarcado em outros softwares. A IBM, por exemplo, o utiliza embutido em diversos</p><p>softwares das famílias WebSphere, Tivoli e Lotus.</p><p>Nas minhas andanças pelo mercado tenho visto que na prática os bancos de dados</p><p>Open Source só aparecem como competidores dos produtos mais avançados nas apli-</p><p>cações pouco sofisticadas ou bem específicas.</p><p>Por sua vez, os sistemas de banco de dados proprietários buscam competir com funcio-</p><p>nalidades diferenciadoras, principalmente as relacionadas com administração de am-</p><p>bientes complexos; escalabilidade; desempenho com grande volume de transações; alta</p><p>disponibilidade e capacidade de recuperação rápida; e recursos de data warehousing.</p><p>Além disso, foi criado um ecossistema de negócios em torno dos principais softwares de</p><p>banco de dados proprietários, com diversas empresas independentes oferecendo ferra-</p><p>mentas de software complementares (geradores de relatórios, analisadores estatísticos</p><p>e outros), serviços de suporte técnico especializado e formação de recursos humanos,</p><p>e assim por diante, o que também cria uma barreira de entrada difícil de transpor por</p><p>qualquer novo entrante.</p><p>19</p><p>Já o ecossistema empresarial criado em torno dos bancos de dados Open Source (onde</p><p>se gera dinheiro) ainda é incipiente, sendo formado por pequenas empresas com</p><p>abrangência de atuação bastante limitada. Ano passado, a MySQL gerou cerca de 50</p><p>milhões de dólares em receita (<http://news.com.com/MySQL+hits+50+million+reve-</p><p>nue,+plans+IPO/2100-7344_3-6179290.html>), mas ainda é um traço (cerca de 0,03%)</p><p>no gráfico que mostra o mercado global de bancos de dados relacionais, estimado pelo</p><p>IDC em 16 bilhões de dólares. Como comparativo, o IDC estima que, nesse mesmo ano,</p><p>a receita da IBM com a família de produtos DB2 foi de aproximadamente 3,5 bilhões de</p><p>dólares.</p><p>Qual o papel que os bancos de dados Open Source desempenharão? Na minha opinião,</p><p>estarão atuando (pelo menos nos próximos 3 a 4 anos) na chamada faixa de produtos</p><p>com funcionalidades comoditizadas, onde as características de preço são as de maior</p><p>importância. Os usuários típicos serão organizações e aplicações que não precisam de</p><p>recursos mais sofisticados.</p><p>Como avaliar a qualidade de um banco de dados Open Source? Existem diversos crité-</p><p>rios que podem e devem ser considerados em uma análise para seleção de um banco de</p><p>dados. Os níveis de importância das variáveis da análise estão diretamente relacionados</p><p>com os objetivos do negócio e das necessidades a serem impostas aos softwares de</p><p>bancos de dados.</p><p>Alguns dos principais fatores a serem considerados são:</p><p>a. Recursos de gerenciamento e administração. São as ferramentas de apoio às ta-</p><p>refas do administrador do banco de dados.</p><p>b. Desempenho e escalabilidade. Os recursos que o software oferece para garantir</p><p>desempenho adequado, nos volumes de transações que serão demandados.</p><p>c. Recursos técnicos. Disponibilidade de recursos como triggers, stored procedu-</p><p>res, cursors, subqueries, capacidade de replicação, recursos de indexação, aderência</p><p>a padrões (ANSI SQL), particionamento, backup/recovery, suporte a dados não es-</p><p>truturados, independência de plataforma e recursos de segurança.</p><p>d. Custos de Propriedade.</p><p>e. Suporte técnico e disponibilidade de recursos humanos. Abrangência do ecos-</p><p>sistema em termos de serviços de suporte e qualificação de recursos humanos.</p><p>f. Disponibilidade de aplicativos.</p><p>g. Recursos de data warehousing e BI.</p><p>ambiente dos sistemas de bancos de dados relacionais,</p><p>já terá todos os meios para criar, manipular, popular e consultar bancos de dados re-</p><p>lacionais, graças aos conhecimentos de SQL adquiridos. A lista deste material certa-</p><p>mente não é exaustiva, mas é um bom começo. Afinal, a jornada do conhecimento</p><p>nunca acaba.</p><p>CONCLUSÃO</p><p>Baseado(a) em tudo o que você pôde aprender, aproveite bem e utilize todo o con-</p><p>teúdo que tentamos transmitir para desenvolver um bom software, software inova-</p><p>dor. É isso o que nós, sinceramente, desejamos para sua frutífera jornada, que está</p><p>apenas começando. Bom proveito, boa sorte e, acima de tudo, muito sucesso!</p><p>Um grande abraço!</p><p>REFERÊNCIAS</p><p>171</p><p>10 curiosidades sobre o Google. Olhar Digital. Disponível em: <http://olhardigital.</p><p>uol.com.br/noticia/10-fatos-curiosos-sobre-o-google/34841>. Acesso em: 6 jul. 2015.</p><p>CAMPOS, M. M. PostgreSQL: um banco de dados para todos. Serpro. Disponível</p><p>em: <http://www4.serpro.gov.br/imprensa/publicacoes/tema-1/antigas%20temas/</p><p>tema-200/materias/artigos>. Acesso em: 9 jul. 2015.</p><p>CARDOSO, V.; CARDOSO, G. Sistema de Banco de Dados: uma abordagem introdu-</p><p>tória e aplicada. São Paulo: Saraiva, 2012.</p><p>CESAR. G. Bancos de Dados Livres Crescem no Brasil. ComputerWorld. 2005.</p><p>Disponível em: <http://computerworld.com.br/tecnologia/2005/08/18/idgnoti-</p><p>cia.2006-05-15.4431159825>. Acesso em: 16 jul. 2015.</p><p>CHEN, Peter. Gerenciando Banco de Dados: A Abordagem Entidade-Relaciona-</p><p>mento para Projeto Lógico. São Paulo: McGraw-Hill, 1990. 80 p.</p><p>DATE, C. J. Bancos de dados: tópicos avançados. Rio de Janeiro: Campus, 1988.</p><p>HAMANN, R. 9 áreas da tecnologia com carreiras promissoras (e como aproveitá-las).</p><p>Tecmundo. Disponível em: <http://www.tecmundo.com.br/mercado/77008-9-are-</p><p>as-tecnologia-carreiras-promissoras-aproveita-las.htm>. Acesso em: 8 jul. 2015.</p><p>HARRISON, G. 10 things you should know about NoSQL. TechRepublic. Disponível</p><p>em: <http://www.techrepublic.com/blog/10things/10-things-you-should-know-</p><p>-about-nosql-databases/1772>. Acesso em: 8 jul. 2015.</p><p>HEUSER, C. A. Projeto de banco de dados. 6. ed. Porto Alegre: Bookman, 2009.</p><p>KNUTH, D. Structured Programming with go to Statements. ACM Journal Comput-</p><p>ing Surveys, 6 (4): 268. Dez. 1974.</p><p>NAVATHE, S. B.; ELMASRI, R. Sistemas de Banco de Dados.</p><p>6. ed. Pearson - Addison Wesley, 2011.</p><p>PRITCHET, E. Base: an acid alternative. ACMQUEUE. Disponível em: <http://queue.</p><p>acm.org/detail.cfm?id=1394128>. Acesso em: 7 jul. 2015.</p><p>REES, R. NoSQL Comparison. Thoughtworks. Disponível em: <http://www.though-</p><p>tworks.com/articles/nosql-comparison>. Acesso em: 8 jul. 2015.</p><p>SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de banco</p><p>de dados. São Paulo: Makron Books do Brasil, 1999.</p><p>TAURION, C. A revolução do Big Data está prestes a acontecer. iMaster. Disponível</p><p>em: <http://imasters.com.br/artigo/23437/banco-de-dados/a-revolucao-do-big-</p><p>-data-esta-prestes-a-acontecer>. Acesso em: 7 jul. 2015.</p><p>TAURION, C. Banco de dados Open Source: presente ou futuro? IBM. Disponível em:</p><p><https://www.ibm.com/developerworks/mydeveloperworks/blogs/ctaurion/en-</p><p>try/bancos_de_dados_open_source?lang=pt_br>. Acesso em: 6 jul. 2015.</p><p>ZHANG, J. Banco de dados na nuvem. IBM. Disponível em: <http://www.ibm.com/</p><p>developerworks/br/data/library/dmmag/DMMag_2011_Issue2/cloudDBaaS/>.</p><p>Acesso em: 6 jul. 2015..</p><p>GABARITO</p><p>UNIDADE I</p><p>1. Atomicidade se reflete, por exemplo, em transações bancárias. Enquanto o com-</p><p>provante ou outra forma de confirmação da transação não é recebido por um clien-</p><p>te em um caixa eletrônico, a transação não é concretizada, pois esta característica</p><p>visa garantir que as operações sempre ocorram por completo.</p><p>Consistência se aplica a situações onde a impressão de um extrato bancário só é</p><p>impresso se todos os dados que devam estar contidos nele já tenham sido proces-</p><p>sados de forma confiável, garantindo que a informação exibida é fiel aos dados reais</p><p>do banco de dados.</p><p>Isolamento é extremamente útil em bancos de dados com acesso remoto de mul-</p><p>tiusuários como ocorre em terminais de autoatendimento de bancos onde mais de</p><p>uma pessoa pode estar simultaneamente acessando os mesmos dados, como em</p><p>sistemas de consulta de preços em lojas.</p><p>Durabilidade se refere a situações como a de transações bancárias terem a garantia</p><p>de terem ocorrido de maneira completa, e sem o risco de interrupções não progra-</p><p>madas que possam gerar a perda de informações parciais ou totais da transação</p><p>por motivos diversos como interrupções na corrente elétrica, ou incidentes naturais.</p><p>2. Quando há a necessidade do armazenamento de apenas um tipo de dado, um ar-</p><p>quivo comum de texto pode resolver o problema, sem a necessidade de implemen-</p><p>tação de um sistema de gerenciamento destes dados, ou em casos onde os dados</p><p>armazenados sejam extremamente simples como na configuração e um maquinário.</p><p>Uma combinação destes tipos de sistemas de armazenamento de dados em um</p><p>sistema pode ocorrer devido a diferentes formas de tratamento de dados, sendo</p><p>por exemplo possível a existência de arquivos de texto contendo entradas de dados</p><p>vindos de um equipamento ser um SGBD que serve para alimentar um SGBD mais</p><p>complexo como pode ocorrer em sistemas de monitoramento de maquinário em</p><p>uma indústria, por exemplo.</p><p>3. Uma base de dados pode ser acessada por mais de um sistema SGBD simulta-</p><p>neamente, e este isolamento, aumenta a consistência da base de dados, pois cada</p><p>acesso de um SGBD a base funciona de forma mais segura.</p><p>UNIDADE II</p><p>1) A partir do estudado nesta unidade, defina Entidades Concretas e Entidades Abstratas.</p><p>R: Entidades Concretas são entendidas como objetos do mundo real que podem ser</p><p>separadas e distinguíveis de outro objeto. Já as Entidades Abstratas são aquelas que</p><p>não temos de maneira tangível (intangível).</p><p>GABARITO</p><p>173</p><p>2) Crie uma Entidade Produtos com os seguintes atributos:</p><p>a) Código do Produto</p><p>b) Descrição do Produto</p><p>c) Unidade do Produto</p><p>d) Valor do Produto</p><p>e) Classifi cação do Produto</p><p>f ) Valor Custo do Produto</p><p>3) Analise as frases abaixo e crie as possíveis entidades:</p><p>a) “... o atendente matricula o aluno no curso de Administração...”.</p><p>Atendente Matrícula Aluno Curso</p><p>b) “... a secretária agenda pacientes para atendimento médico…”.</p><p>Secretária Pacientes MédicoAgenda ou</p><p>Atendimento</p><p>c) “...é necessário cadastrar os produtos para realizar as vendas aos clientes...”</p><p>Vendas ClientesProdutos</p><p>GABARITO</p><p>UNIDADE III</p><p>1. CREATE TABLE aluno (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>sobrenome VARCHAR(30),</p><p>ra DECIMAL(8),</p><p>email VARCHAR(30)</p><p>);</p><p>CREATE TABLE professor (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>sobrenome VARCHAR(30),</p><p>titulacao VARCHAR(30)</p><p>);</p><p>CREATE TABLE curso (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>ano DECIMAL(4)</p><p>);</p><p>CREATE TABLE matricula (</p><p>curso_fk INT NOT NULL,</p><p>aluno_fk INT NOT NULL,</p><p>PRIMARY KEY (curso_fk, aluno_fk),</p><p>FOREIGN KEY (curso_fk) REFERENCES curso(id),</p><p>FOREIGN KEY (aluno_fk) REFERENCES aluno(id)</p><p>);</p><p>CREATE TABLE disciplina (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>curso_fk INT NOT NULL,</p><p>professor_fk INT NOT NULL,</p><p>FOREIGN KEY (curso_fk) REFERENCES curso(id),</p><p>FOREIGN KEY (professor_fk) REFERENCES professor(id)</p><p>);</p><p>GABARITO</p><p>175</p><p>2.a. SELECT aluno.nome FROM aluno, curso, matricula WHERE curso.</p><p>nome=”Banco de Dados” AND curso.id=matricula.curso_fk AND matricula.</p><p>aluno_fk=aluno.id;</p><p>2.b. SELECT professor.titulacao FROM professor, disciplina WHERE disciplina.</p><p>nome=”SQL” AND disciplina.professor_fk=professor.id;</p><p>2.c. Select aluno.nome, aluno.sobrenome, aluno.ra from aluno, matricula,</p><p>curso, disciplina, professor where matricula.aluno_fk=aluno.id AND matricula.</p><p>curso_fk=curso.id AND disciplina.curso_fk=curso.id AND disciplina.professor_</p><p>fk=professor.id AND professor.nome=’Edson’;</p><p>2.d. SELECT id, nome, ano FROM curso WHERE ano>1990;</p><p>3. Exemplos de comandos para esta atividade, lembrando que podemos gerar</p><p>inúmeros comandos, INSERT para ter maior quantidade de dados para mani-</p><p>pular com os comandos UPDATE e DELETE</p><p>INSERT INTO aluno (id,</p><p>nome, sobrenome, ra, email) VALUES (“1”, “João”, “Silva”,</p><p>“100000”, “jao@email.com”);</p><p>UPDATE curso SET ano=”2016” WHERE nome=”Banco de Dados”</p><p>DELETE FROM professor WHERE id=”5”</p><p>UNIDADE IV</p><p>1. CREATE TABLE plano (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>valor DECIMAL(7,2)</p><p>);</p><p>CREATE TABLE beneficiario (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>GABARITO</p><p>sobrenome VARCHAR(30),</p><p>altura DECIMAL(3,2),</p><p>plano_fk INT,</p><p>FOREIGN KEY (plano_fk) REFERENCES plano(id)</p><p>);</p><p>CREATE TABLE dependente (</p><p>id INT PRIMARY KEY,</p><p>nome VARCHAR(30),</p><p>sobrenome VARCHAR(30),</p><p>beneficiario_fk INT NOT NULL,</p><p>FOREIGN KEY (beneficiario_fk) REFERENCES beneficiario(id)</p><p>);</p><p>2.a. SELECT beneficiario.nome FROM beneficiario INNER JOIN dependente</p><p>ON beneficiario.nome = dependente.nome;</p><p>2.b. SELECT beneficiario.nome FROM beneficiario WHERE nome IN ( SELECT</p><p>nome FROM dependente WHERE beneficiario.nome = dependente.nome );</p><p>2.c. SELECT beneficiario.nome FROM beneficiario WHERE EXISTS ( SELECT *</p><p>FROM dependente WHERE beneficiario.nome = dependente.nome );</p><p>2.d. SELECT nome FROM beneficiario WHERE ( SELECT MAX(altura) from</p><p>dependente );</p><p>3.a. SELECT sobrenome, altura FROM beneficiario GROUP BY nome;</p><p>3.b. SELECT beneficiario.nome FROM beneficiario WHERE ( SELECT COUNT(*)</p><p>FROM dependente WHERE dependente.beneficiario_fk=beneficiario.id and</p><p>dependente.sobrenome=beneficiario.sobrenome</p><p>GROUP BY beneficiario.nome) > 1</p><p>3.c. SELECT plano.nome FROM plano WHERE ( SELECT COUNT(*) FROM benefi-</p><p>ciario WHERE beneficiario.altura > 1.75 AND beneficiario.plano_fk = plano.id );</p><p>Banco de Dados_A</p><p>texto</p><p>_GoBack</p><p>UNIDADE I</p><p>INTRODUÇÃO À ATUÁRIA</p><p>Introdução</p><p>As Origens dos Conceitos de Atuária</p><p>Seguros - Conceitos Básicos</p><p>Os Seguros no Brasil</p><p>Entendendo os Elementos de um Seguro</p><p>Legislação de Seguros</p><p>Os Instrumentos do Contrato de Seguros</p><p>Considerações Finais</p><p>UNIDADE II</p><p>CLASSIFICAÇÃO</p><p>DE SEGUROS</p><p>Introdução</p><p>Classificação de Seguros</p><p>Seguros de Pessoas</p><p>Seguros sobre Patrimônio</p><p>Seguro Incêndio</p><p>Seguro Dpvat</p><p>Considerações Finais</p><p>UNIDADE III</p><p>PRODUTOS FINANCEIROS</p><p>Introdução</p><p>Produtos Financeiros</p><p>Poupança</p><p>Fundos de Investimento</p><p>O Risco do Investimento em Fundos</p><p>Fundos de Investimentos Imobiliários</p><p>Tesouro Direto</p><p>Títulos de Capitalização</p><p>Considerações Finais</p><p>UNIDADE IV</p><p>PREVIDÊNCIA PÚBLICA</p><p>E PRIVADA</p><p>Introdução</p><p>Origem da Renda</p><p>Previdência Complementar Privada</p><p>A Previdência Oficial</p><p>Considerações Finais</p><p>UNIDADE V</p><p>GERENCIAMENTO DE RISCOS ATUARIAIS</p><p>Introdução</p><p>Provisões Técnicas e Limites Operacionais</p><p>Exposição ao Risco</p><p>A Gestão de Risco Atuarial</p><p>Compreendendo os Tipos de Risco</p><p>Riscos de Mercado</p><p>Riscos Operacionais</p><p>Riscos de Crédito</p><p>Riscos Legais</p><p>Considerações Finais</p><p>Conclusão</p><p>Referências</p><p>h. Recursos de desenvolvimento de aplicações.</p><p>i. Modalidade de licenciamento.</p><p>j. Visão, estratégia e road map do produto.</p><p>k. Tamanho e participação/envolvimento da comunidade.</p><p>l. Modelo de governança adotado pela comunidade.</p><p>m. Base instalada e adoção pelo mercado.</p><p>Bem e quanto a uma pergunta que muitos me fazem... Minha empresa deve adotar um</p><p>banco de dados Open Source? Para mim, para mudar um software de banco de dados</p><p>deve haver uma estratégia impulsionada por razões fortes e consistentes. Por exemplo,</p><p>se houver desconfianças que o atual fornecedor esteja saindo do mercado; falta de fun-</p><p>cionalidade do software (não é mais adequado às necessidade das novas aplicações da</p><p>empresa); falta de visão estratégica por parte do fornecedor do software atual; custos de</p><p>manutenção e operação muito elevados para o resultado obtido; falta de pessoal gaba-</p><p>ritado, que esteja disponível no mercado; carência de consultorias e serviços de suporte</p><p>externos; relacionamento com o fornecedor cada vez mais deteriorado... Mudar para um</p><p>banco de dados Open Source simplesmente por questões ideológicas deve estar fora de</p><p>cogitação, pois banco de dados é muito sério para ser tratado de forma simplista.</p><p>OK. E quais seriam então os custos e riscos da migração? Existem custos de migração</p><p>que não podem ser subestimados. Temos os custos da conversão de dados, custos da</p><p>codificação, testes e o que chamamos reconciliação entre as aplicações no novo e no</p><p>antigo ambiente, sempre considerando que dificilmente conseguiremos fazer uma mi-</p><p>gração estilo big bang, mas que esta será gradual.</p><p>Quanto mais complexas forem as aplicações a serem convertidas, mais custosa será a</p><p>migração. Essa complexidade pode ser medida pelo número de programas, número de</p><p>tabelas relacionais, restrições de integridade referencial e tamanho do banco de dados.</p><p>Existem custos indiretos como a construção de interfaces entre as aplicações já con-</p><p>vertidas e as que ainda estão no banco de dados antigo. Também os custos de supor-</p><p>te técnicos aos dois ambientes implicam, muitas vezes, em gastos adicionais elevados,</p><p>principalmente quando o novo banco de dados não for de completo domínio da equipe</p><p>técnica da empresa.</p><p>Em resumo, os custos da migração afetam os cálculos de custos totais de propriedade. A</p><p>maioria das empresas é extremamente cautelosa em trocar de fornecedor de softwares</p><p>críticos. O perigo de uma interrupção nos seus negócios decorrente de uma troca mal</p><p>planejada ou inadequada faz com que os custos de troca possam ser extremamente</p><p>elevados e desestimuladores. Migrar de um banco de dados para outro é sempre uma</p><p>tarefa complexa e de alto risco, que só deve ser efetuada quando os benefícios forem</p><p>claramente demonstráveis.</p><p>Fonte:Taurion (2007, online).</p><p>Características de Sistemas de Bancos de Dados</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>21</p><p>CARACTERÍSTICAS DE SISTEMAS DE BANCOS DE</p><p>DADOS</p><p>Se utilizar um sistema de banco de dados parece uma solução natural, qual seria</p><p>a solução alternativa? Pense em algumas aplicações que você utiliza e que não</p><p>fazem uso de SGBDs. Processadores de texto, planilhas, ferramentas de dese-</p><p>nho etc. são alguns exemplos dessas aplicações. O que todas têm em comum? A</p><p>necessidade de se armazenar a informação manipulada por meio de arquivos.</p><p>Em qualquer aplicação que necessite do armazenamento de dados, faz-se</p><p>necessário dispor de algum mecanismo que permita que esses sejam gravados</p><p>de modo persistente. A abordagem de arquivos tem suas vantagens, como, por</p><p>exemplo, a portabilidade dos dados. Você pode carregá-los eletrônica ou fisica-</p><p>mente para locais diferentes de modo bastante simples. Mas entre as desvantagens</p><p>dessa abordagem há todo o trabalho necessário para se criar um formato e pro-</p><p>cessar a sua gravação e recuperação – e, acredite, não é pouco trabalho!</p><p>Um SGBD, por outro lado, já dispõe de uma série de funcionalidades prontas</p><p>para serem utilizadas pelo desenvolvedor da aplicação. Desse modo, uma série</p><p>de preocupações passa a ser delegada a um software de terceiros (o SGBD). A</p><p>seguir, apresentaremos uma série de características que diferenciam a aborda-</p><p>gem de sistemas de banco de dados da manipulação manual das informações</p><p>(como em arquivos, por exemplo).</p><p>Natureza autodescritiva: uma característica fundamental que distingue os</p><p>sistemas de bancos de dados de outras abordagens é o fato de que, nos SGBDs, o</p><p>banco de dados e as metainformações sobre o banco de dados são armazenados</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E22</p><p>conjuntamente. Essas metainformações armazenadas contêm informações como</p><p>o tipo, o tamanho e as restrições do banco de dados. Em termos técnicos, as</p><p>metainformações são chamadas de esquema (ou schema, em seu termo origi-</p><p>nal em inglês).</p><p>Isolamento entre Programa e Dados: numa aplicação que utilize arquivos</p><p>para o armazenamento de dados, quaisquer alterações na estrutura do arquivo</p><p>também implicarão em alterações no programa. Nesse caso, dizemos que o pro-</p><p>grama é altamente acoplado à sua estrutura de armazenamento de dados. Em</p><p>contraste, SBGDs permitem que o programa somente informe quais dados são</p><p>armazenados, sem se importar em como esses dados serão manipulados inter-</p><p>namente. Essa característica aumenta bastante o nível de manutenibilidade do</p><p>sistema, quando bem aplicada.</p><p>Múltiplas visões dos dados: estas não são uma característica fundamen-</p><p>tal, mas muitos SGBDs fornecem a possibilidade de que diferentes usuários</p><p>com diferentes permissões possam acessar diferentes “visões” dos dados. Essas</p><p>visões (views) correspondem a estruturas virtuais criadas a partir dos dados</p><p>armazenados e podem conter, além dos próprios dados, informações derivadas</p><p>(calculadas) a partir desses dados.</p><p>A criação de diferentes usuários com diferentes permissões a visões específicas</p><p>é uma abordagem muito utilizada em sistemas cliente/servidor ou na integra-</p><p>ção de aplicações mediante banco de dados. O auge do uso dessas abordagens</p><p>deu-se no final da década de 1990, embora ainda hoje seja possível testemu-</p><p>nhar aplicações sendo executadas sob esse modelo. Recomenda-se fortemente</p><p>que, no desenvolvimento de novas aplicações, a abordagem de múltiplas visões</p><p>e de integração mediante banco de dados seja substituída por uma abordagem</p><p>orientada a serviços como SOA (Service Oriented Architecture) ou como REST</p><p>(REpresentational State Transfer).</p><p>Visões não são uma má prática. São um recurso bastante útil, mas não</p><p>imprescindível. Como toda ferramenta, quando bem utilizada e de modo ade-</p><p>quada, é um recurso valioso.</p><p>Características de Sistemas de Bancos de Dados</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>23</p><p>Acesso concorrente de múltiplos usuários: um SGBD multiusuário, como</p><p>o próprio nome já define, deve permitir o acesso de múltiplos usuários. Além</p><p>disso, o acesso deve ser concorrente, permitindo que todos os usuários conec-</p><p>tados executem operações “ao mesmo tempo”.</p><p>Vale a pena refletir sobre dois termos muitas vezes utilizados de forma errô-</p><p>nea na área de Tecnologia da Informação: “paralelo” e “concorrente”. Paralelismo</p><p>puro é algo raro em computação, embora seja perfeitamente possível. Ao lidar-</p><p>mos com sistemas de banco de dados, utilizamos o termo “concorrente”, pois</p><p>vários usuários têm a impressão de que estão executando instruções ao mesmo</p><p>tempo – quando na verdade, por se tratar de informações acessadas em disco</p><p>ou com um único barramento de acesso, torna-se necessário algum mecanismo</p><p>de contenção que serialize (coloque em fila) cada uma dessas instruções. Como</p><p>idealmente a execução dessas instruções é bastante curta, tem-se a impressão</p><p>do pseudoparalelismo.</p><p>Um conceito fundamental para que o acesso desses múltiplos usuários man-</p><p>tenha o</p><p>banco de dados num estado consistente é o mecanismo de transações,</p><p>que será descrito no próximo tópico.</p><p>A REVOLUÇÃO DO BIG DATA ESTÁ PRESTES A ACONTECER</p><p>Cezar Taurion</p><p>O termo Big Data começa a despertar muita atenção, mas ainda é um conceito mal de-</p><p>finido e compreendido. Com uma rápida pesquisa no Google, identifiquei, pelo menos,</p><p>uma dúzia de definições. Neste artigo, vou falar um pouco sobre o assunto e debater</p><p>alguns desafios que temos para conseguir colocar projetos de Big Data em ação.</p><p>Sem entrar em definições e nos atendo apenas a conceitos, podemos resumir com uma</p><p>fórmula simples o que é Big Data: volume + variedade + velocidade de dados. Volume</p><p>porque, além dos dados gerados pelos sistemas transacionais, temos a imensidão de da-</p><p>dos gerados pelos objetos na Internet das Coisas, como sensores e câmeras, e os gerados</p><p>nas mídias sociais, via PCs, smartphones e tablets. Variedade porque estamos tratando</p><p>tanto de dados textuais estruturados quanto dos não estruturados, como fotos, vídeos,</p><p>emails e tuítes. E, por fim, velocidade porque, muitas vezes, precisamos responder aos</p><p>eventos quase que em tempo real. Ou seja, estamos falando de criação e tratamento de</p><p>dados em volumes massivos.</p><p>Outro desafio: criar e tratar apenas de dados históricos, como o veterano Data Warehou-</p><p>se e as tecnologias de BI (Business Intelligence) começam a se mostrar lentos demais</p><p>para a velocidade com que os negócios precisam tomar decisões. Aliás, o termo BI já tem</p><p>mais de 50 anos. Ele foi cunhado por Hans Peter Luhn, pesquisador da IBM em um artigo</p><p>escrito nos idos de 1958.</p><p>Quando falamos em volume, os números são gigantescos. Se olharmos globalmente,</p><p>estamos falando em zetabytes ou 10²¹ bytes. Grandes corporações armazenam múlti-</p><p>plos petabytes e mesmo as pequenas e médias empresas trabalham com dezenas de</p><p>terabytes de dados. Esse volume tende a crescer geometricamente. Em um mundo cada</p><p>vez mais competitivo e rápido, as empresas precisam tomar decisões baseadas não ape-</p><p>nas em palpites, mas em dados concretos. Assim, para um setor de marketing, faz todo</p><p>sentido ter uma visão 360° de um cliente, olhando não apenas o que ele comprou da</p><p>empresa, como registrado no ERP, mas saber o que ele pensa e diz sobre a empresa e</p><p>como os faz - pelo Facebook e Twitter, por exemplo.</p><p>Hoje, já é consenso que dados são os recursos naturais da nova Revolução Industrial. Na</p><p>atual sociedade industrial, ter apenas recursos naturais, como minério, e exportá-los de</p><p>forma bruta - importando em troca produtos manufaturados - não garante a competiti-</p><p>vidade de um país no longo prazo. O importante é a tecnologia e o conhecimento que</p><p>cria produtos manufaturados. Afinal, um quilo de satélite vale imensamente mais do</p><p>que um quilo de minério de ferro.</p><p>Fazendo um paralelo, na sociedade da informação, é crucial saber tratar dos dados na</p><p>velocidade adequada. Dados não tratados e analisados em tempo hábil são dados inú-</p><p>teis, pois não geram informação. Dados passam a ser ativos corporativos importantes e,</p><p>como tal, podem - e deverão - ser quantificados economicamente.</p><p>25</p><p>Big Data representa um desafio tecnológico, pois demanda atenção à infraestrutura e</p><p>tecnologias analíticas. O processamento de volumes massivos de dados pode ser facili-</p><p>tado pelo modelo de computação em nuvem, desde, é claro, que esse imenso volume</p><p>não seja transmitido repetidamente via Internet. Só para lembrar, os modelos de co-</p><p>brança pelo uso de nuvens públicas tendem a gerar processamentos muito baratos, mas</p><p>tornam caro a transmissão de muitos dados.</p><p>A principal base tecnológica para Big Data Analytics é o Hadoop e os bancos de dados</p><p>NoSQL, onde “No” significa Not Only SQL, ou seja, usa-se bases de dados SQL e não SQL.</p><p>A importância do “Not Only” SQL explica-se pelo fato do modelo relacional ser base-</p><p>ado na época de sua criação, no início dos anos 70. Nessa época, acessar, categorizar</p><p>e normalizar dados era bem mais fácil do que hoje. Praticamente não existiam dados</p><p>não estruturados circulando pelos computadores da época. Também não foi desenhado</p><p>para escala massiva ou para um processamento muito rápido. Seu objetivo básico era</p><p>possibilitar a criação de queries que acessassem bases de dados corporativas e, portan-</p><p>to, estruturadas. Para soluções Big Data, tornam-se necessárias várias tecnologias, desde</p><p>bancos de dados SQL a softwares que utilizem outros modelos, que lidem melhor com</p><p>documentos, grafos, processamento paralelo etc.</p><p>A complexidade do Big Data vem à tona quando lembramos que não estamos falan-</p><p>do apenas de armazenamento e tratamento analítico de volumes massivos de dados,</p><p>mas de revisão, ou criação, de processos que garantam a qualidade desses dados e de</p><p>processos de negócios que usufruam dos resultados obtidos. Portanto, Big Data não</p><p>é apenas um debate sobre tecnologias, mas, principalmente, sobre como os negócios</p><p>poderão usufruir da montanha de dados que está agora à sua disposição. Aí emerge a</p><p>questão da integração: como integrar bases de dados estruturadas e não estruturadas</p><p>com diversos softwares envolvidos?</p><p>O Big Data abre oportunidades profissionais bem amplas. Na minha opinião, existe es-</p><p>paço para dois perfis profissionais: um mais voltado para os negócios e qualificados para</p><p>tratar analiticamente as informações geradas por essas imensas bases de dados e outro</p><p>com viés mais técnico ou Data Architect.</p><p>Pelo viés dos negócios, um artigo interessante que foi publicado há poucos meses pelo</p><p>Wall Street Journal, na edição brasileira, aponta como problema a escassez de talentos.</p><p>Ele fala que muitas empresas americanas começaram a procurar profissionais que sai-</p><p>bam interpretar os números usando a análise de dados, também conhecida como inte-</p><p>ligência empresarial. Mas encontrar profissionais qualificados tem se mostrado difícil.</p><p>O resultado foi que várias faculdades americanas, como a Faculdade de Pós-Graduação</p><p>em Administração da Universidade Fordham e a Faculdade de Administração Kelley, da</p><p>Universidade de Indiana, começaram a oferecer disciplinas eletivas, cursos de extensão</p><p>e mestrados em análise de dados. Já o Data Architect deve lidar com tecnologias SQL</p><p>e NoSQL, conhecer profundamente conceitos como stream processing e Event Driven</p><p>Architecture (EDA) e, portanto, ter capacidade de desenhar estratégias para manusear</p><p>e analisar grandes volumes de dados de formatos diferentes, quase que em tempo real.</p><p>A ideia de stream processing, ou stream computing, é fantástica; é um novo paradigma.</p><p>No modelo de data mining tradicional, uma empresa filtra dados dos seus vários siste-</p><p>mas e, após criar um data warehouse, dispara “queries”. Na prática, faz-se uma garim-</p><p>pagem em cima de dados estáticos, que não refletem o momento, mas sim o contexto</p><p>de horas, dias ou mesmo semanas atrás. Com o stream computing, essa garimpagem</p><p>é efetuada em tempo real. Em vez de disparar queries em cima de uma base de dados</p><p>estática, coloca-se uma corrente contínua de dados (streaming data) atravessando um</p><p>conjunto de queries. Podemos pensar em inúmeras aplicações, sejam estas em finanças,</p><p>saúde e mesmo manufatura.</p><p>Vamos ver este último exemplo: um projeto em desenvolvimento com uma empresa de</p><p>fabricação de semicondutores monitora em tempo real o processo de deteção e classi-</p><p>ficação de falhas. Com o stream computing, as falhas nos chips que estão sendo fabri-</p><p>cados são detetadas em minutos e não em horas ou semanas. Os wafers defeituosos</p><p>podem ser reprocessados e, mais importante ainda, pode-se fazer ajustes em tempo real</p><p>nos próprios processos de fabricação.</p><p>Quanto ao EDA, pode-se começar a estudar o assunto acessando seu verbete na Wiki-</p><p>pedia.</p><p>O termo Big Data vai aparecer na tela do radar dos CIOs em breve. Aliás, já aparece no</p><p>canto da tela de um ou outro CIO, e, provavelmente, em alguns anos, já será um dos</p><p>temas mais prioritários das tradicionais listas de “tecnologias do ano”. Portanto, é bom</p><p>estar atento à sua evolução e começar a colocar em prática algumas provas de conceito.</p><p>Fonte: Taurion</p><p>(2012, online).</p><p>O maior evento da comunidade brasileira de NoSQL:</p><p><http://nosqlbr.com/>. Acesso em: 27 jul. 2015.</p><p>Transações</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>27</p><p>TRANSAÇÕES</p><p>O conceito de transação é fundamental em muitas áreas da computação e parti-</p><p>cularmente fundamental em sistemas de banco de dados. Consideramos como</p><p>transação uma determinada “unidade de trabalho”, que é realizada em qualquer</p><p>sistema computacional de um modo coerente e independente de outras transa-</p><p>ções. Essas transações devem permitir que o sistema esteja num estado coerente</p><p>antes e depois de sua execução, independente de falhas ou outros problemas que</p><p>possam ocorrer. Devem permitir também que vários clientes diferentes acessem</p><p>concorrentemente o sistema sem que isso possa corromper ou levar a estados</p><p>que não sejam considerados coerentes.</p><p>Uma definição clássica do conceito de transações envolve o acrônimo</p><p>ACID, oriundo das propriedades de Atomicidade, Consistência, Isolamento e</p><p>Durabilidade.</p><p>Atomicidade: a propriedade atomicidade de banco de dados advém do con-</p><p>ceito de átomo da física – o qual até recentemente supunha-se indivisível. Essa</p><p>indivisibilidade pressupõe que as operações realizadas numa transação sejam</p><p>todas realizadas por completo ou que nenhuma seja realizada. Popularmente</p><p>seria o conceito do “tudo ou nada”. Isso permite que durante a nossa interação</p><p>com um banco de dados possamos agrupar vários comandos relacionados com</p><p>a garantia de que todos sejam executados – de modo que as informações arma-</p><p>zenadas permaneçam num estado consistente após a execução da transação.</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E28</p><p>Consistência: a propriedade de consistência assegura que a execução de</p><p>qualquer transação trará o banco de dados de um estado consistente para outro</p><p>estado também consistente. No caso, a “consistência” implica que todos os dados</p><p>de um banco de dados devem ser válidos de acordo com um conjunto de regras</p><p>que podem incluir restrições de tipo, valor, referências entre informações etc.</p><p>Isolamento: a propriedade de isolamento determina que o resultado da exe-</p><p>cução concorrente de um conjunto de transações terá o mesmo resultado de sua</p><p>execução em série (uma após a outra).</p><p>O isolamento transacional é o que garante e permite o acesso concorrente</p><p>de múltiplos usuários ao mesmo SGBD.</p><p>Durabilidade: a propriedade de durabilidade garante que uma vez que uma</p><p>transação tenha sido finalizada com sucesso, os dados terão a garantia de terem</p><p>sido armazenados corretamente – independentemente da eventualidade de falhas,</p><p>falta de energia, erros de aplicação etc.</p><p>Em nossa opinião, é justamente a propriedade de durabilidade que faz com</p><p>que os bancos de dados sejam posicionados como “ferramentas sagradas” em</p><p>muitas empresas. Novamente, não há menosprezo algum em dizer que o mais</p><p>importante é o código que atende aos processos de negócios. Durabilidade é</p><p>essencial: imagine qualquer empresa perdendo todos os seus dados. A continui-</p><p>dade do próprio negócio está em risco. Mas mais importante do que os dados</p><p>em si é o uso que se faz deles.</p><p>Transações</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>29</p><p>Sistemas tradicionais que vêm sendo desenvolvidos nas últimas décadas</p><p>sempre tiveram como premissa em seus dados sua corretitude (grau em</p><p>que o software executa suas funções de modo correto). Isso normalmente</p><p>implicou na utilização de um banco de dados que pudesse satisfazer as pro-</p><p>priedades ACID.</p><p>Com o aumento da quantidade de informações e usuários nas aplicações, o</p><p>fator disponibilidade passou em alguns casos a ser mais importante do que</p><p>a própria consistência das informações.</p><p>Além do ACID, surgiu o acrônimo BASE (Basically Available, Soft state, Even-</p><p>tually consistent) – traduzido literalmente como Basicamente Disponível,</p><p>Estado flexível e Eventualmente consistente. O BASE tornou-se uma sigla</p><p>bastante comum ao lidar com bancos de dados não relacionais.</p><p>Uma reflexão que vale a pena ser feita é: para os novos desafios e empreita-</p><p>das que você, futuro(a) profissional, enfrentará, em quais situações o ACID é</p><p>recomendado e em quais outras situações o BASE mostra-se mais adequa-</p><p>do?</p><p>Fonte: Pritchett (2008, online).</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E30</p><p>Papéis assumidos pelos usuários de SGBDs</p><p>Quadro 1: Papéis assumidos pelos usuários de SGBDs</p><p>DESENVOLVEDORES DE</p><p>SGBDS</p><p>São pessoas que projetam e codificam os SGBDs. Exem-</p><p>plos de pessoas nesses papéis incluem os funcionários</p><p>de empresas como Oracle, IBM e Microsoft que atuam</p><p>diretamente na programação do software SGBD. No caso</p><p>de SBGDs livres, podem ser também voluntários ou pes-</p><p>soas e empresas interessadas na evolução do software.</p><p>Normalmente são programadores altamente qualificados</p><p>que trabalham no código-fonte do SBGD. Mas voluntários</p><p>de projetos de software livre também podem contribuir</p><p>em outras atividades, como documentação, por exemplo.</p><p>DESENVOLVEDORES</p><p>DE APLICAÇÕES E</p><p>ADMINISTRADORES</p><p>DE BANCOS DE DADOS</p><p>(DBAS – DATABASE</p><p>ADMINISTRATORS)</p><p>São pessoas que desenvolvem software que armazena as</p><p>informações em um SGBD. Tradicionalmente, em abor-</p><p>dagens mais tradicionais e conservadoras, as equipes de</p><p>desenvolvimento são separadas em desenvolvedores e</p><p>DBAs. Os primeiros desenvolvem o software que acessa</p><p>o SGBD. Os segundos projetam os bancos de dados e</p><p>os mantêm. Em abordagens de desenvolvimento mais</p><p>modernas, tende-se a eliminar essa distinção entre os pa-</p><p>péis, pois quanto maior a distância entre os membros da</p><p>equipe envolvidos no projeto de software, menor tende a</p><p>ser a qualidade do software entregue.</p><p>USUÁRIOS FINAIS</p><p>São pessoas que não interagem diretamente com os ban-</p><p>cos de dados, e sim com as aplicações criadas pelos de-</p><p>senvolvedores de software que armazenam suas informa-</p><p>ções em SGBDs. A maioria das pessoas enquadra-se nessa</p><p>categoria e, embora sejam os grandes beneficiados pela</p><p>tecnologia dos sistemas de bancos de dados, raramente</p><p>possuem ciência do fato.</p><p>Fonte: os autores.</p><p>Vantagens de se Utilizar um SGBD</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>31</p><p>VANTAGENS DE SE UTILIZAR UM SGBD</p><p>Durante os tópicos anteriores, já citamos algumas vantagens de se utilizar um</p><p>SGBD para armazenar as informações de nossas aplicações. A seguir, as enu-</p><p>meraremos de um modo mais detalhado, de forma a justificar seu uso em uma</p><p>diversidade de situações.</p><p>1. Diminuir a redundância e fornecer consistência: imagine uma situação</p><p>bastante comum em que você resolve elaborar um documento e necessita</p><p>da colaboração de várias pessoas para fazê-lo. Você então cria o esboço</p><p>desse documento e o envia por e-mail a todos os interessados. Cada pes-</p><p>soa realiza as suas modificações em suas próprias cópias dos documentos</p><p>e, depois, repassa novamente por e-mail. Quem tem a última versão do</p><p>documento? Quais são os dados corretos? Essas são perguntas difíceis</p><p>de serem respondidas nessa abordagem e provavelmente exigirá muito</p><p>trabalho manual para se chegar à versão final do documento. Um SGBD</p><p>centraliza todas essas informações, fazendo com que todos os usuários</p><p>acessem os mesmos dados. Desse modo, diminui-se a redundância: há</p><p>somente uma cópia dos dados a serem manipulados. Isso permite tam-</p><p>bém que o banco de dados sempre permaneça em um estado consistente,</p><p>pois todos os usuários terão sempre a “última versão” dos dados. Não há</p><p>a possibilidade de alguém permanecer com um “pedaço” dos dados anti-</p><p>gos e outro “pedaço” com a informação atual.</p><p>2. Controle de acesso: muitas informações armazenadas em sistemas são</p><p>confidenciais. Ao mesmo tempo, é necessário que essas informações sejam</p><p>compartilhadas com as pessoas para que sejam trabalhadas. Ao utilizar</p><p>arquivos, é necessário que uma cópia seja enviada aos interessados. Por</p><p>Neste vídeo, Klaus Wuestfeld, um dos pioneiros do XP (eXtreme Programming) no Brasil e criador</p><p>do conceito de prevalência de objetos, mostra uma abordagem inovadora e de alto desempenho</p><p>para manipulação e persistência de objetos. Atualmente, alguns dos sistemas de transações mais</p><p>rápidos do mundo utilizam esse conceito.</p><p>Disponível em: <http://youtu.be/Car5V9l8BiQ>. Acesso em:7 jul. 2015.</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E32</p><p>múltiplos motivos, essas cópias podem acabar sendo enviadas por e-mail</p><p>a pessoas cujo acesso é indevido ou a mesma pode ser deixada em um</p><p>dispositivo de armazenamento removível esquecido em alguma mesa</p><p>de reunião. No mínimo, um SGBD oferece uma combinação de login/</p><p>senha para acesso a um determinado banco de dados. Outras restrições</p><p>relativas a qual usuário pode acessar quais dados também costumam ser</p><p>implementadas pela maioria dos SBGDs. Como o acesso é centralizado,</p><p>também tem-se uma única cópia para proteção.</p><p>3. Consultas eficientes: como são aplicações de software de propósito</p><p>específico, os SGBDs são especialmente projetados para armazenar efi-</p><p>cientemente os dados a eles delegados e para permitir formas de consulta</p><p>eficientes aos mesmos dados. Cada SGBD possui sua estratégia interna</p><p>para transformar essas informações em bytes gravados no dispositivo de</p><p>armazenamento, mas, de um modo geral, não há uma grande diferença</p><p>de desempenho entre diferentes produtos em uma quantidade razoá-</p><p>vel de aplicações. Em casos de usos típicos, é muito mais importante a</p><p>eficiência em consultas do que a eficiência em armazenamento de infor-</p><p>mações. Assim, os SBGDs utilizam dispositivos como índices (que são</p><p>estruturas criadas para otimizar consultas baseadas em certos critérios)</p><p>e cachês (caches) para armazenar em memória os dados mais frequente-</p><p>mente acessados. Esses dispositivos permitem que as consultas possam</p><p>ser executadas de modo mais rápido e, em muitos SGBDs, adequar esses</p><p>dispositivos de modo otimizado chega a quase ser uma arte, tamanha a</p><p>quantidade de opções disponíveis.</p><p>4. Backup e Restore: para garantir a continuidade dos negócios, é essen-</p><p>cial executar periodicamente o backup das informações armazenadas</p><p>no servidor. Ao invés de cópias físicas dos arquivos do SGBD, é comum</p><p>os próprios SGBDs fornecerem ferramentas que permitem a exportação</p><p>dos dados para um formato intermediário (texto ou binário) para backup.</p><p>Essas mesmas ferramentas suportam a restauração desses dados em caso</p><p>de necessidade. As rotinas de backup/restore também são uma ferramenta</p><p>bastante útil na migração ou cópia de servidores onde o mesmo SGBD</p><p>esteja instalado. Situações de migração costumam ocorrer em caso de</p><p>falhas ou upgrade de equipamento. Cópias costumam ser utilizadas para</p><p>permitir o teste de aplicações em desenvolvimento.</p><p>33</p><p>COMPUTAÇÃO EM NUVEM E ARQUITETURAS DE ARMAZENAMENTO EM</p><p>NUVEM</p><p>A computação em nuvem e o armazenamento em nuvem se tornaram o método pre-</p><p>ferencial para a distribuição de informações e funcionalidade online. Enquanto alguns</p><p>serviços de nuvem focam em fornecer aos consumidores uma ampla gama de funciona-</p><p>lidades e serviços, incluindo compras online, pesquisa, rede social, consumo de entrete-</p><p>nimento e proteção de documentos importantes, outros serviços de nuvem focam em</p><p>pequenas empresas, grandes corporações, governos e outras instituições.</p><p>Diversos serviços de nuvem oferecem armazenamento em nuvem gratuitamente para</p><p>os consumidores, enquanto outros cobram algum tipo de tarifa com assinatura. Há</p><p>também as nuvens privadas, pertencentes e controladas por uma organização, que for-</p><p>necem uma rede segura para o compartilhamento de softwares e dados cruciais. Por</p><p>exemplo, hospitais podem optar por usar serviços públicos de arquivamento para re-</p><p>gistros médicos eletrônicos e dados de imagem de pacientes (usando PACS) ou podem</p><p>criar a sua própria solução de arquivamento em nuvem. Além disso, hospitais podem</p><p>juntar seus orçamentos e recursos para criar um consórcio ou grupo de nuvem privada</p><p>compartilhada. Nuvens privadas são criadas usando hardware, software e outras ferra-</p><p>mentas de diferentes fornecedores, enquanto os próprios servidores são gerenciados</p><p>interna ou externamente. Nuvens híbridas, como o nome sugere, combinam vários re-</p><p>cursos de nuvem pública e privada em um serviço ou solução.</p><p>No centro de todos os serviços, produtos e soluções de nuvem estão ferramentas de sof-</p><p>tware com três pilares subjacentes de funcionalidade: ferramentas para o processamen-</p><p>to de dados e a execução de aplicativos (servidores computacionais), movimentação de</p><p>dados (redes) e preservação ou armazenamento de dados (armazenamento).</p><p>Este artigo discute as arquiteturas de armazenamento e computação em nuvem, apro-</p><p>veitando o conhecimento fundamental em armazenamento de dados de TI e corpora-</p><p>tivos.</p><p>Histórico e desafios</p><p>A computação em nuvem e o armazenamento em nuvem são os assuntos do momento</p><p>para tratar dos problemas e desafios comuns em TI, além de trazer novas oportunidades.</p><p>Para alguns ambientes, a principal meta é cortar custos e, para outros, sustentar o cres-</p><p>cimento. Além disso, alguns ambientes precisam aprimorar objetivos de nível de serviço</p><p>(SLOs) e cumprir acordos de nível de serviço (SLAs) em termos de disponibilidade, de-</p><p>sempenho, segurança e proteção de dados.</p><p>Os desafios comuns enfrentados pelas soluções em nuvem incluem:</p><p>Desafio de TI Solução em nuvem</p><p>Orçamentos fixos ou reduzidos Fazer mais com os orçamentos disponíveis</p><p>sem deixar de promover o crescimento</p><p>Demanda por nova funcionalidade Agilidade possibilitada pela implementa-</p><p>ção rápida</p><p>Promover crescimento com estabilidade Elasticidade que promova o crescimento</p><p>com resiliência</p><p>Privacidade e segurança de informações Multi-inquilino para coexistência segura</p><p>Proteção de dados Continuidade dos negócios e recupera-</p><p>ção de desastres flexíveis</p><p>Aprimorar o atendimento ao cliente Reduzir o tempo de entrada no mercado e</p><p>possibilitar novas oportunidades</p><p>Falta de mobilidade ou flexibilidade Permitir acesso de qualquer lugar a partir</p><p>de diferentes dispositivos</p><p>O que são as soluções em nuvem?</p><p>Soluções em nuvem são ferramentas para a criação e o armazenamento de conteúdo</p><p>ou informações, bem como estratégias de onde e como consumi-los. Essas soluções são</p><p>usadas para criar infraestruturas virtuais para grandes e pequenas organizações hospe-</p><p>darem aplicativos e funções comerciais, assim como um local para desenvolver e testar</p><p>novos recursos. Além disso, incluem serviços ou produtos (hardwares, softwares e redes)</p><p>pagos separadamente e soluções que você pode comprar para instalar no seu ambiente</p><p>específico.</p><p>Para começar, aqui estão alguns termos e expressões comuns relacionados às soluções</p><p>em nuvem:</p><p>• Otimizado e com boa relação custo-benefício: alinha recursos a SLOs para cum-</p><p>prir SLAs</p><p>• Menu de opções de serviço para escolher: camadas de recursos alinhados a custo</p><p>e SLAs</p><p>• Elástico, escalável com estabilidade: promove o crescimento sem adicionar com-</p><p>plexidade</p><p>• Resiliente, flexível e dinâmico: adaptar-se às necessidades do momento e man-</p><p>ter-se disponível</p><p>• Provisionamento rápido ou automático: acessa recursos e serviços rapidamente</p><p>• Seguro e multi-inquilino (multi-tenant): separação segura de usuários, manten-</p><p>do a integridade dos dados</p><p>35</p><p>• Medido e gerenciado: métricas para gerenciamento de relatórios, análises e ser-</p><p>viços</p><p>• Escala na densidade: usar capacidade de multi-inquilino e economias de escala e</p><p>cortar custos</p><p>SaaS a PaaS e IaaS</p><p>O SaaS (Software as a Service, software como serviço) que é consumido por meio das</p><p>soluções em nuvem inclui entretenimento pessoal e de consumo (Netflix), notícias e</p><p>rede social (Facebook, Skype e Twitter),</p><p>compartilhamento de fotos, compartilhamento</p><p>de arquivos (Dropbox), serviços de email, música e backup online.</p><p>Além de oferecer uma funcionalidade distinta para consumidores, pequenas e grandes</p><p>empresas também utilizam as soluções em nuvem para aumentar a produtividade. Por</p><p>exemplo, compartilhamento de documentos (Google Docs), gestão de relacionamento</p><p>com o cliente ou CRM (Salesforce.com), relatórios de despesas (Concur), folha de paga-</p><p>mento (ADP), email, compartilhamento de arquivos, backup e arquivamento. Além de</p><p>apresentar o SaaS, os provedores de serviços de nuvem também oferecem ferramentas</p><p>e ambientes para PaaS (Platform as a Service, plataforma como serviço) para proporcio-</p><p>nar o desenvolvimento e a criação de serviços de SaaS entre outros.</p><p>Os tipos de camadas de armazenamento para a IaaS (Infrastructure-as-a-Service, infraes-</p><p>trutura como serviço) incluem recursos como Web ou máquinas virtuais (VMs), armaze-</p><p>namento para compartilhamento de arquivos online, backup ou arquivamento, banco</p><p>de dados, ferramentas de desenvolvimento e busca. Esses recursos possibilitam que os</p><p>próprios provedores de serviços de nuvem e terceiros criem soluções individualizadas</p><p>para combinar diversas funcionalidades ou camadas de nuvem nos serviços oferecidos.</p><p>Os serviços de armazenamento em nuvem SaaS incluem compartilhamento de arquivos,</p><p>documentos, música, fotos e vídeo, backup/restauração, continuidade dos negócios e</p><p>recuperação de desastres, juntamente com recursos de arquivamento. Outras opções</p><p>de armazenamento em nuvem incluem banco de dados, análise de dados (incluindo</p><p>serviços baseados em redução em mapa e Hadoop), unidades de nuvem e outras apli-</p><p>cações que usam armazenamento em nuvem back-end. As soluções de armazenamento</p><p>em nuvem também se estendem a produtos e soluções usados para implementar nu-</p><p>vens públicas, privadas e híbridas.</p><p>Produtos e soluções são as peças de armazenamento em nuvem mais comuns dos sis-</p><p>temas de armazenamento físico. Os serviços de nuvem privada e pública de SaaS a PaaS</p><p>e IaaS usam armazenamento em camadas, incluindo unidades de estado sólido (SSDs)</p><p>e discos rígidos (HDDs). Assim como os ambientes tradicionais de armazenamento cor-</p><p>porativo, os provedores de soluções e serviços em nuvem utilizam uma mistura de ca-</p><p>madas de tecnologia de armazenamento diferentes, que atendem a requisitos de SLO</p><p>e SLA diferentes. Por exemplo, a utilização de SSDs rápidas para consolidação de E/S</p><p>densa (oferecendo suporte a registros e índices de bancos de dados, metadados para</p><p>pesquisa rápida e outros dados transacionais) possibilita que mais trabalho seja reali-</p><p>zado com menos energia em um espaço (footprint) mais denso e com melhor relação</p><p>custo-benefício.</p><p>O uso de uma mistura de SSDs ultra-rápidas com HDDs de alta capacidade cria um equi-</p><p>líbrio de desempenho e capacidade para atender a outros requisitos de serviço com</p><p>diferentes opções de custo de serviço.</p><p>Com os serviços em nuvem, em vez de especificar qual tipo de unidade física comprar,</p><p>os provedores de serviços de nuvem cuidam disso oferecendo diversas opções de dis-</p><p>ponibilidade, custo, capacidade, funcionalidade e desempenho para atender a diferen-</p><p>tes requisitos de SLA e SLO.</p><p>Arquitetura de nuvem</p><p>No cerne da TI legada, a hospedagem, provedores de serviços gerenciados (MSP) e nu-</p><p>vens são peças comuns, que incluem tecnologias de rede, processamento e armazena-</p><p>mento.</p><p>Diferentes tipos de servidores, redes e tecnologias de armazenamento atendem a diver-</p><p>sos requisitos de armazenamento em nuvem e computação em nuvem (servidores bla-</p><p>de e em rack densos com diferentes números de soquetes e cores a velocidades de GHz,</p><p>threads, quantidade de memória e recursos de expansão de E/S diversos são apenas</p><p>alguns exemplos). As opções de rede incluem 40GbE e 100GbE rápidos para circuitos de</p><p>retorno (backhaul) e de tronco, juntamente com 10GbE e 1GbE mais comuns para redes</p><p>virtuais privadas (VPN) e otimização de largura de banda.</p><p>As opções ou camadas de armazenamento de dados incluem SSDs ultra-rápidas, bem</p><p>como HDDs rápidos de capacidade média a alta. Os recursos de gerenciamento de ar-</p><p>mazenamento incluem proteção de dados — alta disponibilidade (HA), backup (BC) e</p><p>recuperação de desastres (DR) — assim como redução de volume (footprint) para otimi-</p><p>zação de espaço, como compressão, deduplicação e provisionamento fino, o que possi-</p><p>bilita que mais informações sejam armazenadas por períodos mais longos a custos mais</p><p>baixos.</p><p>As ferramentas de software também são muito importantes na criação de serviços e</p><p>soluções e incluem APIs, middleware, banco de dados, aplicativos, hipervisores para</p><p>criação de máquinas virtuais (VMs) e infraestruturas de desktop virtual (VDI), juntamen-</p><p>te com stackware de nuvem, como OpenStack e ferramentas de gerenciamento asso-</p><p>ciadas. Alguns exemplos de hipervisores de VMs e VDI são Citrix/Xen, KVM, Microsoft</p><p>Hyper-V, Oracle e VMware ESX/vSphere.</p><p>Nos três casos, o armazenamento de dados é configurado em sistemas de armazena-</p><p>mento, equipamentos de armazenamento e servidores de computação.</p><p>As nuvens públicas são serviços acessível gratuitamente ou mediante o pagamento</p><p>de uma tarifa, que fornecem diferentes funcionalidades, como Amazon Web Services</p><p>37</p><p>(AWS), Google Docs ou software de backup de dados Seagate® EVault®. As nuvens públi-</p><p>cas são controladas por seus respectivos proprietários, cujos clientes optam por usar os</p><p>seus serviços. As nuvens privadas, por outro lado, pertencem e são operadas e controla-</p><p>das por organizações e são semelhantes aos serviços de TI legados. Entretanto, observe</p><p>que as nuvens privadas criadas usando componentes e serviços públicos e instalações</p><p>externas existentes em diferentes locais de provedores de nuvem são chamadas de nu-</p><p>vens híbridas.</p><p>A Seagate e o armazenamento em nuvem</p><p>A Seagate é líder no fornecimento de armazenamento corporativo e, sem nenhuma sur-</p><p>presa, também está no centro da infraestrutura de nuvem. Aproveitando décadas de</p><p>experiência em ambientes de co-localização e serviços gerenciados de alta densidade e</p><p>grande escala para empresas, instituições e governos, a Seagate leva esse conhecimen-</p><p>to para os ambientes de nuvem pública e privada. Além da tecnologia de armazena-</p><p>mento líder de setor, a Seagate tem décadas de experiência trabalhando com diversos</p><p>parceiros e suas respectivas soluções de armazenamento, embalagem, chassi e gabine-</p><p>te, processos de teste e verificação.</p><p>Como um fornecedor-chave para provedores de serviços gerenciados e de nuvem pú-</p><p>blica e privada, a tecnologia da Seagate pode ser encontrada em ambientes corpora-</p><p>tivos e centrais de dados em nuvem e nos provedores de serviços gerenciados para</p><p>pequenas empresas e consumidores. Em outras palavras, a Seagate já está levando o</p><p>armazenamento em nuvem e a computação em nuvem da central de dados para o seu</p><p>bolso há algum tempo!</p><p>As opções de armazenamento para os ambientes de armazenamento em nuvem e com-</p><p>putação em nuvem da Seagate incluem a família Pulsar® de SSDs de desempenho ultra-</p><p>-alto. Para complementar as unidades Pulsar oferecemos os HDDs de alto desempenho</p><p>Savvio® 10K e Savvio 15K de 2,5 polegadas para cenários de densidade mais alta, além</p><p>dos HDDs de baixo consumo de energia Constellation®, que comportam uma configu-</p><p>ração com vários terabytes.</p><p>A Tabela 1 mostra como e onde a Seagate promove o armazenamento em nuvem e a</p><p>computação em nuvem pública e privada.</p><p>Tabela 1. Como a Seagate promove a nuvem</p><p>Central de dados: pública, privada, híbrida Empresarial Pessoal</p><p>Computação em</p><p>nuvem Armazenamento em nuvem Nuvem pessoal</p><p>Combinação de</p><p>alto desempenho e</p><p>capacidade</p><p>Boa relação custo-be-</p><p>nefício, alta capacidade,</p><p>economia de energia</p><p>Armazenamento</p><p>local e em nuvem</p><p>Armazenamento</p><p>local e em nuvem</p><p>Pulsar® (SSD),</p><p>discos Savvio®15K</p><p>e Savvio 10K de</p><p>2,5 polegadas</p><p>com desempenho</p><p>otimizado</p><p>Discos Constellation®</p><p>e Constellation ES de</p><p>capacidade otimizada</p><p>BlackArmor® NAS</p><p>Armazenamento</p><p>em rede GoFlex®</p><p>Home, armaze-</p><p>namento pessoal</p><p>Backup Plus e</p><p>armazenamento</p><p>móvel e sem fio</p><p>Satellite™</p><p>Resumo e próximos passos</p><p>Há muitas soluções em nuvem, cada uma oferecendo diferentes serviços, funcionali-</p><p>dades e recursos. A funcionalidade e os serviços em nuvem incluindo computação e</p><p>armazenamento são combinados para oferecer SaaS, PaaS e IaaS em soluções de nuvem</p><p>pública e privada. Esses recursos podem ser distribuídos como um serviço, um produto</p><p>ou um conjunto de soluções, também conhecido como ITaaS (IT as a Service, TI como</p><p>serviço). Além disso, os serviços de nuvem são reunidos em infraestruturas públicas e</p><p>privadas para criar nuvens híbridas a fim de atender às suas necessidades e requisitos</p><p>específicos.</p><p>A criatividade para satisfazer diferentes necessidades e requisitos de informações são</p><p>determinados por como você ou o seu provedor de serviços usam os recursos de nuvem.</p><p>Considerações Finais</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>39</p><p>CONSIDERAÇÕES FINAIS</p><p>Nesta unidade, pudemos perceber que os bancos de dados são uma coleção de</p><p>dados relacionados que representam, por meio de um nível determinado de abs-</p><p>tração, o modelo do mundo real de nossas aplicações de software. Boa parte das</p><p>aplicações de software desenvolvidas na atualidade envolve a manipulação e,</p><p>principalmente, o armazenamento dos dados – estes muitas vezes em enormes</p><p>quantidades. Para manipular esses bancos de dados, criou-se uma categoria de</p><p>software específico denominada de sistemas gerenciadores de bancos de dados</p><p>(SGBDs). O banco de dados (os dados) e o sistema que o gerencia são denomi-</p><p>nados conjuntamente de sistemas de bancos de dados.</p><p>Durante esta unidade também descrevemos as características que identificam</p><p>as propriedades de sistemas de bancos de dados quando comparados a aborda-</p><p>gens tradicionais de processamento de arquivos. Certamente que determinados</p><p>casos de uso ainda exigem a utilização de arquivos como meio de armazenamento</p><p>das informações. Mas com as informações que detalhamos como características</p><p>desses sistemas de banco de dados, esperamos que você, como desenvolvedor(a),</p><p>possa ter argumentos suficientes para decidir adequadamente entre uma abor-</p><p>dagem e outra.</p><p>Como existem muitos tipos de usuários diferentes que podem interagir com</p><p>os sistemas de bancos de dados, também apresentamos uma lista não exaustiva</p><p>dos papéis que esses usuários podem assumir nessas interações. Uma máxima</p><p>que devemos sempre utilizar é a “técnica do espelho”. Olhe sempre para o sof-</p><p>tware que você desenvolve por meio dos olhos de quem usa. Compreender as</p><p>situações em que cada tipo de usuário interage com um sistema de banco de</p><p>dados permite que tenhamos uma melhor consciência das dificuldades e das</p><p>necessidades que os usuários possuem em cada caso de uso cotidiano da nossa</p><p>vida profissional.</p><p>CONCEITOS DE BANCOS DE DADOS</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IU N I D A D E40</p><p>Por fim, tentamos discutir algumas vantagens da abordagem de sistemas de</p><p>bancos de dados em relação à implementação de aplicações sem a facilidade e</p><p>funcionalidade de um SGBD. Claro que, tendenciosamente, um estudioso de sis-</p><p>temas de bancos de dados observaria argumentos bastante positivos em relação</p><p>à abordagem dos SGBDs. O papel de um desenvolvedor experiente é distanciar-</p><p>-se desses apegos a uma determinada tecnologia ou outra e decidir sobriamente</p><p>qual a solução mais adequada para a sua aplicação.</p><p>Uma vez entendidos esses conceitos, podemos nos dedicar a estudar melhor</p><p>alguns dos detalhes internos dos modelos utilizados pelos sistemas de bancos de</p><p>dados e das arquiteturas de software existentes que utilizam esses sistemas. Tais</p><p>tópicos serão abordados em nossa próxima unidade.</p><p>41</p><p>1. Transações tradicionalmente são melhor entendidas por meio do conjunto de</p><p>suas propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilida-</p><p>de). Em quais situações da vida real você consegue enxergar a necessidade de</p><p>se executar operações com essas propriedades?</p><p>2. Ao enumerar as vantagens de se utilizar um SBGD, fizemos uma comparação</p><p>com a utilização de arquivos para armazenamento dos dados. Tendenciosa-</p><p>mente, o SGBD apareceu como o vencedor nas comparações. Quais seriam as</p><p>situações em que os arquivos seriam uma solução mais adequada? Você conse-</p><p>gue exemplificar alguma outra situação em que uma terceira alternativa seria</p><p>mais viável?</p><p>3. Pense no SBGD como um módulo do sistema ou como uma outra aplicação a</p><p>ser integrada (pois, em muitas concepções modernas, é assim que ele deve ser</p><p>tratado). Uma das características dos SGBDs é o isolamento entre o programa e</p><p>os dados. Quais os benefícios desse isolamento? Em que outras partes do siste-</p><p>ma essa característica também pode trazer benefícios?</p><p>U</p><p>N</p><p>ID</p><p>A</p><p>D</p><p>E II</p><p>Prof. Esp. Victor de Marqui Pedroso</p><p>MODELO RELACIONAL</p><p>Objetivos de Aprendizagem</p><p>■ Capacitar o aluno ao entendimento dos conceitos básicos na criação</p><p>de um banco de dados.</p><p>■ Apresentar ao aluno, a melhor maneira de aplicação dos conceitos</p><p>básicos.</p><p>Plano de Estudo</p><p>A seguir, apresentam-se os tópicos que você estudará nesta unidade:</p><p>■ Modelo Relacional</p><p>■ Introdução à Modelagem</p><p>■ Atributos</p><p>■ Tipos de Atributos</p><p>■ Domínio</p><p>■ Chave Estrangeira (Foreign Key)</p><p>■ Relacionamentos</p><p>■ Cardinalidade</p><p>INTRODUÇÃO</p><p>A partir desta unidade, abordaremos o modelo de dados relacional, que é o</p><p>modelo utilizado nos bancos de dados relacionais. O advento do modelo rela-</p><p>cional é atribuído a Ted Codd da IBM em 1970 e imediatamente se popularizou</p><p>devido à sua simplicidade e sólidos fundamentos matemáticos: é baseado na teo-</p><p>ria geral dos conjuntos e em lógica matemática.</p><p>Os primeiros SGDBs Relacionais apareceram na década de 1980 como uma</p><p>novidade boa no meio da computação, tanto que esses SGDBs acabaram suce-</p><p>dendo os bancos de dados hierárquicos em rede predominantes por mainframes.</p><p>Por serem bancos de dados com características fortes como: capacidade de inse-</p><p>rir grande quantidade de dados, rapidez na identificação e tratamento de erros,</p><p>realização de pesquisa de dados de maneira rápida e ainda garantir a integri-</p><p>dade dos dados, sua expansão foi enorme e aos poucos acabou crescendo tanto</p><p>que tornou-se sinônimo de “banco de dados”. Alguns bons exemplos de ban-</p><p>cos de dados relacionais são DB2 (IBM), Oracle e MySQL (Oracle), SQLServer</p><p>(Microsoft), Firebird (software livre), Interbase (Borland) e PostgreSQL (sof-</p><p>tware livre).</p><p>Agora que já sabemos quais são os bancos de dados relacionais existentes,</p><p>vale lembrar que devemos sempre trabalhar para uma boa operacionalização</p><p>deles e, para que isso ocorra, precisamos nos basear em normas concisas no</p><p>momento da criação de um projeto de bancos de dados. Uma vez que nos apro-</p><p>fundemos nos estudos da teoria relacional, estaremos capacitados na criação de</p><p>projetos que sejam corretos, consistentes e bem estruturados, evitando, assim,</p><p>um futuro problema ou retrabalho.</p><p>Dada a relevância do assunto, estudaremos o modelo relacional introduzindo</p><p>alguns conceitos fundamentais e importantes desse modelo, sempre mesclando a</p><p>teoria com a prática, utilizando também exemplos concretos e que estejam par-</p><p>ticipando mais proximamente da nossa rotina de trabalho e do nosso cotidiano.</p><p>Introdução</p><p>Re</p><p>pr</p><p>od</p><p>uç</p><p>ão</p><p>p</p><p>ro</p><p>ib</p><p>id</p><p>a.</p><p>A</p><p>rt</p><p>. 1</p><p>84</p><p>d</p><p>o</p><p>Có</p><p>di</p><p>go</p><p>P</p><p>en</p><p>al</p><p>e</p><p>L</p><p>ei</p><p>9</p><p>.6</p><p>10</p><p>d</p><p>e</p><p>19</p><p>d</p><p>e</p><p>fe</p><p>ve</p><p>re</p><p>iro</p><p>d</p><p>e</p><p>19</p><p>98</p><p>.</p><p>45</p><p>MODELO RELACIONAL</p><p>Reprodução proibida. A</p><p>rt. 184 do Código Penal e Lei 9.610 de 19 de fevereiro de 1998.</p><p>IIU N I D A D E46</p><p>O MODELO RELACIONAL</p><p>Quando nos propomos a criar um banco de dados, temos que saber da importância</p><p>do modelo relacional, pois é nele que nos basearemos para uma implementa-</p><p>ção inicial. O modelo relacional é um modelo da segunda geração que surgiu</p><p>depois dos modelos pré-relacionais, hierárquicos e de rede. Os modelos que hoje</p><p>tentam substituir são os de terceira geração,</p>