Escolar Documentos
Profissional Documentos
Cultura Documentos
Esta disciplina tem o objetivo de ensinar a mexer em bancos de dados. Para isso, você
entrará em contato com um conteúdo teórico e prático.
Dois programas no decorrer desta disciplina: o MySQL WorkBench e o Mongo DB. O
primeiro funciona para banco de dados relacional e o segundo, para banco de dados
não relacional.
Conceitos sobre tipos de SGBDs relacionais (SQL) e não relacionais (NoSQL) serão pas-
sados, além de serem explanados os tipos de servidores conhecidos e suas aplicações
principais.
Muitas empresas falham na hora de criar um sistema de banco de dados por negligen-
ciarem certas anomalias, inconsistências e redundâncias. Por isso, as tabelas devem
ser planejadas de maneira quadrada, ou seja, devem funcionar como um quebra-cabe-
ça no qual uma tabela interage com outra. Tendo isso em mente, será explicado como
evitar anomalias e inconsistências no ato da concepção das tabelas.
Conceitos de álgebra relacional e cálculo relacional serão explanados para elaborar
lógicas bem fundamentadas.
DADOS DO FORNECEDOR
*Todos os gráficos, tabelas e esquemas são creditados à autoria, salvo quando indicada a referência.
Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio
A violação dos direitos autorais é crime estabelecido pela Lei n.º 9.610/98 e punido pelo
ASSISTA
Indicação de filmes, vídeos ou similares que trazem informações comple-
mentares ou aprofundadas sobre o conteúdo estudado.
CITANDO
Dados essenciais e pertinentes sobre a vida de uma determinada pessoa
relevante para o estudo do conteúdo abordado.
CONTEXTUALIZANDO
Dados que retratam onde e quando aconteceu determinado fato;
demonstra-se a situação histórica do assunto.
CURIOSIDADE
Informação que revela algo desconhecido e interessante sobre o assunto
tratado.
DICA
Um detalhe específico da informação, um breve conselho, um alerta, uma
informação privilegiada sobre o conteúdo trabalhado.
EXEMPLIFICANDO
Informação que retrata de forma objetiva determinado assunto.
EXPLICANDO
Explicação, elucidação sobre uma palavra ou expressão específica da
área de conhecimento trabalhada.
Normalização......................................................................................................................... 25
Anomalias de inclusão.................................................................................................. 26
Anomalias de exclusão................................................................................................. 27
Anomalias de modificação........................................................................................... 28
Normalização: 1º Forma Normal, 2º Forma Normal e 3º Forma Normal................ 28
Sintetizando............................................................................................................................ 43
Referências bibliográficas.................................................................................................. 44
Sintetizando............................................................................................................................ 68
Referências bibliográficas.................................................................................................. 69
NoSQL ..................................................................................................................................... 72
Principais características............................................................................................. 72
Técnicas de implementação NoSQL........................................................................... 75
Big Data .......................................................................................................................... 76
Sintetizando............................................................................................................................ 96
Referências bibliográficas.................................................................................................. 97
Sintetizando.......................................................................................................................... 128
Referências bibliográficas................................................................................................ 129
1 INTRODUÇÃO E
APLICAÇÕES DA
INTELIGÊNCIA
ARTIFICIAL
Tópicos de estudo
Conceitos básicos de um Sis- Normalização
tema Gerenciador de Banco de Anomalias de inclusão
Dados Anomalias de exclusão
O que é um SGBD, o que são Anomalias de modificação
databases, tabelas e dados. Normalização: 1º Forma Nor-
Ciclo de vida de SGBD mal, 2º Forma Normal e 3º Forma
Normal
Modelos conceituais e modelos
externos O modelo relacional: conceitos
Tipos de SGBDs e Servidores Instalação de Bancos de Dados
Modelos lógicos com base em Tipos de dados
objetos Inserindo dados nas tabelas
Modelos lógicos com base em Modelo relacional na prática
registros em MySQL
ASSISTA
O filme O quinto poder, do diretor Bill Condon, fala sobre
gestão estratégica e segurança em dados. Além de ser
instigante, o filme fala sobre como o compartilhamento de
informações afeta os negócios.
Nome-
Endereço Dept Nível-cargo Dias-férias
colaborador
TABELA FÉRIAS JANEIRO TABELA FÉRIAS FEVEREIRO TABELA FÉRIAS MARÇO TABELA FÉRIAS ABRIL
TABELA FÉRIAS MAIO TABELA FÉRIAS JUNHO TABELA FÉRIAS JULHO TABELA FÉRIAS AGOSTO
TABELA FÉRIAS SETEMBRO TABELA FÉRIAS OUTUBRO TABELA FÉRIAS NOVEMBRO TABELA FÉRIAS DEZEMBRO
TABELA COLABORADORES
TABELA PRODUTOS
1
REQUISITOS DE INFORMAÇÃO
FAZER REUNIÃO COM FUTUROS USUÁRIOS DO BANCO DE DADOS E COM OS
DESENVOLVEDORES PARA DESCOBRIR QUAIS DADOS SERÃO UTILIZADOS.
2
PROJETO LÓGICO
DETERMINAR QUAIS TABELAS SERÃO CRIADAS (TABELAS DE PRODUTOS, VENDEDORES,
DEPARTAMENTOS, COLABORADORES, ESTOQUE, FÉRIAS, CONTAS A RECEBER, ETC).
3
PROJETO FÍSICO
DETERMINAR QUAL HARDWARE DOS COMPUTADORES QUE RECEBERÁ OS
PROGRAMAS DO SGBD, QUAL SERÁ A LARGURA DE BANDA NECESSÁRIA, QUAIS
TABELAS E RECURSOS PRECISARÃO DE MAIS DISPONIBILIDADE E ALOCÁ-LOS
NAS MÁQUINAS FÍSICAS E VIRTUAIS CORRETAS.
4
IMPLEMENTAÇÃO E MONITORAÇÃO
CRIAR TABELAS FAZENDO USO DE LINGUAGEM DE DEFINIÇÃO DE DADOS
(LDD) E FAZER CONSULTAS E SELEÇÕES COM COMANDOS DE
LINGUAGEM DE MANIPULAÇÃO DE DADOS (DML).
Existem alguns servidores online que fazem conexão com os programas baixa-
dos na máquina de banco de dados, o servidor UOL, que dá suporte a diversos
SGBDs, assim como o servidor Azure e o servidor Amazon, que hospedam MySQL,
MongoDB, SQL Server e Postgre. Além disso, os servidores Azure e Amazon pos-
suem tempos de teste gratuitos.
O UOL Host possui vários planos de bancos de dados online bem acessíveis para
os diversos SGBDs já citados. Ao utilizar os servidores para MongoDB, MySQL ou
PostGreSQL em espaços de 512 MB, gasta-se menos que R$ 10,00 ao mês. Já para o
servidor de SQL Server, o preço chega a ser de três a quatro vezes mais caro, girando
em torno de R$ 30,00 reais ao mês. Estimar preços é um tanto arriscado, pois eles
variam. A Figura 1 mostra as opções de Bancos de Dados alocadas no UOL Host.
Caso a empresa opte pelo servidor Azure, ela deve seguir os seguintes passos:
1. Criar uma conta para teste ou comprar um espaço no site do azure, es-
colhendo entre SQL Server, Mongo DB, MySQL e PostgreSQL (basta digitar em
sites de pesquisa as palavras-chave “mongo db azure” ou “sql azure” para
achar a página de compra).
Figura 3. Captura de tela mostrando como criar bancos de dados “Recebimentos” e “Teste” no servidor Azure.
O Programa SQL Server, após baixado, deve conectar com o servidor, confor-
me mostra Figura 4. É importante destacar que na parte de cima está o progra-
ma SQL Server e, na parte de baixo, está o espaço online azure.
Figura 4. Captura de tela mostrando conexão do Azure com Programa SQL Server.
Modelo hierárquico
O modelo hierárquico organiza os registros em árvores,
conforme mostra o Diagrama 4. Dessa forma, para
acessar os dados da funcionária Juliana, é neces-
sário acessar os dados da gerência antes e, de-
pois, os dados do departamento financeiro, fa-
zendo um filtro.
Gerência
Financeiro Comercial
Normalização
A etapa de normalização é a última etapa antes de entrar na prática. En-
tretanto, ainda é importante citar o que é anomalia para então definir o que
é normalização (o contrário de anomalia).
Um exemplo de anomalia é colocar dados em tabelas erradas. Por exem-
plo, colocar o salário fi xo do vendedor na tabela de vendas, colocar dados
sobre vendas na tabela de compras, etc.
Quando não se planeja correta e detalhadamente um banco de dados
(pulando as etapas 1 e 2 do Ciclo de Vida de Banco de Dados), ocorrem as
anomalias.
11 3344-5511 Auxiliar de
João R$ 2.000,00 Rua Doze, n. 23
11 9922-8734 Produção
11 3566-5411 Consultora
Márcia R$ 2.300,00 Rua Porto, n. 24
11 9877-8788 Comercial
Auxiliar de
João R$ 2.000,00
Produção
Consultora
Márcia R$ 2.300,00
Comercial
Anomalias de exclusão
Exemplo 1. Um exemplo de anomalia de exclusão pode ser visto na possibili-
dade de excluir um funcionário da tabela de colaboradores que tenha se desliga-
do da empresa sem que seu nome fosse automaticamente deletado da tabela de
premiação. Neste caso, se não programarmos para dar baixa em todas as tabelas
simultaneamente, a empresa pode ficar com uma lista de funcionários-fantasma.
Exemplo 2. Há outro exemplo muito inverso de erro. Imagine que existam
duas tabelas: a tabela de produtos e a tabela de pedidos, conforme mostram as
Tabelas 6 e 7.
002 25/01 1
001 23/02 1
Anomalias de modificação
Supondo que existisse, em uma em-
presa, duas tabelas relacionadas: uma
de filmes e outra de diretores. A tabela
de filmes possui os campos Cod_Filme,
Filme, Nome_Diretor, Gênero e Sinopse
e a tabela de diretores possui os cam-
pos Cod_Diretor, Nome_Diretor, Nasci-
mento, Contato_Diretor.
Como se pode ver, as duas possuem
o nome do diretor (Nome_Diretor). Su-
ponha que, por algum descuido, esses
dois campos não estejam vinculados.
Neste caso, ao alterar o nome de um
diretor que estava escrito com o sobre-
nome errado na tabela de diretores, a tabela de filmes não seria automaticamente
atualizada, gerando um erro inconsistente no nome na tabela filme.
Cod_Produto
Cod_Fornecedor Nome_ Tel_
(chave Nome_Produto Preço_Produto
(chave primária) Fornecedor Fornecedor
primária)
11 9833-5571
005 Notebook I5 R$ 3.000,00 003 Samsung
11 3377-8877
Cod_Produto
Nome_Produto Cod_Fornecedor Preço_Produto
(chave primária)
11 9833-5571
003 Samsung
11 3377-8877
R$ 150,00
002 Bolsa 3 R$ 50,00
(3x50)
Isto evita erros de modificação e, caso um produto que se repete várias vezes
tenha seu preço alterado, o Total Geral não muda automaticamente, pois não foi
calculado por programa, e sim pelo digitador.
Nome da
Atributos
relação
CARGOS
Código Denominação Classe Categoria
701001 Administrador E Técnico-Administrativo
701010 Bibliotecário - Documentalista E Técnico-Administrativo
tuplas 701244 Técnico de Laboratório - Área D Técnico-Administrativo
701405 Auxiliar em Administração C Técnico-Administrativo
702001 Professor de Ensino Básico, Técnico e Tecnológico D Docente
Fonte: COSTA, 2011, p. 35. (Adaptado).
Nesse sentido, pode-se dizer que cada linha é uma tupla; as palavras “Có-
digo”, “Denominação”, “Classe” e “Categoria” são atributos; cada atributo é
um domínio, D1 é domínio de código, D2 é domínio de denominação, D3 é
domínio de classe, D4 é domínio de categoria.
Suponha que temos duas tabelas e elas possuam um campo em comum,
Cod_Departamento, conforme mostra o Diagrama 9.
Funcionários
Salários
Cod_Funcionário Salário
chave estrangeira
(Foreign Key)
002 R$ 5.000,00
ASSISTA
Para instalar os dois programas, siga o tutorial em vídeo
chamado Instalar MySQL e XAMPP - By Luiza Cerchiari - 2019.
Após instalar os dois programas, ative o Xampp e ative Apache e MySQL, con-
forme mostra a Figura 6.
Figura 8. Captura de tela que mostra como criar uma nova conexão.
Figura 9. Captura de tela que mostra como abrir área de trabalho do Workbench MySQL.
Verifi que se o símbolo de raio está amarelo. Caso esteja, é possível co-
meçar a mexer.
Tipos de dados
Existem vários tipos de dados (datatypes). A Tabela 8 mostra os tipos mais
utilizados e fundamentais.
idade int
Idade com números inteiros;
Int Para números inteiros
Não precisa de quantidade máxima de
caracteres.
Horário hora_da_compra
Time
(Hora-Minuto-Segundo-xx:xx:xx) Por exemplo: 10:00:00.
Resultado esperado
Figura 10. Captura de tela que mostra como criar um banco de dados.
Figura 11. Captura de tela que mostra como ativar o Banco de Dados.
Figura 12. Captura de tela que mostra como criar uma tabela.
Como pode ser visto no meio da Figura 13, a tabela foi criada e está exibida
abaixo dos códigos, mas ela ainda não foi preenchida com dados, contendo
apenas os campos:
nome_produto | preco_produto | data_compra | tipo_compra | quan-
tidade_comprada
Procure estes dados na tabela. Eles são resultados da cláusula SELECT.
Figura 14. Captura de tela que mostra como inserir dados em uma tabela.
Por ora, esta quantidade de prática é suficiente. Vamos prosseguir agora para
o conceito de banco de dados relacional.
Pessoas
Carros
Agora, vamos conhecer a sintaxe para definir a chave estrangeira (Foreign Key)
na tabela Carros, na qual ID_Pessoa é a chave estrangeira. Observe no exemplo:
Agora, só resta um comando, que fará a junção das duas tabelas: O INNER JOIN!
Este comando unirá as duas tabelas, conforme Diagrama 11.
1 Juliana SP
2 Julio SP
3 Márcio SP
1 Gol Wolks 2
2 Palio Fiat 3
Para ver este passo a passo no MySQL Workbench, observe as Figuras 15 e 16.
Inserir dados
Selecionar dados
Figura 15. Captura de tela que mostra como criar uma tabela com chave primária.
Chave primária
Resultado esperado
A seleção uniu duas tabelas
Figura 16. Captura de tela que mostra uma tabela com chave estrangeira, ligando com a chave primária da outra tabela.
Veja que apareceu uma tabela relacionada com a outra. Este conceito já de-
monstra um exemplo de relacionamento entre tabelas.
Integridade Relacional
Agora, tentaremos incluir um dado na tabela carros, com um ID_Pessoa que
não existe na tabela Pessoas. Por exemplo: o ID_Pessoa 11 e 12.
insert into Carros values
(3, ‘Uno’, ‘Fiat’,11),
(4, ‘Palio’, ‘Fiat’, 12),
select * from Carros;
É possível ver o resultado do teste no MySQL na Figura 17.
Figura 17. Captura de tela que mostra os problemas com a chave estrangeira.
2 OPERAÇÕES PRÁTICAS
EM MySQL E ÁLGEBRA
RELACIONAL
Tópicos de estudo
Linguagem de definição de Álgebra relacional e operadores
dados de um SGBD – DDL (Data Seleção
Definition Language) Projeção
Create União
Alter com drop e ADD Diferença
Rename e Truncate Intercessão
Create
Para começar a mexer nos comandos DDL, é necessário criar um banco de
dados. Abra e ative o XAMPP, conforme a Figura 1, e crie uma instância.
media_por_mes_
cliente_id primeiro_nome ultimo_nome email data_aniversario
de_visitas
Para testar se o not null está funcionando, temos que inserir dados e co-
locarmos NULL no nome. Observe o erro “Error Code: 1048. Column ‘primei-
ro_nome’ cannot be null”, dizendo que o dado primeiro_nome não pode ser
null, na Figura 3.
Figura 3. Erro ao inserir comandos nulos em sintaxes com constraint not null.
Além de usar o create para criar tabelas, pode-se utilizar para criar fun-
ções, triggers (gatilhos) e views, porém tudo isso será citado mais adiante. Caso
você queira que ninguém insira dados iguais no e-mail, por exemplo, seria ne-
cessário utilizar uma constraint chamada unique na hora da criação da tabela.
DICA
Procure criar tabelas com quantidades de dados mais enxutos para não
sobrecarregar o sistema. Se um nome tem no máximo 20 letras, não é
necessário colocar VARCHAR (30) e sim VARCHAR (20).
Agora, caso você queira adicionar uma coluna antes de todas as outras
(a tradução de primeiro do inglês é first), ela chamará Codigo_Cliente. Você
fará dessa forma:
Ainda falando sobre o alter, é possível modifi car o tipo do campo. Imagine
que, sem querer, você criou a coluna nome com o tipo INT, “primeiro_nome
int NOT NULL”, mas primeiro_nome é VARCHAR. Para alterar, utiliza-se:
Rename e Truncate
Há casos em que é necessário alterar o nome da tabela. Na verdade, isso é
bastante utilizado, uma vez que as formas de gestão não são estáticas e sim di-
nâmicas. Assim, muitas vezes altera-se a tabela passando, por exemplo, de clien-
tes para clientes_janeiro. Para isso, utiliza-se o rename:
Após isso, clique no raio. Após fazer isso, o nome da tabela será alterado. Para
ver todas as tabelas existentes, digite SHOW TABLES e clique no raio.
O último DDL a ser citado é o Truncate. Este comando apaga todos os regis-
tros da tabela em uma vez só, caso você tenha criado a tabela e inserido dados,
mas depois, por algum motivo, tenha que apagar os dados, por exemplo. Vamos
criar outra tabela e inserir dados.
use fiat;
CREATE TABLE funcionarios (
funcionario_id INT NOT NULl auto_increment primary key,
primeiro_nome VARCHAR(30) NOT NULL,
ultimo_nome VARCHAR(30) NOT NULL,
email VARCHAR(50),
data_aniversario DATE,
salario DECIMAL(6,2)
);
INSERT INTO funcionarios values
(1,’Gabriel’, ‘Andrade’, ‘GABRIEL@IG.COM’, ‘2000-12-11’,2000.00),
(2, ‘Marcelo’, ‘Andrade’, ‘MARCELO@IG.COM’, ‘2000-12-13’,5000.00);
GABRIEL@IG.
1 Gabriel Andrade 11/12/2000 20000
COM
MARCELO@IG.
2 Marcelo Andrade 13/12/2000 50000
COM
Insert
Há duas formas de inserir dados, dizendo quais campos serão inseridos ou
apenas digitando a palavra values, a qual determina que em todos os campos
serão adicionados os dados. Vamos ver:
Primeira forma – Determinar quais campos serão adicionados.
Pense na tabela de funcionários já criada:
primeiro ultimo
funcionario_id email data_aniversario
_nome _nome
USE FIAT;
CREATE TABLE funcionarios (
funcionario_id INT NOT NULl auto_increment primary key,
primeiro_nome VARCHAR(30) NOT NULL,
ultimo_nome VARCHAR(30) NOT NULL,
email VARCHAR(50),
data_aniversario DATE,
salario DECIMAL(6,2)
);
Update
Caso um dado seja alterado, precisamos atualizar. Suponha que uma colabo-
radora da equipe de semi_novos entra em contato com o RH dizendo que seu
telefone mudou. Com isso, será necessário fazer um update, isto é, uma atuali-
zação para o número novo. Mas antes, observe que a tabela de colaboradores
possui uma nova constraint, chamada default. No exemplo a seguir, caso o ca-
dastrador não coloque nenhuma cidade, ficaria São Paulo como padrão, uma
vez que, como é possível ver na figura a seguir, na sétima linha, São Paulo está
definida como padrão no sistema.
SINTAXE SIGNIFICADO
UPDATE funcionarios_seminovos atualize funcionarios_seminovos
set telefone = 33996566 coloque telefone = 33996566
where primeiro_nome = ‘Gabriela’ onde primeiro_nome = ‘Gabriela’;
Na sintaxe agora citada, o telefone seria alterado, mas existe uma ferramenta
de segurança que precisa ser desativada no Workbench para fazer esta atualiza-
ção. O erro que diz que isso precisa ser liberado é escrito da seguinte forma: Error
Code: 1175. You are using safe update mode and you tried to update a table without a
WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences
-> SQL Editor and reconnect. Ele diz que, para fazer este update, é necessário libe-
rar na guia Edit e depois em Preferences.
Depois disso, para desabilitar a segurança de updates, os próximos passos
são desabilitar o modo seguro, fechar a instância e abrir novamente e fazer o
upload. Existem outras formas de atualização. Pode-se, por exemplo, mudar
duas coisas por vez, como mudar o telefone e a cidade onde o nome for igual ao
da pessoa em questão (no caso do exemplo, é Gabriela).
UPDATE funcionarios_seminovos
set telefone = ‘11955445566’, cidade = ’Osasco’
where primeiro_nome = ‘Gabriela’;
Delete
O comando delete é bem parecido com o update, veja o exemplo:
Será possível ver, após deletar e fazer a seleção, que os dados dos car-
ros mais baratos que R$ 29,000,00, no caso, Uno e Palio, foram deletados.
DICA
Para fazer com que o banco de dados se comunique com um site de produtos,
utiliza-se o PHP, uma linguagem de programação. Ao terminar os estudos de
banco de dados, procure aprender HTML e PHP para desenvolvimento web,
assim você fará sites com HTML e criará vínculos com bancos de dados
através do PHP.
Select
A DML select funciona de maneira idêntica ao update, porém sua função é
selecionar dados. Existem várias formas de selecionar, conforme a Tabela 2.
Seleciona todos(*)
select * from
os dados de carros_
carros_usados;
usados
select preco
Seleciona o preço de
from carros_
carros com o modelo
usados where
Siena.
modelo = ‘siena’;
select
max(preco) from
carros_usados;
Seleciona preços
select
máximos ou mínimos
min(preco)
from carros_
usados;
use fiat;
CREATE TABLE FUNCIONARIO (
COD_FUNC INT NOT NULL,
NOME VARCHAR (30),
SALARIO decimal(6,2) NOT NULL,
VALE_COMBUSTIVEL DECIMAL(5,2)
);
INSERT INTO FUNCIONARIO VALUES
(1, ‘Juliano’, 2000.00, 200.00),
(2, ‘Julia’, 1200.00, 200.00),
(3, ‘Marcelo’, 1300.00, 200.00),
(4, ‘Gabriela’, 3000.00, 200.00);
σ
nome = ‘Julia’(funcionario)
select * from funcionario where nome = ‘Julia’;
Ainda assim, é possível selecionar dois critérios ao mesmo tempo, por exem-
plo, salários maiores que R$ 1.300 e vale combustível maiores que R$ 100. Para
unir duas pesquisas, utiliza-se na fórmula o acento circunflexo (^). No SQL, ficaria
o operador and, deixando tudo da seguinte forma:
σ
salario > 1300 ^ vale_combustivel > 100(funcionario)
select * from funcionario where salario > 1300 AND vale_combustivel > 100;
Nome Salário
JULIANO 2000
JULIA 1200
Marcelo 1300
Gabriela 3000
União
Vamos supor que alguém (que se chamará Marco no exemplo a seguir) vende
carros novos e usados, e o gerente comercial quer ver tudo que ele vendeu, tan-
to na tabela de vendas de carros usados quanto na de carros novos. Para isso,
utiliza-se o comando UNION (∪).
π
nome(vendas_carros_usados), ∪ π salario(vendas_carros_novos)
Mas é impossível entender esta união sem ver as tabelas criadas e o coman-
do select funcionando. Assim, a Figura 7 ilustra a criação destas duas tabelas.
Figura 7. Union.
Diferença
Supondo que o interesse é selecionar todos os dados de uma tabela exceto
os de alguém em especial (como a Daniela no próximo exemplo), deve-se utili-
zar a sintaxe NOT IN. O resultado seria a tabela carros_usados sem a Daniela.
π
nome(vendas_carros_usados) – π nome.Daniela(vendas_carros_usados)
SELECT * from vendas_carros_usados
where valor > 20000
AND nome NOT IN (‘Daniela’);
Intercessão
Agora vamos supor que desejamos selecionar funcionários que ven-
deram tanto em uma tabela quanto em outra, ou seja, quais funcionários
estão nas duas. Para isso, primeiramente observe as sintaxes de criação
de duas tabelas:
Agora que as duas tabelas foram criadas, duas tuplas serão inseridas em
cada uma.
insert into vendas_carros_novos values
(‘Marco’, ‘Palio’, 28000.00),
(‘Julio’, ‘Palio’, 29000.00);
Como se pode perceber, novamente Marco aparece nas duas tabelas. Para
selecionar apenas dados que se repetem nas duas tabelas, utiliza-se o co-
mando Inner Join, conforme a Figura 8.
Resultado
CITANDO
“A primeira operação em álgebra relacional que podemos definir é a
interseção de dois conjuntos (∩). Suponha que desejamos encontrar todos
os clientes que tenham tanto empréstimo quanto conta” (SILBERRSCHATZ
et al., 1999, p. 79).
Início (begin)
Inserir
Rollback (voltar atrás)
Figura 9. Rollback.
Commit
Agora, observe na Figura 10 que, com o commit, a operação foi confirmada e
o cliente permaneceu na tabela final. Após a tabela clientes ser criada, como pode
ser visto na linha 3, com as colunas cliente_id, nome, sobrenome, e-mail, data de
aniversário e média de visitas por mês, o programador digitou antes de tudo a
palavra begin para iniciar a transação. Depois digitou INSERT INTO CLIENTES (PRI-
MEIRO_NOME) VALUES (‘Julio’) para inserir um registro com o nome Julio e depois
confirmou e fechou a operação através do commit.
Função describe
Resultado
mostrando o
esqueleto da
tabela, seus
datatypes e
constraints
3 OPERAÇÕES
TEÓRICO-PRÁTICAS
EM NOSQL
VIDEOAULA
Clique aqui
Tópicos de estudo
NoSQL Banco de dados chave-valor
Principais características Redis: Comandos
Técnicas de implementação Operações com hashes
NoSQL
Big Data
Principais características
A quantidade de dados cresce exponencialmente. As tuplas (registros), os
atributos (colunas) e as relações (tabelas) tornaram-se dinâmicos, e daí decor-
re o conceito de escalabilidade horizontal (capacidade de crescer horizontal-
mente). Os bancos de dados não relacionais possibilitam uma escalabilidade
menos custosa, mais prática e ágil. Outro fator positivo é não depender de
máquinas “parrudas”, isto é, pesadas! Logo, com computadores mais leves, a
manutenção é, logicamente, menor, e a troca se torna mais fácil.
Um exemplo precursor dos bancos de dados não relacionais foi o BigTable,
criado pela Google em 2004, voltado ao gerenciamento de centenas de teraby-
tes, chegando até a petabyte de dados.
Pesquisas revelam uma significativa expansão dos bancos de dados não re-
lacionais diante dos relacionais. Existem alguns bancos NoSQL famosos, como,
por exemplo, DynamoDB, MongoDB, Redis, HBase, Neoj4 etc. As característi-
cas básicas de cada um deles serão explicadas mais adiante.
CHAVE-VALOR CHAVE-VALOR
ORIENTADO ORIENTADO
A GRAFOS A COLUNAS
ORIENTADO
A DOCUMENTOS
uma relação entre uma pessoa e outra. Por exemplo: João é amigo
de Marcela. João tem o carro Gol. Este exemplo é utilizado em redes
sociais, como no Facebook e similares.
Exemplos de programas: Sones Graph DB e Neo4j.
ASSISTA
Assista ao filme A Rede Social, de David Fincher, que
demonstra como a rede social Facebook nasceu e como VEJA +
Clique aqui
atingiu seu potencial de expansão. O filme apresenta
cenários de oportunidades em dados surpreendentes.
Figura 2-1. Captura de tela do MongoDB: criar conexão, banco de dados e coleção.
Figura 2-2. Captura de tela do MongoDB: criar conexão, banco de dados e coleção.
Figura 2-3. Captura de tela do MongoDB: criar conexão, banco de dados e coleção.
Abrir a coleção
“colaboradores“
Figura 2-4. Captura de tela do MongoDB: criar conexão, banco de dados e coleção.
db.colaboradores.insert({
INSERT INTO colaboradores (func_id, func_id: ‘01’,
func_nome, cargo) func_nome: ‘Joao’,
VALUES (‘bcd001’, 45, ‘A’) cargo: ‘Gerente’
})
Agora, para ver estas informações no shell (linha de comandos), realize o se-
guinte procedimento:
1. Vá até a pasta Este Computador/Meu Computador no Windows;
2. Vá até o Disco Local (C:);
3. Entre na pasta Arquivos de programas;
4. Clique na pasta MongoDB;
5. Acesse a pasta Server;
6. Entre na pasta Bin;
7. Clique em mongodb.exe;
8. Na tela preta que se abrir, digite CLS;
9. Digite show databases e veja o banco de dados da ford criado.
EXPLICANDO
Toda vez que se utilizam colchetes – isto é, [] – cria-se um array, que pode
conter vários valores em um só campo. Na sintaxe apresentada, por exemplo,
apresentamos o campo “anos” com dois valores.
Agora, seguindo a lógica das variáveis, será mostrado como fazer uma pesquisa
com $in, ou seja, que retorne documentos contendo dados pré-determinados.
Insira os seguintes dados:
> var carro2 = { nome : “Fiesta”, “anos” : [“2019”,”2018” ]}
> var carro3 = { nome : “Focus”, “anos” : [“2016”,”2017” ]}
> var carro4 = { nome : “KA”, “anos” : [“2018”,”2017” ]}
Após isso, insira estes dados na tabela:
> db.Carro.insert(carro2)
> db.Carro.insert(carro3)
> db.Carro.insert(carro4)
Note que, na criação das variáveis, só dois carros possuem os anos 2017. Da mes-
ma forma que poderíamos procurar amigos em comum, quando lidando com pes-
soas, podemos procurar carros que compartilhem o mesmo ano em comum (2017):
> db.Carro.find({anos : {$in : [“2017”]}})
O resultado mostrará apenas o carro 3 e o carro 4, como indicado a seguir.
{ “_id” : ObjectId(“5d35ebb22849757efe327953”), “nome” : “KA”, “anos” : [
“2018”, “2017” ] }
{ “_id” : ObjectId(“5d35ebb82849757efe327954”), “nome” : “Focus”, “anos” :
[ “2016”, “2017” ] }
Figura 7-1. Captura de tela: exportando dados do MongoDB para Microsoft Excel.
Figura 7-2. Captura de tela: exportando dados do MongoDB para Microsoft Excel.
ABRA O ARQUIVO
EXCEL E IMPORTE
OS DADOS
Figura 7-4. Captura de tela: exportando dados do MongoDB para Microsoft Excel.
EXEMPLIFICANDO
Vamos supor que existam três unidades de uma academia. O banco de
dados chave-valor duplicará muitos dados por não criar atributos que se
repetem em todas as academias, como, por exemplo, o atributo “Aulas de
Ginástica”. Ora, por estarem sob a mesma direção, todas as unidades têm
as mesmas aulas, mas o banco de dados relacional não cria os atributos
aulas, o que consistiria em uma tabela só, com aulas x horário x unidade.
Redis: Comandos
Supondo que se deseja serializar um dado e removê-lo do banco, mas deixá-lo
armazenado para futuras aplicações, ou ainda aplicações em outros servidores,
deve-se usar o dump, seguindo o seguinte script:
Serializar nome
Deletar nome
Comando Ação
Agora o nome será resgado pela série, o que vale a pena conhecer, pois esta sé-
rie pode ser utilizada em vários servidores diferentes, ou pode ainda ser utilizada
depois. Observe na Tabela 4:
Comando Ação
Isso é muito útil, pois imagine, por exemplo, que um dado precise ser deletado
de um banco de inadimplentes, mas possa ser facilmente reutilizado depois: caso
a pessoa entre de novo em dívida, é só resgatar a série do seu nome; ou então no
caso de uma transferência, supondo que uma pessoa mudou-se da unidade da
zona sul de uma empresa e foi para a da zona norte, então basta o RH serializar
este dado com o dump e passá-lo para o outro banco.
Supondo que na empresa seja necessário cadastrar novas chaves, como pro-
dutos de estoque, e antes seja necessário saber se a equipe que está no servidor
não a criou ainda, de forma que é necessário fazer uma pergunta a respeito. Para
saber se uma chave existe, utiliza-se o exists.
Como o nome resgatado voltou a existir, observe o teste no código a seguir,
onde 1 significa que o dado existe, e 0 indica que ele não existe:
EMPRESA
FUNCIONÁRIOS CLIENTES
Daniel
(direção)
4 APROFUNDAMENTO
EM NOSQL, GRAFOS,
COLUNAS E ACID
VIDEOAULA
Clique aqui
Tópicos de estudo
Banco de dados orientado a Particionamento funcional
grafos: para que serve Teorema CAP
Conhecendo os grafos BASE x ACID: elementos dife-
Conhecendo a linguagem Cypher renciadores
Conhecendo os grafos
O Diagrama 1 mostra como funciona este esquema, que é muito utilizado
em redes sociais famosas, como o Twitter, por exemplo. Nesse exemplo, os
vértices são representados pelas pessoas e o programa, enquanto as arestas
representam as relações entre esses entes.
Tipo: pessoa
Nome: Julio
Bairro: Cerqueira César
Idade: 25
Tipo: pessoa
Tipo: programa de TV
Nome: Gabriela
Nome: Esportes Radicais
Bairro: Vila Mariana
Horário: 22 h
Idade: 28
G = (V * A)
2. Clicar em Java
3. Baixe o Java
(talvez seja preciso
fazer um cadastro)
2. Extrair (descompactar)
3. Digitar
neo4j.bat
4. Serviço
install-service
instalado
5. Instalar
7. Start com sem o final
sucesso “.bat” para
6. Dar start no
garantir
Neo4j
3. Ambiente neo4j
Resultado:
1 nó (vértice) adicionado (chamado dp)
1 label adicionado (chamado Departamento)
2 propriedades adicionadas
(name: TI e empresa: FIAT)
Exibido
Exibido como grafo
como tabela
O resultado seria apenas a bolinha do TI. Note que usamos o WHERE (onde), ou
seja, estamos dizendo para o programa pesquisar os departamentos onde (WHERE)
o ID foi 44.
Ainda assim, se quiséssemos que retornasse apenas algumas informações de TI,
por exemplo, nome ou empresa aumentaríamos o retorno, mas antes de falar como
seria, é necessário recapitular como foi a criação do TI:
O resultado seria:
dp.name
“TI”
Ou somente a empresa:
dp.empresa
“Fiat”
M AMIGOS_COM F
Na Figura 8, Márcio está no meio, pois foi o pesquisado, Daniela está na es-
querda e Juliana, na direita. A letra que aparece no centro das circunferências
representa o sexo de cada pessoa.
match (estante:Livro)
where ID(estante)=12
set estante.nome= ‘Estudando Java’
return estante
Nesse caso, o comando set está sendo usado para alterar uma coisa para
outra. Após digitar isso, o nome do vértice será alterado para “Estudando Java”.
BASE x ACID
Atualmente, diversas aplicações, principalmente as que envolvem tecnolo-
gias web e mobile, vêm exigindo cada vez mais agilidade e recursos relacionados
ao tratamento e armazenamento de dados que, infelizmente, os bancos de da-
dos tradicionais não vêm atendendo.
Os SGBDRs (Sistemas Gerenciadores de Banco de Dados Relacionais) estão
bem segmentados no mercado de tecnologia há mais de 40 anos e atendem mui-
to bem às diversas demandas solicitadas pelas aplicações tradicionais de empre-
sas que utilizam sistemas para armazenar dados relacionados a seus clientes,
produtos e serviços. Essas aplicações permitem que diversos usuários consul-
tem dados e ofertam garantias de confiabilidade nas operações executadas com
uma única unidade lógica de trabalho. Essas transações podem ocorrer de forma
concorrente, sem que se possa gerar dúvidas de sua integridade. Para realizar
esse trabalho, os bancos de dados relacionais devem possuir algumas caracte-
rísticas que são comumente conhecidas como ACID (Atomicidade, Consistência,
Integridade e Durabilidade).
ACID
A sigla ACID, conceitualmente, refere-se a quatro pro-
priedades distintas:
Atomicidade: em uma operação envolvendo duas
ou mais partes de informações diferentes, ou a transação
será executada totalmente ou não será executada, oferecen-
do, assim, garantias que elas sejam totalmente atômicas.
Particionamento funcional
O particionamento funcional é
uma técnica muito importante para
garantir altos graus de escalabilida-
de. Uma boa arquitetura de banco de
dados irá decompor o esquema em
tabelas agrupadas por funcionalida-
de. Uma tabela contendo dados sobre
usuários, produtos, transações e comunicação são excelentes exemplos de
áreas funcionais. Aproveita-se os conceitos de banco de dados, como chaves
estrangeiras, e é uma abordagem muito comum para manter a consistência em
todas essas áreas funcionais.
Confiar nas ferramentas de restrições dos bancos de dados para garantir a
consistência entre os grupos funcionais cria uma junção do esquema a uma es-
tratégia de implantação do banco de dados. Para que as restrições sejam apli-
cadas, as tabelas devem ser armazenadas em um único servidor, impedindo
o escalonamento horizontal à medida que as taxas de transação aumentam.
Em diversos casos, a oportunidade de scale-out mais eficiente é mover grupos
funcionais de dados para servidores de bancos de dados diferentes.
Teorema CAP
O teorema CAP dita que, nos sistemas distribuídos, existe uma relação de
dependência entre consistência, disponibilidade e tolerância à partição. Ele
vem sendo, desde o começo do milênio, referência para os estudiosos do meio
acadêmico. São três os pontos que o sustentam:
CURIOSIDADE
Segundo o teorema CAP, a possibilidade de uma resposta não ser em tem-
po real pode representar um problema (GILBERT; LYNCH, 2012, p. 55).
DICA
O teorema CAP demostra que qualquer sistema que suporte bases de
dados distribuídas, apenas consegue, em qualquer momento, res-
ponder a dois desses pontos simultaneamente. Qualquer medida de
escalonamento horizontal é baseada no particionamento de dados;
portanto, os designers de banco de dados são obrigados a decidir
entre consistência e disponibilidade. Não resta outra opção (pelo
menos por enquanto).
São
Vanessa Lourenço 27 São Paulo Cuiabá Primavera São Paulo
Paulo
Julio Nome.nome
Soares Nome.sobrenome
67 kg Medidas.peso
VIDEOAULA
Clique aqui
1,68 Medidas.altura
DICA
O programa Datastax possui uma interface bem amigável para
aqueles que desejam introduzir-se ao Cassandra. Existem vídeos na
internet que mostram como baixar o Apache Cassandra e fazer uma
ligação com o programa.
Passo 1. Primeiro, temos que criar um keyspace. Para isso, vamos utilizar o
comando abaixo:
Nota: observe que chave primária é do tipo UUID (Universally Unique Iden-
tifier). Como no modelo relacional, estamos definindo que o valor será único.
Como é possível verificar por meio do código acima, os comandos no Cassandra
(CQL) são muito parecidos com os utilizados no Postgre (SQL).
Passo 3. Com a tabela criada, vamos inserir registros nela.
INSERT INTO
“MEU_KEYSPACE”.”PESSOA” (PESSOA_ID, NOME, SOBRENOME, TELEFONE)
VALUES (UUID(), ‘PEDRO’, ‘LOURENÇO’, ‘3221-2010’);
INSERT INTO
“MEU_KEYSPACE”.”PESSOA” (PESSOA_ID, NOME, SOBRENOME)
VALUES (UUID(), ‘ANA’, ‘VERDELIO’);
INSERT INTO
“MEU_KEYSPACE”.”PESSOA” (PESSOA_ID, NOME, TELEFONE)
VALUES (UUID(), ‘BRUNO’, ‘1234-2121’);
UPDATE MEU_KEYSPACE.PESSOA
SET FONE = [‘3241-5050’, ‘99996-1234’]
WHERE CONTATO_ID = 7163CDD5A0C3;
telefone
----------------------------------
[‘3241-5050’, ‘99996-1234’]
VIDEOAULA
Clique aqui