Você está na página 1de 26

Aprendendo a Programar

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 ]

CREATE TABLE FORNECEDOR


(
COD INT NOT NULL,
NOME CHAR(50) NOT NULL,
TEL INT,
PRIMARY KEY (COD)
);
CREATE
• Nesses exemplos, crio primeiro uma tabela de
nome FORNECEDOR, com três tipos de dados.
O primeiro será um número inteiro que não
poderá ter dados vazios com nome COD. A
seguir, temos uma palavra, a qual não poderá
estar vazia, com um máximo de 50 caracteres,
chamada NOME. Finalmente, temos um
número inteiro chamado TEL, e defino que a
chave primária será COD.
CHAVES
• O que são a PRIMARY KEY e a FOREIGN KEY que aparecem? A chave primária
é um subconjunto do tipos de dados que tenho na tabela, os quais
identificam univocamente uma fila da tabela. Ainda é difícil de
compreender? Basicamente, pensemos como diferenciaríamos dois
FORNECEDORES com os dados fornecidos. Se já sabemos que somente com
o número de código de fornecedor podemos dizer que dois fornecedores
são diferentes, então, nossa chave primária será esse dado. O nome em
geral não serve porque pode haver dois fornecedores com o mesmo nome.
• O caso da chave estrangeira é um pouco mais difícil, e nos permite, por
exemplo, controlar nosso banco de dados. Se eu tiver a expressão CARRO,
com o número da carteira de identidade de seu dono, ao defini-lo como
chave estrangeira, o número de carteira que aparecer em CARRO deve existir
SIM ou SIM em PESSOA. É um controle que nos oferece automaticamente o
uso do banco de dados.
DROP
• Para eliminar uma tabela, teremos que fazer:

DROP TABLE <NOME>

Ex: DROP TABLE FORNECEDOR


INSERT
• Uma vez que tenhamos nossas tabelas, em nosso caso FORNECEDOR,
começaremos a preencher os dados. Para isso, utilizaremos a expressão
INSERT:
  
INSERT INTO TABLE <NOME> (A1,..,AK)
VALUES (V1,..,VK);
 
Ex: INSERT INTO ITEM (COD,NOME,TEL)
VALUES (5, “JOÃO DA SILVA”,666)
 
• O que fazemos com essa construção é dizer a nosso banco de dados que
insira os dados 5, "JOÃO DA SILVA" e 666 nos campos COD, NOME e TEL da
tabela ITEM, na ordem indicada.
UPDATE
• Se quisermos alterar os dados que introduzimos, utilizaremos a expressão UPDATE:
  
UPDATE <NOME>
SET (A1 = V1,...,AN = VN)
WHERE <CONDIÇÃO> ;
 
Ex: UPDATE FORNECEDOR P
SET (P.TEL = 0000)
 
Ex: UPDATE FORNECEDOR P
SET (P.TEL = 0000)
WHERE P.COD = 5
• O UPDATE nos permite filtrar os fornecedores que vamos alterar. No primeiro exemplo,
alteramos todos os fornecedores configurando o telefone em 000, enquanto, no outro
exemplo, somente alteramos o fornecedor cujo código for 5.
DELETE
• Se desejarmos eliminar algum dado em especial, utilizamos a instrução
DELETE.
 
DELETE FROM <NOME>
WHERE <CONDIÇÃO> ;
 
Ex: DELETE FROM FORNECEDOR P
WHERE P.COD = 5;
 
• Nesse caso, eliminamos o registro na tabela cujo código for igual a 5. Se
desejarmos apagar todas as informações de uma tabela, simplesmente
executamos a instrução DELETE FROM FORNECEDOR, embora não seja
recomendável realizar este tipo de ações.
SELECT
• Finalmente, temos a instrução para listar informações, a qual servirá para recuperar todo o que
foi armazenado.
  
SELECT A1,A2,..,AN
FROM T1,T2,..,TN
WHERE p

• 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.

Você também pode gostar