Bancos de Dados:
impossível viver sem eles...
Vanessa Braganholo
Vocês já sabem programar...
• Problema: eu preciso calcular a média de uma turma de Estruturas de Dados II
public static void main(String[] args) { Scanner teclado = new Scanner(System.in);
System.out.print("Entre com o número de alunos da turma: "); int t = teclado.nextInt();
float notas[][] = new float[t][4]; for (int i = 0; i < t; i++) {
//armazena notas de 3 provas dos alunos de uma turma em uma matriz
System.out.println("Entre com a nota da P1 do aluno " + i + ":"); notas[i][0] = teclado.nextFloat();
System.out.println("Entre com a nota da P2 do aluno " + i + ":"); notas[i][1] = teclado.nextFloat();
System.out.println("Entre com a nota da P3 do aluno " + i + ":"); notas[i][2] = teclado.nextFloat();
//calcula a média e armazena na quarta posição da matriz notas[i][3] = (notas[i][0] + notas[i][1] + notas[i][2])/3; }
for (int i = 0; i < t; i++) {
//imprime a media e o status de cada aluno. float media = notas[i][3];
System.out.print("A média do aluno " + i + " é: " + media + ". "); System.out.print("O status do aluno é: ");
if (media >= 6) System.out.println("APROVADO"); else if (media < 4) System.out.println("REPROVADO"); else System.out.println("FAZER VS"); }
Vamos testar?
• Funciona!
• Mas, na hora de lançar as notas na pauta, eu me dou conta de que vou ter que digitar todas as
notas novamente!
• Por que? Porque o programa não “salva” os dados digitados pelo professor
• A cada execução, a memória está zerada, e os dados são lidos para que a média possa ser calculada
Solução?
• Vamos gravar as notas num arquivo!
• Assim, eu digito tudo uma única vez, e os dados podem ser lidos futuramente se necessário
• Um conjunto de notas fica associado à matrícula do aluno, e também ao ano/semestre em que ele cursou a disciplina
Arquivo de Notas
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Mas...
• Depois te gravar as notas de 20 turmas no
arquivo, ele começa a ficar grande e difícil de manipular
Cenário 1
• Um ex-aluno se candidatou para ser meu bolsista de IC
• Para decidir se vou aceitá-lo, quero consultar a nota que ele tirou na minha disciplina
• Solução: tenho que escrever um programa que lê o arquivo sequencialmente, até encontrar as
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0
Cenário 2
• Quero fazer uma análise estatística para ver a
evolução da média das turmas ao longo dos anos
• Solução: fazer um programa que lê o arquivo
sequencialmente, calcula a média de cada turma, e imprime na tela os valores das médias por
Calcular a média das turmas
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0 8,33
Calcular a média das turmas
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0 8,33 4,56
Calcular a média das turmas
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0 8,33 4,56 6,33
Calcular a média das turmas
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0 8,33 4,56 6,33
Calcular a média das turmas
• Média da turma 2009/1 = 6,40
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10,0 8,0 7,0 1002001 2009 1 7,0 5,5 1,2 1003001 2009 1 4,0 7,0 8,0 1001002 2009 2 8,0 4,5 7,1 1002002 2009 2 7,5 6,5 7,0 1001003 2010 1 8,4 5,6 4,0 1002003 2010 1 7,0 4,5 9,0 8,33 4,56 6,33 6,40
Mas...
• Quanto mais o tempo passa, maior fica o arquivo, mais lentas ficam as consultas
Como melhorar esse cenário?
• Organizar os dados de forma que eles sejam armazenados ordenados por número de
matrícula
• Isso faria a busca das notas de 1 aluno ser mais rápida (poderíamos usar busca binária, por
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10 8 7 1001002 2009 2 8 4,5 7,1 1001003 2010 1 8,4 5,6 4 1002001 2009 1 7 5,5 1,2 1002002 2009 2 7,5 6,5 7 1002003 2010 1 7 4,5 9 1003001 2009 1 4 7 8
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10 8 7 1001002 2009 2 8 4,5 7,1 1001003 2010 1 8,4 5,6 4 1002001 2009 1 7 5,5 1,2 1002002 2009 2 7,5 6,5 7 1002003 2010 1 7 4,5 9 1003001 2009 1 4 7 8
Matrícula a procurar: 1001003
Matrícula Ano Semestre P1 P2 P3
1001001 2009 1 10 8 7 1001002 2009 2 8 4,5 7,1 1001003 2010 1 8,4 5,6 4 1002001 2009 1 7 5,5 1,2 1002002 2009 2 7,5 6,5 7 1002003 2010 1 7 4,5 9 1003001 2009 1 4 7 8
Por outro lado...
• Calcular a média de cada turma fica bem mais complexo, pois os dados agora não estão mais armazenados por turma
Então vamos indexar o arquivo!
• Criar um arquivo separado que aponta para os registros que contêm um determinado valor de ano semestre
Indexar por Ano/Semestre
Matrícula Ano Semestre P1 P2 P3
0 1001001 2009 1 10 8 7 1 1001002 2009 2 8 4,5 7,1 2 1001003 2010 1 8,4 5,6 4 3 1002001 2009 1 7 5,5 1,2 4 1002002 2009 2 7,5 6,5 7 5 1002003 2010 1 7 4,5 9 6 1003001 2009 1 4 7 8
Ano Semestre Endereço
2009 1 {0, 3, 6} 2009 2 {1, 4} 2010 1 {2, 1}
Mas...
• O chefe do departamento gostou da minha ideia, e resolveu que todos os professores do
departamento deveriam utilizá-lo para armazenar as notas de suas disciplinas
Para isso, precisamos...
• Adicionar uma coluna para identificar o professor da turma
• Adicionar uma coluna para identificar a disciplina
Adição de colunas Professor e
Disciplina
Matrícula Professor Disciplina Turma Ano Semestre P1 P2 P3
1001001 Vanessa ED2 A1 2009 1 10 8 7 1001001 Leo Murta Prog I A1 2006 2 5 8,5 6,5 1001002 Vanessa ED2 A1 2009 2 8 4,5 7,1 1001002 Simone FAC A1 2006 2 4 6,5 7 1001003 Vanessa ED2 A1 2010 1 8,4 5,6 4 1002001 Vanessa ED2 A1 2009 1 7 5,5 1,2 1002002 Vanessa ED2 A1 2009 2 7,5 6,5 7 1002003 Vanessa ED2 A1 2010 1 7 4,5 9 1003001 Vanessa ED2 A1 2009 1 4 7 8 ...
Alteração na estrutura do arquivo...
• Implica em alteração no programa que lê e manipula o arquivo
• Não existe independência entre os dados e o programa que os usa
Problema (1)
• Redundância de Dados pode levar a estados inconsistentes
Inconsistência devido a Redundância
Matrícula Professor Disciplina Turma Ano Semestre P1 P2 P3
1001001 Vanessa ED2 A1 2009 1 10 8 7 1001001 Leo Murta Prog I A1 2006 2 5 8,5 6,5 1001002 Vanessa ED2 A1 2009 2 8 4,5 7,1 1001002 Simone FAC A1 2006 2 4 6,5 7 1001003 Vanessa ED2 A1 2010 1 8,4 5,6 4 1002001 Vanessa ED2 A1 2009 1 7 5,5 1,2 1002002 Vanessa ED2 A1 2009 2 7,5 6,5 7 1002003 Vanessa ED2 A1 2010 1 7 4,5 9 1003001 Vanessa ED2 A1 2009 1 4 7 8 ...
Inconsistência devido a Redundância
Matrícula Professor Disciplina Turma Ano Semestre P1 P2 P3
1001001 Vanessa ED2 A1 2009 1 10 8 7 1001001 Leo Murta Prog I A1 2006 2 5 8,5 6,5 1001002 Vanessa ED2 A1 2009 2 8 4,5 7,1 1001002 Simone FAC A1 2006 2 4 6,5 7 1001003 Vanessa ED2 A1 2010 1 8,4 5,6 4 1002001 Vanessa ED2 A1 2009 1 7 5,5 1,2 1002002 Vanessa ED2 A1 2009 2 7,5 6,5 7 1002003 Vanessa ED2 A1 2010 1 7 4,5 9 1003001 Aline ED2 A1 2009 1 4 7 8 ...
Problema (2)
Exemplo
• Eu quero inserir os dados de uma nova turma no arquivo
1. Abro o arquivo
2. Gravo 20 novos registros
• Ao mesmo tempo, Simone também quer inserir novos dados
1. Abre o arquivo
Exemplo
• Dependendo da ordem em que as operações são disparadas, podemos ter vários resultados:
1. Alguns dos meus registros são gravados, outros são sobreescritos pelos da Simone; ou
2. Os 30 registros da Simone ficam gravados por cima dos meus 20 (e os meus 20 são perdidos)
Problema (3)
• Um professor não pode ter permissão de alterar as notas de outro professor
• Outra pessoa que não seja professor não pode ver os dados do arquivo
Como resolver estes problemas?
• Uso de um Sistema de Gerência de Banco de Dados (SGBD)
▫ Controle de concorrência
▫ Autorização e controle de acesso ▫ Indexação
Vamos criar um Banco de Dados para
resolver o nosso problema?
1. Modelagem de dados
2. Tradução para modelo relacional (tabelas)
3. Criação das tabelas no banco de dados
4. Inserção dos dados
2. Tradução para modelo relacional
(tabelas)
• Disciplina (CodDisciplina, Nome)
• Professor (CodProfessor, Nome)
• Turma (CodDisciplina, CodTurma, Ano, Semestre, CodProfessor)
▫ CodDisciplina referencia Disciplina ▫ CodProfessor referencia Professor • Aluno (Matricula, Nome)
• Inscricao (Matricula, CodDisciplina, CodTurma, Ano, Semestre, P1, P2, P3)
▫ Matricula referencia Aluno
▫ (CodDisciplina, CodTurma, Ano, Semestre) referencia Turma
3. Criação das tabelas no Banco de
Dados
CREATE TABLE Disciplina (
codDisciplina VARCHAR(8) NOT NULL, nome VARCHAR(100),
PRIMARY KEY (codDisciplina) );
CREATE TABLE Professor (
codProfessor VARCHAR(8) NOT NULL, nome VARCHAR(100),
PRIMARY KEY (codProfessor) );
CREATE TABLE Turma (
codDisciplina VARCHAR(8) NOT NULL, codTurma VARCHAR(3) NOT NULL, ano INT NOT NULL,
semestre INT NOT NULL, codProfessor VARCHAR(8),
PRIMARY KEY(codDisciplina, codTurma, ano, semestre), FOREIGN KEY codDisciplina REFERENCES Disciplina, FOREIGN KEY codProfessor REFERENCES Professor );
CREATE TABLE Aluno ( matricula INT NOT NULL, nome VARCHAR(100), PRIMARY KEY(matricula) );
CREATE TABLE Inscricao ( matricula INT NOT NULL,
codDisciplina VARCHAR(8) NOT NULL, codTurma VARCHAR(3) NOT NULL, ano INTO NOT NULL,
semestre INT NOT NULL, p1 FLOAT,
p2 FLOAT, p3 FLOAT,
PRIMARY KEY (matricula, codDisciplina, codTurma, ano, semestre),
FOREIGN KEY matricula REFERENCES Aluno,
FOREIGN KEY (codDisciplina, codTurma, ano, semestre) REFERENCES Turma
4. Inserção dos dados (Professor)
INSERT INTO Professor (CodProfessor, Nome)VALUES (‘500100’, ‘Vanessa’);
INSERT INTO Professor (CodProfessor, Nome) VALUES (‘500101’, ‘Simone’);
INSERT INTO Professor (CodProfessor, Nome) VALUES (‘500103’, ‘Leo Murta’);
4. Inserção dos dados (Turma)
INSERT INTO Turma (CodDisciplina, CodTurma, Ano, Semestre, CodProfessor)
VALUES (‘TCC00165’, ‘A1’, 2012, 1, ‘500101’);
INSERT INTO Turma (CodDisciplina, CodTurma, Ano, Semestre, CodProfessor)
4. Inserção dos dados (Aluno)
INSERT INTO Aluno (Matricula, Nome)VALUES (1000101, ‘Maria Silva’);
INSERT INTO Aluno (Matricula, Nome) VALUES (1000102, ‘Jonas Castro’);
INSERT INTO Aluno (Matricula, Nome) VALUES (1000103, ‘Anderson Fontes’);
4. Inserção dos dados (Inscricao)
INSERT INTO Inscricao (Matricula, CodDisciplina, CodTurma, Ano,Semestre, P1, P2, P3)
VALUES (1000101, ‘TCC00165’, ‘A1’, 2012, 1, 10, 4, 5.6) ...
Aluno
Professor Disciplina
Aluno
Professor Disciplina
Turma Inscrição
Consulta 1
• Listar todos os nomes de alunos que estão matriculados na turma “A1” da disciplina “TCC00165” em 2012/1.
SELECT nome
FROM aluno a, inscricao i WHERE i.ano = 2012
AND i.semestre = 1
AND i.codTurma = 'A1'
AND i.codDisciplina = 'TCC00165' AND a.matricula = i.matricula
Consulta 1
• Listar todos os nomes de alunos que estão matriculados na turma “A1” da disciplina “TCC00165” em 2012/1.
SELECT nome
FROM aluno a, inscricao i WHERE i.ano = 2012
AND i.semestre = 1
AND i.codTurma = 'A1'
AND i.codDisciplina = 'TCC00165' AND a.matricula = i.matricula
Consulta 2
• Listar todas as notas do aluno cuja matrícula é 1001003
SELECT codDisciplina, p1, p2, p3 FROM inscricao i
Consulta 2
• Listar todas as notas do aluno cuja matrícula é 1001003
SELECT codDisciplina, p1, p2, p3 FROM inscricao i
Consulta 3
• Calcular a média de cada turma
SELECT codDisciplina, codTurma, ano, Semestre, AVG((p1+p2+p3)/3) AS media
FROM inscricao
GROUP BY codDisciplina, codTurma, ano, Semestre
Consulta 3
• Calcular a média de cada turma
SELECT codDisciplina, codTurma, ano, Semestre, AVG((p1+p2+p3)/3) AS media
FROM inscricao
GROUP BY codDisciplina, codTurma, ano, Semestre
Consulta 4
• Calcular as médias de cada aluno em cada
disciplina, e mostrar em ordem decrescente de média
SELECT a.nome, a.matricula, i.codDisciplina, (p1+p2+p3)/3 AS media
FROM aluno a, inscricao i
WHERE a.matricula = i.matricula ORDER BY media desc
Consulta 4
• Calcular as médias de cada aluno em cada
disciplina, e mostrar em ordem decrescente de média
SELECT a.nome, a.matricula, i.codDisciplina, (p1+p2+p3)/3 AS media
FROM aluno a, inscricao i
WHERE a.matricula = i.matricula ORDER BY media desc
Voltando aos problemas no uso de
arquivos...
• Problema 1: Redundância de Dados
▫ Separamos os dados em várias tabelas – não há mais redundância
▫ Mas isso depende de uma boa modelagem dos dados – o SGBD por si só não garante que não haverá redundância
Voltando aos problemas no uso de
arquivos...
• Problema 2: Acesso concorrente
▫ O SGBD garante que, mesmo com acessos concorrentes, os dados continuarão íntegros
Voltando aos problemas no uso de
arquivos...
• Problema 3: Um professor não pode alterar os dados de turmas de outros professores
▫ Vamos criar uma visão para cada professor – cada professor enxergará e terá permissão para alterar somente os dados de suas próprias turmas
Criação da Visão
CREATE VIEW INSCRICOES_VANESSA AS ( SELECT * FROM INSCRICAO
WHERE (codDisciplina, codTurma, ano, semestre) IN (SELECT codDisciplina, codTurma, ano, semestre FROM TURMA
WHERE CodProfessor='500100' ) )
Consulta sobre a visão
SELECT *
E se...
• O sistema de carteirinhas da UFF quiser usar o meu banco de dados?
• O sistema de monitoria da UFF quiser usar o meu banco de dados?
E se...
• O sistema de carteirinhas da UFF quiser usar o meu banco de dados?
• O sistema de monitoria da UFF quiser usar o meu banco de dados?
• Posso adicionar outras tabelas, e várias
aplicações passam a usar o mesmo banco de dados
Banco de Dados da UFF
idUFF Carteirinhas
• Usa vários bancos de dados para armazenar
usuários, amigos, posts, fotos, etc
• MySQL, Cassandra
• Para mostrar o seu feed de notícias, o Facebook faz consultas ao banco de dados para trazer os posts recentes dos seus amigos
SELECT mensagem
FROM posts p, amigos a, usuario u1, usuario u2 WHERE p.autor = u2.id
AND a.usuario = u1.id AND a.amigo =u2.id
• Para mostrar o seu feed de notícias, o Facebook faz consultas ao banco de dados para trazer os posts recentes dos seus amigos
SELECT mensagem
FROM posts p, amigos a, usuario u1, usuario u2 WHERE p.autor = u2.id
AND a.usuario = u1.id AND a.amigo =u2.id
AND u1.id = ‘X000123023920’
IMPORTANTE: Este é um exemplo hipotético – não quer dizer que os dados estejam armazenados com essa
• Para mostrar o seu feed de notícias, o Facebook faz consultas ao banco de dados para trazer os posts recentes dos seus amigos
SELECT mensagem
FROM posts p, amigos a, usuario u1, usuario u2 WHERE p.autor = u2.id
AND a.usuario = u1.id AND a.amigo =u2.id
AND u1.id = ‘X000123023920’
ID do usuário para o qual o Facebook vai exibir o Feed de
notícias
IMPORTANTE: Este é um exemplo hipotético – não quer dizer que os dados estejam armazenados com essa
Facebook em números (Dados de 2010)
• 570 bilhões de page views por mês
• Existem mais fotos no Facebook do que em
todos os outros sites juntos (incluindo o Flickr)
• Mais de 3 bilhões de fotos são armazenadas no Facebook por mês
• O sistema do Facebook serve 1,2 milhões de fotos por segundo
• Mais de 25 bilhões de mensagens
(atualizações de status, comentários, etc) são trocadas pelos usuários a cada mês
Bancos
• Cada cliente é uma tupla numa tabela (clientes)
• Cada conta corrente é uma tupla numa tabela (conta)
• Cada débito ou crédito na sua conta é uma tupla numa tabela (transações)
• Imaginem a quantidade de dados armazenada no banco de dados do Banco do Brasil!
Banco do Brasil em números
• 52,7 milhões de clientes
• 33,758 milhões de contas-correntes de
pessoas físicas
• 2,176 milhões de contas-correntes de pessoas
jurídicas
• Se cada conta-corrente tiver uma média de 10 lançamentos por mês (entre débitos e créditos), a tabela de transações teria em torno de 360
milhões de novas tuplas por mês
Imposto de Renda
• Cada declaração de Imposto de Renda é enviada para a Receita Federal, que armazena os dados em seu banco de dados (desmembrando os
Imposto de Renda em números
• 25.244.122 declarações foram recebidas em 2012
• Se cada declaração tiver 10 bens (entre contas-correntes, aplicações financeiras, imóveis, etc), a tabela de bens recebe 250 milhões de tuplas
por ano
• Além dos bens, cada declaração também informa despesas médicas, dados de dependentes, fontes pagadoras, etc
Fonte:
Cartão de Crédito
Visa em números
• 916 milhões de transações no último trimestre
de 2010 (América Latina + Caribe)
Gmail
Gmail em números
• 350 milhões de usuários
• Supondo que cada usuário envia/recebe 20
emails por dia, são 7 bilhões de mensagens que precisam ser armazenadas por dia
DBA
• Todas essas são aplicações isoladas, porém com grande quantidade de dados - tempo de acesso é crucial
• Empresas grandes possuem várias aplicações acessando o mesmo banco de dados
• Nestes casos, é necessário um profissional
especializado para “cuidar do banco de dados” – o DBA
No mercado
• Um desenvolvedor/programador/analista de sistemas precisa que saber banco de dados
▫ Os dados tratados pela aplicação que o
desenvolvedor está construindo quase sempre precisam ser armazenados
▫ Entender como isso funciona é crucial para fazer programas eficientes e corretos
http://www.indeed.com/salary US$ 8000,00 por mês!
Bancos de Dados:
impossível viver sem eles...
Vanessa Braganholo