Baixe o app para aproveitar ainda mais
Prévia do material em texto
E-Book - Apostila 7-Não queremos perder nada, tudo deve ficar armazenado! (DL) E-Book - Apostila Esse arquivoé uma versão estática. Para melhor experiência, acesse esse conteúdo pela mídia interativa. rd , E-Book - Apostila tu ca rm Í Armazenamento. Nossa unidade de estudos que se inicia agora tem como foco questões relacionadas ao armazenamento. Antes de iniciarmos, vamos analisara situaçãoa seguir. Reflexão Júlia estava evoluindo em sua carreira como desenvolvedora de sistemas. Após atuar no desenvolvimento de alguns sistemas de gerenciamento bastante simples, estava se deparando coma necessidade de armazenar dados de forma permanente. Júlia começou a entendera diferença entre utilizar dados gerados em tempo real, durantea execução do programa,e dados armazenados de forma permanente. Quanto maioro volume de dados e mais complexaa suas formas de gerenciamento, maiora necessidade de utilizar bancos de dados de forma eficiente. Vamos estudar formas de armazenamento de dados para criação de programas confiáveis e com maior grau de complexidade? 2-26 E-Book - Apostila Ao final deste conteúdo, você será capaz de: • Diferenciar as operações CRUD para armazenamento de dados permanentes; • Utilizar sistemas gerenciadores de bancos de dados para desenvolvimento de sistemas; ^ Projetar modelos de dados relacionais no contexto de programação de soluções computacionais; * Analisar arquiteturas clientee servidor para direcionara implementação de sistemas; • Implementar soluções que utilizem linguagem SQL. 3-26 E-Book - Apostila Lembra-se de quando você feza sua matrícula no curso que escolheu? Pois é! Os dados que você informou são armazenados porum sistema computacional,e eles podem seracessadosa qualquer momento. Além disso, conforme você avança no curso, seu desempenhoé registradoe também precisa ser armazenado para futuras consultas. Os programas que desenvolvemos atéentão têm uma característica um tanto limitante: eles usam somentea memória volátil do computador.A memória volátil (que conhecemos como memória RAM) tema seguinte característica: casoo computador seja desligado ou simplesmenteo sistema computacional seja fechado pelo usuário, todos os dados são perdidos! Já pensou se isso acontecesse com o sistema em que seus dados estão cadastrados?O que aconteceria com as notas que você se empenhou tanto para conquistar? Vejao exemploa seguir: FIGURA1 - Exemplo 4-26 ELABORAÇÃO DO AUTOR, 2010. E-Book - Apostila Nesta unidade de estudo, aprenderemosa armazenar dados em meio persistente. Para isso, aprenderemos sobre Bancos de Dados, um modelo de dados diferente baseado em tabelas,a integração entre sistemase muitas outras coisas. São muitos detalhes, que garantemo bom funcionamento de um sistema computacional. Quando estudados um a um, com cuidadoe paciência, são muito simplese fáceis de entender! Operaçôes CRUD (Create, read, updatee delete) e Sistemas gerenciadores de bancos de dados 5-26 (SGBD) E-Book - Apostila O armazenamento de dados em arquivos comuns (como simples arquivos .txt) no sistema de arquivos (na sua pasta Documentos, por exemplo)é muito utilizado por diversas aplicações. Porém, seu usoé trabalhoso,e as principais operações desejadas já possuem implementações eficientese convenientes que podem sersimplesmente reutilizadas. As principais operações que desejamos realizar, envolvendo memória não volátil, chamaremos de memória persistentea partir de agora. São elas: - Inserção de dados. Por exemplo: quando você se matriculou, seus dados, como nome, idadee endereço, foram inseridos em uma base de dados. - Obtenção de dados. Quandoo professor deseja cadastrar uma nota sua, antes de mais nada, eleprecisa obter, junto ao sistema, os seus dados como nomee RA.Certo!? - Remoção de dados.É possível que algum dado seja inserido de maneira incorreta na base e, nesse caso,é desejável que ele possa serexcluído dela. - Atualização de dados.O que acontece quando você muda deendereço? Vaiserpreciso atualizar esse dado na base do sistema, nãoé mesmo? Essas operações são muito comumente identificadas como operações CRUD, do inglês Create, Read, Updatee Delete. 6-26 E-Book - Apostila Um Sistema Gerenciador de Banco de Dados (SGBD)é um software que manipulaa memória persistente, oferecendo uma abstração que simplificao códigoa ser escrito. Os arquivos são apresentados de acordo com um modelo predeterminado, que visa facilitar seu uso. Uma de suas principais característicasé simplificara implementação das operações CRUD. Estudo Guiado Os SGBDs têm sido usados por décadas. Muitos problemas são bem resolvidos por eles, embora, em certos casos, seu uso possa não sera solução mais adequada. Aprofunde seus conhecimentos da página3 até 27. Cl1que no linke leiao livro EL SMARI, R.; NAVATHE, S.B.Sistemas de bancos de dados. Tradução: Daniel Vieira. Revisão técnica: Enzo Seraphime Thatyana F. Piola Seraphim. 7. ed. Sâo Paulo Pearson Education do Brasil, 2018. O modelo de dados relacional Um dos modelos de dados mais utilizados nos dias de hoje para bases de dadosé o modelo relacional.A palavra relacional vem de relação, queé sinônimo de tabela, ou seja, todos os dados queo sistema gerenciador de bancos de dados manipula são representados como tabelas. Estas possuem colunas, cada qual com o seu nome. Veja um exemplo na Figura 2. Trata-se de uma tabela capaz de armazenar dados de pessoas. Neste minimundo, pessoas têm nome, telefonee e-mail. 7-26 https://plataforma.bvirtual.com.br/Acervo/Publicacao/168492 E-Book - Apostila Curiosidade Quando elaboramos um modelo para um banco de dados, podemos fazê-lo utilizando diferentes níveis de abstração. Quandoo modeloé independente de implementação, ou seja, quando não há menção sobre qual tecnologia será utilizada, dizemos queo modeloé conceitual. Quando, poroutro lado, há menção explícita de tecnologias utilizadas paraa sua implementação, dizemos queo modeloé lógico. Em particular,o modelo relacionalé lógico, dado que fica explícito que a implementaçãoé feita por meio do armazenado de dados em tabelas. Uma abordagem para modelagem conceitual se chama abordagem entidade-relacionamento.É importante citá-la neste contexto, pois seu nome pode causar certa confusão, quandoo contexto de estudoa combina como modelo relacional. A abordagem entidade-relacionamento consiste em identificar entidades (coisas de interesse no mundo real)e relacionamentos entre elas. Embora aspalavras ’relacional'e ’relacionamento’ possam parecer teralguma relação (como perdão do trocadilho), elas nada têma verneste contextoe não se referemà mesma coisa. FIGURA2 - Uma tabela no Modelo Relacional ELABORADO PELO AUTOR. 8 - 26 E-Book - Apostila Em uma tabela do modelo de dados relacional, cada coluna tem nome único.A ordem delas não importa. Cada linha contém osdados de uma pessoa específica. Ç|uando utilizamoso modelo relacional, precisamos tomaro cuidado de garantir que cada linha de uma tabela possa serdiferenciada das demais. lssoé necessário, pois pessoas podem termuitos dados iguais, como nomee idade. O mecanismo utilizado para viabilizara distinção entre linhas de uma tabela chama-se chave primária. lnformalmente, trata-se de uma coluna cujos valores permitem diferenciar uma linha das demais, ou seja, um determinado valor nunca ocorre em mais de uma linha. É comum (mas não obrigatório) adicionar uma coluna chamada código ou idàs tabelas, e, para cada linha, armazenar um número inteiro que tenha as características descritas. Veja o exemplo da figuraa seguir. FIGURA3 - Uma tabela no Modelo Relacional com chave primária 9 - 26 ELABORAÇÃO DO AUTOR, 2020. Estudo Guiado E-Book - Apostila O modelo relacional vai muito além do simples emprego de tabelas parao armazenamento de dados. Eleoferece suportea restrições de integridadee ao processamento de transações também, conceitos fundamentais parao bom funcionamento de um sistema de bancos de dados. Aprimoreo seu conhecimentolendo as páginas 135a 155. Cl1que no linke leiao livro ELSMARI, R.; NAVATHE, S. B. Sistemas de bancos de dados. Tradução: Daniel Vieira. Revisão técnica: Enzo Seraphime Thatyana F. Piola Seraphim. 7. ed. São Paulo Pearson Education do Brasil, 2018. 10-26 https://plataforma.bvirtual.com.br/Acervo/Publicacao/168492 Exemplo1 E-Book - Apostila 11-26 ELABORAÇÃO DO AUTOR, 2020. E-Book - Apostila Cabe ao profissional de banco de dados (essa tarefaé muitas vezes desempenhada pelo próprio desenvolvedor de software) verificar qual coluna tem as condições necessárias para quea restrição chave primária possa seraplicada sobre ela.É claro que o nome deuma pessoa não tem essa característica. Por outro lado,o CPF ouo RA de um aluno em uma universidade tem. Exemplo2 12 - 26 ELABORAÇÃODOAUTOR,2020. E-Book - Apostila Saiba Mais 13- 26 E-Book - Apostila O modelo de dados relacional tem sidoo mais utilizado nas últimas décadas e, mesmo nosdias atuais, aindaé o predominante. Contudo, novos modelos têm conquistadoo seu espaço. Dependendo do tipo de aplicação, eles podem sermais convenientes do queo modelo relacional. Os modelos não relacionais são, em geral, categorizados como NoSQL (deNotOnly SQL). Exemplos de sistemas que utilizam modelos NoSQL sãoo MongoDBeo Firebase Firestore. A linguagem sqt Para lidar com as tabelas do modelo relacional, utilizamos uma linguagem chamada SQL. Mais precisamente, SQLé simplesmente um padrão queé implementado pordiversos fabricantes de SGBDs. Por exemplo,a Microsoft possuia sua versão de SQL queé denominada Transact SQL.A Oracle, por sua vez, possuia sua versão de SQL, queé denominada PL/SQL.E assim por diante. Há diferentes categorias de comandos SQL. Comandos DDL (Data Definition Language) são comandos que servem para criare alterar estruturas da base de dados. Por exemplo: para criar uma tabela, utilizamoso comando CREATE TABELA. Para alterara estrutura de uma tabela, possivelmente adicionando uma coluna, usamoso comando ALTER TABELA. Comandos DML (Data Manipulation Language). As operações CRUD essencialmente manipulam dados. Os comandos INSERT, SELECT, UPDATEe DELETE são utilizados para realizar cada uma delas. DCL (Data Control Language). Há ainda comandos que servem para especificar quais usuários podem teracessoa determinados recursos. Por exemplo: podemos especificar que somente usuários administradores podem acessar determinadas tabelas existentes na base. Exemplos de comando da classe DCL são GRANTe REVOKE. Estudo Guiado 14 - 26 E-Book - Apostila A parte mais básica do padrão SQL está disponível em praticamente todas as suas versões, para todos os fabricantes. Fazem parte dela os comandos INSERT, SELECT, UPDATEe DELETE, os quais implementam asquatro operações CRUD elementares. Saiba mais lendo as páginas 159a 183. ELSMARI, R.; NAVATHE, S. B. Sistemas de bancos ded ados.Tradução: Daniel Vieira. Revisão técnica: Enzo Seraphime Thatyana F. Piola Seraphim. 7. ed. Sáo Paulo Pearson Education do Brasil, 2018. Um possível fluxo de uso de um SGBD relacional que ilustra as operações de manipulação de dados mais elementares envolve as seguintes etapas básicas: Criação de um "schema" ou "data-base" que nada maisé do que um agrupamento de recursos manipulados pelo SGBD, como assuas tabelas. | Criação de uma ou mais tabelas que estejam de acordo com o problemaa serresolvido. | Manipulação de dados com asoperações de inserção, remoção, recuperaçãoe atualização. No caso do MySQL,o comando para criação de um data-baseé o seguinte. Note que um data-base possui um nome para que possa ser referenciado posteriormente. 15-26 https://plataforma.bvirtual.com.br/Acervo/Publicacao/168492 E-Book - Apostila A seguir,é preciso indicar ao SGBD qualo data-base que desejamos manipular, já que ele pode gerenciar diversos datas-bases simultaneamente. lsso pode serfeito comoa seguir. Lembra-se de que precisamos de tabelas para armazenar dadose que, além disso, uma tabela deve teruma chave primária? Criamos uma tabela capaz de armazenar dados de pessoas. Note quea coluna sobrea quala restrição chave primária foi aplicada se chama código. Feitaa criação da tabela, podemos inserir alguns dados nela. Veja: 16-26 CREATE DATABASE db_pessoas; USE db_pessoas; CREATE TABELA tb_pessoa( codigo INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR (255), fone VARCHAR (255), email VARCHAR (255) ); Curiosidade E-Book - Apostila INSERT INTO tb pessoa (nome, fone, email) VALUES ('José', ' 11223344', 'josegemail.com');INSERT INTO tb pessoa (nome, fone, email) VALUES ('Maria', '44332211', 'mariagemail.com'); Pode serinteressante recuperar os dados que estão armazenados na tabela. Isso pode serfeito assim: SELECT * FROM tb pessoa; Asdemais operações CRUD (UPDATEe DELETE) são idealmente realizadas utilizando-se um identificador específico (um valor existente na coluna sob chave primária) para que não tenham impacto sobre todas as linhas da tabela. A seguir, faremosa remoção da pessoa cujo códigoé iguala 1 e atualizaremoso e-mail da pessoa cujo códigoé 2. DELETE FROM tb pessoa WHERE codigo = 1;UPDATE tb pessoa SET email = 'novoemailgemail.com' WHERE codigo = 2; 17-26 INSERT INTO tb_pessoa (nome, fone, email) VALUES ('José', '11223344', 'jose@email.com');INSERT INTO tb_pessoa (nome, fone, email) VALUES ('Maria', '44332211', 'maria@email.com'); SELECT * FROM tb_pessoa; DELETE FROM tb_pessoa WHERE codigo = 1;UPDATE tb_pessoa SET email = 'novoemail@email.com' WHERE codigo = 2; E-Book - Apostila Nos dias atuais, as memórias de computador são muito baratas. Por essa razão,a operação de remoção de dados propriamente dita não é muito comum. Quando desejamos remover um dado de uma base de dados, ao invés de fazera sua remoção literal, simplesmenteo marcamos como inativo, usando uma coluna da própria tabela para isso. Esse dado pode serútil no futuro para, por exemplo, operações de mineração de dados.É pouco provável, por exemplo, que, caso você apaguea sua conta de sua rede social favorita, hoje ela seja de fato apagada.O mais provávelé que seus dados sejam mantidos no seu histórico de navegação, dentre outras coisas,o que pode tergrande valor, muito maior do queo preço relativo da memória para mantê-los lá. Arquitetura cliente/servidor Quando uma aplicação Java se comunica com um SGBD, fica caracterizadoo uso da arquitetura cliente/servidor.A ideiaé muito simples. De um lado, temos um software em execução esperando por requisiçõesa serem feitas (o SGBD), de outro lado, temos um software em execução que, de tempos em tempos, pode realizar requisiçõesa um servidor (a aplicação Java).A Figura6 ilustraa arquitetura cliente/servidor, usando como exemploo SGBD MySQL. FIGURA6 - Arquitetura cliente/servidor ELABORAÇÃO DO AUTOR, 2020. A Figura7 ilustrao uso da arquitetura cliente/servidor quandoo clienteé uma aplicação Java. Note que há um objeto (afinal, em Java, tudoé objeto, nãoé mesmo!?) que representaa conexão entrea aplicação Javae o SGBD. 18 - 26 E-Book - Apostila FIGURA7 - Arquitetura cliente/servidor: conexão entre aplicação Javae SGBD ELABORAÇÃO DO AUTOR, 2020. Saiba Mais É comum associara palavra 'servidor'a hardware. Quandoa utilizamos, em geral, estamos nos referindoa um computador de alta capacidade computacional. Apesar disso, há outras interpretações para essa palavra. Em particular, quando estamos falando da arquitetura cliente/servidor,a palavra servidor se referea software, ou seja, um simples programa em execução que aguarda requisições feitas por outros programas (que fazem, por sua vez,o papel de clientes) para servi-los.É interessante observar que um mesmo computador pode terprocessos clientese processos servidores em execução simultaneamente e, de fato, issoé muito comum. Assim, não fazsentido denominar um computador como cliente ou servidor. Mapeamento objeto-relacional 19-26 E-Book - Apostila Vamos parare pensar um pouco. Quando estamos programando em Java, os dadossão todos representados como objetos. Por outro lado, acabamos de introduzir um novo modelo de dados:o modelo relacional. Como vimos, eleé baseado em tabelas. Todos os dados armazenados em uma base relacional são representados como tabelas. Estamos, portanto, diante de um problema que precisa ser resolvido. Quando temos uma coleção de objetos que precisa ser armazenada em meio persistente (por exemplo,a coleção de notas dos alunos queo professor acabou de digitar), precisamos especificar como elapode serrepresentada em meio relacional. Estamos falando de um mecanismo muito comum. Pelo fato dea Orientaçãoa Objetos sero paradigma de programação para aplicações mais utilizadoe também pelo fato deo modelo relacional sero mais utilizado para armazenamento em meio persistente, esse mecanismo setorna essencial. Estamos falando de um mecanismo de tradução ou mapeamento de modelos de dados chamado mapeamento objeto- relacional.A ideiaé esta: dada uma coleção de objetos, como representá-la como tabelas?E o contrário também: dada uma relação, como representá-la como um ou mais objetos? Essaé uma tarefa que cabe ao programador resolver. Quando desenvolve em Java, eleo faz por meio das interfacese métodos existentes na API JDBC. A Figura8 mostra uma coleção de objetos armazenada em memória volátil, de acordo como modelo orientadoa objetos da JVM. FIGURA8 - Orientaçãoa Objetos: coleção de pessoas ELABORAÇÃO DO AUTOR, 2020. 20 - 26 E-Book - Apostila Agoraa Figura9 mostra como essa coleção de dados pode serrepresentada como uma tabela no modelo relacional. FIGURA9 - Modelo Relacional: tabela de pessoas ELABORAÇÃO DO AUTOR, 2020. A implementação do mapeamento objeto relacional depende de uma implementação apropriada da API JDBC denominada Driver. A comunicação entre aplicação Javae um SGBD relacionalé feita com o uso de uma API, que se chama JDBC. Trata-se de uma especificação em que constam interfaces, classese métodos que precisam serimplementados pelos fabricantes dos SGBDs relacionais que desejam viabilizaro uso de seu produto por programadores Java. Cada fabricante de SGBD (como Microsoft, Oracle etc.) fornecea sua própria implementação paraa API JDBC. Essa implementação se chama Driver. Cabe ao desenvolvedor obtê-la (em geral, elaé fornecida gratuitamente pelos fabricantes, já que é de seu interesse que os programadores Java usemo seuproduto)e configurá-la adequadamente no classpath do projeto, que é utilizado pelo compiladore pela JVM para decidir quais classes considerar no momento decompilaçãoe interpretação, respectivamente. A seguir, vemos um exemplo de código que estabelece uma conexão com um SGBD relacional. Note que especificamoso endereço do host em queo servidor está em execução,a porta que ele utiliza, o nome dobanco de dados, usuárioe senha. Como uma conexão como banco pode darorigema fluxos alternativos de execução (exceções), fazemoso tratamento adequado como bloco try/catch. 21 - 26 E-Book - Apostila import java.sql.Connection; import java. sql.DriverManager; public class ConnectionFactory { private String usuario = 'root' ; private String senha = '1234'; private String host = 'localhost' ; p rivate St ring po rta = ' 33ö6' ; private String bd = 'db pessoas'; public Connection obtemConexao (){ try{ Connection c = DriverManager.getConnection( 'jdbc:mysql://' + host + ' : ' + porta + '/'+ bd, usuario, senha )# return c; catch (Exception e){ e.printStackTrace(); retu rn null; É comum queum objeto seja armazenado como uma linha de uma tabela.O algoritmo para fazer isso aconteceré muito simples. Eleé composto basicamente dos seguintes passos. 22 - 26 import java.sql.Connection; import java.sql.DriverManager; public class ConnectionFactory { private String usuario = 'root'; private String senha = '1234'; private String host = 'localhost'; private String porta = '3306'; private String bd = 'db_pessoas'; public Connection obtemConexao (){ try{ Connection c = DriverManager.getConnection( 'jdbc:mysql://' + host + ':' + porta + '/' + bd, usuario, senha ); return c; } catch (Exception e){ e.printStackTrace(); return null; } } } E-Book - Apostila | Definiro comando SQLa serexecutado. Abrir uma conexão como SGBD. Pré-compilaro comando SQLjunto ao SGBD. Especificar os valores existentes nas propriedades do objeto que serão armazenados em cada uma das colunas da tabela de interesse. Executaro comando. | Informar ao SGBD quea conexão jápode serfechada. Curiosidade 23-26 E-Book - Apostila Atualmente,o paradigma comumemente utilizado parao desenvolvimento de aplicações é a Orientaçãoa Objetos. Por outro lado,o modelo de dados mais utilizado para bases de dadosé o Relacional. Dessa forma, uma das principais atividades de desenvolvedores de aplicações comerciaisé implementaro mapeamento objeto relacional. Trata-se, contudo, de uma tarefa repetitivae que pode seramplamente automatizada. Há, no mercado, frameworks, comoo Hibernate, que são capazes de tirar do programador grande parte do esforço necessário para escrever código que fazo mapeamento objeto relacional acontecer. O código,a seguir, mostra tudo isso em funcionamento. 24 - 26 public void inserir (){ //1: Definir o comando SQL E-Book - Apostila String sql = 'INSERT INTO tb pessoa(nome, fone, email) VALUES (?, ?, *)'i //2: Abrir uma conexâo ConnectionFactory factory = new ConnectionFactory(); try (Connection c = factory.obtemConexao()){ //3: Pré compila o comando PreparedStatement ps = c.prepareStatement(sql); //4: Preenche os dados faltantes ps.setString(l, nome); ps.setString(2, fone); ps.setString(3, email); //5: Executa o comando ps.execute(); catch (Exception e)( e .p rintStac kTrace(); 25-26 public void inserir (){ //1: Definir o comando SQL String sql = 'INSERT INTO tb_pessoa(nome, fone, email) VALUES (?, ?, ?)'; //2: Abrir uma conexão ConnectionFactory factory = new ConnectionFactory(); try (Connection c = factory.obtemConexao()){ //3: Pré compila o comando PreparedStatement ps = c.prepareStatement(sql); //4: Preenche os dados faltantes ps.setString(1, nome); ps.setString(2, fone); ps.setString(3, email); //5: Executa o comando ps.execute(); } catch (Exception e){ e.printStackTrace(); } } E-Book - Apostila ELSMARI, R.; NAVATHE, S. B. Sistemas de bancos ded ados.Traduçáo: Daniel Vieira. Revisáo técnica: Enzo Seraphime Thatyana F. Piola Seraphim. 7. ed. Sáo Paulo Pearson Education do Brasil, 2018. Sem o armazenamento permanente de dados,é impossível criar sistemas que atendam necessidades mais complexas no mundo real. Nessa unidade, estudamos diversos conceitos para atuar com esse tipo de armazenamento, dentre eles: Refe i i tiog ELMASRI, R.; NAVATHE, S.B.Sistemas de banco de dados. 7. ed. São Paulo: PearsonU niversidades, 2019. 26-26 https://plataforma.bvirtual.com.br/Acervo/Publicacao/168492
Compartilhar