Table of Contents
Bancos de Dados SQL e NoSQL 🗄️
Domine o universo dos dados, desde a modelagem relacional com PostgreSQL até a flexibilidade do NoSQL com MongoDB. Aprenda a estruturar, consultar e gerenciar informações para aplicações modernas.
Foco do Curso
Metodologia: Teoria aplicada em laboratórios práticos, focada na construção de bases de dados sólidas, performáticas e escaláveis.
🎯 O Que Você Vai Aprender
-
Modelo Relacional --- Entenda entidades, relacionamentos e como o PostgreSQL gerencia dados estruturados com integridade total. Ir para Módulo I
-
:material-sql: Poder do SQL --- Domine o SELECT, JOINs complexos, transações ACID e técnicas avançadas de manipulação de dados. Ver SQL Prático
-
Mundo NoSQL --- Explore o MongoDB, aprenda modelagem orientada a documentos e descubra quando a flexibilidade supera a estrutura. Ver NoSQL
-
Big Data & Projetos --- Integre diferentes paradigmas em um projeto final robusto e compreenda o papel dos dados no cenário de Big Data. Ver Projetos
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado em três módulos fundamentais.
🧱 Módulo I: Fundamentos (Aulas 01-04)
- Aula 01 - Introdução a Bancos de Dados 🧩
- Aula 02 - Modelagem de Dados e Modelo E-R 🏗️
- Aula 03 - Normalização e Estrutura Relacional 📡
- Aula 04 - DDL (Criação da Estrutura) 📄
🏗️ Módulo II: SQL na Prática (Aulas 05-10)
- Aula 05 - DML (Manipulação de Dados) ⚙️
- Aula 06 - DQL Básico 💾
- Aula 07 - Consultas Avançadas 🧪
- Aula 08 - Junções 🚢
- Aula 09 - Transações e ACID 🔑
- Aula 10 - Projeto Parcial 🔐
🚀 Módulo III: NoSQL e Modernidade (Aulas 11-16)
- Aula 11 - Introdução ao NoSQL 🌐
- Aula 12 - MongoDB na Prática 🍃
- Aula 13 - Modelagem em Documentos 🧱
- Aula 14 - Recursos Avançados 🔄
- Aula 15 - Big Data e Ciência de Dados 🛣️
- Aula 16 - Projeto Final Integrador 🎓
Plano de Ensino 📅
Curso: Bancos de Dados SQL e NoSQL (PostgreSQL + MongoDB)
Ementa
- Módulo I: Fundamentos de Banco de Dados: Introdução, evolução, modelagem E-R, normalização e criação física (DDL).
- Módulo II: SQL na Prática: Manipulação (DML), consultas (DQL), junções complexas, transações ACID e projeto relacional.
- Módulo III: NoSQL e Modernidade: Paradigma não relacional, CRUD em documentos (MongoDB), agregação, Big Data e escalabilidade.
- Projeto Final: Integração de abordagens Relacional e NoSQL em um cenário real.
Cronograma (16 Aulas)
Módulo I: Fundamentos
- Aula 01: Introdução a Bancos de Dados e SGBDR
- Aula 02: Modelagem de Dados e Modelo Entidade-Relacionamento
- Aula 03: Normalização (1FN, 2FN, 3FN) e Estrutura Relacional
- Aula 04: DDL - Criação de Banco, Tabelas e Índices
Módulo II: Linguagem SQL
- Aula 05: DML - Inserção, Atualização e Exclusão de Dados
- Aula 06: DQL Básico - Consultas, Filtros e Ordenação
- Aula 07: Consultas Avançadas - Agrupamentos e Funções
- Aula 08: Junções - INNER, LEFT, RIGHT e CROSS JOIN
- Aula 09: Transações e Propriedades ACID
- Aula 10: Projeto Parcial (Desenvolvimento de Mini-sistema)
Módulo III: NoSQL e MongoDB
- Aula 11: Introdução ao NoSQL e Tipos de Bancos
- Aula 12: MongoDB na Prática - CRUD Básico
- Aula 13: Modelagem Orientada a Documentos e Agregações
- Aula 14: Recursos Avançados, Performance e Escalabilidade
- Aula 15: Big Data e o Papel dos BDs na Ciência de Dados
Finalização
- Aula 16: Projeto Final Integrador (Relacional vs NoSQL)
Avaliação
- Exercícios: 16 listas de exercícios progressivos (Básico ao Desafio).
- Projetos: 16 mini-projetos práticos de fixação por aula.
- Quizzes: 10 perguntas por aula para validação de conhecimento.
- Projeto Integrador: Comparativo técnico e implementação em PostgreSQL e MongoDB.
Material Didático
Aulas
Aula 01 - Introdução a Bancos de Dados 🗄️
Objetivo
Objetivo: Compreender os conceitos fundamentais de dados e informação, explorar a evolução histórica do armazenamento de dados e entender a arquitetura básica de um Sistema Gerenciador de Banco de Dados Relacional (SGBDR).
1. Dado, Informação e Banco de Dados 🧩
Antes de começarmos a digitar comandos, precisamos entender o que estamos manipulando.
- Dado: É um elemento bruto, sem contexto (ex: "35", "João", "2024-05-10"). Sozinho, ele não transmite uma mensagem clara.
- Informação: É o dado processado e contextualizado (ex: "A temperatura média hoje é 35°C").
- Banco de Dados: É uma coleção organizada de dados relacionados, estruturados de forma que possam ser acessados, gerenciados e atualizados facilmente.
2. Evolução dos Bancos de Dados ⏳
A forma como guardamos informações mudou drasticamente ao longo das décadas:
- Arquivos Planos (Flat Files): Dados guardados em arquivos de texto simples (.txt, .csv). Difícil de buscar e sem segurança.
- Modelo Hierárquico e em Rede: Estruturas rígidas em forma de árvore.
- Modelo Relacional (Anos 70): Introduzido por Edgar F. Codd, organiza dados em tabelas (linhas e colunas). É o padrão mais utilizado até hoje.
- NoSQL (Anos 2000): Surgiu para lidar com grandes volumes de dados não estruturados e alta escalabilidade.
3. O Modelo Relacional e SGBDR 🏛️
Um SGBDR (Sistema Gerenciador de Banco de Dados Relacional) é o software que permite interagir com o banco de dados.
Exemplos Populares:
- 🐘 PostgreSQL: O foco deste curso. Poderoso, robusto e código aberto.
- 🐬 MySQL: Muito popular para aplicações web simples.
- 🪟 SQL Server: A solução corporativa da Microsoft.
- 🅾️ Oracle: O gigante do mercado para grandes corporações.
Arquitetura Cliente/Servidor
O banco de dados geralmente roda em um Servidor. Nós, como desenvolvedores, usamos um Cliente (como pgAdmin ou terminal) para enviar comandos e receber resultados.
4. Visualização de Arquitetura (Mermaid) 📊
graph LR
User((Usuário))
subgraph "Cliente (Seu PC)"
Client[pgAdmin / Terminal]
end
subgraph "Servidor (Local ou Nuvem)"
SGBD[(PostgreSQL Server)]
DB[(Base de Dados)]
end
Client -- "Comandos SQL" --> SGBD
SGBD -- "Resultados/Dados" --> Client
SGBD <--> DB
5. Prática: Primeiros Passos com PostgreSQL 💻
Vamos verificar se o seu ambiente está pronto. Se ainda não instalou, veja o guia de Setup 01.
Verificando via Terminal
$ psql --version
psql (PostgreSQL) 16.2
$ psql -U postgres
Password for user postgres: ********
postgres=# \l (Listar bancos de dados)
postgres=# \q (Sair)
[!IMPORTANT] A senha definida na instalação é a chave mestra para o seu banco. Não a perca!
6. Mini-Projeto: Planejando seu Primeiro Banco 🚀
Imagine que você vai criar um sistema para uma Biblioteca. Quais "coisas" (entidades) você precisaria guardar?
- Livros (Título, Autor, ISBN)
- Usuários (Nome, CPF, E-mail)
- Empréstimos (Data, Prazo)
Desafio: Tente desenhar em papel ou numa ferramenta simples como essas informações se conectam.
7. Exercícios de Fixação 🧠
- Diferencie dado de informação com um exemplo do seu cotidiano.
- Por que o Modelo Relacional é chamado de "relacional"?
- Cite três vantagens de usar um SGBD em vez de guardar dados em arquivos de texto (.txt).
Próxima Aula: Vamos aprender a desenhar bancos de dados com o Modelo E-R! 🏗️
Aula 02 - Modelagem de Dados e Modelo E-R 🏗️
Objetivo
Objetivo: Aprender a abstrair a realidade para o mundo dos dados, utilizando o Modelo Entidade-Relacionamento (E-R) para projetar estruturas de bancos de dados eficientes e consistentes.
1. Abstração e Modelagem 🧠
Modelar dados é como desenhar a planta de uma casa antes de construí-la. Precisamos definir quem são os personagens e como eles interagem.
- Entidade: É um "objeto" do mundo real sobre o qual queremos guardar dados (ex: Cliente, Produto, Pedido).
- Atributo: São as características de uma entidade (ex: Nome, Preço, Cor).
- Relacionamento: É como as entidades se conectam (ex: Um Cliente faz um Pedido).
2. Atributos e Chaves 🔑
Para que um banco de dados funcione, cada registro deve ser único e identificável.
Chave Primária (Primary Key - PK)
É o atributo (ou conjunto de atributos) que identifica exclusivamente cada linha de uma tabela. * Exemplo: O CPF de um usuário ou um ID autoincrementado.
Chave Estrangeira (Foreign Key - FK)
É um atributo que estabelece um vínculo entre duas tabelas, apontando para a PK de outra tabela.
* Exemplo: Na tabela Pedidos, guardamos o id_cliente para saber quem comprou.
3. Cardinalidade: O "Pulo do Gato" 🐈
A cardinalidade define quantos itens de uma entidade podem se relacionar com quantos itens de outra.
- 1:1 (Um para Um): Um usuário tem um perfil.
- 1:N (Um para Muitos): Um cliente faz vários pedidos. { .fragment }
- N:N (Muitos para Muitos): Vários alunos se matriculam em várias disciplinas. { .fragment }
[!NOTE] Em relacionamentos N:N, geralmente precisamos de uma tabela associativa (tabela do meio).
4. Integridade Referencial 🛡️
O banco de dados garante que os relacionamentos sejam válidos. Se um Pedido aponta para o Cliente ID 50, o Cliente 50 deve existir. O SGBD impede que você apague o cliente se ele tiver pedidos pendentes.
5. Diagrama E-R (Mermaid) 📊
Vamos visualizar o relacionamento entre Clientes e Pedidos:
erDiagram
CLIENTE ||--o{ PEDIDO : "faz"
CLIENTE {
int id PK
string nome
string email
}
PEDIDO {
int id PK
int id_cliente FK
date data
decimal total
}
6. Ferramentas CASE 🛠️
Para criar diagramas profissionais, usamos ferramentas como: * dbdiagram.io: Rápido e baseado em texto. * brModelo: Clássico acadêmico brasileiro. * MySQL Workbench: Visual e completo.
7. Prática: Desenhando um Mini-Sistema 💻
Use o terminal ou um papel para listar os atributos e chaves do sistema de uma Clínica Médica:
$ Entidades sugeridas:
$ - Medico (CRM, Nome, Especialidade)
$ - Paciente (CPF, Nome, Telefone)
$ - Consulta (Data, Hora, Medico_ID, Paciente_ID)
8. Exercícios de Fixação 🧠
- O que acontece se tentarmos inserir um
id_clientena tabela dePedidosque não existe na tabelaClientes? - Explique a diferença entre uma Chave Primária Simples e uma Chave Primária Composta.
- Desenhe (ou descreva) o relacionamento entre Autor e Livro. Qual a cardinalidade?
Próxima Aula: Vamos aprender a organizar a "bagunça" com a Normalização! 📡
Aula 03 - Normalização e Estrutura Relacional 📡
Objetivo
Objetivo: Aprender as regras da Normalização para eliminar redundâncias, garantir a integridade dos dados e criar estruturas de tabelas otimizadas e profissionais.
1. Tipos de Dados e o Conceito de NULL 🧩
Cada coluna em uma tabela deve ter um tipo definido. Isso ajuda o SGBD a economizar espaço e validar entradas.
- Inteiros (
INT,BIGINT): Números sem casas decimais. - Decimais (
DECIMAL,NUMERIC,REAL): Para valores monetários ou medidas precisas. - Texto (
VARCHAR,TEXT,CHAR): Cadeias de caracteres. - Data/Hora (
DATE,TIMESTAMP): Registros temporais. - NULL: Representa a ausência de valor ou valor desconhecido. Não é o mesmo que zero ou string vazia ("").
2. O que é Normalização? ⚖️
É um processo técnico de organizar as colunas e tabelas de um banco de dados para minimizar a redundância (repetição de dados) e evitar anomalias de atualização.
Por que normalizar?
- Economia de espaço em disco.
- Facilidade de manutenção.
- Garantia de que a informação esteja em um só lugar.
3. As Formas Normais (FN) 📏
Existem várias formas normais, mas as três primeiras (1FN, 2FN e 3FN) são as mais essenciais no dia a dia.
1ª Forma Normal (1FN) - Atomicidade
- Cada coluna deve conter apenas um valor (valores atômicos).
- Não pode haver grupos repetidos ou listas separadas por vírgula em uma célula.
- Exemplo:
Telefones: (11) 9999, (11) 8888❌ -> Criar tabela separada para telefones ✅.
2ª Forma Normal (2FN) - Dependência Funcional
- Estar na 1FN.
- Toda coluna que não é chave deve depender da chave primária inteira (relevante para chaves compostas).
3ª Forma Normal (3FN) - Dependência Transitiva
- Estar na 2FN.
- As colunas não-chave não podem depender de outras colunas não-chave.
- Exemplo: Tabela
Pedidoscomid_clienteenome_cliente. O nome depende do ID, não do Pedido. Deve sair dali.
4. Especialização e Generalização 🧬
Conceitos herdados da Orientação a Objetos:
* Generalização: Criar uma entidade "Pai" (ex: Pessoa).
* Especialização: Criar entidades "Filhas" com atributos específicos (ex: Pessoa_Fisica e Pessoa_Juridica).
5. Visualização de Estrutura (Mermaid) 📊
Abaixo, um exemplo de banco normalizado:
erDiagram
ALUNO ||--o{ TELEFONE : "possui"
ALUNO {
int id PK
string nome
date data_nascimento
}
TELEFONE {
int id PK
int aluno_id FK
string numero
}
6. Prática: Corrigindo uma Tabela Ruim 💻
Observe esta estrutura mal feita:
Vendas (id_venda, data, cliente_nome, produto_nome, produto_preco)
$ Problemas identificados:
$ 1. Nome do cliente repetido em cada venda (redundância).
$ 2. Se o preço do produto mudar, o histórico das vendas pode se perder.
$
$ Solução Normalizada:
$ - Tabelas separadas para: Clientes, Produtos e Vendas.
7. Exercícios de Fixação 🧠
- Explique a frase: "A 3ª Forma Normal combate a dependência transitiva".
- Quando é aceitável realizar a Desnormalização de um banco de dados?
- O que é um valor Atômico?
Próxima Aula: Vamos colocar a mão na massa com os comandos de DDL - Criação da Estrutura! 🏗️
Aula 04 - DDL (Criação da Estrutura) 🏗️
Objetivo
Objetivo: Aprender a linguagem DDL (Data Definition Language) para criar, alterar e excluir a estrutura física do banco de dados no PostgreSQL.
1. O que é DDL? 📜
DDL (Data Definition Language) é o subconjunto do SQL usado para definir a estrutura do banco de dados (o "esqueleto").
Comandos principais:
* CREATE: Cria objetos (bancos, tabelas, índices).
* ALTER: Altera a estrutura de objetos existentes.
* DROP: Exclui objetos permanentemente.
* TRUNCATE: Esvazia uma tabela (deleta os dados, mas mantém a estrutura).
2. Criando o Banco e Tabelas 🛠️
Antes de guardar dados, precisamos do "container".
Criando o Banco de Dados
Criando uma Tabela Completa
CREATE TABLE professores (
id SERIAL PRIMARY KEY, -- Serial cria um autoincremento
nome VARCHAR(100) NOT NULL, -- Não permite valores vazios
email VARCHAR(150) UNIQUE, -- Não permite emails repetidos
data_contratacao DATE DEFAULT CURRENT_DATE
);
3. Chaves e Restrições (Constraints) 🔑
As restrições garantem a qualidade dos dados.
PRIMARY KEY: Identificador único.FOREIGN KEY: Relacionamento com outra tabela.NOT NULL: Campo obrigatório.UNIQUE: Valor não pode se repetir.CHECK: Valida uma condição (ex:CHECK (preco > 0)).
4. Índices: Acelerando as Buscas ⚡
Índices funcionam como o sumário de um livro. Eles ajudam o SGBD a encontrar dados sem precisar ler a tabela inteira.
[!WARNING] Índices aceleram a leitura (
SELECT), mas tornam a escrita (INSERT,UPDATE) um pouco mais lenta. Use com sabedoria!
5. Alterando e Excluindo 🔨
Errou o nome da coluna? Precisa adicionar um campo novo?
Adicionando Coluna
Removendo Tabela (CUIDADO!)
6. Prática no Terminal (pgAdmin) 💻
Abra o Query Tool no seu pgAdmin e execute estes comandos:
$ CREATE DATABASE escola;
$ \c escola (conectar no banco via psql)
$
$ CREATE TABLE alunos (
$ id SERIAL PRIMARY KEY,
$ nome VARCHAR(100) NOT NULL
$ );
7. Mini-Projeto: O Banco da Escola 🚀
Crie o script DDL para o seguinte cenário:
1. Uma tabela cursos com id, nome e carga_horaria.
2. Uma tabela matriculas que liga alunos (já criada) aos cursos.
Dica: Use
REFERENCESpara criar a Chave Estrangeira.
8. Exercícios de Fixação 🧠
- Qual a diferença entre os comandos
DROPeTRUNCATE? - Por que a coluna
idgeralmente usa o tipoSERIALno PostgreSQL? - Escreva o comando SQL para adicionar uma restrição
UNIQUEna colunaCPFda tabelaalunos.
Próxima Aula: Vamos aprender a colocar dados nessas tabelas com o DML - Manipulação de Dados! ⚙️
Aula 05 - DML (Manipulação de Dados) ⚙️
Objetivo
Objetivo: Aprender os comandos DML (Data Manipulation Language) para inserir, atualizar e excluir informações dentro das tabelas criadas no PostgreSQL.
1. O que é DML? 🖊️
Enquanto o DDL cria o "balde", o DML gerencia a "água" (os dados). É o conjunto de comandos que usamos no dia a dia para manter as informações do sistema atualizadas.
Comandos principais:
* INSERT: Adiciona novas linhas.
* UPDATE: Altera dados de linhas existentes.
* DELETE: Remove linhas da tabela.
2. Inserindo Dados (INSERT) 📥
O comando INSERT adiciona um novo registro.
Sintaxe Básica:
Inserindo Múltiplos Registros de uma vez:
INSERT INTO alunos (nome, email) VALUES
('Ana Souza', 'ana@email.com'),
('João Silva', 'joao@email.com'),
('Maria Oliveira', 'maria@email.com');
[!TIP] Não é necessário incluir a coluna
idse ela for do tipoSERIAL, pois o banco a preenche sozinho!
3. Atualizando Dados (UPDATE) ✏️
Use o UPDATE para mudar informações que já estão lá.
[!CAUTION] NUNCA esqueça o
WHERE! Sem ele, você atualizará TODOS os registros da tabela com o mesmo valor.
4. Removendo Dados (DELETE) 🗑️
O DELETE remove registros permanentemente.
[!CAUTION] Assim como no
UPDATE, oWHEREé vital. Se esquecer, você esvaziará a tabela inteira! Para apagar tudo propositalmente e de forma rápida, dê preferência aoTRUNCATE(DDL).
5. Visualização de Fluxo (Mermaid) 📊
graph TD
Start[Novo Registro] --> I[INSERT]
I --> DB[(Banco de Dados)]
DB --> U[UPDATE - Mudança de Idade/Email]
U --> DB
DB --> D[DELETE - Cancelamento de Conta]
D --> Archive[Fim do Registro]
6. Prática: Populando seu Banco 💻
Utilize o Query Tool para popular sua tabela de alunos:
$ INSERT INTO alunos (nome) VALUES ('Cadu'), ('Bia');
$ SELECT * FROM alunos;
$
$ -- Simulando erro do estagiário:
$ UPDATE alunos SET nome = 'ERRO'; -- Cuidado! Cancele antes de executar!
7. Mini-Projeto: Gestão de Inventário 🚀
Crie uma tabela produtos (id, nome, preco, estoque) e realize:
1. O cadastro de 3 produtos.
2. Uma atualização de preço em 10% para um produto específico.
3. A exclusão de um produto que saiu de linha.
8. Exercícios de Fixação 🧠
- Diferencie
UPDATEdeINSERT. - O que acontece se eu executar
DELETE FROM alunos;sem a cláusulaWHERE? - Como insiro um valor na coluna
data_nascimentoseguindo o formato padrão do ISO (YYYY-MM-DD)?
Próxima Aula: Vamos aprender a recuperar esses dados com o DQL Básico! 💾
Aula 06 - DQL Básico 💾
Objetivo
Objetivo: Dominar o comando SELECT para recuperar informações de tabelas, aprendendo a filtrar resultados com WHERE e organizar a exibição com ORDER BY.
1. O que é DQL? 🔍
DQL (Data Query Language) é o subconjunto do SQL focado na recuperação de dados. É, sem dúvida, o comando que você mais usará em toda a sua carreira na computação.
O comando principal é o SELECT.
2. SELECT: Projeção e Seleção 🎥
Projeção (Escolhendo Colunas)
Quando você escolhe quais colunas quer ver.
Seleção (Escolhendo Linhas)
Quando você filtra quais registros devem aparecer usando o WHERE.
[!NOTE] O asterisco (
*) significa "todas as colunas". Use-o com moderação em bancos de dados muito grandes por questões de performance.
3. Filtrando com WHERE 🎯
O WHERE aceita diversos operadores de comparação:
| Operador | Significado |
|---|---|
= |
Igual |
<> ou != |
Diferente |
> e < |
Maior e Menor |
>= e <= |
Maior/Menor ou Igual |
BETWEEN |
Entre dois valores (ex: BETWEEN 10 AND 20) |
LIKE |
Busca por padrão de texto (ex: nome LIKE 'Ri%') |
IN |
Verifica se o valor está em uma lista (ex: id IN (1, 2, 5)) |
4. Ordenando Resultados (ORDER BY) 📶
Por padrão, o banco de dados não garante a ordem dos registros. Use o ORDER BY para organizar.
- ASC: Ordem Ascendente (padrão).
- DESC: Ordem Descendente.
5. Visualização de Execução (Mermaid) 📊
graph LR
User[Usuário] -- "SELECT nome FROM alunos WHERE id=1" --> SQL{Motor SQL}
SQL -- "Busca na Tabela" --> DB[(Disco Rigido)]
DB -- "Dados Brutos" --> SQL
SQL -- "Resultado Filtrado" --> User
6. Prática: Consultas Simples 💻
Abra o terminal e tente realizar estas buscas:
$ SELECT * FROM alunos WHERE nome LIKE 'A%'; -- Nomes que começam com A
$ SELECT nome, data_contratacao FROM professores ORDER BY data_contratacao ASC;
$ SELECT * FROM produtos WHERE preco > 100 AND estoque < 5;
7. Mini-Projeto: Dashboard de Vendas 🚀
Utilizando sua tabela de produtos, crie consultas para:
1. Listar todos os produtos com estoque zerado.
2. Listar o nome e o preço dos 5 produtos mais baratos.
3. Buscar produtos que tenham a palavra "Monitor" no nome.
8. Exercícios de Fixação 🧠
- O que faz a cláusula
DISTINCTem um comando SELECT? - Como eu buscaria todos os alunos que nasceram entre os anos 2000 e 2005 usando o operador
BETWEEN? - Qual a diferença entre usar
ORDER BY 1eORDER BY nome_coluna?
Próxima Aula: Vamos subir de nível com as Consultas Avançadas e Agregações! 🧪
Aula 07 - Consultas Avançadas e Agregações 🧪
Objetivo
Objetivo: Aprender a realizar cálculos diretamente no banco de dados usando funções de agregação, agrupando dados com GROUP BY e filtrando esses grupos com HAVING.
1. Funções de Agregação 🧮
Em vez de trazer todas as linhas, às vezes precisamos de um resumo (total, média, contagem).
As 5 funções básicas de agregação são:
* COUNT(): Conta o número de linhas ou valores.
* SUM(): Soma valores numéricos.
* AVG(): Calcula a média aritmética.
* MAX(): Encontra o maior valor.
* MIN(): Encontra o menor valor.
SELECT COUNT(*) FROM alunos; -- Quantos alunos existem?
SELECT SUM(preco) FROM produtos; -- Valor total do estoque em R$.
2. Apelidos (ALIAS) com AS 🏷️
Para deixar o cabeçalho do relatório mais bonito e legível, usamos o AS.
3. Agrupando Dados (GROUP BY) 🧱
O GROUP BY divide o resultado em grupos para que possamos aplicar as funções de agregação em cada pedaço.
-- Quantos produtos existem em cada categoria?
SELECT categoria, COUNT(*) AS total_itens
FROM produtos
GROUP BY categoria;
4. Filtrando Grupos com HAVING 🎯
Se o WHERE filtra as linhas (antes do grupo), o HAVING filtra os grupos (depois que a conta foi feita).
-- Quais categorias têm mais de 50 produtos cadastrados?
SELECT categoria, COUNT(*)
FROM produtos
GROUP BY categoria
HAVING COUNT(*) > 50;
5. Visualização de Processamento (Mermaid) 📊
graph TD
Data[(Tabela Bruta)] --> Filter[WHERE - Filtra as linhas]
Filter --> Group[GROUP BY - Separa em potes]
Group --> Agg[Funções SUM/COUNT/AVG]
Agg --> H[HAVING - Filtra os potes cheios]
H --> Result[Relatório Final]
6. Prática: Relatórios de Alunos 💻
Imagine uma tabela notas (aluno_id, disciplina, nota). Tente:
$ SELECT disciplina, AVG(nota) AS media FROM notas GROUP BY disciplina;
$ SELECT aluno_id, SUM(valor_pago) AS total_investido FROM mensalidades GROUP BY aluno_id;
$ SELECT MAX(preco) AS mais_caro FROM produtos;
7. Mini-Projeto: Dashboard de Vendas 🚀
Baseado em um sistema de mercado: 1. Calcule o faturamento total (soma) de um dia específico. 2. Mostre qual o produto mais caro e o mais barato da loja. 3. Liste as categorias que geraram mais de R$ 5.000,00 em vendas.
8. Exercícios de Fixação 🧠
- Qual a diferença fundamental entre
WHEREeHAVING? - O que acontece se eu usar uma função de agregação (como
SUM) sem usar oGROUP BY? - Como eu contaria apenas os valores únicos em uma coluna (ex: quantos estados diferentes meus alunos moram)?
Próxima Aula: Vamos aprender a unir o que está separado com os JOINs - Junções entre Tabelas! 🔗
Aula 08 - JOINs: Junções entre Tabelas 🔗
Objetivo
Objetivo: Aprender a conectar tabelas separadas para extrair informações completas, dominando os diferentes tipos de JOIN (Inner, Left, Right e Full) e entendendo como o banco de dados relaciona as chaves.
1. O que são JOINs? 🤝
Em um banco de dados normalizado, os dados estão espalhados em várias tabelas. O JOIN é a "ponte" que nos permite unir essas peças para gerar uma resposta legível.
Imagine que você tem o id_cliente no pedido, mas quer ver o nome do cliente. Você precisa unir a tabela de Pedidos com a de Clientes.
2. INNER JOIN: A Interseção 🎯
É o tipo mais comum. Ele retorna apenas os registros que possuem correspondência em ambas as tabelas.
SELECT pedidos.id, clientes.nome
FROM pedidos
INNER JOIN clientes ON pedidos.id_cliente = clientes.id;
3. LEFT JOIN e RIGHT JOIN: A Prioridade ⬅️➡️
Às vezes queremos ver todos os registros de uma tabela, mesmo que não haja par na outra.
- LEFT JOIN: Traz todos da tabela da esquerda, e o que houver na direita. Se não houver nada na direita, preenche com
NULL. - RIGHT JOIN: O contrário. Traz todos da direita.
-- Listar TODOS os clientes, mesmo os que nunca compraram nada.
SELECT clientes.nome, pedidos.id
FROM clientes
LEFT JOIN pedidos ON clientes.id = pedidos.id_cliente;
4. FULL OUTER JOIN e CROSS JOIN 🌐
- FULL OUTER JOIN: Traz tudo de ambos os lados, unindo onde houver par e trazendo NULL onde não houver.
- CROSS JOIN: Produto cartesiano. Combina cada linha da primeira tabela com cada linha da segunda (Ex: Todos os Tamanhos x Todas as Cores).
5. Visualização de Conjuntos (Venn) 📊
graph TD
subgraph "Inner Join"
A[Tabela A] --- B[Interseção]
B --- C[Tabela B]
end
subgraph "Left Join"
LA[Tabela A Completa] --- LB[Direita se existir]
end
6. Prática: Unindo o Banco 💻
Utilize seu banco de escola/loja e experimente:
$ -- Ver quais alunos estão em quais turmas
$ SELECT alunos.nome, turmas.nome_turma
$ FROM alunos
$ INNER JOIN turmas ON alunos.id_turma = turmas.id;
$
$ -- Ver alunos que ainda não têm turma
$ SELECT alunos.nome FROM alunos LEFT JOIN turmas ON alunos.id_turma = turmas.id WHERE turmas.id IS NULL;
7. Mini-Projeto: Extrato de Vendas Detalhado 🚀
Crie uma consulta que una 3 tabelas: vendas, produtos e vendedores.
O relatório deve mostrar:
1. O nome do vendedor.
2. O nome do produto vendido.
3. A data da venda.
4. O valor total.
8. Exercícios de Fixação 🧠
- Qual a diferença prática entre
INNER JOINeLEFT JOIN? - O que acontece se eu esquecer a cláusula
ONem um JOIN? - Podemos usar apelidos (alias) para as tabelas em um JOIN (Ex:
FROM clientes c)? Isso facilita em quê?
Próxima Aula: Vamos aprender a garantir a segurança das operações com Transações e ACID! 🔑
Aula 09 - Transações e Integridade ACID 🔑
Objetivo
Objetivo: Compreender o conceito de transações no banco de dados, aprender a usar COMMIT e ROLLBACK para garantir a segurança dos dados e entender as propriedades ACID que tornam os SGBDs confiáveis.
1. O que é uma Transação? 🛡️
Uma transação é uma unidade lógica de trabalho que contém um ou mais comandos SQL. O banco de dados garante que ou tudo seja executado com sucesso ou nada seja executado.
Imagine uma transferência bancária: 1. Tirar R$ 100 da conta A. 2. Colocar R$ 100 na conta B.
Se o sistema travar no passo 1, o dinheiro some? Não, se usarmos transações!
2. Comandos de Transação 🕹️
BEGIN: Inicia a transação.COMMIT: Salva as alterações permanentemente.ROLLBACK: Cancela tudo o que foi feito desde oBEGIN.SAVEPOINT: Cria um "checkpoint" para voltar apenas a um ponto específico.
3. As Propriedades ACID 💎
Para que um SGBD seja considerado confiável (como o PostgreSQL), ele deve seguir o ACID:
- A - Atomicidade: A transação é atômica (tudo ou nada).
- C - Consistência: O banco sempre passa de um estado válido para outro estado válido.
- I - Isolamento: Transações simultâneas não interferem umas nas quais.
- D - Durabilidade: Uma vez confirmada (COMMIT), a alteração não se perde mesmo em queda de energia.
4. Prática: Simulação de Transferência 💻
Vamos simular o cenário no terminal:
$ BEGIN;
$ UPDATE contas SET saldo = saldo - 100 WHERE id = 1;
$ UPDATE contas SET saldo = saldo + 100 WHERE id = 2;
$
$ -- Ops! Vi que o ID 2 está errado.
$ ROLLBACK; -- Nada foi alterado no banco real!
5. Visualização de Fluxo (Mermaid) 📊
graph TD
Start[BEGIN] --> Op1[Update Tabela A]
Op1 --> Op2[Update Tabela B]
Op2 --> Decision{Tudo OK?}
Decision -- Sim --> C[COMMIT - Salvou!]
Decision -- Não --> R[ROLLBACK - Desfez!]
C --> End((Fim))
R --> End
6. Níveis de Isolamento 🛡️
O banco pode lidar com leituras simultâneas de várias formas. Os problemas comuns que as transações evitam são: * Leitura Suja: Ler dados que foram alterados mas não confirmados por outra pessoa. * Leitura Fantasma: Surgimento de novas linhas no meio de uma transação.
7. Mini-Projeto: Sistema de Estorno 🚀
Crie uma sequência de comandos que simule uma compra em um e-commerce:
1. BEGIN.
2. Diminuir o estoque do produto.
3. Registrar o pedido.
4. Inserir um registro de log.
5. Use um ROLLBACK simulando um erro no processamento do cartão de crédito.
8. Exercícios de Fixação 🧠
- O que acontece se um servidor de banco de dados cair no meio de uma transação que ainda não recebeu o
COMMIT? - Explique a propriedade Durabilidade.
- Qual a utilidade do comando
SAVEPOINT?
Próxima Aula: Vamos consolidar o Módulo II com o Projeto Parcial - Sistema Relacional Completo! 🔐
Aula 10 - Projeto Parcial: Sistema Relacional 🔐
Objetivo
Objetivo: Consolidar todo o conhecimento do Módulo II através da criação de um sistema de banco de dados relacional completo, aplicando DDL, DML, DQL avançado e controle de transações.
1. O Desafio: E-commerce "TechStore" 🛒
Nesta aula, você não apenas aprenderá novos conceitos, mas aplicará tudo o que vimos até aqui em um cenário profissional real. O objetivo é construir a base de dados de uma loja de tecnologia.
Requisitos do Sistema:
- Clientes: Cadastro completo.
- Produtos: Controle de estoque e categorias.
- Vendas: Registro de quem comprou, o que comprou e quando.
- Segurança: Garantia de que nenhuma venda seja registrada sem baixar o estoque (Transações).
2. Mapa Mental da Estrutura (Mermaid) 📊
erDiagram
CLIENTE ||--o{ PEDIDO : "faz"
VENDEDOR ||--o{ PEDIDO : "registra"
PEDIDO ||--o{ ITENS_PEDIDO : "contém"
PRODUTO ||--o{ ITENS_PEDIDO : "está em"
CATEGORIA ||--o{ PRODUTO : "classifica"
3. Passo a Passo do Projeto 🛠️
Fase 1: Fundação (DDL)
Criação das tabelas com todas as restrições (PRIMARY KEY, FOREIGN KEY, NOT NULL, CHECK).
Fase 2: Povoamento (DML)
Inserção de dados realistas para testes. Pelo menos 5 clientes, 10 produtos e algumas vendas.
Fase 3: Inteligência (DQL)
Criação de relatórios complexos: * Ranking de vendas por categoria. * Ticket médio por cliente. * Produtos mais vendidos.
4. Checklist de Qualidade 🛡️
- [ ] O banco está na 3ª Forma Normal?
- [ ] As chaves estrangeiras impedem a exclusão de clientes com pedidos?
- [ ] Os preços são sempre maiores que zero?
- [ ] As consultas usam JOINs e Aliases de forma clara?
5. Exemplo de Script Integrado 💻
BEGIN;
-- 1. Criar pedido
INSERT INTO pedidos (cliente_id, data) VALUES (1, CURRENT_DATE) RETURNING id;
-- 2. Adicionar item (Supondo ID do pedido = 50)
INSERT INTO itens_pedido (pedido_id, produto_id, qtd) VALUES (50, 10, 2);
-- 3. Baixar estoque
UPDATE produtos SET estoque = estoque - 2 WHERE id = 10;
COMMIT;
6. Prática: O "Gran Finale" no pgAdmin 🚀
Execute o script completo (que você desenvolverá no Projeto 10) e verifique se o banco se comporta corretamente em casos de erros (ROLLBACK) e sucessos (COMMIT).
7. Exercícios de Fixação 🧠
- Por que é melhor usar uma tabela associativa em
itens_pedidoem vez de colocar os produtos direto na tabelapedidos? - Como você geraria um relatório mostrando os clientes que gastaram mais de R$ 1.000,00 no total?
- Quais índices você criaria para esse sistema para melhorar a performance de busca?
Módulo III: Prepare-se para o mundo moderno com a Introdução ao NoSQL e MongoDB! 🌐
Aula 11 - Introdução ao NoSQL e MongoDB 🌐
Objetivo
Objetivo: Entender o que são bancos de dados não relacionais (NoSQL), os motivos para sua existência e as principais diferenças conceituais em relação ao modelo SQL tradicional.
1. O que é NoSQL? 🧩
NoSQL (do inglês Not Only SQL) é um termo que engloba tecnologias de banco de dados que não utilizam o modelo de tabelas relacionais clássico de linhas e colunas.
Por que surgiu?
- Escalabilidade: Lidar com volumes massivos de dados distribuídos em vários servidores.
- Flexibilidade: Armazenar dados com estruturas que mudam frequentemente (esquema flexível).
- Velocidade: Alta performance em operações simples de leitura e escrita.
2. Tipos de Bancos NoSQL 📚
Existem quatro categorias principais:
- Documento: Guarda dados no formato JSON/BSON (Ex: MongoDB, CouchDB).
- Chave-Valor: Como um dicionário gigante (Ex: Redis, DynamoDB).
- Coluna: Otimizado para consultas analíticas pesadas (Ex: Cassandra, HBase).
- Grafo: Focado em conexões e redes (Ex: Neo4j).
3. SQL vs NoSQL: A Grande Batalha ⚔️
| Característica | SQL (PostgreSQL) | NoSQL (MongoDB) |
|---|---|---|
| Estrutura | Rígida (Tabelas) | Flexível (Documentos) |
| Relacionamentos | JOINs poderosos | Documentos aninhados |
| Escalabilidade | Vertical (Melhor Hardware) | Horizontal (Mais Servidores) |
| Transações | ACID nativo e forte | BASE (Eventual) |
4. O Modelo de Documento (JSON) 🏗️
No MongoDB, não temos tabelas, temos Collections. Não temos linhas, temos Documents.
{
"_id": "645a2b3c...",
"nome": "Ricardo Pires",
"idade": 35,
"habilidades": ["SQL", "MongoDB", "Kotlin"],
"endereco": {
"rua": "Av. Brasil",
"cidade": "São Paulo"
}
}
5. Teorema CAP 📊
Em sistemas distribuídos, você só pode escolher dois destes três: * Consistência (Consistency) * Availabilidade (Availability) * Partição (Partition Tolerance)
graph TD
C[Consistência] --- A[Disponibilidade]
A --- P[Partição]
P --- C
style C fill:#f9f,stroke:#333
style A fill:#bbf,stroke:#333
style P fill:#dfd,stroke:#333
6. Prática: Pensando sem Tabelas 💻
Imagine que você quer guardar as postagens de um blog. * No SQL: Tabela Posts, Tabela Comentários, Tabela Autores (3 tabelas + 2 JOINs). * No NoSQL: Um único documento "Post" contendo todos os comentários dentro dele.
7. Exercícios de Fixação 🧠
- O que significa a sigla NoSQL?
- Dê um exemplo de cenário onde o MongoDB seria melhor que o PostgreSQL.
- Explique o conceito de Escalabilidade Horizontal.
Próxima Aula: Vamos colocar a mão na massa instalando o MongoDB e fazendo o primeiro CRUD! 🍃
Aula 12 - Instalação e CRUD Básico no MongoDB 🍃
Objetivo
Objetivo: Instalar o ambiente de desenvolvimento do MongoDB e dominar as quatro operações básicas (Create, Read, Update, Delete) através do terminal e de ferramentas visuais.
1. Preparando o Ambiente 🛠️
Você tem duas opções principais: 1. MongoDB local: Instalado na sua máquina (vimos no Setup 02). 2. MongoDB Atlas: Banco de dados na nuvem (DBaaS), gratuito para testes.
Para esta aula, usaremos o mongosh (MongoDB Shell) ou o MongoDB Compass (Interface Visual).
2. O Vocabulário MongoDB 🗣️
| SQL | MongoDB |
|---|---|
| Database | Database |
| Table | Collection |
| Row | Document |
| Column | Field |
| Join | Embedding / Reference |
3. Operações de Escrita (Create) ✍️
Diferente do SQL, não precisamos criar as colunas antes. O banco cria a coleção na primeira inserção.
// Inserir um único documento
db.usuarios.insertOne({
nome: "Ricardo",
email: "ricardo@email.com",
ativo: true
});
// Inserir vários
db.usuarios.insertMany([
{ nome: "Ana", idade: 25 },
{ nome: "Bia", idade: 30 }
]);
4. Operações de Busca (Read) 🔎
O find() é o nosso SELECT.
// Buscar todos
db.usuarios.find();
// Buscar com filtro (nome igual a Ricardo)
db.usuarios.find({ nome: "Ricardo" });
// Buscar maiores de 20 anos ($gt = Greater Than)
db.usuarios.find({ idade: { $gt: 20 } });
5. Atualização (Update) 🔄
Sempre usamos operadores como o $set.
// Mudar o nome do usuário com ID específico
db.usuarios.updateOne(
{ _id: ObjectId("...") },
{ $set: { nome: "Ricardo Pires" } }
);
// Adicionar um campo a todos os usuários
db.usuarios.updateMany({}, { $set: { verificado: false } });
6. Exclusão (Delete) 🗑️
Cuidado: assim como no SQL, o filtro é essencial!
// Deletar um
db.usuarios.deleteOne({ nome: "Ana" });
// Limpar a coleção
db.usuarios.deleteMany({});
7. Prática: O Terminal do Futuro 💻
Abra o seu terminal e execute os comandos:
$ mongosh
$ use meu_primeiro_banco;
$ db.produtos.insertOne({ nome: "Mouse", preco: 50 });
$ db.produtos.find();
8. Exercícios de Fixação 🧠
- No MongoDB, qual a diferença entre
insertOneeinsertMany? - Para que serve o operador
$setno comando de update? O que aconteceria se você não o usasse no MongoDB? (Dica: Substituição total). - Como você buscaria produtos com preço entre 100 e 500 no MongoDB?
Próxima Aula: Vamos aprender as estratégias para organizar seus dados com a Modelagem de Documentos! 🏗️
Aula 13 - Modelagem de Documentos no NoSQL 🏗️
Objetivo
Objetivo: Aprender as duas principais estratégias de modelagem de dados no MongoDB (Aninhamento e Referência), entendendo as vantagens de cada uma e como decidir qual usar em projetos reais.
1. O Fim do JOIN? 🚫🔗
No SQL, a regra é: "Separe tudo em tabelas e use JOIN". No NoSQL (MongoDB), a regra de ouro é: "Dados que são acessados juntos, devem ser armazenados juntos".
2. Estratégia 1: Aninhamento (Embedding) 📦
Colocamos os dados relacionados dentro do próprio documento principal.
{
"nome": "Ciclano",
"email": "ciclano@email.com",
"enderecos": [
{ "rua": "Rua A", "cidade": "SP" },
{ "rua": "Rua B", "cidade": "RJ" }
]
}
- Vantagem: Leitura ultrarrápida (uma única busca traz tudo).
- Quando usar: Relacionamentos 1:1 ou 1:Poucos (ex: endereços de um usuário).
3. Estratégia 2: Referência (Linking) 🔗
Guardamos apenas o _id do documento relacionado, similar a uma chave estrangeira.
- Vantagem: Evita redundância e o crescimento excessivo de um único documento.
- Quando usar: Relacionamentos 1:Muitos (ex: um blog com 10.000 comentários) ou N:N.
4. Como decidir? 🤔
Responda estas perguntas: 1. O dado cresce sem parar? Se sim, use Referência. 2. Eu sempre preciso do dado filho para mostrar o pai? Se sim, use Aninhamento. 3. Vários pais compartilham o mesmo filho? Se sim, use Referência.
5. Visualização de Relações (Mermaid) 📊
graph TD
User((Usuário)) -- "Aninha (1:1)" --> Profile[Perfil]
User -- "Referencia (1:N)" --> Posts[Postagens]
Posts -- "Aninha (1:Poucos)" --> Tags[Tags]
6. Prática: Estruturando o Blog 💻
Tente modelar um post de blog com comentários:
// Opção A: Embebed (comentários dentro do post)
db.posts.insertOne({
titulo: "Aula 13",
comentarios: [
{ autor: "Ana", texto: "Gostei!" },
{ autor: "Bob", texto: "Top!" }
]
});
7. Mini-Projeto: Dashboard de E-commerce 🚀
Modele o documento de um Pedido. Ele deve conter:
1. Dados básicos do pedido.
2. Dados do Cliente (Aninhado ou Referenciado?).
3. Lista de Produtos (Cada produto deve ter o nome e o preço no momento da compra).
8. Exercícios de Fixação 🧠
- Qual o limite de tamanho de um documento no MongoDB? (Dica: pesquise por 16MB).
- O que acontece se eu aninhar dados demais em um único documento?
- Podemos misturar as duas estratégias (Híbrido) no mesmo banco?
Próxima Aula: Vamos aprender a extrair inteligência dos dados com Consultas e Agregações no MongoDB! 🧪
Aula 14 - Consultas e Agregações no MongoDB 🧪
Objetivo
Objetivo: Dominar o Aggregation Framework do MongoDB para processar dados em larga escala, realizar agrupamentos complexos e simular junções com o $lookup.
1. O que é o Aggregation Framework? ⚙️
Diferente do simples find(), a agregação funciona como uma linha de montagem (Pipeline). Os dados entram, passam por várias etapas e saem transformados no final.
Cada etapa começa com o símbolo $.
2. As Etapas do Pipeline 🏗️
As mais comuns são: * \(match**: Filtra os documentos (equivalente ao WHERE). * **\)group: Agrupa os documentos (equivalente ao GROUP BY). * \(sort**: Ordena os resultados. * **\)project: Escolhe quais campos mostrar (Projeção). * $limit: Restringe o número de resultados.
3. Exemplo: Média de Preços 💰
db.produtos.aggregate([
{ $match: { categoria: "Eletrônicos" } },
{ $group: { _id: "$categoria", mediaPreco: { $avg: "$preco" } } }
]);
4. O $lookup (O "Join" do NoSQL) 🔗
Se você seguiu a estratégia de Referência, precisará do $lookup para unir os dados na consulta.
db.pedidos.aggregate([
{
$lookup: {
from: "clientes", // Tabela para unir
localField: "cliente_id", // Campo no pedido
foreignField: "_id", // Campo no cliente
as: "dados_cliente" // Nome do novo campo
}
}
]);
5. Visualização do Pipeline (Mermaid) 📊
graph LR
Origin[(Documentos)] --> Match[$match]
Match --> Group[$group]
Group --> Sort[$sort]
Sort --> Result[Relatório Final]
6. Performance e Índices ⚡
Fazer agregação em milhões de documentos pode ser lento.
* Índices: Use createIndex({ campo: 1 }) para acelerar as buscas.
* O $match deve ser sempre a PRIMEIRA etapa do pipeline para diminuir o volume de dados logo no início.
7. Prática: Relatórios de Vendas 💻
Tente executar no mongosh:
$ db.vendas.aggregate([
$ { $group: { _id: "$vendedor", total: { $sum: "$valor" } } },
$ { $sort: { total: -1 } }
$ ]);
8. Exercícios de Fixação 🧠
- Qual a diferença entre usar
find().sort()e o pipeline$sortdentro do aggregate? - Para que serve a etapa
$unwind? (Dica: pesquise sobre Arrays no MongoDB). - Posso usar o
$matchmais de uma vez no mesmo pipeline?
Próxima Aula: Vamos fechar o módulo com o MongoDB no Ecossistema Moderno e Deploy! 🚀
Aula 15 - MongoDB no Ecossistema Moderno 🚀
Objetivo
Objetivo: Entender o papel do MongoDB em arquiteturas de software reais, aprender quando (e quando não) usar NoSQL e conhecer as facilidades do MongoDB Atlas para deploy na nuvem.
1. Quando NÃO usar NoSQL? 🛑
NoSQL não é uma "bala de prata". Evite se: * Os dados são altamente relacionais e exigem muitos JOINs complexos. * Você precisa de transações ACID ultra-rígidas em dezenas de tabelas simultâneas. * O esquema dos dados é fixo e nunca muda.
2. Arquitetura Poliglota (O Melhor de Dois Mundos) 🌍
Grandes empresas não escolhem um só. Elas usam: * PostgreSQL: Para dados financeiros, usuários e core business. * MongoDB: Para catálogos, logs, perfis flexíveis e cache. * Redis: Para dados temporários e alta velocidade.
3. MongoDB Atlas: O Banco na Nuvem ☁️
O Atlas é a plataforma oficial do MongoDB que gerencia tudo para você: * Auto-scaling: Aumenta o servidor se o site bombar. * Segurança: Criptografia nativa e firewalls. * Backup: Cópias automáticas do seu banco.
4. Segurança e Melhores Práticas 🔐
- Nunca deixe o seu banco sem senha.
- Whitelist IP: Configure o Atlas para aceitar apenas o IP do seu servidor.
- Indices: Nunca entre em produção sem criar índices nos campos de busca.
5. Visualizando a Escalabilidade (Mermaid) 📊
graph TD
User((Usuário)) --> LB[Load Balancer]
LB --> S1[Servidor 1]
LB --> S2[Servidor 2]
S1 --> Cluster[(Cluster MongoDB Atlas)]
S2 --> Cluster
6. O Futuro: IA e Vetores 🤖
O MongoDB agora suporta Vector Search. Isso permite que você faça buscas por "semelhança" (ex: achar fotos parecidas ou recomendar produtos baseados no gosto), essencial para apps de Inteligência Artificial.
7. Prática: Exportando para a Nuvem 💻
Tente criar uma conta gratuita no MongoDB Atlas e conectar o seu MongoDB Compass a ela usando a connection string.
8. Exercícios de Fixação 🧠
- O que é persistência poliglota?
- Cite dois benefícios de usar o MongoDB Atlas em vez de instalar o banco no seu próprio servidor Linux.
- Por que a segurança por "Whitelist de IP" é importante?
Aula Final: Prepare-se para o Projeto Integrador Final - SQL + NoSQL! 🎓
Aula 16 - Projeto Final Integrador: O Arquiteto de Dados 🎓
Objetivo
Objetivo: Aplicar de forma integrada os conhecimentos de bancos relacionais (PostgreSQL) e não-relacionais (MongoDB) na criação de uma solução de dados moderna e profissional.
1. O Desafio Final: "OmniStore Analytics" 🦸♂️
Você foi contratado para projetar o ecossistema de dados de uma startup global. Eles precisam de uma estrutura que seja rápida, segura e flexível.
Arquitetura Proposta:
- Motor Core (PostgreSQL): Responsável por dados que não podem falhar (Clientes, Login, Faturamento e Inventário Básico).
- Motor Analytics (MongoDB): Responsável por dados flexíveis e volumosos (Logs de acesso, Comentários, Avaliações e histórico de preços variados).
2. Requisitos Obrigatórios 📋
Seu projeto deve conter os seguintes artefatos:
Módulo SQL (PostgreSQL):
- [ ] Script de criação de tabelas (DDL) com chaves estrangeiras.
- [ ] Pelo menos 2 consultas complexas usando
INNER JOINeSUM. - [ ] Uma transação (
BEGIN/COMMIT) simulando uma compra.
Módulo NoSQL (MongoDB):
- [ ] Modelo de documento para o "Perfil Extendido" do usuário ou "Log de Atividades".
- [ ] Um pipeline de agregação (
aggregate) para gerar um relatório de performance. - [ ] Demonstração de um dado aninhado (Embedding).
3. Dicas para um Portfólio de Elite ✨
Para que seu projeto de conclusão se destaque no mercado:
- Documentação: Crie um
README.mdexplicando onde você usou SQL e onde usou NoSQL e por quê. - Diagramas: Utilize o Mermaid no seu arquivo para mostrar a relação entre as tabelas.
- Ambiente Cloud: Mostre capturas de tela do seu banco rodando no MongoDB Atlas.
- Limpeza: Código organizado, identado e comentado.
4. Onde continuar estudando? 📚
O mundo dos dados é vasto. Se você gostou deste curso, pesquise sobre: 1. Data Engineering: Como mover dados entre SQL e NoSQL automaticamente (ETL). 2. Graph Databases (Neo4j): Para sistemas de recomendação complexos. 3. Big Data (Spark/Hadoop): Para processar Terabytes de informação. 4. Cloud Architecture: AWS RDS, Google Cloud Spanner e Azure CosmosDB.
5. Mensagem Final 🌟
Parabéns! Você completou a jornada de Bancos de Dados SQL e NoSQL. Agora você entende as engrenagens silenciosas que sustentam todos os aplicativos e sites que usamos diariamente. O dado é o novo petróleo, e você acaba de se tornar um mestre da sua extração e refinamento.
"Em Deus nós confiamos; todos os outros devem trazer dados." - W. Edwards Deming
FIM DO CURSO 🚀🚀🚀 Desejamos muito sucesso na sua jornada como Especialista em Banco de Dados!
Exercícios
Listas de Exercícios 🏋️
Pratique o que aprendeu com desafios graduais para cada aula.
-
Trilha 1: Fundamentos ---
-
Trilha 2: Core Android ---
-
Trilha 3: Networking ---
-
Trilha 4: Finalização ---
Exercícios: Aula 01 - Introdução a Bancos de Dados 📝
Pratique os conceitos fundamentais de dados, informação e sistemas de gerenciamento.
🟢 Nível: Básico
1. Classificação de Elementos
Classifique os itens abaixo como DADO ou INFORMAÇÃO:
a) 12/10/1995
b) O cliente João nasceu em 12/10/1995
c) R$ 1.500,00
d) O saldo total da conta é R$ 1.500,00
e) A45
2. SGBDR vs Banco de Dados
Explique, com suas palavras, a diferença entre um Banco de Dados e um SGBDR (Sistema Gerenciador de Banco de Dados Relacional). Use a analogia de uma biblioteca (livros vs bibliotecário).
🟡 Nível: Intermediário
3. Vantagens do SGBD
Imagine um cenário onde uma loja guarda suas vendas em um arquivo do Excel compartilhado. Cite três problemas que podem ocorrer à medida que a loja cresce (ex: muitos funcionários acessando ao mesmo tempo) e como um SGBD resolveria isso.
4. Arquitetura Cliente/Servidor
No PostgreSQL, o que acontece quando você digita um comando no pgAdmin e aperta o botão de executar? Descreva o caminho que os dados percorrem entre o cliente e o servidor.
🔴 Nível: Desafio
5. Identificando Entidades
Pense em um aplicativo de Delivery de Comida. Liste pelo menos 4 entidades fundamentais que esse sistema precisa armazenar e cite 3 atributos (dados) para cada uma delas.
Dica: Quem compra? Quem vende? O que é vendido? Como chega até o cliente?
Exercícios: Aula 02 - Modelagem de Dados e Modelo E-R 🏗️
Aplique os conceitos de entidades, atributos, relacionamentos e chaves.
🟢 Nível: Básico
1. Identificando Chaves Primárias
Para as tabelas abaixo, identifique qual atributo seria a melhor escolha para ser a Chave Primária (PK) e justifique: a) Carros: Placa, Modelo, Ano, Cor. b) Alunos: Nome, Data de Nascimento, CPF, Nota. c) Produtos: Nome do Produto, Código de Barras (EAN), Preço.
2. Conceitos Rápidos
Defina brevemente: a) Entidade. b) Chave Estrangeira (FK). c) Cardinalidade 1:N.
🟡 Nível: Intermediário
3. Definindo Cardinalidades
Determine a cardinalidade (1:1, 1:N ou N:N) para os seguintes relacionamentos reais: a) Estado e Cidade. b) Pessoa e CPF. c) Professor e Turma. d) Pedido e Produto.
4. Integridade Referencial na Prática
Imagine que você tem a tabela Autores (PK: id_autor) e a tabela Livros (FK: id_autor). O que acontece com os livros se você tentar excluir um autor que possui 10 livros cadastrados? Por que o SGBD faz isso?
🔴 Nível: Desafio
5. Mini Modelagem: Sistema de Petshop
Crie um esboço (pode ser em texto ou lista) para um sistema de Petshop que precisa armazenar: * Donos (clientes). * Pets (um cliente pode ter vários pets, mas cada pet pertence a um único dono). * Serviços (Banho, Tosa, Consulta - um pet pode fazer vários serviços ao longo do tempo).
O que você deve entregar: 1. Lista de Entidades e seus Atributos. 2. Indicação de PKs e FKs. 3. A cardinalidade entre as entidades.
Exercícios: Aula 03 - Normalização e Estrutura Relacional 📡
Pratique a organização de tabelas seguindo as regras de normalização.
🟢 Nível: Básico
1. Tipos de Dados Corretos
Escolha o melhor tipo de dado (PostgreSQL) para armazenar as seguintes informações: a) Preço de um produto (ex: R$ 49,90). b) Texto longo de uma postagem de blog. c) Quantidade de itens em estoque (número inteiro). d) Data e hora exata de um acesso ao sistema. e) Status de entrega (V ou F).
2. O Conceito de NULL
Explique a frase: "NULL não é zero, nem um espaço vazio". Por que o uso indiscriminado de colunas que aceitam NULL pode ser ruim para o banco?
🟡 Nível: Intermediário
3. Aplicando a 1ª Forma Normal (1FN)
A tabela abaixo está violando a 1FN. Como você a reestruturaria? Tabela: Projetos | ID_Proj | Nome_Projeto | Equipe_Membros (Lista de nomes) | |---|---|---| | 1 | App Mobile | João, Maria, Pedro | | 2 | Site Web | Ana, José |
4. Entendendo a 3ª Forma Normal (3FN)
Observe a tabela: Carros (ID_Carro, Placa, Modelo, Marca_Nome, Marca_Pais).
Por que ela viola a 3FN? Quais tabelas novas você criaria para normalizá-la?
🔴 Nível: Desafio
5. Caso Real: Sistema de Pedidos Mal Estruturado
Você recebeu uma planilha de Excel para importar para o banco, mas ela está "achatada" (flat):
Planilha: Pedido_ID, Data, Cliente_ID, Cliente_Nome, Cliente_Email, Item_Nome, Item_Qtd, Item_Preco_Unitario.
Sua tarefa: 1. Identifique as repetições de dados. 2. Projete o esquema normalizado (mínimo 3 tabelas). 3. Indique as Chaves Primárias (PK) e Estrangeiras (FK).
Exercícios: Aula 04 - DDL (Criação da Estrutura) 🏗️
Coloque em prática a criação de bancos de dados, tabelas e chaves usando SQL.
🟢 Nível: Básico
1. Criando sua primeira Tabela
Escreva o comando SQL para criar uma tabela chamada produtos com as seguintes colunas:
* id: Chave Primária com autoincremento.
* nome: Texto de até 100 caracteres, obrigatório.
* preco: Valor decimal.
* quantidade: Valor inteiro.
2. Comandos Fundamentais
Diferencie, em uma frase cada, a função dos comandos:
a) CREATE DATABASE
b) ALTER TABLE
c) DROP TABLE
🟡 Nível: Intermediário
3. Restrições e Chaves Estrangeiras
Escreva o script SQL para criar um relacionamento entre categorias e produtos:
1. Crie a tabela categorias (id, nome).
2. Adicione a coluna categoria_id na tabela produtos (criada no exercício 1) como uma Chave Estrangeira que aponta para categorias.
4. Modificando Estruturas
Você percebeu que esqueceu de guardar o "E-mail" na tabela de clientes. Escreva o comando ALTER TABLE necessário para adicionar essa coluna com no máximo 150 caracteres.
🔴 Nível: Desafio
5. O Banco da Biblioteca (Script Completo)
Escreva um único script SQL que realize as seguintes tarefas em ordem:
1. Crie as tabelas autores (id, nome, nacionalidade).
2. Crie a tabela livros (id, titulo, ano_publicacao, autor_id).
3. Garanta que o autor_id seja uma FK obrigatória.
4. Crie um Índice para acelerar a busca pelo título do livro.
5. Adicione uma restrição CHECK na tabela livros para que o ano_publicacao seja maior que 1500.
Exercícios: Aula 05 - DML (Manipulação de Dados) ⚙️
Pratique os comandos de inserção, atualização e exclusão de dados.
🟢 Nível: Básico
1. Inserção Simples
Escreva o comando SQL para inserir um novo registro na tabela clientes com os seguintes dados:
* Nome: Carlos Eduardo
* CPF: 123.456.789-00
* Cidade: São Paulo
2. Inserção Múltipla
Você recebeu uma lista de 3 novos produtos para cadastrar. Escreva um único comando INSERT para adicionar:
* Mouse Sem Fio - R$ 89,00 - Estoque: 50
* Teclado Mecânico - R$ 250,00 - Estoque: 20
* Monitor 24" - R$ 900,00 - Estoque: 10
🟡 Nível: Intermediário
3. Atualização Segura
Escreva o comando para atualizar o preço de todos os produtos da categoria Eletrônicos (ID 5) em 5% de aumento.
Dica: Use preco = preco * 1.05.
4. O Perigo do DELETE
Explique o que aconteceria com os dados se você executasse o comando DELETE FROM usuarios; por engano. Qual a importância do Backup e da cláusula WHERE nesse contexto?
🔴 Nível: Desafio
5. Manutenção de Dados Complexa
Imagine que um cliente mudou de cidade e todos os seus pedidos pendentes devem ser atualizados com uma nova "Taxa de Entrega".
1. Escreva o comando para mudar a cidade do cliente João Silva para Curitiba.
2. Escreva o comando para aumentar em R$ 15,00 o valor_total de todos os pedidos do cliente João Silva que ainda não foram entregues (status = 'Pendente').
Exercícios: Aula 06 - DQL Básico 💾
Pratique a arte de perguntar ao banco de dados e obter as respostas corretas.
🟢 Nível: Básico
1. Seleção de Colunas
Escreva o comando SELECT para visualizar apenas o nome e o telefone de todos os clientes cadastrados na tabela clientes.
2. Filtro de Igualdade
Busque todos os dados do produto que possui o Código de Barras (EAN) igual a 7891234567890.
🟡 Nível: Intermediário
3. Uso de Operadores Relacionais
Escreva uma consulta para listar o nome e o estoque de todos os produtos que possuem menos de 10 unidades em estoque, ordenados pela quantidade (do menor para o maior).
4. Busca por Padrões (LIKE)
O gerente pediu uma lista de todos os alunos cujo e-mail termina com @gmail.com. Como seria esse comando SQL?
🔴 Nível: Desafio
5. Filtragem Composta e Ordenação
Você precisa gerar um relatório de segurança. Escreva um comando para:
1. Listar id, usuario e data_acesso da tabela logs.
2. Filtrar apenas acessos que ocorreram fora do horário comercial (antes das 08:00 ou depois das 18:00).
3. Ordenar o resultado da data mais recente para a mais antiga.
Dica: Use WHERE hora < '08:00' OR hora > '18:00'.
Exercícios: Aula 07 - Consultas Avançadas e Agregações 🧪
Pratique a geração de estatísticas e relatórios complexos.
🟢 Nível: Básico
1. Estatística Simples
Escreva uma consulta para encontrar a média de preços de todos os produtos na tabela produtos. Use um apelido (AS) para que a coluna se chame media_precos.
2. Contagem de Registros
Quantos clientes estão cadastrados que moram na cidade de Rio de Janeiro? Use o comando SQL correspondente.
🟡 Nível: Intermediário
3. Agrupamento por Categoria
Escreva o comando SQL que mostre o nome da categoria e o valor total em estoque (preço * quantidade) para cada categoria, ordenado do maior para o menor valor.
4. Filtro em Grupos
Liste todas as cidades que possuem mais de 100 clientes cadastrados. Use o GROUP BY e o HAVING.
🔴 Nível: Desafio
5. Relatório Gerencial
Você precisa descobrir quais vendedores bateram a meta de R$ 10.000,00 em vendas no mês de Outubro.
1. Utilize a tabela vendas (vendedor_id, data, valor).
2. Filtre pela data (Outubro/2024).
3. Agrupe pelo vendedor_id.
4. Mostre apenas quem vendeu acima de 10.000.
5. Ordene o ranking do melhor vendedor para o pior.
Exercícios: Aula 08 - JOINs: Junções entre Tabelas 🔗
Pratique a união de dados vindos de múltiplas tabelas.
🟢 Nível: Básico
1. Meu Primeiro JOIN
Dada a tabela pedidos (id, data, cliente_id) e clientes (id, nome), escreva o SQL para listar o ID do pedido e o Nome do cliente usando um INNER JOIN.
2. Entendendo o LEFT JOIN
Qual o resultado da consulta abaixo?
SELECT p.nome, c.cor FROM produtos p LEFT JOIN cores c ON p.id_cor = c.id;
O que acontecerá se um produto não tiver uma cor cadastrada no banco?
🟡 Intermediário
3. JOIN com Filtro
Liste o nome dos alunos e o nome dos cursos em que eles estão matriculados, mas apenas para o curso de "Informática".
4. Relatório de Inatividade
Você precisa descobrir quais fornecedores nunca nos venderam nada. Escreva uma consulta usando LEFT JOIN entre fornecedores e compras e filtre os resultados onde a compra é NULL.
🔴 Nível: Desafio
5. O Grande Relatório (Multi-JOIN)
Escreva um script SQL para unir 4 tabelas e exibir os seguintes campos:
* Nome do Cliente (clientes)
* Data do Pedido (pedidos)
* Nome do Produto (produtos)
* Nome da Categoria do Produto (categorias)
Regra: Use apelidos para as tabelas (ex: FROM clientes c) para deixar o código mais limpo.
Exercícios: Aula 09 - Transações e Integridade ACID 🔑
Aprenda a proteger seus dados contra falhas e inconsistências.
🟢 Nível: Básico
1. Conceito Fundamental
O que é uma transação de banco de dados? Dê um exemplo do dia a dia (fora do banco) que funcione como "Tudo ou Nada".
2. Comandos de Controle
Explique a diferença entre:
a) BEGIN
b) COMMIT
c) ROLLBACK
🟡 Nível: Intermediário
3. A Propriedade Atomicidade (A do ACID)
Em um sistema de reserva de assentos de cinema, por que a atomicidade é vital quando o usuário escolhe o lugar e realiza o pagamento?
4. Simulação de Problema
Imagine que você abriu um BEGIN, deletou acidentalmente 1.000 linhas da tabela de clientes e, antes de dar o COMMIT, a sua internet caiu e o pgAdmin fechou. O que acontecerá com esses dados? Por quê?
🔴 Nível: Desafio
5. Transferência de Saldo (Código SQL)
Escreva o script SQL completo para realizar a transferência de R$ 250,00 da conta do Cliente A para o Cliente B.
* O script deve garantir que o Cliente A possui saldo suficiente antes de tirar (usando lógica hipotética ou apenas o comando).
* Se houver um erro simulado no meio do processo, o que você deve fazer?
* Inclua os comandos de início, alteração e finalização.
Exercícios: Aula 10 - Projeto Parcial 🔐
Finalize o Módulo II testando sua capacidade de integração.
🟢 Nível: Básico
1. Revisão de Conceitos
Explique em um parágrafo como o DDL e o DML trabalham juntos em um projeto de software.
2. Identificação de Erros
Observe o script abaixo e aponte pelo menos 2 erros de integridade ou lógica:
CREATE TABLE vendas (
id INT,
produto VARCHAR(50),
preco DECIMAL,
data DATE
);
INSERT INTO vendas VALUES (1, 'Celular', -100, '2024-01-01');
🟡 Nível: Intermediário
3. DQL de Auditoria
Escreva uma consulta que retorne o nome do cliente e a quantidade total de pedidos que ele já fez, mas exiba apenas os clientes que fizeram zero pedidos. (Dica: Use LEFT JOIN e COUNT).
4. Transação de Cancelamento
Escreva o bloco de comandos (BEGIN...COMMIT) para cancelar um pedido:
1. Apagar o registro em itens_pedido.
2. Apagar o registro em pedidos.
3. O que acontece se você inverter a ordem e tentar apagar o pedido antes dos itens?
🔴 Nível: Desafio
5. O Desafio do DBA
Você foi solicitado a otimizar um banco que está lento.
1. Cite 3 colunas que obrigatoriamente deveriam ter Índices.
2. Escreva a consulta para mostrar o faturamento total por categoria, ordenado do maior para o menor.
3. Escreva uma restrição CHECK para garantir que a data de entrega nunca seja anterior à data do pedido.
Exercícios: Aula 11 - Introdução ao NoSQL e MongoDB 🌐
Explore os conceitos fundamentais que diferenciam o NoSQL dos bancos tradicionais.
🟢 Nível: Básico
1. Definição NoSQL
O que significa o termo NoSQL? É correto dizer que bancos NoSQL não aceitam comandos SQL? Explique.
2. Identificação de Tipos
Associe o banco de dados à sua categoria NoSQL: a) MongoDB -> ( ) Grafo b) Redis -> ( ) Colunar c) Neo4j -> ( ) Documento d) Cassandra -> ( ) Chave-Valor
🟡 Nível: Intermediário
3. SQL vs NoSQL (Cenários)
Para os cenários abaixo, qual modelo você escolheria e por quê? a) Um sistema bancário de transferências financeiras críticas. b) Um sistema de logs de sensores de IoT que gera milhões de registros por segundo. c) Um catálogo de e-commerce onde os produtos mudam de atributos constantemente (ex: um tênis tem "tamanho", mas um computador tem "processador").
4. Entendendo Documentos (JSON)
Escreva um pequeno documento JSON que represente um Livro, contendo: titulo, autor (objeto com nome e país), ano e uma lista de categorias.
🔴 Nível: Desafio
5. O Teorema CAP
Explique, com suas palavras, por que é impossível garantir Consistência, Availabilidade e Partição ao mesmo tempo em um sistema distribuído. Se um cabo de rede for cortado separando os servidores (Partição), o que o administrador deve priorizar?
Exercícios: Aula 12 - Instalação e CRUD Básico (MongoDB) 🍃
Coloque a mão na massa com o banco de dados orientado a documentos.
🟢 Nível: Básico
1. Preparação
Você já instalou o MongoDB Compass ou Atlas? Tire um print da tela inicial conectada ao banco.
2. Inserção Simples
Crie uma coleção chamada livros e insira 3 documentos com campos titulo, autor e ano.
🟡 Nível: Intermediário
3. Filtros no Find
Escreva o comando para buscar todos os livros publicados após o ano 2010. (Dica: Use $gt).
4. Atualização de Dados
Houve um erro no cadastro. O autor "Joao" agora se chama "João Silva". Escreva o comando updateOne para corrigir apenas este documento.
🔴 Nível: Desafio
5. Manipulação de Arrays (O Poder do NoSQL)
No MongoDB, campos podem ser listas.
1. Insira um documento na coleção usuarios:
{ nome: "Carlos", tags: ["Estudante", "Inovador"] }
2. Escreva o comando para adicionar a tag "SQL" ao array do usuário "Carlos". (Pesquise sobre o operador $push).
3. Como você buscaria todos os usuários que possuem a tag "Inovador"?
Exercícios: Aula 13 - Modelagem de Documentos (NoSQL) 🏗️
Aprenda a arte de decidir entre unir ou separar seus dados no MongoDB.
🟢 Nível: Básico
1. Conceitos de Modelagem
Explique com suas palavras a diferença entre as estratégias de Embedding e Referencing.
2. Escolha de Estratégia
Em um sistema de biblioteca, você armazenaria os capítulos de um livro de forma Aninhada ou Referenciada no documento do Livro? Justifique.
🟡 Nível: Intermediário
3. Modelagem de Usuário
Desenhe um JSON de um usuário que contenha:
* Nome e E-mail.
* Três endereços aninhados (Casa, Trabalho, Praia).
* Uma lista de IDs de fotos_perfil (Referenciadas).
4. Vantagens e Desvantagens
Cite uma vantagem de performance e uma desvantagem de manutenção ao usar o Embedding.
🔴 Nível: Desafio
5. O Cenário Híbrido
Imagine um sistema de rede social como o Twitter. 1. O perfil do usuário deve ter os nomes dos seus 5 amigos mais próximos aninhados. 2. As postagens do usuário (que podem ser milhares) devem ser referenciadas. 3. Escreva o JSON que represente esse perfil de usuário seguindo essa lógica. 4. Por que guardamos os nomes dos amigos aninhados se já temos os IDs deles? (Dica: Pesquise por Extended Reference Pattern).
Exercícios: Aula 14 - Consultas e Agregações no MongoDB 🧪
Aprenda a processar dados e gerar relatórios poderosos no MongoDB.
🟢 Nível: Básico
1. Pipeline Simples
Explique com suas palavras como funciona a ideia de "Pipeline" (Linha de montagem) no MongoDB.
2. Etapas de Agregação
Quais os equivalentes no SQL para as seguintes etapas do MongoDB:
a) $match ->
b) $group ->
c) $sort ->
d) $limit ->
🟡 Nível: Intermediário
3. Somando Valores
Dada a coleção vendas (vendedor, valor, data), escreva o pipeline de agregação para calcular o valor total vendido por vendedor.
4. O JOIN do NoSQL
Você tem a coleção posts e a coleção autores. Os posts possuem um campo autor_id. Escreva o comando $lookup para trazer os dados do autor dentro de cada post.
🔴 Nível: Desafio
5. Análise de Performance
Por que é recomendado que a etapa $match seja sempre a primeira do seu pipeline de agregação? O que aconteceria se você colocasse um $match após um $group que processou milhões de registros?
6. Desafio do $unwind
Muitos documentos no MongoDB possuem arrays (listas). Pesquise o que faz o operador $unwind e dê um exemplo de uso para um documento de Pedido que contém um array de itens.
Exercícios: Aula 15 - Ecossistema Moderno e Cloud 🚀
Reflita sobre o uso profissional de bancos de dados na nuvem e arquiteturas modernas.
🟢 Nível: Básico
1. Quando usar NoSQL
Cite 2 cenários de aplicativos reais (ex: Instagram, Uber, App de Banco) onde o MongoDB seria a escolha ideal para uma parte do sistema.
2. O conceito de Nuvem
O que é o MongoDB Atlas e qual a principal facilidade que ele traz para um desenvolvedor iniciante?
🟡 Nível: Intermediário
3. Persistência Poliglota
Imagine que você está criando o próximo "Facebook". * Qual banco você usaria para guardar as configurações de login dos usuários? (SQL ou NoSQL?) * Qual banco você usaria para guardar o feed de notícias (posts com imagens e textos variados)? (SQL ou NoSQL?) Justifique suas escolhas.
4. Segurança de Dados
Por que é uma prática perigosa liberar o acesso ao banco de dados para "qualquer IP" (0.0.0.0/0)? O que você deve configurar no painel do Atlas para evitar isso?
🔴 Nível: Desafio
5. Escalabilidade e Custos
Pesquise a diferença entre Escalabilidade Vertical e Escalabilidade Horizontal. Por que o MongoDB leva vantagem na Escalabilidade Horizontal quando falamos de Petabytes de dados?
6. IA e MongoDB
Como a funcionalidade de Vector Search do MongoDB pode ajudar na criação de um sistema de recomendação de filmes inteligente?
Exercícios: Aula 16 - Revisão Geral 🎓
Prepare-se para o seu projeto final revisando os pontos chave de todo o curso.
🟢 Nível: Básico
1. O Mapa Mental
Desenhe um diagrama simples (pode ser texto) que conecte: Aplicação -> SQL -> NoSQL. Qual o papel de cada peça?
2. Vocabulário Cruzado
Preencha o que falta: * Tabela (SQL) = __ (NoSQL) * Linha (SQL) = __ (NoSQL) * JOIN (SQL) = _____ (NoSQL)
🟡 Nível: Intermediário
3. Decisão de Arquiteto
Um cliente quer criar um app de "Lista de Desejos". 1. O nome e e-mail do cliente devem ser únicos e consistentes. (Qual banco?) 2. Cada item da lista de desejos pode ter campos malucos (um quer "tamanho", outro quer "voltagem", outro quer "cor"). (Qual banco?) Como você integraria os dois?
🔴 Nível: Desafio (O Mini-Projeto)
4. Integração Conceitual
Imagine que você tem o ID de um usuário no PostgreSQL (user_id = 45). Como você faria para buscar as preferências desse usuário que estão salvas no MongoDB? Escreva a lógica (em texto ou pseudo-código) dessa integração.
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente ao final de cada módulo.
-
Fase 1 ---
-
Fase 2 ---
-
Fase 3 ---
-
Fase 4 ---
Quiz 01 - Módulo SQL e NoSQL
Quiz 02 - Módulo SQL e NoSQL
Quiz 03 - Módulo SQL e NoSQL
Quiz 04 - Módulo SQL e NoSQL
Quiz 05 - Módulo SQL e NoSQL
Quiz 06 - Módulo SQL e NoSQL
Quiz 07 - Módulo SQL e NoSQL
Quiz 08 - Módulo SQL e NoSQL
Quiz 09 - Módulo SQL e NoSQL
Quiz 10 - Módulo SQL e NoSQL
Quiz 11 - Módulo SQL e NoSQL
Quiz 12 - Módulo SQL e NoSQL
Quiz 13 - Módulo SQL e NoSQL
Quiz 14 - Módulo SQL e NoSQL
Quiz 15 - Módulo SQL e NoSQL
Quiz 16 - Módulo SQL e NoSQL
Slides
Slides 📺
Material visual para acompanhamento das vídeo-aulas.
-
Módulo 1 ---
-
Módulo 2 ---
-
Módulo 3 ---
-
Módulo 4 ---
Aula 01: Introdução a Bancos de Dados 🗄️
Fundamentos e Evolução
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Diferença entre Dados e Informação
- O que é um Banco de Dados
- Evolução Histórica
- Sistemas Gerenciadores (SGBD)
- Arquitetura Cliente/Servidor
🧩 Dado vs Informação
O que é um Dado?
- Elemento bruto
- Sem contexto
- Exemplo:
42,Azul,19/02/2026
📈 O que é Informação?
- Dado processado
- Com contexto
- Exemplo:
A temperatura agora é 42°C - Exemplo:
A cor favorita do João é Azul
🗄️ O que é um Banco de Dados?
- Uma coleção organizada de dados
- Permite acesso, gerenciamento e atualização
- Pense em uma biblioteca digital 📚
🕰️ A Evolução do Armazenamento
- Arquivos Planos (TXT, CSV)
- Modelo Hierárquico
- Modelo Relacional (O Rei! 👑)
- Modelo NoSQL (Flexibilidade 🚀)
🏛️ O Modelo Relacional
- Criado por Edgar F. Codd (1970)
- Baseado em Tabelas (Relações)
- Linhas (Registros) e Colunas (Atributos)
🛠️ O que é um SGBD?
- Sistema Gerenciador de Banco de Dados
- É o software que controla o acesso aos arquivos
- Exemplo: O bibliotecário que organiza as prateleiras 🤵
🐘 Exemplos de SGBDR
- PostgreSQL (Nosso foco!)
- MySQL
- Oracle
- SQL Server
- SQLite
🏗️ Arquitetura Cliente/Servidor
- O Servidor guarda os dados
- O Cliente (você) faz as perguntas (Queries)
- O PostgreSQL roda como um serviço no fundo
📊 Fluxo de Comunicação
graph LR
C[pgAdmin] -- "SQL" --> S[PostgreSQL Server]
S -- "Data" --> C
💻 Primeiros Passos: psql
🔑 A Importância da Senha
- Durante a instalação, você criou uma senha
- Ela protege o usuário
postgres - Anote em lugar seguro! 🛡️
📑 O Modelo Relacional em Detalhes
- Tudo é uma Tabela
- Colunas definem o Esquema
- Linhas são os Dados Reais
🧩 Exemplo de Tabela: Livros
| ID | Título | Autor | ISBN |
|---|---|---|---|
| 1 | Dom Casmurro | M. Assis | 123-X |
| 2 | O Hobbit | Tolkien | 456-Y |
🚀 Por que usar o PostgreSQL?
- Extremamente robusto
- Gratuito (Open Source)
- Suporta dados complexos (JSONB, GIS)
- Confiabilidade total (ACID)
🔍 SQL: A Língua dos Dados
- Structured Query Language
- Padronizada mundialmente
- Comum a quase todos os bancos relacionais
🧠 Desafio da Aula
- Pense em um sistema de Aluguel de Carros
- Quais tabelas você criaria?
- Quais dados guardaria em cada uma?
🔗 Próximos Passos
- Instalar o PostgreSQL (Setup 01)
- Abrir o pgAdmin 4
- Explorar a interface
🏁 Resumo
- Vimos que dados precisam de contexto
- Entendemos o papel do SGBD
- Visualizamos a arquitetura Cliente/Servidor
- Escolhemos o PostgreSQL como nossa ferramenta! 🐘
👋 Até a próxima aula!
Tema: Modelagem de Dados e E-R 🏗️
Aula 02: Modelagem de Dados e Modelo E-R 🏗️
Desenhando o Futuro
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Abstração da Realidade
- Entidades, Atributos e Relacionamentos
- Chaves Primárias e Estrangeiras
- Cardinalidade e Integridade
- Noções de Diagramação (DER)
🧠 Por que modelar?
- Evitar retrabalho
- Garantir a lógica do negócio
- Planejar antes de executar
- "Planta baixa" do sistema 🏠
🧱 Os Pilares do Modelo E-R
- Entidade: O "Substantivo" (O que?) 📦
- Atributo: O "Adjetivo" (Como?) 🏷️
- Relacionamento: O "Verbo" (Ação) 🔗
🎭 Entidade
- Objetos identificáveis
- Exemplos:
Cliente,Produto,Venda,Pessoa - Representadas por retângulos no diagrama
🏷️ Atributo
- Propriedades da entidade
- Exemplos para
Cliente:Nome,CPF,Email,Telefone - Definem o que será guardado
🔗 Relacionamento
- Conexão entre entidades
- Exemplo: Cliente Compra Produto
- Exemplo: Aluno Assiste Aula
🔑 A Chave Primária (PK)
- Identificador Único
- Não pode repetir
- Não pode ser nula (NULL)
- Exemplo:
id_usuario,CPF,ISBN
🖇️ A Chave Estrangeira (FK)
- O Elo de Ligação
- Aponta para uma PK em outra tabela
- Permite "navegar" entre os dados
- Exemplo:
id_clientedentro da tabelaPedidos
📏 Cardinalidade
Quantos de um lado se ligam a quantos do outro? 1. 1:1: Um para Um 2. 1:N: Um para Muitos 3. N:N: Muitos para Muitos (M:N)
🥇 Relacionamento 1:1
- Exemplo: Um
Paístem umaCapital. - Exemplo: Um
Cidadãotem umCPF. - Raro em modelagens simples, mas existe! 🎯
🥈 Relacionamento 1:N
- O mais comum!
- Exemplo: Uma
Mãetem váriosFilhos. - Exemplo: Um
Autorescreve váriosLivros. 📚
🥉 Relacionamento N:N
- Exemplo: Vários
Autoresescrevem váriosLivros. - Exemplo: Vários
Alunoscursam váriasMatérias. 🎓 - Atenção: Precisa de uma tabela no meio!
🛡️ Integridade Referencial
- Regra de ouro: Nenhuma FK pode apontar para o nada!
- Mantém o banco consistente
- Evita erros de apagar dados relacionados
📊 O Diagrama E-R (DER)
- Visualização gráfica da estrutura
- Facilita a comunicação entre programadores
- Ferramentas: dbdiagram.io, brModelo, Draw.io
📉 Exemplo de Diagrama
erDiagram
AUTOR ||--o{ LIVRO : "escreve"
AUTOR {
int id PK
string nome
}
LIVRO {
int id PK
string titulo
int id_autor FK
}
💻 Ferramentas CASE
- Computer-Aided Software Engineering
- Softwares que ajudam no desenho
- Recomendação: dbdiagram.io 🌐
🧩 Exercício Rápido
- Desenhe as tabelas para uma Escola:
Alunos,Turmas,Professores.- Como elas se ligam?
🚀 Dica de Especialista
- Modelagem bem feita = Consultas SQL fáceis
- Modelagem ruim = Dor de cabeça eterna! 🤯
🏁 Resumo
- Vimos como transformar o mundo real em tabelas
- Aprendemos o papel das chaves (PK e FK)
- Entendemos as cardinalidades (1:1, 1:N, N:N)
- Vimos a importância do Diagrama E-R
👋 Até a próxima aula!
Tema: Normalização e Estrutura 📡
Aula 03: Normalização e Estrutura 📡
Organizando a Bagunça
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Tipos de Dados no PostgreSQL
- O que é Normalização
- As 3 Formas Normais (1FN, 2FN, 3FN)
- Quando Desnormalizar?
- Especialização e Generalização
🧩 Tipos de Dados: A Base
- Inteiros:
INT,BIGINT - Decimais:
NUMERIC,REAL - Texto:
VARCHAR(N),TEXT - Tempo:
DATE,TIMESTAMP - Booleano:
BOOLEAN(True/False)
🤔 O que é NULL?
- Não é Zero! 0️⃣
- Não é Espaço Vazio! " "
- É AUSÊNCIA de valor
- É o "não sei" do banco de dados
⚖️ O que é Normalização?
Processo de organizar tabelas para: - Eliminar redundância (repetição) - Evitar anomalias (erro ao apagar/mudar) - Manter a integridade
📏 1ª Forma Normal (1FN)
Regra da Atomicidade
- Cada campo deve ter um valor único
- Sem listas!
(Telefone1, Telefone2)❌ - Sem vários valores em um campo
Joao, Maria❌
🔨 Como resolver a 1FN?
- Transformar listas em novas linhas
- Ou criar uma nova tabela para o atributo multivalorado
- Ex: Tabela
Telefones_Cliente
📐 2ª Forma Normal (2FN)
- Deve estar na 1FN
- Colunas não-chave devem depender da PK Inteira
- Foco em Chaves Compostas
📦 Exemplo 2FN
- Tabela
Item_Pedido(ID_Pedido, ID_Produto, Nome_Produto) - O
Nome_Produtodepende apenas doID_Produto, não do pedido! - Solução: Mover o nome para a tabela
Produtos.
📐 3ª Forma Normal (3FN)
- Deve estar na 2FN
- Eliminar dependências Transitivas
- Coluna não-chave não pode depender de outra coluna não-chave
🚛 Exemplo 3FN
- Tabela
Clientes(ID, Nome, CEP, Cidade, Estado) CidadeeEstadodependem doCEP, não diretamente doIDdo cliente.- Solução: Tabela
EnderecosouCEPs.
🔄 Desnormalização
- Quando as regras cansam o servidor 🥵
- Voltar atrás e aceitar redundância para ganhar Velocidade
- Comum em Big Data e Relatórios (Data Warehouse)
🧬 Generalização
- Criar uma entidade comum (Pai)
- Ex:
Veículo(Placa, Ano, Cor) - Atributos que todos os filhos possuem
🔍 Especialização
- Criar entidades específicas (Filhas)
- Ex:
Caminhão(Capacidade de Carga) - Ex:
Moto(Cilindradas) - Herdam do Pai! 继承
📊 Visualizando no Mermaid
classDiagram
class Pessoa {
string nome
string email
}
class PessoaFisica {
string cpf
}
class PessoaJuridica {
string cnpj
}
Pessoa <|-- PessoaFisica
Pessoa <|-- PessoaJuridica
💻 Prática de Normalização
Imagine uma planilha com:
ID, Nome_Aluno, Materia1, Materia2, Materia3
- Como você aplicaria a 1FN aqui?
🚀 Dica de Ouro
"Normalize até doer, desnormalize até funcionar." - Encontre o equilíbrio entre estrutura e performance! ⚖️
🏁 Resumo
- Tipos de dados garantem consistência
- Normalização limpa a redundância
- 1FN = Sem listas
- 2FN = Dependência da PK total
- 3FN = Sem dependência entre vizinhos
👋 Até a próxima aula!
Tema: DDL - Criando a Estrutura 🏗️
Aula 04: DDL - Criação da Estrutura 🏗️
Mão na Massa com SQL
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- A linguagem DDL
- Criando Bancos de Dados
- Criando Tabelas e Tipos
- Constraints (Restrições)
- Índices e Performance
- Alterando e Removendo Estruturas
📜 O que é DDL?
- Data Definition Language
- Foco na ESTRUTURA (o container)
- Não mexe nos dados (linhas) ainda! 📂
🛠️ Comandos Principais
CREATE: CriarALTER: MudarDROP: Destruir 🔥TRUNCATE: Esvaziar
🏗️ Criando o Banco de Dados
- Dica: No pgAdmin, você pode usar a interface visual, mas o SQL é mais poderoso!📑 Criando uma Tabela
CREATE TABLE usuarios (
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE
);
SERIAL: Auto-incremento ➕
- NOT NULL: Obrigatório ❗
- UNIQUE: Sem repetições 🆔
🔑 Restrições (Constraints)
Servem para garantir a qualidade: - PK: Chave Primária - FK: Chave Estrangeira - CHECK: Validação personalizada - DEFAULT: Valor padrão
⛓️ Criando Chave Estrangeira (FK)
CREATE TABLE pedidos (
id SERIAL PRIMARY KEY,
id_cliente INT REFERENCES usuarios(id),
total DECIMAL(10,2)
);
REFERENCES cria o elo de integridade! 🛡️
✅ A cláusula CHECK
- Impede a entrada de dados inválidos na raiz!⚡ Índices: O Atalho
- Sem Índice: Busca sequencial (lento) 🐢
- Com Índice: Busca binária/B-Tree (rápido) 🐇
⚖️ Prós e Contras dos Índices
- Pró: Leituras instantâneas
- Contra: Deixa o
INSERTum pouco mais pesado - Regra: Indexe colunas muito usadas no
WHERE.
🔨 Alterando a Tabela (ALTER)
- Mudar nome da coluna
- Mudar tipo de dado
- Adicionar ou remover restrições
🔥 Destruindo com Segurança (DROP)
- Cuidado: Isso apaga a tabela E os dados dela! 🛑 - UseDROP TABLE IF EXISTS para scripts mais seguros.
🧹 Limpeza Rápida (TRUNCATE)
- Quer limpar a tabela sem apagar a estrutura?
- Muito mais rápido que
DELETE FROM logs.
💻 Visualizando no pgAdmin
- Query Tool: Onde a mágica acontece
- Dashboards: Monitorando o servidor
- ERD Tool: Gerador de diagrama a partir do código
🧬 Ciclo de Vida do Banco
- Planejar (DER)
- Criar (DDL)
- Popular (DML - Próxima aula!)
- Consultar (DQL)
🧠 Desafio Prático
- Tente criar um script SQL para:
- Tabela
Escolas - Tabela
Salas(com FK para Escolas) - Coluna
capacidadecomCHECK > 0.
🚀 Dica de Mestre
Sempre use scripts .sql para criar seus bancos.
- Facilita o deploy
- Serve como documentação
- Permite controle de versão (Git)
🏁 Resumo
- DDL define a "casa" dos dados
CREATE,ALTER,DROPsão os pilares- PKs e FKs garantem a ordem
- Índices garantem a velocidade
👋 Até a próxima aula!
Tema: Módulo II - SQL Prática (DML) ⚙️
Aula 05: DML - Manipulação de Dados ⚙️
Gerenciando Informações
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- A linguagem DML
- Inserindo registros (INSERT)
- Atualizando dados (UPDATE)
- Excluindo registros (DELETE)
- Riscos e Boas Práticas
- Inserção em Massa
🏗️ Relembrando: DDL vs DML
- DDL: Cria o "balde" (Tabela) 🪣
- DML: Coloca a "água" (Dados) 💧
- Um define a estrutura, o outro o conteúdo!
📥 Comando INSERT
Para adicionar novos registros ao banco:
- Ordem das colunas importa!🔢 O Papel do SERIAL
- Você não precisa inserir o ID manualmente
- O PostgreSQL cuida da sequência
- Menos chance de erro de duplicidade! 🆔
📦 Inserção Múltipla
Economize tempo e comandos:
INSERT INTO produtos (nome, preco)
VALUES
('Mouse', 50.00),
('Teclado', 150.00),
('Monitor', 800.00);
✏️ Comando UPDATE
Para mudar dados que já existem:
-SET: O que mudar
- WHERE: Quem mudar 🎯
⚠️ Perigo: UPDATE sem WHERE
- Resultado: Todos os funcionários agora são ricos! 💸 - Na vida real: Você pode ser demitido! 😅🗑️ Comando DELETE
Para remover registros:
- Remove a linha inteira, não apenas uma célula!🛑 Perigo: DELETE sem WHERE
- Apaga TODA a sua tabela de pedidos. - Não há botão "Desfazer" (fora de transações). 🔥🧹 TRUNCATE vs DELETE
DELETE: Apaga linha por linha (mais lento, gera logs).TRUNCATE: Esvazia a tabela de uma vez (instantâneo). ⚡- Use
TRUNCATEpara limpar tabelas de log ou teste.
📊 Ciclo de Vida do Dado
graph LR
I[INSERT] --> D[(Database)]
D --> U[UPDATE]
U --> D
D --> Del[DELETE]
💻 Prática no pgAdmin
- Abrir Query Tool
- Digitar o comando
- Clicar no raio ⚡ ou apertar F5
- Verificar a mensagem de sucesso!
🛡️ Dicas de Segurança
- Sempre faça um
SELECTcom o seuWHEREantes de rodar oDELETE. - Se o
SELECTtrouxer os dados certos, oDELETEtambém trará. 🛡️
🚀 Desafios do DML
- Manter a integridade (FKs)
- Lidar com valores
NULL - Performance em milhões de inserts
🧩 Mini-Desafio
- Como você aumentaria o preço de todos os livros em 15%?
SET preco = preco * 1.15
🏁 Resumo
- Inserir com
INSERT - Mudar com
UPDATE(Precisa de WHERE!) - Apagar com
DELETE(Precisa de WHERE!) - Limpar com
TRUNCATE
👋 Até a próxima aula!
Tema: DQL Básico - Consultando Dados 💾
Aula 06: DQL Básico 💾
Consultando Dados
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- A linguagem DQL
- Comando SELECT
- Filtros com WHERE
- Operadores Lógicos e Matemáticos
- Ordenação (ORDER BY)
- Boas Práticas de Performance
🔍 O que é DQL?
- Data Query Language
- Foco em RECUPERAR dados
- O comando mais usado:
SELECT🔎
📽️ Projeção: O que ver?
- Escolhemos quais colunas a TV (resultado) vai mostrar.🎬 Seleção: Quem ver?
- OWHERE é o nosso controle remoto.
- Ele filtra as linhas que desejamos. 🎯
🎯 Operadores de Filtro
=: Igual<>ou!=: Diferente>e<: Maior/MenorBETWEEN: Entre valores 📏IN: Em uma lista 🧺
📝 Busca por Padrão (LIKE)
%: Qualquer coisa!LIKE 'Ri%': Começa com Ri (Ricardo, Rio...) 🇧🇷LIKE '%gmail.com': Termina com gmail.ILIKE: Busca sem diferenciar Maiúsculas/Minúsculas (PostgreSQL).
📶 Ordenando o Caos
- UseDESC para o contrário (Z-A ou Maior->Menor).
- Pode ordenar por mais de uma coluna!
💎 Valores Únicos (DISTINCT)
- Se 10 clientes moram em SP, aparecerá "SP" apenas uma vez no resultado.📊 Arquitetura do SELECT
graph TD
S[SELECT] --> F[FROM]
F --> W[WHERE]
W --> O[ORDER BY]
O --> L[LIMIT]
🛑 O perigo do SELECT *
- Traz dados que você não vai usar
- Deixa a rede lenta
- Pior inimigo da performance em larga escala! 🐢
- Dica: Liste as colunas!
💻 Prática no pgAdmin
- Escrever o SQL
- F5 para rodar
- Olhar a aba "Data Output"
- Verificar o tempo de execução (milisegundos)
🧪 Combinando tudo
SELECT nome, preco
FROM produtos
WHERE categoria = 'Livros'
AND preco BETWEEN 20 AND 50
ORDER BY preco DESC;
🔢 Limitando Resultados (LIMIT)
- Quer apenas os 10 primeiros?
- Essencial para criar páginas no site (Paginação). 📄
🏁 Resumo
SELECTé para lerWHEREé para filtrarORDER BYé para organizarDISTINCTlimpa repetidosLIMITcontrola o volume
👋 Até a próxima aula!
Tema: Consultas Avançadas e Agregações 🧪
Aula 07: Consultas Avançadas e Agregações 🧪
O Poder dos Relatórios
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Funções de Agregação (Stats)
- Apelidos com AS
- Agrupamento (GROUP BY)
- Filtro de Grupos (HAVING)
- Consultas Dinâmicas
🧮 Funções de Agregação
Servem para resumir grandes volumes de dados:
- COUNT(): Contar 🔢
- SUM(): Somar 💰
- AVG(): Média 📈
- MIN() e MAX(): Extremos 📉
🔢 Contando com COUNT
- Quantas linhas no total? - UseCOUNT(DISTINCT cidade) para valores únicos.
💰 Somando com SUM
- Muito usado para faturamento, estoque e pontos. - OAS deixa o resultado bonitinho!
📈 Média com AVG
- Útil para KPIs e indicadores de performance.🧱 O Poder do GROUP BY
Você quer saber a média por disciplina?
- Divide a tabela em "baldes" antes de calcular.🎯 Filtrando com HAVING
O WHERE não funciona com funções de agregação!
-- Errado: WHERE AVG(nota) > 7
SELECT disciplina, AVG(nota)
FROM provas
GROUP BY disciplina
HAVING AVG(nota) > 7;
HAVING é o WHERE dos grupos! 🎯
🏷️ Apelidos (ALIAS)
Não deixe suas colunas com nomes como avg_1.
📊 Ordem de Execução do SQL
FROM: De onde vem?WHERE: Quem sai?GROUP BY: Como agrupa?HAVING: Qual grupo sai?SELECT: O que mostra?ORDER BY: Qual a ordem?
📉 Visualizando o Fluxo
graph TD
A[Dados] --> B[Filtrar Linhas]
B --> C[Agrupar]
C --> D[Calcular Média/Soma]
D --> E[Filtrar Grupos]
E --> F[Mostrar Resultado]
💻 Prática no pgAdmin
- Tente criar um ranking de vendas por categoria.
- Qual categoria é a campeã da sua loja? 🏆
🚀 Dica de Performance
- Agregações em tabelas de milhões de linhas podem ser lentas.
- Considere criar tabelas de "Resumo" ou usar Índices. ⚡
🏁 Resumo
- Agregações resumem dados
GROUP BYé o motor dos relatóriosHAVINGfiltra o que já foi calculadoASorganiza a exibição
👋 Até a próxima aula!
Tema: JOINs - Unindo Tabelas 🔗
Aula 08: JOINs - Junções 🔗
Conectando os Pontos
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Por que unir tabelas?
- INNER JOIN (O feijão com arroz)
- LEFT e RIGHT JOIN (Prioridades)
- FULL e CROSS JOIN
- A importância da cláusula ON
- Aliases para tabelas
🤝 Por que JOINs?
- Bancos de Dados são Relacionais
- Os dados estão em "caixas" diferentes
- Precisamos da "ponte" para ver a foto completa! 📸
🎯 INNER JOIN
- O mais comum de todos.
- Retorna apenas onde há combinação nos dois lados.
📽️ Visualizando: INNER JOIN
graph TD
A[Tabela A] --- I((Interseção))
I --- B[Tabela B]
- Se o cliente não tem pedido, ele não aparece.
- Se o pedido não tem cliente, ele não aparece.
⬅️ LEFT JOIN
- Quer ver TUDO da primeira tabela?
- Mesmo que não haja par na segunda?
- Use o LEFT JOIN!
➡️ RIGHT JOIN
- Exatamente o oposto do Left.
- Prioriza quem está na Direita (a segunda tabela).
- Traz todos os pedidos, mesmo que o cliente tenha sido apagado.
🌐 FULL OUTER JOIN
- O "pacotão" completo.
- Traz tudo da esquerda e tudo da direita.
- Onde não houver par -> Preenche com
NULL.
❌ CROSS JOIN
- Perigoso! 🛑
- Combina cada linha de A com cada linha de B.
- Tabela A (10 linhas) x Tabela B (10 linhas) = 100 linhas no resultado.
🏷️ Aliases de Tabela
Não sofra escrevendo nomes gigantes.
- Atalhos que salvam vidas (e dedos)! ⌨️🔗 Unindo 3 ou Mais Tabelas
- Basta ir "pendurando" mais JOINs.
💻 Prática no pgAdmin
- Vamos descobrir quais alunos estão sem turmas.
- Qual tipo de JOIN usaríamos?
- LEFT JOIN entre Alunos e Turmas! 🎓
🚀 Dica Pro: Filtrando JOINs
- Você pode usar
WHEREnormalmente após os JOINs.
🏁 Resumo
- JOIN une o que está separado
INNER: InterseçãoLEFT: Prioridade EsquerdaRIGHT: Prioridade DireitaON: Onde elas se ligam
👋 Até a próxima aula!
Tema: Transações e Integridade ACID 🔑
Aula 09: Transações e ACID 🔑
Segurança e Integridade
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- O que é uma Transação?
- O ciclo: BEGIN, COMMIT, ROLLBACK
- Propriedades ACID (O Coração do SGBD)
- Savepoints
- Exemplos do Mundo Real
🛡️ O que é uma Transação?
- Uma "viagem" de dados que deve chegar ao fim.
- Ou chegamos ao destino, ou voltamos para casa!
- Ex: Pagamento via PIX 💸
🕹️ Comandos de Controle
BEGIN: "Ligar o motor" 🗝️COMMIT: "Confirmar chegada" (Salvar) ✅ROLLBACK: "Voltar para o início" (Desfazer) 🔙
🏧 Exemplo: Transferência
BEGIN;- Subtrai R$ 100 de Ciclano;
- Adiciona R$ 100 a Beltrano;
- Se der erro ->
ROLLBACK; - Se ok ->
COMMIT.
💎 Propriedades ACID
As 4 regras que definem um banco confiável: 1. Atomicidade 2. Consistência 3. Isolamento 4. Durabilidade
⚛️ A - Atomicidade
- A transação é um átomo: indivisível.
- Tudo acontece ou nada acontece.
- Sem meio-termo!
⚖️ C - Consistência
- O banco nunca aceita dados que quebrem as regras.
- Ex: Não deixa criar um pedido para um cliente que não existe.
- O banco é sempre um lugar organizado. 🏛️
🔒 I - Isolamento
- Transações simultâneas não se "atropelam".
- O resultado de duas transações ao mesmo tempo é o mesmo de uma após a outra.
💾 D - Durabilidade
- Uma vez feito o
COMMIT, os dados estão no disco. - Pode acabar a luz, o servidor reiniciar... os dados estarão lá! 🔋
📍 Savepoint: Pontos de Apoio
- Quer desfazer apenas uma parte?
📊 Fluxo de Decisão
graph TD
Start[Começo] --> Work[Múltiplos Comandos]
Work --> Check{Sucesso?}
Check -- Sim --> Save[COMMIT]
Check -- Não --> Undo[ROLLBACK]
🛑 Transações Implícitas
- No PostgreSQL, cada comando
INSERT/UPDATE/DELETEsozinho é uma transação automática. - Para unir vários, você deve usar o
BEGINmanual. 🤝
💻 Prática no pgAdmin
- Vamos simular uma falha de sistema.
- Deletar dados e dar ROLLBACK.
- O alívio de ver os dados voltando! 😮💨
🚀 Dica de Especialista
- Mantenha transações curtas.
- Transações abertas por muito tempo podem travar o banco para outros usuários (Lock). 🔐
🏁 Resumo
- Transações protegem seus dados
- ACID garante a confiabilidade
- COMMIT salva, ROLLBACK desfaz
- Atomicidade é o "Tudo ou Nada"
👋 Até a próxima aula!
Tema: Projeto Parcial - Sistema Relacional 🔐
Aula 10: Projeto Parcial Relacional 🔐
Concluindo o Módulo II
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos fazer hoje?
- Revisão Geral (DDL, DML, DQL)
- Integração de Conceitos
- O Grande Script do E-commerce
- Auditoria e Segurança
- Preparação para o Módulo III (NoSQL)
🏗️ Passo 1: Estrutura (DDL)
- Criar Tabelas
- Definir PKs e FKs
- Aplicar CHECKs e NOT NULLs
- Criar Índices de performance
📥 Passo 2: Dados (DML)
- Inserir Clientes
- Inserir Produtos
- Gerar Pedidos
- Simular Vendas
🔎 Passo 3: Consultas (DQL)
- Unir tabelas com JOINs
- Agrupar com GROUP BY
- Filtrar grupos com HAVING
- Ordenar relatórios
🔑 Passo 4: Segurança (ACID)
- Usar Transações (BEGIN/COMMIT)
- Testar Rollbacks em falhas simuladas
- Garantir a integridade entre Estoque e Pedido
📊 O Esquema Completo
erDiagram
CATEGORIA ||--o{ PRODUTO : "contém"
PRODUTO ||--o{ ITEM_PEDIDO : "inclui"
PEDIDO ||--o{ ITEM_PEDIDO : "possui"
CLIENTE ||--o{ PEDIDO : "compra"
💻 Mão na Massa!
- Objetivo: Um script
.sqlúnico que cria e popula todo o ecossistema. - É o seu primeiro grande degrau como DBA! 🪜
🧪 Relatórios de Auditoria
- Quais produtos estão sem estoque?
- Qual cliente gastou mais no mês?
- Existe algum pedido sem item? (Auditoria de erro)
🚀 Desafio de Otimização
- Adicione um Índice na data do pedido.
- Veja a diferença de tempo no
EXPLAIN ANALYZE. ⚡
🏁 Resumo do Módulo II
- Aprendemos a criar estruturas sólidas.
- Dominamos a manipulação de dados.
- Criamos relatórios de nível profissional.
- Entendemos a segurança transacional.
👋 Parabéns!
Você concluiu a jornada Relacional.
Próxima parada: O mundo NoSQL com MongoDB! 🌐
Aula 11: Introdução ao NoSQL 🌐
Além das Tabelas
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- A revolução NoSQL
- SQL vs NoSQL
- Tipos de bancos não-relacionais
- Vantagens e Casos de Uso
- O Modelo de Documento
- Teorema CAP
🧩 O que é NoSQL?
- "Not Only SQL"
- Flexibilidade total de dados
- Escalabilidade Massiva 🌍
- Fim da rigidez das tabelas
🏗️ Por que mudar?
- Big Data: Volume gigante de dados
- Agilidade: Mudanças rápidas no código
- Nuvem: Facilidade de distribuir servidores
- Performance: Leituras ultrarrápidas
⚔️ SQL vs NoSQL
- SQL = Tabela, Relacional, Rígido 🏛️
- NoSQL = Documento, Flexível, Elástico 🍃
- Um é melhor que o outro? Depende do problema!
📚 As 4 Famílias NoSQL
- Documento: (MongoDB) - JSON/BSON
- Chave-Valor: (Redis) - Dicionário
- Colunas: (Cassandra) - Dados esparsos
- Grafos: (Neo4j) - Redes e Conexões
🍃 Foco: MongoDB
- O banco NoSQL mais popular do mundo.
- Baseado em Documentos.
- Coleções em vez de Tabelas.
- Sem JOINs obrigatórios! 🚫🔗
📦 O Documento (Exemplo)
- Se amanhã quiser adicionar "idade", basta inserir!📉 Escalabilidade Horizontal
- SQL: Comprar um servidor mais caro (Vertical). 🏠 -> 🏰
- NoSQL: Comprar vários servidores baratos (Horizontal). 🏠 -> 🏠🏠🏠
- Muito mais barato para escalas gigantes.
📐 Teorema CAP
Em sistemas distribuídos, escolha apenas 2: 1. Consistência: Dados iguais em todo lugar. 2. Availabilidade: Sempre respondendo. 3. Partição: Funciona com queda de rede.
📊 Visualizando o Teorema
graph TD
CA[Relacionais Tradicionais] --- AP[NoSQL focados em uptime]
AP --- CP[NoSQL focados em dados exatos]
CP --- CA
🤝 Relacionamento?
- No SQL: Usamos JOIN em tabelas separadas.
- No NoSQL: Aninhamos (Embed) os dados.
- O Pedido já contém o Cliente dentro dele! 📦
💻 Prática: O pensamento JSON
- Como seria o JSON de um Carrinho de Compras?
- Lista de produtos dentro de um único objeto.
- Muito mais natural para o Programador. 👩💻
🚀 Onde usar NoSQL?
- Redes Sociais
- Catálogos de E-commerce
- Jogos Online
- Logs e Telemetria (IOT)
- Cache de Alta Velocidade
🏁 Resumo
- NoSQL não é "Sem SQL", é "Além do SQL".
- MongoDB é focado em documentos flexíveis.
- Escalabilidade horizontal é a chave da nuvem.
- Teorema CAP define as regras do jogo.
👋 Até a próxima aula!
Tema: Mão na massa com MongoDB e CRUD 🍃
Aula 12: Mão na Massa com MongoDB 🍃
Instalando e Criando
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Preparação: Atlas vs Local
- Ferramentas: mongosh e Compass
- Vocabulário NoSQL
- Operações de Escrita (Create)
- Operações de Busca (Read)
- Atualização e Exclusão (Update/Delete)
🛠️ Onde rodar o MongoDB?
- Local: Na sua máquina (Performance máxima).
- Cloud (Atlas): Na nuvem (Praticidade/Equipe). 🏗️
- Dica: Comece pelo Compass para ver os dados!
🗣️ Traduzindo o Dialeto
- Tabela? -> Coleção 📂
- Linha? -> Documento 📄
- Coluna? -> Campo (Field) 🏷️
✍️ Criando Dados (Create)
- O banco cria a coleção na hora se não existir! ✨🔎 Buscando Dados (Read)
- Use.pretty() no terminal para ficar legível.
- Use .count() para saber quantos tem.
🎯 Filtros Inteligentes
$gt: Maior que (> )$lt: Menor que (< )$in: Está na lista 🧺$or: Uma coisa ou outra 🔀
🔄 Atualizando (Update)
- Atenção: Sem o$set, você substitui o documento inteiro! 🛑
🗑️ Deletando (Delete)
- Rápido e direto. -deleteMany({}) limpa tudo! (Use com cautela). 🧨
📊 Arquitetura do Documento
graph LR
ID[_id: ObjectId] --> N[Nome: String]
ID --> I[Idade: Int]
ID --> A[Ativo: Boolean]
💻 Prática no Compass
- Conectar na URL (localhost ou srv).
- Criar Banco e Coleção.
- Importar um JSON de teste.
- Fazer buscas visuais.
🚀 Dica de Ouro: Bulk Insert
- Vai inserir 1.000 itens?
- Use
insertMany([...]). - Muito mais rápido que 1.000
insertOne. ⚡
🏁 Resumo
- CRUD é o motor da aplicação.
- MongoDB é simples: chave/valor no JSON.
- Operadores começam com
$. - O banco é flexível, mas exige responsabilidade.
👋 Até a próxima aula!
Tema: Estratégias de Modelagem NoSQL 🏗️
Aula 13: Modelagem NoSQL 🏗️
Aninhar ou Referenciar?
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- A estratégia NoSQL
- O fim do JOIN obrigatório
- Embedding (Aninhamento)
- Referencing (Referência)
- O Limite de 16MB
- Casos de Uso Práticos
🚫🔗 O Fim do JOIN?
- No SQL: Dados espalhados = Muitos JOINs 🚗---🚕
- No NoSQL: Dados juntos = Velocidade Máxima 🏎️
- Dica: Desenhe o banco pensando na tela do App!
📦 Estratégia 1: Aninhamento
- Colocar o "filho" dentro do "pai".
USUARIOcontémENDEREÇOS.- Vantagem: Uma busca = Tudo na mão! ✅
- Risco: Dados duplicados.
🔗 Estratégia 2: Referência
- Guardar apenas o link (
_id). CATEGORIAreferenciaPRODUTOS.- Vantagem: Sem redundância. ✅
- Risco: Precisa de mais de uma consulta ao banco. 🐢
⚖️ A Grande Decisão
- 1 para 1? -> Aninha
- 1 para Poucos? -> Aninha
- 1 para Muitos/Infinitos? -> Referencia
- Dados mudam pouco? -> Aninha
- Dados mudam muito? -> Referencia
🛑 O Limite de 16MB
- Um documento não pode ser um PDF gigante.
- Se a lista aninhada cresce sem parar, você vai bater no teto.
- Solução: Mova para Referência! 🧱
📊 Visualizando Estruturas
graph TD
A[Post Blog] --> B{Possui?}
B -->|Autor| C[Referência]
B -->|Tags| D[Aninhado]
B -->|Comentários| E[Aninhado/Referência]
🧬 Padrão Híbrido
- O melhor dos dois mundos.
- Guardo o ID (Referência) + Nome do Autor (Aninhado).
- Exibo a lista de posts sem precisar buscar os autores! 😎
💻 Prática: Modelando um E-commerce
Como guardar: - Dados do cliente? - Itens do pedido? - Status de entrega? - Vamos discutir a melhor estratégia para cada um. 🛒
🚀 Desafio do Design
Modele o JSON de um Professor que contém uma lista das turmas que ele leciona. - Lembre-se: Um professor pode ter 5 a 10 turmas. Escolha a melhor forma!
🏁 Resumo
- NoSQL é flexível, mas exige inteligência.
- Aninhamento = Velocidade.
- Referência = Organização.
- Pense na leitura, não na escrita.
👋 Até a próxima aula!
Tema: Consultas e Agregações no MongoDB 🧪
Aula 14: Consultas Avançadas 🧪
O Poder da Agregação
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- Aggregation Framework
- O conceito de Pipeline
- Estágios: $match, $group, $sort
- Projeção com $project
- Unindo Coleções com $lookup
- Performance de Consultas
⚙️ A Linha de Montagem
- Imagine uma fábrica.
- O dado bruto entra de um lado...
- Passa por várias máquinas (estágios)...
- Sai como um relatório pronto do outro! 🏭
🏗️ O Pipeline
db.vendas.aggregate([
{ $match: { ano: 2024 } },
{ $group: { _id: "$produto", total: { $sum: "$qtd" } } }
]);
{} é uma estação de trabalho.
🎯 Estágio: $match
- É o filtro. Seleciona quem entra no pipeline.
- Semelhante ao
WHEREdo SQL. 🎯
🧱 Estágio: $group
- Agrupa documentos por um campo comum (
_id). - Realiza cálculos:
$sum,$avg,$max,$min. - O coração dos relatórios gerenciais! 📊
🎥 Estágio: $project
- Molda o documento final.
1= Mostrar.0= Esconder.- Útil para renomear campos ou remover o
_id.
📶 Estágio: $sort e $limit
$sort: { valor: -1 }-> Do maior para o menor.$limit: 5-> Só os 5 primeiros.- Essencial para rankings (Top 10). 🏆
🔗 Estágio: $lookup
- O "JOIN" do NoSQL. 🔗
- Busca dados em outra coleção e traz como um array aninhado.
- Ex: Trazer o nome do autor para dentro do post.
📊 Arquitetura da Agregação
graph TD
Data[(Coleção)] --> M[$match]
M --> G[$group]
G --> P[$project]
P --> S[$sort]
S --> R[Resultado]
⚡ Performance: Índices
- Agregações podem ser pesadas.
- Sempre crie índices nos campos usados no
$match. db.vendas.createIndex({ ano: 1 })🏎️
💻 Prática no Compass (Aggregations)
- O Compass tem um construtor de pipelines visual!
- Você vê o dado sendo transformado em tempo real em cada etapa. 😍
🚀 Desafio da Aula
- Crie um pipeline que mostre as 3 categorias de produtos mais caras (ticket médio) do seu banco.
🏁 Resumo
- Agregação processa dados em estágios.
$matchfiltra,$groupresume.$lookupune o que está separado.- A ordem dos estágios importa muito!
👋 Até a próxima aula!
Tema: Ecossistema Moderno e Deploy NoSQL 🚀
Aula 15: NoSQL Profissional 🚀
Ecossistema e Cloud
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O que vamos aprender hoje?
- MongoDB Atlas (Cloud)
- Estratégias de Segurança
- Arquitetura Poliglota
- Quando usar (e não usar) NoSQL
- O Futuro: IA e Vector Search
☁️ MongoDB Atlas
- O banco como serviço (DBaaS).
- Gratuito para começar (Plano M0). 🎁
- Deploy em AWS, Google Cloud ou Azure.
- Escalonamento automático!
🔐 Segurança em Primeiro Lugar
- Encryption: Dados cifrados no disco.
- Whitelist: Apenas SEU servidor entra.
- Principled Access: Senhas fortes e acessos limitados. 🛡️
🏗️ Persistência Poliglota
"Nem só de documentos vive o homem". - SQL: Para o que é rígido e transacional. 🏦 - NoSQL: Para o que é flexível e massivo. 🌬️ - Redis: Para o que é instantâneo. ⚡
📈 Escalabilidade Horizontal
- O grande trunfo do NoSQL.
- Dividir para conquistar: Sharding.
- Milhares de servidores trabalhando como um só. 🤝
🤖 MongoDB + IA
- Busca Vetorial (Vector Search).
- Alimente suas LLMs com dados do MongoDB.
- Recomendação por similaridade.
- O futuro já chegou! 🌌
📉 Visualizando a Arquitetura
graph LR
App[Aplicativo Mobile] --> API[Backend API]
API --> SQL[(PostgreSQL)]
API --> NoSQL[(MongoDB Atlas)]
API --> Cache[(Redis)]
💻 Prática: Setup na Nuvem
- Criar cluster no Atlas.
- Configurar usuário de banco.
- Liberar IP.
- Conectar no Compass. 🔗
🚀 Quando dizer NÃO ao NoSQL
- Precisa de integridade relacional absoluta? (SQL)
- Esquema de dados fixo e simples? (SQL)
- Equipe só domina SQL e o projeto é pequeno? (SQL)
🏁 Resumo
- NoSQL é uma ferramenta, não uma religião.
- Cloud facilita a vida do Dev.
- Segurança não é opcional.
- O ecossistema moderno é híbrido.
👋 Até a Aula Final!
Tema: O Grande Projeto Integrador 🎓
Aula 16: O Grande Projeto Final 🎓
Mestre dos Dados
Ricardo Pires
Bancos de Dados SQL e NoSQL
🎯 O Grande Dia!
- Chegamos ao fim da jornada.
- Hoje você integra tudo o que aprendeu.
- De Tabelas SQL a Documentos NoSQL.
- O desafio de um Arquiteto de Dados real.
🦸♂️ O Projeto OmniStore
- Uma loja global.
- SQL: Para compras e estoque. 💰
- NoSQL: Para logs e catálogo flexível. 🍃
- O objetivo é a PERFORMANCE e a SEGURANÇA.
📋 Requisitos SQL
- Modelagem: 3ª Forma Normal.
- Consultas: Relatórios complexos (JOINs).
- Integridade: Restrições e Chaves.
- Transações: Segurança financeira. ✅
🍃 Requisitos NoSQL
- Foco: Dados desestruturados.
- Modelagem: Aninhamento estratégico.
- Poder: Pipeline de Agregação.
- Escala: Atlas (Nuvem). ✅
📊 A Arquitetura Integrada
graph TD
App[Aplicativo] --> API[Backend Server]
API -- "Transacional" --> SQL[(PostgreSQL)]
API -- "Flexível" --> NoSQL[(MongoDB)]
✨ Dicas de Super-Dev
- Qualidade: Código limpo e comentado.
- Visual: Use o Mermaid para seus diagramas.
- Narrativa: Explique suas decisões no README.
- Portfolio: Poste esse projeto no seu GitHub! 🐙
📚 E agora? Para onde ir?
- Engenharia de Dados (ETL) 🚀
- Ciência de Dados e IA (Python) 🤖
- Arquitetura de Nuvem (AWS/GCP) ☁️
- Big Data (Cluster Computing) 📈
🎓 Conclusão do Curso
- Você não é mais um "copiador de código".
- Você entende a lógica dos dados.
- O mercado te espera com grandes desafios (e salários). 🤝
🌟 Mensagem Final
- Nunca pare de buscar dados.
- Nunca pare de questionar a estrutura.
- O dado é a alma da computação.
👋 Parabéns, Mestre!
Foi uma honra caminhar com você.
Até o próximo curso! 🚀🚀🚀
Projetos
Projetos de Fixação 🚀
Nesta seção, você encontrará os mini-projetos práticos para cada aula do curso. O objetivo é aplicar os conceitos teóricos imediatamente em cenários reais.
🛠️ Módulo I: Fundamentos (Aulas 01-04)
- Projeto 01: Lab de Instalação e pgAdmin 🐘
- Projeto 02: Modelagem de Pequeno Sistema 🏗️
- Projeto 03: Normalização de Planilhas 📡
- Projeto 04: Script DDL de Criação 🧱
⚙️ Módulo II: SQL na Prática (Aulas 05-10)
- Projeto 05: Inserção de Dados Reais ⚙️
- Projeto 06: Consultas e Filtros 💾
- Projeto 07: Relatórios de Agregação 🧪
- Projeto 08: Consultas Multi-tabelas 🚢
- Projeto 09: Simulação de Transações Bancárias 🔑
- Projeto 10: Sistema Relacional Parcial 🔐
🍃 Módulo III: NoSQL (Aulas 11-15)
- Projeto 11: Comparativo Relacional vs NoSQL 🌐
- Projeto 12: Operações CRUD no MongoDB 🍃
- Projeto 13: Modelagem de Documentos 🧱
- Projeto 14: Pipelines de Agregação 🔄
- Projeto 15: Deploy e Segurança na Nuvem 🛣️
🎓 Encerramento
Projeto 01: Lab de Instalação e pgAdmin 🐘
Objetivo: Garantir que o ambiente de desenvolvimento esteja 100% funcional.
🚀 Tarefas
- Instalação: Siga o Setup 01 para instalar o PostgreSQL.
- Conexão: Abra o pgAdmin 4 e crie uma conexão com o servidor local (
localhost). - Terminal: Use o comando
psql -U postgresno seu prompt para verificar a versão instalada. - Primeiro Comando: Crie um banco de dados de teste chamado
laboratorio_01.
✅ Critérios de Entrega
- Screenshot do pgAdmin mostrando o servidor conectado.
- Screenshot do terminal com a versão do PostgreSQL.
Projeto 02: Modelagem de um Sistema de Escola 🏗️
Objetivo: Criar o Diagrama Entidade-Relacionamento (DER) para um cenário real.
📝 Cenário
Você foi contratado para modelar o banco de dados de uma escola. O sistema deve armazenar: * Alunos: Nome, Matrícula, Data de Nascimento. * Turmas: Nome da Turma (ex: ADS 1A), Sala. * Professores: Nome, Especialidade.
Regras: 1. Um aluno pertence a uma única turma. 2. Uma turma pode ter vários alunos. 3. Um professor pode dar aula para várias turmas.
🚀 Tarefas
- Identifique as Entidades e Atributos.
- Defina as Chaves Primárias.
- Desenhe o diagrama usando dbdiagram.io ou Mermaid.
✅ Critérios de Entrega
- O link ou imagem do diagrama DER completo.
Projeto 03: Normalização de Planilhas 📡
Objetivo: Transformar dados brutos e redundantes em uma estrutura relacional limpa.
📝 O Desafio
Abaixo está uma linha de uma planilha de "Histórico de Vendas":
Venda_ID, Cliente_Nome, Cliente_Telefone, Data_Venda, Produtos_Lista (ex: Camisa, Calça, Meia), Valor_Total
🚀 Tarefas
- Identifique as violações da 1FN (Valores atômicos).
- Separe os dados em pelo menos 3 tabelas (ex: Clientes, Vendas, Itens_Venda).
- Garanta que não haja redundância de nomes de clientes ou preços de produtos.
✅ Critérios de Entrega
- Lista das tabelas criadas com suas colunas e tipos.
- Justificativa de qual Forma Normal foi aplicada em cada etapa.
Projeto 04: Script DDL de Criação 🧱
Objetivo: Transformar o seu modelo de dados em código SQL executável.
🚀 Tarefas
- Abra o Query Tool no pgAdmin.
- Escreva o script
CREATE TABLEpara o sistema de Escola planejado no Projeto 02. - Inclua:
- Chaves Primárias (
SERIAL). - Chaves Estrangeiras (
REFERENCES). - Restrições
NOT NULLeUNIQUE.
- Chaves Primárias (
- Crie um Índice para a coluna "Nome do Aluno".
✅ Critérios de Entrega
- O arquivo
.sqlcontendo todos os comandos de criação. - Print da aba "Tables" do pgAdmin mostrando as tabelas criadas.
Projeto 05 - Layouts e Unidades 🎨
Objetivo: Praticar a construção de interfaces complexas com diferentes ViewGroups.
O Desafio
Crie uma tela de "Detalhes de Produto" (tipo e-commerce) contendo:
1. LinearLayout (Vertical) para a estrutura principal.
2. ImageView no topo para a foto do produto.
3. ConstraintLayout para a área de informações (nome do produto à esquerda, preço à direita, ambos alinhados).
4. Botão de "Comprar" ocupando a largura total na parte inferior.
5. Use dp para margens (mínimo 16dp) e sp para o título do produto.
Dica
Teste o seu layout em diferentes tamanhos de tela no emulador ou no Preview do Android Studio.
Projeto 06: Consultas e Filtros 💾
Objetivo: Transformar perguntas do negócio em comandos SQL SELECT eficientes.
📝 O Desafio
O dono da loja precisa de algumas informações estratégicas para a Black Friday. Utilize sua tabela de produtos (ou crie uma com pelo menos 10 itens) para responder às perguntas.
🚀 Tarefas
Escreve os comandos SQL para: 1. Relatório de Estoque Baixo: Selecionar nome e estoque de produtos com menos de 5 itens. 2. Vitrine de Ofertas: Selecionar todos os produtos que custam entre R$ 50,00 e R$ 200,00. 3. Busca por Marca: Selecionar todos os produtos que tenham "Samsung" ou "Apple" no nome. 4. Organização por Preço: Listar todos os produtos da categoria 'Eletrônicos', do mais caro para o mais barato. 5. Lista Única: Quais categorias diferentes existem cadastradas no seu banco?
✅ Critérios de Entrega
- O script
.sqlcom os 5 comandos comentados. - Screenshot dos resultados no pgAdmin.
Projeto 07: Relatórios de Agregação 🧪
Objetivo: Criar uma suíte de relatórios estatísticos usando funções de agregação e agrupamento.
📝 O Desafio
Imagine que você trabalha no setor de análise de uma rede de farmácias. Você precisa extrair os seguintes indicadores do banco de dados.
🚀 Tarefas
Escreva os comandos SQL para: 1. Faturamento Total: Qual a soma de todos os valores de vendas registrados? 2. Média de Preços: Qual o preço médio dos medicamentos por categoria? 3. Contagem de Clientes: Quantos clientes cadastrados existem em cada cidade? 4. Ranking de Vendas: Quais são os 3 vendedores que mais realizaram vendas (em quantidade)? 5. Filtro de Qualidade: Liste apenas as cidades que possuem mais de 500 clientes cadastrados.
✅ Critérios de Entrega
- O script
.sqlcom as consultas numeradas. - Uso obrigatório de
ASpara nomear as colunas de resultado. - Screenshot dos resultados no pgAdmin.
Projeto 08: Consultas Multi-tabelas (JOINs) 🚢
Objetivo: Relacionar dados de diferentes partes do banco para gerar relatórios consolidados.
📝 O Desafio
Você precisa criar o relatório de fechamento de um sistema de E-commerce. O banco possui as tabelas: clientes, pedidos e vendedores.
🚀 Tarefas
Escreva o script SQL que resolva:
1. Relatório de Pedidos: Listar o ID do pedido, a data e o Nome do Cliente que fez a compra.
2. Lista de Vendedores Ativos: Listar o nome de todos os vendedores e o ID dos pedidos que eles realizaram (mesmo que um vendedor ainda não tenha feito nenhuma venda).
3. Relatório Completo: Unir Clientes e Pedidos para mostrar apenas quem já comprou pelo menos uma vez.
4. Clientes Sem Pedidos: Descobrir o nome dos clientes que ainda não realizaram nenhuma compra (Dica: Use LEFT JOIN e WHERE ... IS NULL).
✅ Critérios de Entrega
- Uso de aliases (
AS) para as tabelas. - Script
.sqllimpo e comentado. - Screenshot dos resultados no pgAdmin.
Projeto 09: Simulação de Transações Bancárias 🔑
Objetivo: Implementar o controle de transações para garantir a consistência de dados em operações financeiras.
📝 O Desafio
Você deve simular o sistema de transferências de um banco digital. Existem duas tabelas: contas (id, cliente, saldo) e historico_transferencias (id, origem_id, destino_id, valor, data).
🚀 Tarefas
Escreve o script SQL para realizar uma transferência de R$ 300,00 de "Ana" para "Bia":
1. Inicie a transação (BEGIN).
2. Verifique se Ana tem saldo (apenas via comentário ou lógica simples).
3. Subtraia o valor da conta da Ana.
4. Adicione o valor na conta da Bia.
5. Insira o registro no histórico.
6. Simulação de Falha: Imagine que o sistema de histórico caiu. Execute um ROLLBACK e verifique os saldos.
7. Finalização: Repita o processo, mas finalize com COMMIT.
✅ Critérios de Entrega
- O script
.sqlcontendo os dois blocos (o que falha e o que funciona). - Print do saldo das contas antes e depois de cada operação.
Projeto 10: Sistema Relacional Parcial 🔐
Objetivo: Construir do zero um ecossistema de banco de dados para um E-commerce, aplicando todos os comandos SQL aprendidos até aqui.
📝 O Grande Desafio: TechStore v1.0
Você recebeu a missão de criar o backend (BD) da TechStore. O sistema deve ser robusto, normalizado e rápido.
🚀 Etapas do Projeto
1. Modelagem e Criação (DDL)
- Crie as tabelas:
categorias,produtos,clientes,pedidoseitens_pedido. - Defina as chaves e os relacionamentos.
- Crie uma restrição que impeça o estoque de ser negativo.
- Crie um índice na coluna
nomeda tabelaprodutos.
2. Povoamento (DML)
- Insira pelo menos 3 categorias (Ex: Smartphones, Laptops, Acessórios).
- Insira 10 produtos variados.
- Cadastre 5 clientes.
3. Simulando uma Venda (Transação)
- Crie um script que:
- Abre uma transação.
- Registra um pedido para um cliente.
- Adiciona 2 itens a esse pedido.
- Atualiza o estoque desses 2 produtos.
- Finaliza com
COMMIT.
4. Relatórios de Gestão (DQL)
- Crie uma consulta que mostre:
Nome do Cliente,Data do PedidoeValor Total do Pedido. (Dica: Use JOIN e SUM). - Crie um ranking das categorias que mais possuem produtos cadastrados.
✅ Critérios de Entrega
- Um arquivo
techstore_completo.sqlcom todos os comandos comentados. - Diagrama E-R gerado pelo pgAdmin ou Mermaid.
- Print do resultado do relatório de faturamento por cliente.
Projeto 11: Comparativo Relacional vs NoSQL 🌐
Objetivo: Analisar criticamente as diferenças entre os modelos e converter uma estrutura relacional para o formato de documento.
📝 O Desafio
Você tem o modelo de um Blog no PostgreSQL:
* Tabela Autores (id, nome)
* Tabela Posts (id, titulo, conteudo, autor_id)
* Tabela Comentarios (id, texto, post_id)
🚀 Tarefas
- Mapeamento: Desenhe como essa estrutura ficaria em um único documento JSON no MongoDB (utilizando aninhamento).
- Análise de Vantagens: Liste 3 vantagens de usar o MongoDB para este cenário de Blog.
- Análise de Riscos: Liste 2 riscos de segurança ou integridade que o MongoDB traz em comparação ao PostgreSQL.
✅ Critérios de Entrega
- O código JSON formatado do post com seus comentários e autor.
- Um pequeno texto (bullet points) comparativo.
Projeto 12: O Grande Inventário NoSQL 🍃
Objetivo: Aplicar os comandos de CRUD no MongoDB para gerenciar um catálogo de produtos flexível.
📝 O Desafio
Você está criando o sistema de estoque para uma loja de variedades que vende desde eletrônicos até roupas. Como os produtos são muito diferentes, você escolheu o MongoDB.
🚀 Tarefas
- Criação: Crie um banco chamado
loja_nosqle uma coleçãoestoque. - Inserção Variada: Insira 3 documentos com campos diferentes:
- Um Smartphone (com campos de bateria e memória).
- Uma Camisa (com campos de tamanho e tecido).
- Um Livro (com campos de autor e páginas).
- Busca Filtrada: Escreva o comando para localizar todos os produtos que custam acima de R$ 100,00.
- Atualização Geral: Adicione um campo
loja: "Sede Principal"em todos os produtos do estoque. - Exclusão: Delete o produto que possui o menor estoque.
✅ Critérios de Entrega
- Um arquivo
.jscom os comandos usados no mongosh. - Screenshot do MongoDB Compass mostrando os documentos inseridos.
Projeto 13: Arquitetando o Banco de um App de Música 🏗️
Objetivo: Aplicar padrões de modelagem NoSQL para um cenário real de streaming de música.
📝 O Desafio
Você foi contratado para desenhar o banco de dados de um novo "Spotify". Você precisa decidir como armazenar as informações para que o app seja veloz.
🚀 Tarefas
- Modelagem de Playlist: Desenhe o JSON de uma
Playlist. Ela deve conter o nome, o autor e uma lista das 10 primeiras músicas (nome e duração). Você vai usar Aninhamento ou Referência para as músicas totais da playlist? - Modelagem de Artista: Como guardar a biografia e a lista de álbuns?
- Justificativa: Escreva um pequeno parágrafo explicando por que você escolheu aninhamento para as músicas da playlist (ou por que não escolheu).
- Criação no MongoDB: Execute os comandos
insertOneno mongosh para criar um exemplo real das coleçõesartistaseplaylists.
✅ Critérios de Entrega
- O desenho dos 2 esquemas JSON.
- O script
.jscom as inserções. - Explicação técnica da escolha da estratégia.
Projeto 14: Relatórios Analíticos no MongoDB 🧪
Objetivo: Utilizar o Aggregation Framework para gerar inteligência de negócio a partir de dados brutos.
📝 O Desafio
Você tem uma coleção de vendas com os campos: cliente, produto, quantidade, valor_unitario, categoria e data.
🚀 Tarefas
Crie os pipelines de agregação para responder:
1. Faturamento por Categoria: Qual o valor total vendido em cada categoria de produtos?
2. Ticket Médio: Qual a média de valor gasto pelos clientes em suas compras?
3. Top 3 Vendedores: Quais são os 3 vendedores que mais faturaram? (Supondo que haja um campo vendedor).
4. Clientes Inativos (Desafio): Utilize o $lookup para comparar a coleção de clientes com a de vendas e encontrar quem nunca comprou nada.
✅ Critérios de Entrega
- O script
.jscom os pipelines comentados. - Uso de pelo menos 4 estágios diferentes (
$match,$group,$sort,$project). - Screenshot dos resultados no MongoDB Compass.
Projeto 15: Deploy e Segurança na Nuvem 🚀
Objetivo: Realizar o deploy de um banco de dados MongoDB na nuvem e configurar as camadas de segurança essenciais.
📝 O Desafio
Você deve levar o seu projeto "loja_nosql" da Aula 12 para o mundo real, utilizando o MongoDB Atlas.
🚀 Tarefas
- Criação do Cluster: Crie uma conta no MongoDB Atlas e configure um cluster gratuito (Plano M0).
- Segurança:
- Crie um usuário de banco com acesso de leitura e escrita.
- Adicione o seu IP atual na lista de permissões (Whitelist).
- Migração: Utilize o MongoDB Compass para exportar os dados do seu banco local e importar no cluster do Atlas.
- Teste de Conexão: Verifique se você consegue consultar os documentos na nuvem através do shell (
mongosh) ou do próprio Compass. - Relatório de Arquitetura: Escreva um pequeno texto explicando em qual provedor de nuvem (AWS, GCP ou Azure) o seu banco foi hospedado e por que a segurança por IP é necessária.
✅ Critérios de Entrega
- A
connection stringdo seu cluster (oculte a senha!). - Screenshot do painel do MongoDB Atlas mostrando o cluster ativo.
- Screenshot dos dados visualizados no Compass via conexão Atlas.
Projeto 16: Projeto Final Integrador - OmniStore 🎓
Objetivo: Integrar os mundos SQL e NoSQL para criar uma arquitetura de dados moderna, robusta e escalável para uma startup de varejo.
📝 O Desafio: OmniStore Global
A OmniStore é uma rede que vende produtos físicos e digitais em 50 países. Você foi escalado como Líder de Dados para projetar a V1.0 do sistema.
🚀 Requisitos do Projeto
Parte 1: O Núcleo Relacional (PostgreSQL)
- Modelagem: Crie as tabelas de
usuarios,pedidosepagamentos. - Segurança: Implemente uma transação que, ao registrar um pagamento, mude o status do pedido para "Pago".
- Relatório: Gere um ranking dos top 5 clientes que mais gastaram na loja.
Parte 2: O Cérebro Flexível (MongoDB)
- Modelagem: Crie a coleção
catalogo_produtos. Como cada produto tem atributos diferentes (ex: uma TV tem Polegadas, mas um Sapato tem Tamanho), use a flexibilidade do NoSQL. - Engajamento: Modele as
avaliacoes(reviews) dos produtos. Elas devem ser aninhadas ou referenciadas? Explique no código. - Agregação: Crie um pipeline que mostre a média de nota (rating) por categoria de produto.
Parte 3: Integração e Documentação
- Escreva um documento (Markdown) explicando por que você não usou apenas UM tipo de banco.
- Descreva qual o papel do MongoDB Atlas nessa arquitetura.
- Inclua links ou screenshots para os scripts SQL e comandos do MongoDB.
✅ Critérios de Avaliação
- Completude: Cumprimento de todos os requisitos técnicos.
- Qualidade: Código identado, comentado e sem erros.
- Arquitetura: Escolha correta de qual dado vai para qual banco.
- Apresentação: README.md claro e profissional no repositório.
🎓 Parabéns!
Este é o ápice do seu aprendizado. Ao terminar este projeto, você terá em mãos um portfólio de peso para apresentar em qualquer entrevista técnica! 🚀
Sobre
Sobre o Curso 🎓
Bem-vindo ao curso de Bancos de Dados SQL e NoSQL. Este programa foi desenvolvido para transformar iniciantes em profissionais capazes de lidar com diferentes arquiteturas de dados modernas.
🎯 Por que estudar Bancos de Dados?
Dados são o ativo mais precioso de qualquer aplicação moderna. Seja em uma rede social, um e-commerce ou um sistema financeiro, a forma como os dados são armazenados e consultados define o sucesso ou o fracasso de um produto.
O Diferencial deste Curso
Este curso não foca apenas na sintaxe. Nós exploramos a estratégia: * Quando usar uma tabela? * Quando usar um documento? * Como garantir que os dados não se percam? * Como escalar para milhões de usuários?
🧑💻 Perfil do Aluno
- Jovens e adultos que desejam ingressar na área de TI.
- Programadores que querem aprofundar seus conhecimentos em persistência.
- Curiosos sobre como gigantes como Google e Netflix lidam com dados.
🏆 Certificação e Conclusão
Ao concluir os 16 módulos e entregar o Projeto Final Integrador, você terá construído um portfólio sólido que demonstra competência teórica e prática em: 1. PostgreSQL (Líder em bancos relacionais open-source). 2. MongoDB (Padrão ouro em bancos NoSQL orientados a documentos). 3. Linguagem SQL Universal.
"Sem dados, você é apenas mais uma pessoa com uma opinião." — W. Edwards Deming
Roadmap do Projeto 🗺️
Acompanhe a sua evolução técnica através dos marcos do curso.
📍 Marcos de Aprendizado
🏁 Level 1: Arquiteto de Dados (Aulas 01-04)
- [x] Instalar ambiente (PostgreSQL).
- [ ] Criar primeiro Diagrama Entidade-Relacionamento.
- [ ] Normalizar uma base de dados complexa.
- [ ] Executar scripts DDL para criação de tabelas.
⚙️ Level 2: Mestre do SQL (Aulas 05-10)
- [ ] Popular banco com milhares de registros reais.
- [ ] Criar relatórios complexos com Agregações e JOINs.
- [ ] Implementar lógica de transações para sistemas críticos.
- [ ] Projeto Parcial: Mini-sistema de vendas ou biblioteca funcional.
🍃 Level 3: Especialista NoSQL (Aulas 11-15)
- [ ] Migrar dados relacionais para o formato Documento.
- [ ] Criar pipelines de agregação no MongoDB.
- [ ] Analisar performance de índices em grandes volumes.
- [ ] Entender fluxos de Big Data.
🚀 Level 4: Senior Integrador (Aula 16)
- [ ] Projeto Final: Sistema Híbrido.
- [ ] Relatório técnico comparativo (SQL vs NoSQL).
- [ ] Deploy e apresentação dos resultados.
📈 Metas de Competência
- Modelagem: Capacidade de traduzir regras de negócio em diagramas.
- Performance: Escrita de queries otimizadas.
- Versatilidade: Fluência entre os mundos Relacional e Não Relacional.
Materiais Complementares 📚
Recursos extras para aprofundar seu conhecimento em Bancos de Dados SQL e NoSQL.
🛠️ Ferramentas Recomendadas
PostgreSQL & Relacional
- pgAdmin 4: Ferramenta de gerenciamento para PostgreSQL.
- dbdiagram.io: Designer de banco de dados visual e rápido.
- DBeaver: Cliente SQL universal gratuito.
MongoDB & NoSQL
- MongoDB Compass: Interface GUI para exploração de dados no MongoDB.
- MongoDB Atlas: Banco de dados NoSQL totalmente gerenciado na nuvem.
📖 Leituras e Documentação
Oficial
- Documentação PostgreSQL: A "Bíblia" do Postgres.
- Manual SQL (MDN): Introdução geral a bancos de dados.
- Documentação MongoDB: Guia completo sobre documentos.
Comunidade & Artigos
- SQL School (W3Schools): Tutorial interativo de SQL.
- Normalização de Dados (Artigo): Entendendo as Formas Normais.
- NoSQL vs SQL (IBM): Quando escolher cada um.
🎥 Canais e Playlists
- PostgreSQL Tutorial (Texto e Vídeo).
- MongoDB University: Cursos gratuitos oficiais da MongoDB Inc.
Versão para Impressão
Esta página foi gerada automaticamente para impressão.