Banco de Dados
Objetivo
• Compreender o que são dados, banco de dados e SGDB.
• Compreender a importância do armazenamento de dados.
O que é banco de dados
• Para entender melhor o que é banco de dados iremos analisar separadamente as duas palavras: Segundo o dicionário
Aurélio:
• Banco: Assento, Banco de Areia, estabelecimento que recebe
deposito de dinheiro, “Acervo ou conjunto de dados de
obras, documentos, informações de determinado tipo, devidamente armazenados e organizados para uso”.
• Dados: Elemento de Informação, em forma apropriada para
armazenamento, processamento ou transmissão por meios automáticos.
Banco de Dados
• Banco de Dados: Conjunto de dados, organizados por
categorias, de modo a facilitar a pesquisa, comparação e atualização das informações.
• Os banco de dados são os locais que utilizamos para
armazenar os dados manipulados pelos nossos programas.
• Até agora toda vez que fazíamos um programa quando ele era encerrado os dados eram perdidos. No entanto, muitas vezes é necessário rever essas informações para isso temos que armazena-las.
Sistemas Computacionais e BD
• Dos sistemas computacionais mais simples aos maissofisticados grande parte não funcionaria satisfatoriamente se não existisse o armazenamento de dados.
• Imagine:
• Utilizar o MS Word sem poder salvar os arquivos
• Ter um sistema de controle de estoque sem poder armazenar os produtos vendidos e comprados
• Utilizar o sistema de uma agencia bancaria sem poder armazenar informações sobre depósitos e saques
A importância do Armazenamento
de Dados
• Os dados são de extrema importância para empresa, muitas vezes os dados chegam a valer mais que o patrimônio físico delas (prédios, máquinas, etc)
• Exemplo:
• SERASA • Facebook
• Uma vez que os dados são tão importantes é necessário ter sistemas que manipulem e esses dados com maior eficiência e segurança.
Antigamente…
• Nos primórdios da programação os dados eram armazenados em arquivos, os programadores eram responsáveis por criar tanto as rotinas de negócio, quanto as rotinas necessárias para manter e recuperar os dados. (MUITO TRABALHOSO !!!)
• Porem naquela época os sistemas eram pequenos e manipulavam pequenas quantidades de dados.
Exemplo de Código em C
#include <stdio.h> #include <stdlib.h> typedef struct TProduto { char nome[50]; int quantidade; float valorUnitario; float total; } Produto;
typedef struct TPessoa { char nome[50]; char endereco[50]; Produto produtos[10]; } Pessoa; void lerArquivo() { FILE *pf; Pessoa cliente2; if ((pf = fopen("c:\\banco.if", "r")) == NULL) { printf("Erro na abertura do arquivo\n"); exit(1);
}
while (fread(&cliente2, sizeof (Pessoa), 1, pf) == 1) { printf("O nome da pessoa %s\n", cliente2.nome); printf("O nome do produto %s\n", cliente2.produtos[0].nome); printf("O nome da pessoa %d\n", cliente2.produtos[0].quantidade); printf("O nome da pessoa %f\n", cliente2.produtos[0].valorUnitario); printf("\n"); } fclose(pf); } void gravaArquivo() { FILE *pf; Pessoa cliente1; int i = 0;
printf("Digite o nome da Pessoa\n"); gets(cliente1.nome);
printf("Digite o endereco da Pessoa\n"); scanf("%s", cliente1.endereco); for (i = 0; i < 2; i++) {
printf("Digite o nome do produto\n"); scanf("%s", cliente1.produtos[i].nome);
printf("Digite a quantidade do produto\n"); scanf("%d", &cliente1.produtos[i].quantidade); printf("Digite o valor do produto \n"); scanf("%f", &cliente1.produtos[i].valorUnitario);
cliente1.produtos[i].total = cliente1.produtos[i].quantidade + cliente1.produtos[i].valorUnitario; }
if ((pf = fopen("c:\\banco.if", "a")) == NULL) { printf("Erro na abertura do arquivo\n"); exit(1);
}
if (fwrite(&cliente1, sizeof (Pessoa), 1, pf) != 1) { printf("Erro ao escrever no arquivo"); }
fclose(pf); }
int main(int argc, char** argv) { int opcao = 0;
do{
printf("Escolha uma opcao\n"); printf("1) Realizar Venda\n"); printf("2) Mostrar Vendas\n"); scanf("%d", &opcao);
switch(opcao){
case 1: gravaArquivo();break; case 2: lerArquivo(); break; }
}while(opcao != 0); return (EXIT_SUCCESS); }
Atualmente
• Nos dias atuais, as aplicações estão cada vez mais complexas, gerenciando grandes quantidades de informação. Os
programadores devem estar focados no desenvolvimento da lógica da aplicação sem perder a segurança dos dados.
• Imagine desenvolver um site de vendas online (por exemplo submarino) e armazenar os dados utilizando o sistemas de arquivos.
• Seria muito ruim comprar um DVD do Jogo Diablo e receber um CD do Reginaldo Rossi.
Problemas dos Sistemas de
Arquivos
• Como os programadores eram responsáveis por criar tanto as rotinas de negócio, quanto as rotinas necessárias para manter e recuperar os dados, a criação de sistemas tornava-se
complexa e demorada, além disso esses sistemas apresentavam vários tipos de problemas.
• As principais dificuldades na utilização do sistemas de arquivos eram:
Inconsistência e redundância de
dados
• Os arquivos e aplicações são criados e mantidos por diferentes
programadores, em geral durando longos períodos de tempo. Com isso a informação pode ser repetida em diversos lugares (arquivos), gerando redundância de dados, ademais a informação por estar repetida em diversos lugares pode apresentar divergências.
• Exemplo: Redundância
• O endereço e o telefone de um cliente pode aparecer tanto no
arquivo de cadastro de clientes, quanto no arquivo de contas a pagar.
• Exemplo: Inconsistência
• Um cliente mudou de endereço e solicitou a alteração de seus dados no cadastro da empresa, contudo seus dados só foram atualizados no arquivo de cadastro de cliente, no arquivo de contas a pagar seu
Dificuldade de acesso aos dados
• Como a manipulação dos arquivos é realizada por meio de programas específicos, caso seja necessário emitir o relatório que não estava previsto na implementação do sistema será necessário criar um nova aplicação para que os dados possam ser acessados.
Isolamento de dados
• Como os dados estão dispersos em vários arquivos, e estes arquivos podem apresentar diferentes formatos, é difícil escrever novas aplicações.
Problemas de Integridade
• Os valores de dados armazenados em um banco de dados devem respeitar certas restrições.
• Exemplo:
• Suponha que para abrir um conta em um banco o cliente deve fazer um deposito inicial de R$ 100,00. Ao abrir a conta é necessário
verificar se o cliente fez o deposito do valor mínimo, caso isso não ocorra não haverá integridade nos dados contidos no banco.
• O mesmo pode ocorrer no caso do cadastro de um cliente de uma financiadora, pode ser necessário verificar a idade do cliente antes de efetuar seu cadastro. Suponha que só seja possível cadastrar clientes que possuam idade entre 18 e 65 anos, caso o sistema permita o cadastro de clientes fora dessa faixa de idade os dados armazenados não serão íntegros.
Problemas de atomicidade
• Um sistema computacional, como qualquer outro dispositivo mecânico ou elétrico, esta sujeito a falhas. Em muitas
aplicações é crucial assegurar que, uma vez detectada uma falha, os dados sejam salvos em seu ultimo estado
consistente, anterior a ela.
• Exemplo:
• Considere um que você esta fazendo uma transferência de R$ 100,00, da sua conta para a conta de um amigo, pela internet. O processo de transferência de consiste em duas operações no banco:
• 1 – Debitar o R$ 100,00 da sua conta
Problemas de atomicidade
• Considere que ao iniciar a transferência acabe a energia elétrica de seu computador, na sua conta poderia ter sido debitado os R$ 100,00, porém poderia ocorrer dos R$ 100,00 não terem sido creditados na conta de seu amigo.
• Este fato criaria um estado de inconsitência no banco de dados. Para que haja consistência é essencial que ambas as operações (debito e credito) sejam realizadas, ou então que nenhuma delas sejam. Isto é a operação (debito e credito) deve ser atômica – deve ocorre por completo ou não ocorrer.
Anomalias no acesso
concorrente
• Grande parte dos sistemas permitem atualizações simultâneas nos dados para aumento do desempenho do sistema. Nesse tipos de ambientes, a interação entre atualizações concorrentes pode resultar em inconsistências de dados.
• Exemplo:
• Suponha que o saldo de uma conta bancária seja de R$ 1.000,00 e que dois clientes realizem um saque, de R$ 50,00 e 100,00, em terminais eletronicos diferentes ao mesmo tempo.
Cliente 1 Cliente 2
Saldo na Conta = R$ 1.000,00 Lê Saldo = R$ 1.000,00
Efetua Saque = R$ 1000.00 – R$ 50,00 Escreve novo Saldo = R$ 950,00
Saldo na Conta = R$ 1.000,00 Lê Saldo = R$ 1.000,00
Efetua Saque = R$ 1000.00 – R$ 100,00 Escreve novo Saldo = R$ 900,00
Dependendo da operação que gravar os dados no banco primeiro o saldo será R$ 950,00 ou R$ 900,00, onde o correto seria R$ 850,00.
Problemas de Segurança
• Nem todos usuários do banco possuem autorização de acesso a todos os dados, alguns dados podem ser de uso exclusivo de um grupo de usuários. Ademais os arquivos possuem pouca segurança, podendo ser copiados, apagados e/ou lidos e modificados.
• Essas dentre outras dificuldades provocaram o desenvolvimento dos SGDBs.
Solução
• Para resolver esses problemas separamos os dados (arquivos) e os programas para acesso a esses dados dos programas com as regras de negocio (lógica). • Antes tínhamos: Arquivos (dados) Programa para Manipular dados Programa de Vendas Arquivos (dados) Programa para Manipular dados Programa de Cobrança
Solução
• Agora temos: Programa para Manipular dados Programa de Vendas Arquivos (dados) Programa de Cobrança Programa de Estoque SGDBSolução
• Agora os desenvolvedores se preocupam em desenvolver
apenas a logica dos programas. Os códigos para armazenar os dados são providos por um outro programa mais
especializado.
• Assim diminuem o tempo, esforços de desenvolvimento e o custo e aumenta a performance e segurança.
• Um SGDB - Sistema gerenciador de banco de dados é constituído por um conjunto de dados associados a um conjunto de programas para acesso a esses dados.
Exercícios
1. Explique com suas palavras a importância do
armazenamento de dados em sistemas computacionais.
2. O sistema de armazenamento de arquivos apresentavam grandes problemas. Responda quais são esses problemas e por que?
3. O que é redundância?
4. O que é atomicidade?
5. O que é problema de acesso concorrente?
6. O que é um banco de dados?
7. O que é um SGDB?