Anda di halaman 1dari 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> (Ai,..,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.

Anda mungkin juga menyukai