Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo VIII
A persistência de dados
Introdução à persistência
• Você se perguntará: Quando desligo o
computador, onde se executa meu programa?
o que acontece com os dados? O que posso
fazer para utilizar normalmente meu sistema
depois de ter ligado o computador ou o
dispositivo? Não quero introduzir todos os
dados novamente.
Introdução à persistência
• Isso pode ser resolvido de muitas maneiras. Em alguns
programas simples, com poucos dados, os programadores
armazenam as informações em arquivos.
• E se é tão simples, por que complicar nossa vida com
outras soluções? Porque elas trazem alguns problemas:
– Redundância e inconsistência de dados
– Dificuldade para acessar os dados
– Isolamento dos dados
– Usuários múltiplos
– Problemas de confidencialidade
– Problemas de integridade
Problemas com arquivos
• O primeiro dos problemas. Significa que se eu posso escrever quaisquer coisas
em um arquivo, eu poderia ter dados repetidos, pois não há um controle real
sobre o que escrevo. Basicamente, é como um caderno. Eu posso escrever o
que eu quiser. Igualmente, poderia escrever coisas contraditórias.
• Um outro problema é que um arquivo é simplesmente uma cadeia muito longa
de letras. Para buscar alguma coisa, tenho que percorrer todo o conteúdo até
encontrá-la.
• Por outro lado, como um arquivo é um espaço na memória, o qual podemos
acessar de maneira compartilhada, poderia acontecer que uma pessoa queira
escrever no arquivo enquanto outra está lendo, ou que não desejemos que
qualquer pessoa acesse o arquivo porque ele tem informações confidencias.
Evitar isso com esse tipo de dados é muito difícil.
• Qual é a solução? Os servidores de bancos de dados
O que é um banco de dados?
• Formalmente, um banco de dados é simplesmente um conjunto
de dados inter-relacionados, armazenados em um lugar. Isso
poderia ser, simplesmente, uma caixa com papeis de dados
relacionados entre si, como por exemplo, as faturas de serviços
(água, luz, etc.)
• Associamos o termo banco de dados a uma coisa relacionada
com computação, mas ele é muito mais amplo e se refere a uma
coleção de dados armazenados. Em nosso caso especificamente,
nos referimos a um programa que oferece o serviço de
armazenar nossas informações, de maneira tal de protegê-las
contra problemas de eficiência, segurança e concorrência
(sincronização de acessos simultâneos) em um formato específico
Dados persistentes
• Em nossos programas, temos dois tipos de
dados: os persistentes, ou seja, os que
continuarão ai ao ligar novamente nosso
sistema, e os dados próprios da execução do
programa, ou seja, os que vão desaparecer da
memória do computador depois de ter
desligado o sistema.
Arquitetura da solução
• Assim, separamos nosso aplicativo do servidor de banco
de dados, onde armazenaremos as informações.
Portanto, teremos a seguinte estrutura:
Arquitetura do aplicativo
• Muitos aplicativos falarão com um programa chamado
Sistema de Gerenciamento de Banco de Dados, o qual nos
permitirá acessar diferentes dados que precisemos para nosso
programa
• Nós, em particular, trabalharemos com banco de dados
chamados RELACIONAIS Nesse tipo de banco de dados, tenta-
se modelar precisamente as relações entre eles. Então, por
exemplo, uma pessoa é modelada como um conjunto de
dados: número de carteira de identidade, data de nascimento,
sexo, nome, sobrenome e qualquer outro dado que eu
considere que representa, em seu conjunto, a uma pessoa.
Estrutura de relações
• Qualquer elemento de nosso sistema será modelado
como uma relação de dados, no que chamaremos
tabelas do banco de dados.
• Também, podemos armazenar em nosso banco de
dados relações entre os elementos de nosso sistema.
Por exemplo, podemos ter uma tabela nova que
relacione uma pessoa a um ou mais carros, na
relação TEM (para descrever que uma pessoa pode
ter um ou mais carros, ou nenhum).
• As tabelas terão a forma a seguir
Estrutura de relações
Estrutura de relações
• Na ilustração, podemos ver como cada uma das colunas terão
um tipo de dados (no caso das pessoas, será o número da
carteira, data, etc.) e cada uma das filas representará a relação
que tem cada uma das pessoas em meu modelo. Em minha
tabela, teremos somente as relações que tenham sentido. Ou
seja, não pode haver duas pessoas com diferente nome e
sobrenome com o mesmo número de carteira de identidade.
• Para controlar esse tipo de tabelas, podemos utilizar distintos
programas. Utilizaremos para nosso projeto o Microsoft SQL
Express, o qual pode ser descarregado gratuitamente da
Internet.
SQL
• Para poder realizar ações em meu banco de dados, preciso
conhecer a linguagem mediante a qual me comunico com
o programa: a SQL
• SQL é uma linguagem que nos permite realizar dois tipos
de grupos de ações: definição (criar um banco de dados,
criar tabelas, eliminá-las, etc.) e manuseio, que nos
permite inserir dados nas tabelas e listá-los.
• O primeiro que devemos conhecer, depois de ter criado o
banco de dados, é a maneira de armar as tabelas das quais
já falamos. Isso é feito mediante a expressão CREATE
CREATE
CREATE TABLE <NOME>
(
A1 TIPO1 [NULL | NOT NULL] [DEFAULT V1],
AN TIPON [NULL | NOT NULL] [DEFAULT Vn],
PRIMARY KEY (Ai,..,Aj),
FOREIGN KEY (Ai,..,Aj) REFERENCES <NOME_ESTRANGEIRA> (A i,..,Aj)
)
Exemplos de uso de CREATE:
[ Muda placa ]
• Em select, temos primeiro a lista separada por vírgulas de A1, A2, ..., AN, ou seja, os dados que
desejamos trazer. Por exemplo, quero ver somente os códigos de fornecedor e nome, da tabela
FORNECEDOR. Por tanto, escreveremos:
SELECT COD, NOME
FROM FORNECEDOR
• Trará todos os fornecedores que armazenamos, mas somente seu código e nome. Se desejarmos
ver todos os dados de cada fornecedor, substituímos a lista de atributos por um asterisco (*).
SELECT
• Podemos adicionar filtros, como no caso de
UPDATE ou DELETE, adicionando condições
em WHERE. Por exemplo:
SELECT *
FROM FORNECEDOR
WHERE COD=5
SELECT
• Para concluir, devemos pensar como relacionamos dados entre tabelas.
• Se, além da tabela de fornecedores, temos uma tabela itens da forma a seguir:
[ Inicia placa ]
CREATE TABLE ITEM
(
COD INT NOT NULL,
NOME CHAR(50) NOT NULL,
QUANTIDADE INT NOT NULL,
COD_PROV INT NOT NULL,
PRIMARY KEY (COD),
FOREIGN KEY (COD_PROV) REFERENCES FORNECEDOR (COD)
);
SELECT
• Se tivermos os dados a seguir em cada uma
(item, fornecedor):
Select de várias tabelas
• Ao fazer SELECT* FROM ITEM, FORNECEDOR,
recebemos uma combinação de todos os dados com
todos:
Select de várias tabelas
• Mas, na verdade, somente estamos interessados nas filas
que tenham sentido. Para tanto, utilizaremos WHERE
para ver somente o que nos interessar:
SELECT * FROM ITEM A, FORNECEDOR P
WHERE A.COD_PROV = P.COD
Repasse
• Com os bancos de dados, podemos armazenar informações e tê-las
sempre disponíveis cada vez que iniciarmos o sistema, para poder acessar
os dados de maneira simples.
• Algumas das vantagens desses servidores são:
– São uma garantia para evitar a duplicação de dados
– Se houver dados relacionados, ao eliminar um dado, eliminamos todos os dados
relacionados que dependem dele.
– Ajudam para que nosso modelo de dados seja mais compreensível, acessível e
padronizado.
• Para trabalhar com esses servidores, vimos algumas tarefas que
utilizaremos sempre em nossos projetos:
– Criação de tabelas
– Inserção e atualização de dados.
– Métodos para realizar consultas sobre os dados.