← Mundo bit Byte

Apostila Interativa — Banco de Dados

Professor Ronaldo Lavestein
Capítulo 1

História dos Bancos de Dados

Muito antes do SQL existir, escolas, bancos, hospitais, governos e empresas já enfrentavam o mesmo desafio: guardar informações de forma confiável, encontrá-las rapidamente e evitar erros. Este capítulo mostra por que os bancos de dados surgiram, quais problemas eles resolveram e como essa evolução preparou o caminho para a modelagem, o SQL e os SGBDs modernos.

1. Introdução — o mundo moderno funciona sobre dados

Neste exato momento, enquanto você lê este material, bancos estão processando transferências PIX, hospitais estão acessando exames de pacientes, aplicativos estão calculando rotas, redes sociais estão armazenando mensagens, lojas virtuais estão registrando pedidos e escolas estão controlando frequência e notas.

Tudo isso depende de algo fundamental: informações organizadas. Hoje estamos tão acostumados com sistemas digitais que parece natural encontrar qualquer informação em segundos. Mas durante grande parte da história humana isso era extremamente difícil.

E quanto mais a sociedade crescia, mais informações eram produzidas, mais registros precisavam ser controlados e mais complexa se tornava a administração dos dados. Os bancos de dados surgiram justamente para resolver esse problema.

Ideia principal

Banco de dados não é apenas armazenamento. Banco de dados é organização inteligente da informação.

Antes dos comandos

Antes de aprender SQL, tabelas, JOIN e normalização, é preciso entender por que essas ferramentas precisaram existir.

2. O problema da organização das informações

Imagine uma escola antes da informática. Tudo precisava ser controlado manualmente: matrículas, boletins, frequência, histórico escolar, biblioteca, pagamentos e documentos dos alunos.

As informações eram armazenadas em livros, fichários, pastas, armários e arquivos físicos. Em uma instituição com centenas, milhares ou dezenas de milhares de alunos, administrar tudo isso manualmente se tornava extremamente difícil.

Perda de informações

Documentos podiam rasgar, molhar, deteriorar, ser arquivados incorretamente ou desaparecer.

Informações inconsistentes

O endereço de um aluno podia ser atualizado na secretaria, mas continuar antigo no financeiro.

Dificuldade de busca

Procurar notas, pagamentos atrasados ou livros emprestados podia levar horas, dias ou semanas.

Repetição de informações

O nome de um mesmo aluno precisava aparecer na matrícula, no boletim, na biblioteca, no financeiro e no histórico escolar. Isso gerava redundância, isto é, repetição desnecessária de dados. E redundância aumenta erros, inconsistências, retrabalho e dificuldade de manutenção.

Solução buscada

Os bancos de dados foram criados para organizar informações, reduzir redundância, evitar inconsistências, facilitar consultas, proteger dados, permitir relacionamentos e melhorar a confiabilidade.

Analogia importante

Imagine uma biblioteca gigantesca sem categorias, códigos, índices ou prateleiras organizadas. Mesmo existindo milhares de livros importantes, encontrar uma informação se torna extremamente difícil. Os bancos de dados nasceram exatamente para evitar esse tipo de caos informacional.

3. O crescimento da sociedade e o aumento dos dados

Durante muito tempo, a quantidade de informações produzidas era relativamente pequena. Mas isso começou a mudar com crescimento populacional, industrialização, expansão das empresas, crescimento dos governos, avanço das telecomunicações e aumento das operações bancárias.

A sociedade começou a gerar dados em escala cada vez maior. Controlar manualmente todas as movimentações bancárias de um país, todos os exames de um hospital, todas as mensagens de uma rede social ou todas as vendas de um grande e-commerce seria praticamente impossível.

4. A chegada dos computadores

Conforme as empresas e instituições cresceram, os computadores começaram a ganhar importância. A ideia parecia revolucionária: armazenar informações digitalmente. Agora os dados poderiam ocupar menos espaço físico, ser copiados, pesquisados e processados mais rapidamente.

Na época, parecia que os computadores resolveriam todos os problemas administrativos. Mas existia um ponto importante: os primeiros sistemas ainda não possuíam bancos de dados modernos.

5. Os primeiros sistemas computacionais

Nos primeiros sistemas computacionais, cada programa armazenava suas informações em arquivos próprios.

Sistema financeiro  → financeiro.dat
Sistema acadêmico   → alunos.dat
Biblioteca          → livros.dat
Recursos humanos    → funcionarios.dat

Ideia principal

Os computadores resolveram parte do problema físico do armazenamento, mas apenas trocar papel por arquivos digitais não resolvia os problemas estruturais da organização dos dados.

6. Sistemas baseados em arquivos

Esse modelo ficou conhecido como sistema baseado em arquivos. Nele, cada programa possuía seus próprios dados, cada sistema controlava seus próprios arquivos e não existia gerenciamento centralizado das informações.

Sistema Financeiro
        │
        └── financeiro.dat

Sistema Acadêmico
        │
        └── alunos.dat

Biblioteca
        │
        └── livros.dat

Os sistemas funcionavam praticamente isolados.

7. O grande problema dos arquivos isolados

7.1 Redundância de dados

A mesma informação precisava ser armazenada várias vezes. Se o telefone de um cliente fosse atualizado em apenas um sistema, um setor teria o telefone novo e outro ainda teria o antigo.

7.2 Inconsistência de dados

Esse é um dos problemas mais perigosos dos sistemas antigos.

Financeiro: Rua das Flores, 100
Biblioteca: Rua das Flores, 180

Agora existem dois endereços diferentes para a mesma pessoa. Qual deles é verdadeiro?

7.3 Isolamento de informações

O sistema financeiro não compartilhava informações naturalmente com biblioteca, secretaria, recursos humanos ou estoque. Gerar relatórios integrados era extremamente difícil.

“Mostrar todos os alunos inadimplentes
que ainda possuem livros emprestados.”

7.4 Dependência entre programa e arquivo

Os programas conheciam exatamente o formato dos arquivos. Se a empresa desejasse adicionar um campo como email, o formato do arquivo mudava e frequentemente o programa precisava ser alterado também.

7.5 Segurança limitada

Cada programa implementava segurança da sua própria maneira. Não existia gerenciamento centralizado, controle integrado de usuários nem política unificada de acesso.

Sistema manual

  • lento;
  • físico;
  • difícil de consultar.

Sistema baseado em arquivos

  • digital;
  • mais rápido;
  • porém estruturalmente desorganizado.

8. A necessidade de um novo modelo

Os dados existiam, mas estavam espalhados, repetidos, inconsistentes, isolados e difíceis de integrar. A sociedade precisava de algo capaz de centralizar, organizar, relacionar e proteger informações.

9. O surgimento dos SGBDs

Esses sistemas especializados ficaram conhecidos como SGBD — Sistema Gerenciador de Banco de Dados, ou DBMS — Database Management System. O SGBD representou uma mudança gigantesca: antes cada programa controlava seus próprios arquivos; agora os dados passaram a ser administrados por um sistema especializado.

Programa
SGBD
Banco de Dados

O SGBD passou a armazenar dados, organizar informações, controlar acessos, evitar inconsistências, permitir consultas, proteger integridade, gerenciar concorrência e recuperar falhas.

10. A grande revolução: o modelo relacional

Mesmo com os SGBDs, ainda existia uma pergunta importante: qual a melhor maneira de organizar os dados? Diversos modelos surgiram, como o hierárquico, em rede e relacional.

10.1 Modelo hierárquico

No modelo hierárquico, os dados eram organizados como uma árvore: um elemento pai e vários elementos filhos.

Empresa
 ├── Departamento Financeiro
 │      ├── Funcionário A
 │      └── Funcionário B
 └── Departamento TI
        └── Funcionário C

Ele funcionava bem para estruturas rígidas, mas tinha dificuldade para representar relações complexas e conexões flexíveis.

10.2 Modelo em rede

O modelo em rede permitia relações mais complexas entre registros. Trouxe mais flexibilidade, mas também aumentou a complexidade de implementação e manutenção.

10.3 Modelo relacional

Na década de 1970, Edgar Frank Codd propôs uma ideia revolucionária: organizar os dados em tabelas relacionadas. Essa proposta mudou a história da computação.

id_alunonomeid_turma
1Ana10
2Bruno20
id_turmanome_turma
101A
201B

Ideia principal

O modelo relacional transformou dados em relações organizadas. Essas relações podiam ser consultadas, filtradas, combinadas e relacionadas.

11. O poder dos relacionamentos

A verdadeira força do modelo relacional não está apenas nas tabelas. Está nos relacionamentos entre elas.

TURMAS
 id_turma (PK)
       ▲
       │
ALUNOS
 id_turma (FK)

Quando um aplicativo mostra cliente, pedido, produto e pagamento, ele está relacionando várias tabelas ao mesmo tempo.

12. O surgimento do SQL

Com o crescimento dos bancos relacionais surgiu a necessidade de uma linguagem padronizada. Essa linguagem ficou conhecida como SQL — Structured Query Language.

SELECT nome
FROM alunos
WHERE turma = '1A';

Esse comando busca os nomes dos alunos da turma 1A. O SQL é uma linguagem declarativa: normalmente dizemos o que queremos, e o SGBD decide como executar.

Analogia

Quando você pede “uma pizza de calabresa”, não precisa explicar como preparar a massa, o molho e o forno. Você declara o resultado desejado. O SQL funciona de forma parecida.

13. O modelo relacional mudou o mundo

O modelo relacional trouxe simplicidade, organização, integridade, flexibilidade e padronização. Isso permitiu a criação de bancos, redes sociais, hospitais, ERPs, e-commerce, sistemas acadêmicos e aplicativos.

Banco de Dados

Conjunto organizado de dados.

SGBD

Sistema que gerencia os dados.

SQL

Linguagem utilizada para manipular e consultar os dados.

14. A explosão dos dados e o mundo moderno

Depois que os bancos relacionais se consolidaram, o mundo mudou novamente. A sociedade passou a produzir dados em escala gigantesca por causa de computadores pessoais, internet, smartphones, redes sociais, serviços digitais, comércio eletrônico, sensores, streaming e GPS.

15. A internet mudou as regras do jogo

Antes da internet, muitos sistemas funcionavam localmente. Mas a internet trouxe milhões de usuários simultâneos. Agora os bancos de dados precisavam responder rapidamente, funcionar 24 horas, suportar milhares de acessos, manter integridade e processar operações em tempo real.

Problema real

Em uma Black Friday, milhares de pessoas acessam produtos, realizam pagamentos, alteram carrinhos, atualizam estoques e finalizam pedidos ao mesmo tempo.

16. O crescimento dos bancos relacionais

Os bancos relacionais continuaram evoluindo. SGBDs como Oracle, PostgreSQL, MySQL e SQL Server passaram a oferecer transações, recuperação de falhas, gerenciamento multiusuário, segurança avançada, controle de permissões e otimização de consultas.

17. Big Data — quando os dados explodiram

Com a internet, surgiu um novo desafio: quantidade absurda de dados. Big Data não significa apenas “muitos dados”; envolve escala, velocidade, variedade, complexidade e geração contínua de informações.

Volume

Quantidade gigantesca de dados.

Velocidade

Dados sendo produzidos continuamente.

Variedade

Textos, imagens, vídeos, localização, áudio e sensores.

Veracidade

Necessidade de confiabilidade.

Valor

Capacidade de transformar dados em conhecimento útil.

18. O surgimento do NoSQL

Alguns problemas modernos começaram a exigir mais flexibilidade, escalabilidade extrema, armazenamento distribuído e velocidade em cenários específicos. Foi nesse contexto que surgiram os bancos NoSQL, expressão geralmente entendida como Not Only SQL: “não apenas SQL”.

Relacional

  • tabelas;
  • integridade forte;
  • estrutura rígida;
  • excelente consistência.

Ideal para financeiro, ERP, controle acadêmico, estoque e bancos.

NoSQL

  • maior flexibilidade;
  • escalabilidade;
  • estruturas menos rígidas.

Muito usado em redes sociais, cache, logs, recomendações e mensageria.

Tipos de bancos NoSQL

Documento MongoDB   Chave-valor Redis   Grafos Neo4j   Colunar Cassandra

19. Cloud Computing — bancos na nuvem

Outro avanço revolucionário foi a computação em nuvem. Antes, os bancos normalmente ficavam em servidores locais. Agora eles podem funcionar pela internet, com escalabilidade, acesso remoto, alta disponibilidade, backups automatizados e elasticidade.

Exemplos modernos incluem Amazon RDS, Google Cloud SQL, Azure SQL, Firebase e Supabase.

20. Bancos de dados e Inteligência Artificial

A Inteligência Artificial moderna depende profundamente de dados organizados. Sem dados, não existe IA útil.

Um sistema de recomendação da Netflix, por exemplo, analisa filmes assistidos, tempo de visualização, avaliações, preferências e histórico do usuário. Tudo isso depende de bancos de dados.

21. O mundo atual funciona sobre dados

Hoje praticamente toda área depende de bancos de dados: educação, medicina, bancos, logística, indústria, agronegócio, comércio, segurança, redes sociais e aplicativos.

Sistemas manuais
        ↓
Arquivos digitais
        ↓
SGBDs
        ↓
Modelo Relacional
        ↓
SQL
        ↓
Internet
        ↓
Big Data
        ↓
NoSQL
        ↓
Cloud Computing
        ↓
Inteligência Artificial

22. Resumo inteligente do capítulo

Neste capítulo aprendemos por que os bancos de dados surgiram, os problemas dos sistemas manuais, as limitações dos sistemas baseados em arquivos, como nasceram os SGBDs, como o modelo relacional revolucionou a computação, como surgiu o SQL e como os bancos evoluíram para Big Data, NoSQL, cloud e IA.

Mais importante: aprendemos que banco de dados não é apenas tecnologia. Banco de dados é organização inteligente da informação em escala global.

23. Exercícios diretos

  1. Explique o principal problema dos sistemas baseados em arquivos.
  2. O que é redundância de dados?
  3. O que é inconsistência?
  4. Qual foi a principal contribuição do modelo relacional?
  5. Qual a função de um SGBD?
  6. Explique resumidamente a diferença entre banco relacional e banco NoSQL.

24. Perguntas reflexivas

  1. Por que a sociedade moderna depende tanto de bancos de dados?
  2. Quais problemas poderiam acontecer se bancos não garantissem integridade?
  3. Por que apenas armazenar dados não é suficiente?
  4. Por que bancos relacionais continuam importantes mesmo com NoSQL?

25. Desafio final do capítulo

Rede social moderna

Explique quais tipos de dados uma rede social precisa armazenar, quais desafios de volume ela enfrenta, por que precisa de bancos rápidos e organizados, onde bancos relacionais podem ser úteis e onde bancos NoSQL podem ser úteis.

26. Fechamento do capítulo

Neste capítulo você não aprendeu apenas “história”. Você começou a entender por que bancos de dados existem, quais problemas eles resolvem e por que se tornaram uma das tecnologias mais importantes da computação moderna.

Agora estamos prontos para estudar tabelas, registros, campos, chaves, integridade e estrutura relacional: os fundamentos internos dos bancos de dados modernos.

Capítulo 2

Fundamentos de Banco de Dados

Este capítulo apresenta os pilares fundamentais dos bancos de dados modernos: dados, informação, tabelas, registros, campos, chaves, relacionamentos, tipos de dados, integridade e funcionamento real dos sistemas.

BLOCO 1 — Dados e Informação

Antes de entender tabelas, comandos SQL ou sistemas gerenciadores, é preciso compreender algo mais básico: os dados.

Muitas pessoas começam Banco de Dados pensando diretamente em tabelas e comandos. Mas tudo nasce de algo mais simples: valores que precisam ser organizados para ganhar sentido.

O que é um dado?

Um dado é um valor bruto. Sozinho, normalmente possui pouco significado, porque ainda não está organizado dentro de um contexto.

João
15
Notebook
3500
2026
Aprovado

Esses valores existem, mas ainda não sabemos exatamente o que representam. O número 15 pode ser idade, quantidade, nota, código, número de parcelas ou estoque.

Problema

Dado isolado pode gerar interpretação errada. Sem contexto, o valor existe, mas não comunica claramente uma informação.

O que é informação?

Informação é o dado organizado com significado. Quando um dado recebe contexto, relação e finalidade, ele passa a comunicar algo útil.

O cliente João comprou um notebook por R$ 3500 em 2026.

Agora os dados possuem sentido. Existe um cliente, um produto, um valor e um período.

Ideia principal

Dado é um valor isolado. Informação é o dado interpretado dentro de um contexto.

Analogia importante

Imagine peças soltas de um quebra-cabeça. Cada peça existe, mas sozinha não mostra a imagem completa. Quando as peças são organizadas corretamente, surge uma imagem compreensível. Com dados acontece a mesma coisa.

O problema do dado desorganizado

Ter muitos dados não significa ter informação útil. Um hospital, uma escola, uma loja ou um banco podem possuir milhares de registros e, ainda assim, não conseguir usá-los bem se estiverem desorganizados.

Visão prática

Quando um aplicativo mostra histórico de compras, saldo, frequência, nota, pedido ou recomendação, ele está transformando dados armazenados em informação útil para o usuário.

Dados podem existir em muitos formatos

SistemaExemplos de dados armazenados
Escolaalunos, notas, frequência, turmas
Lojaprodutos, preços, estoque, vendas
Bancosaldo, transações, clientes, cartões
Hospitalpacientes, exames, consultas, prontuários
Streamingfilmes assistidos, preferências, recomendações

O mundo moderno é movido por dados. Mas o valor real aparece quando esses dados são organizados, protegidos, consultados e relacionados.

BLOCO 2 — Estrutura Fundamental dos Bancos

Depois de entender dados e informação, precisamos entender como os bancos relacionais organizam essas informações.

Nos bancos relacionais, a estrutura central é a tabela.

A tabela é o coração do modelo relacional

Uma tabela é uma estrutura organizada em linhas e colunas, usada para armazenar dados de um mesmo tipo de elemento.

id_alunonometurma
1João1A
2Maria1B
3Carlos2A

Essa tabela representa alunos. Cada linha representa um aluno específico. Cada coluna representa uma característica dos alunos.

Linha, coluna, registro e campo

EstruturaSignificado
Tabelaconjunto organizado de dados sobre um tema
Linharegistro completo
Colunatipo de informação armazenada
Campovalor individual dentro da tabela
TABELA: alunos

┌────┬────────┬───────┐
│ id │ nome   │ turma │
├────┼────────┼───────┤
│ 1  │ João   │ 1A    │
│ 2  │ Maria  │ 1B    │
└────┴────────┴───────┘

Atributo e domínio

Em modelagem, uma coluna também pode ser chamada de atributo. O domínio define quais valores são aceitáveis para aquele atributo.

CampoDomínio esperado
idadenúmeros inteiros positivos
notavalores entre 0 e 10
emailtexto em formato de e-mail
data_nascimentodatas válidas

Problema comum

Permitir “Azul” no campo idade ou “500” no campo nota mostra que a estrutura está sem regras adequadas.

A estrutura do banco não é apenas visual. Ela define como os dados serão armazenados, interpretados, validados e consultados.

BLOCO 3 — Chaves e Relacionamentos

Organizar dados em tabelas é essencial, mas não é suficiente. Em sistemas reais, as tabelas precisam se conectar.

É aqui que entram as chaves.

O que é uma chave?

Uma chave é um campo usado para identificação ou relacionamento. Ela ajuda o banco a localizar registros, evitar duplicidade e conectar informações.

Chave Primária

A chave primária identifica cada registro de forma única.

id_alunonome
1João
2Maria
3Carlos

O campo id_aluno identifica cada aluno individualmente. Ele não pode repetir e não deve ficar vazio.

Por que não usar nome?

Nomes podem repetir. Pode existir mais de um João, mais de uma Maria ou mais de um Carlos. Por isso sistemas profissionais normalmente usam códigos ou IDs.

Chave Estrangeira

A chave estrangeira cria relacionamento entre tabelas.

id_turmanome_turma
101A
201B
id_alunonomeid_turma
1João10
2Maria20
TURMAS
 id_turma (PK)
       ▲
       │
ALUNOS
 id_turma (FK)

O campo id_turma aparece na tabela alunos para indicar a qual turma cada aluno pertence.

Relacionamentos representam o mundo real

Relação realRepresentação no banco
Aluno pertence a uma turmaalunos → turmas
Cliente faz pedidoclientes → pedidos
Produto pertence a categoriaprodutos → categorias
Funcionário pertence a setorfuncionarios → setores

O pensamento relacional muda a forma de enxergar sistemas. O aluno começa a perceber que aplicativos, sites e sistemas são formados por informações conectadas.

BLOCO 4 — Tipos de Dados

Nem todo dado é igual. Idade não é texto, data não é telefone, preço não é nome e verdadeiro/falso não é CPF.

O tipo de dado define que tipo de informação uma coluna aceita.

CampoTipo adequado
nomeVARCHAR
idadeINT
precoDECIMAL
data_nascimentoDATE
ativoBOOLEAN

Texto

Usado para nomes, e-mails, cidades, endereços, descrições e telefones.

VARCHAR(100) significa texto variável de até 100 caracteres.

Números

TipoUso
INTnúmeros inteiros
BIGINTnúmeros muito grandes
DECIMALvalores financeiros e precisos
FLOATnúmeros aproximados

Problema importante

Valores financeiros normalmente devem usar DECIMAL, não FLOAT, porque dinheiro exige precisão.

Datas

Datas são usadas para nascimento, cadastro, pagamento, entrega, login, vencimento e histórico.

TipoUso
DATEapenas data
TIMEapenas horário
DATETIMEdata e hora
TIMESTAMPregistro temporal

NULL

NULL não significa zero nem texto vazio. NULL significa ausência de informação.

ValorSignificado
0valor numérico
""texto vazio
NULLausência de informação

Escolher tipos corretamente melhora validação, desempenho, armazenamento e consistência.

BLOCO 5 — Integridade dos Dados

Integridade significa manter os dados corretos, válidos, coerentes e confiáveis.

Um banco de dados profissional não deve apenas guardar dados. Ele também deve proteger os dados contra erros.

Integridade de entidade

Garante que cada registro possa ser identificado corretamente. A chave primária não deve repetir e não deve ser nula.

Integridade referencial

Garante que os relacionamentos entre tabelas sejam válidos.

Exemplo de erro

Um aluno aparece com id_turma = 999, mas a turma 999 não existe. Isso é uma referência quebrada.

Integridade de domínio

Garante que os valores aceitos façam sentido para o campo.

CampoRegra esperada
idadenúmero positivo
notaentre 0 e 10
emailformato válido
datadata existente

Restrições comuns

RestriçãoFunção
NOT NULLimpede ausência de valor
UNIQUEimpede repetição
PRIMARY KEYidentificação única
FOREIGN KEYprotege relacionamentos
CHECKvalida regras
DEFAULTdefine valor padrão

Ideia profissional

Mesmo que a aplicação valide os dados, o banco também deve validar. O banco deve ser a última barreira de proteção.

BLOCO 6 — Como os Bancos Funcionam nos Sistemas Reais

O usuário enxerga telas, botões, formulários, listas e relatórios. Mas por trás dessas telas, o sistema está lendo e gravando dados em tabelas.

Usuário
   ↓
Tela
   ↓
Aplicação
   ↓
API / Servidor
   ↓
Banco de Dados
   ↓
Resposta

Exemplo: cadastro

O usuário vê um formulário com nome, e-mail e senha. Internamente, o sistema grava esses dados em uma tabela de usuários.

INSERT INTO usuarios
(nome, email, senha)
VALUES
('João', 'joao@email.com', '123');

Exemplo: login

Quando alguém faz login, o sistema consulta o banco para verificar se o usuário existe, se a senha confere e se a conta está ativa.

Exemplo: loja virtual

Quando alguém compra online, o sistema precisa localizar cliente, verificar estoque, registrar pedido, registrar pagamento e atualizar produtos.

clientes
↓
pedidos
↓
itens_pedido
↓
produtos
↓
pagamentos

Os bancos também ajudam empresas a gerar relatórios, dashboards, estatísticas, análises e decisões.

BLOCO 7 — Problemas Clássicos de Iniciantes

Os maiores problemas em banco de dados geralmente não começam no SQL, mas na estrutura.

Usar texto para tudo

Tipos incorretos prejudicam cálculos, filtros, validações e ordenações.

Guardar telefone como número puro

Telefones podem ter DDD, código internacional, espaços, hífens e zeros iniciais. Muitas vezes funcionam melhor como texto.

Usar nome como chave

Nomes podem repetir. IDs e códigos únicos são mais seguros.

Misturar informações

Uma coluna deve armazenar apenas um tipo de informação.

Exemplo ruim

cliente
João - 19 99999-8888 - Centro

Exemplo melhor

nometelefonebairro
João19 99999-8888Centro

Banco de Dados exige pensamento estrutural. Não é apenas código. É organização lógica da informação.

BLOCO 8 — Resumo Estrutural dos Fundamentos

Banco de Dados não funciona como conceitos isolados. Tudo trabalha junto.

Dados
↓
Informação
↓
Estrutura
↓
Tabelas
↓
Campos
↓
Tipos
↓
Chaves
↓
Relacionamentos
↓
Integridade
↓
Sistema funcionando

Os próximos capítulos dependem desses fundamentos. Modelagem, normalização, SQL, JOIN, transações e projetos só fazem sentido quando essa base está clara.

BLOCO 9 — Como Pensar um Banco de Dados

O maior erro dos iniciantes é acreditar que criar um banco começa abrindo o MySQL e digitando comandos.

Profissionais normalmente fazem o contrário: primeiro pensam a estrutura.

Banco de Dados começa antes do computador

Antes de SQL, MySQL, tabelas ou código, vem a organização mental das informações.

Analogia

Ninguém constrói uma casa levantando paredes aleatoriamente. Primeiro se analisa, planeja e projeta. Com bancos acontece a mesma coisa.

Exemplo: sistema escolar

Escola
↓
Alunos
Professores
Turmas
Disciplinas
Notas
Frequência

Depois pensamos nos campos, tipos, chaves, relacionamentos e regras de integridade.

Ideia principal

Banco de Dados começa na organização mental das informações.

EXERCÍCIOS — CAPÍTULO 2

Exercício 2A — Dados e Informação

  1. Explique a diferença entre dado e informação.
  2. Transforme os dados “Maria, 8,7, Matemática, 2026” em uma informação compreensível.

Exercício 2B — Estrutura das Tabelas

  1. Explique a diferença entre tabela, linha, coluna, registro e campo.
  2. Observe uma tabela de clientes e identifique seus campos e registros.

Exercício 2C — Domínio e Tipos

  1. Qual tipo de dado seria adequado para idade, preço, data de nascimento e e-mail?
  2. Explique por que telefone geralmente não deve ser tratado como número para cálculo.

Exercício 2D — Chave Primária

  1. O que é chave primária?
  2. Por que nomes normalmente não são boas chaves primárias?

Exercício 2E — Relacionamentos

  1. Explique a função da chave estrangeira.
  2. Por que relacionamentos evitam repetição desnecessária?

Exercício 2F — Integridade

  1. Explique integridade de entidade, referencial e de domínio.
  2. Dê um exemplo de dado inválido que o banco deveria bloquear.

Exercício 2G — Funcionamento Real

  1. Explique o fluxo entre usuário, aplicação e banco de dados.
  2. O que acontece internamente quando um usuário salva um favorito em um aplicativo?

Exercício 2H — Erros Clássicos

  1. Explique o problema de misturar nome, telefone e bairro em uma única coluna.
  2. Reescreva essa estrutura de forma correta.

Exercício 2I — Desafio Final

  1. Imagine um sistema escolar. Quais tabelas poderiam existir?
  2. Quais campos seriam importantes?
  3. Onde seriam usadas chaves primárias e estrangeiras?
  4. Quais regras de integridade seriam importantes?

FECHAMENTO DO CAPÍTULO 2

A partir deste ponto, o aluno já consegue enxergar sistemas como estruturas organizadas de informação.

Agora já é possível compreender tabelas, registros, relacionamentos, tipos, integridade e o funcionamento básico dos sistemas modernos.

Mais importante: o aluno começa a desenvolver pensamento estrutural.

Os próximos capítulos aprofundarão modelagem, representação visual, organização lógica e implementação profissional em bancos reais.

Capítulo 3

Modelagem Conceitual

Este capítulo ensina como transformar problemas reais em estruturas organizadas de informação, identificando entidades, atributos, relacionamentos, cardinalidades e representações visuais por DER.

BLOCO 1 — O que é Modelagem

Um dos maiores erros de quem começa Banco de Dados é acreditar que desenvolver um banco significa abrir o MySQL, criar tabelas e começar digitando SQL.

Em sistemas profissionais, normalmente acontece o contrário: antes de existir tabela, comando, banco físico ou código, existe planejamento estrutural.

Esse planejamento recebe o nome de modelagem.

Ideia principal

Modelagem é representar um problema real de forma organizada, antes de implementar fisicamente o banco de dados.

Por que modelar?

Antes de criar o banco, precisamos entender quais informações existem, quais relações existem, quais regras precisam ser respeitadas e como tudo se conecta.

A modelagem serve para:

  • organizar informações;
  • reduzir redundância;
  • evitar inconsistências;
  • facilitar manutenção;
  • melhorar comunicação entre equipes;
  • preparar a implementação correta do banco.

Analogia importante

Ninguém constrói uma casa, um hospital ou uma ponte levantando paredes aleatoriamente. Primeiro se analisa, planeja, desenha e organiza. Banco de Dados funciona da mesma forma.

Problema real
↓
Análise
↓
Modelagem
↓
Estrutura lógica
↓
Banco físico
↓
SQL

Pensar como usuário é diferente de pensar como analista

O usuário normalmente pensa em ações: cadastrar cliente, lançar nota, consultar pedido, emitir relatório.

O analista pensa estruturalmente:

  • quais entidades existirão?
  • quais atributos serão necessários?
  • como essas entidades se relacionam?
  • quais regras precisam ser respeitadas?
  • quais dados precisam ser armazenados?

Modelagem não é apenas desenhar caixas. É raciocínio estrutural.

BLOCO 2 — Entidades

Entidade é algo importante do mundo real que precisa ser representado no sistema.

Normalmente representa pessoas, objetos, eventos, processos ou elementos relevantes para o funcionamento do sistema.

SistemaPossíveis entidades
EscolaAluno, Professor, Turma, Disciplina
Loja virtualCliente, Produto, Pedido, Pagamento
HospitalPaciente, Médico, Consulta, Exame
BancoCliente, Conta, Transação, Cartão

Importante

Nem tudo vira entidade. Entidade representa algo relevante para o sistema e que precisa ter informações armazenadas.

Como identificar entidades?

O analista observa o problema real e procura elementos principais, normalmente substantivos importantes do processo.

Um cliente realiza pedidos em uma loja.

Possíveis entidades:

  • Cliente;
  • Pedido;
  • Produto;
  • Pagamento.

Entidade não é tabela ainda

Na modelagem conceitual, ainda não estamos criando tabelas físicas. Estamos analisando o mundo real e representando seus elementos importantes.

Mundo real
↓
Entidades
↓
Relacionamentos
↓
Modelo conceitual
↓
Modelo lógico
↓
Banco físico

Entidade forte e entidade fraca

Uma entidade forte consegue existir sozinha, como Cliente, Produto, Aluno ou Funcionário.

Uma entidade fraca depende de outra para existir. Um exemplo simples é ItemPedido, que normalmente depende de um Pedido.

BLOCO 3 — Atributos

As entidades sozinhas ainda não bastam. Depois de identificar uma entidade, precisamos definir quais informações ela precisa armazenar.

Essas informações são chamadas de atributos.

Ideia principal

Atributo é uma característica de uma entidade.

Exemplo: entidade Aluno

Aluno
 ├── id_aluno
 ├── nome
 ├── telefone
 ├── email
 └── data_nascimento

Exemplo: entidade Produto

Produto
 ├── id_produto
 ├── nome
 ├── preco
 ├── estoque
 └── categoria

Tipos de atributos

TipoDescriçãoExemplo
Simplesnão precisa ser divididoidade, salário, CPF
Compostopode ser dividido em partesendereço → rua, número, bairro
Multivaloradopode possuir vários valorestelefones de uma pessoa
Derivadopode ser calculado a partir de outro dadoidade calculada pela data de nascimento

Problema clássico

Misturar várias informações em um único atributo dificulta busca, filtro, validação e atualização.

Exemplo ruim

cliente
João - 19 99999-8888 - Centro

Exemplo melhor

nometelefonebairro
João19 99999-8888Centro

Cada atributo deve armazenar apenas um tipo de informação.

BLOCO 4 — Relacionamentos

As entidades não vivem isoladas. No mundo real, alunos pertencem a turmas, clientes fazem pedidos, produtos pertencem a categorias e médicos realizam consultas.

Relacionamento é a associação entre entidades.

Mundo realModelagem
Cliente faz pedidoCliente → Pedido
Produto pertence à categoriaProduto → Categoria
Médico realiza consultaMédico → Consulta
Aluno frequenta turmaAluno → Turma

Por que relacionamentos são importantes?

Sem relacionamentos, as tabelas ficam isoladas, os dados não conversam e o sistema perde sentido.

Cliente
   ↓
Pedido
   ↓
Produto
   ↓
Pagamento

Relacionamentos reduzem redundância, melhoram organização, ajudam na integridade e representam regras reais do negócio.

Relacionamento também comunica regra

A ligação entre Cliente e Pedido não é apenas visual. Ela significa que um pedido pertence a um cliente, e que o sistema deve respeitar essa relação.

BLOCO 5 — Cardinalidade

Depois de identificar o relacionamento, precisamos responder uma pergunta essencial: quantas ocorrências de uma entidade podem se relacionar com outra?

Isso é chamado de cardinalidade.

Ideia principal

Cardinalidade define quantas ocorrências de uma entidade podem se relacionar com outra.

Relacionamento 1:1

Uma ocorrência se relaciona com apenas uma outra ocorrência.

Pessoa 1 ─── 1 CPF

Relacionamento 1:N

É um dos relacionamentos mais comuns.

Cliente 1 ─── N Pedido

Um cliente pode fazer vários pedidos, mas cada pedido pertence a um cliente.

Relacionamento N:N

Uma ocorrência de uma entidade pode se relacionar com várias ocorrências da outra, e vice-versa.

Aluno N ─── N Disciplina

Em bancos relacionais, normalmente resolvemos N:N criando uma tabela intermediária.

Aluno
↓
Matricula
↓
Disciplina

A tabela intermediária pode ter informações próprias

id_alunoid_disciplinanotafrequencia
1108.592%

Cardinalidade depende das regras do negócio. Não deve ser inventada sem entender o funcionamento real do sistema.

BLOCO 6 — DER (Diagrama Entidade Relacionamento)

Depois de entender entidades, atributos, relacionamentos e cardinalidade, precisamos representar tudo isso visualmente.

DER significa Diagrama Entidade Relacionamento.

Ideia principal

O DER funciona como um mapa estrutural do sistema.

O que o DER mostra?

  • entidades;
  • atributos;
  • relacionamentos;
  • cardinalidades;
  • organização lógica do sistema.

Exemplo simplificado

CLIENTE 1 ─── N PEDIDO
PEDIDO  1 ─── N ITEM_PEDIDO
PRODUTO 1 ─── N ITEM_PEDIDO
CATEGORIA 1 ─── N PRODUTO

O DER não é SQL, não é MySQL e ainda não é o banco físico. Ele é uma representação visual da estrutura pensada.

Problema real
↓
Modelagem
↓
DER
↓
Banco físico
↓
SQL

Por que o DER é importante?

Ele ajuda a visualizar o sistema inteiro, comunicar a estrutura para outras pessoas, encontrar erros antes da implementação e documentar o projeto.

BLOCO 6.1 — Exemplo visual de DER: Sistema Comercial

A seguir temos um exemplo visual de DER para um sistema comercial simples. O objetivo é mostrar, de forma parecida com ferramentas de modelagem, como entidades, atributos, relacionamentos, chaves primárias e cardinalidades aparecem no desenho.

TEM FORNECEDOR PRODUTO TEM CATEGORIA (1,1) (1,n) (1,n) (1,1) ID_FORNECEDOR NOME TELEFONE QTDE PRECO DESCRICAO ID_PRODUTO ID_CATEGORIA NOME LEGENDA: Entidade Relacionamento Chave Primária (PK) Atributo (1,1) (1,n) Cardinalidade

Leitura do modelo

  • FORNECEDOR (1) — (N) PRODUTO: um fornecedor pode fornecer vários produtos, mas cada produto está ligado a um fornecedor neste modelo simplificado.
  • CATEGORIA (1) — (N) PRODUTO: uma categoria pode possuir vários produtos, mas cada produto pertence a uma categoria.
  • PRODUTO possui atributos como descrição, preço e quantidade em estoque.
  • As chaves primárias estão destacadas em azul escuro.

Importante

Este DER representa o modelo conceitual do sistema. No próximo capítulo, esse desenho poderá ser transformado em tabelas relacionais, com chaves primárias, chaves estrangeiras e outras restrições.

BLOCO 7 — Problemas Clássicos de Modelagem

Muitos problemas em sistemas começam na modelagem: lentidão, redundância, inconsistência, dificuldade de manutenção e retrabalho.

Entidade demais

Transformar tudo em entidade gera complexidade desnecessária e excesso de tabelas.

Poucas entidades

Colocar tudo em uma estrutura única mistura responsabilidades e gera caos.

Atributos misturados

Guardar várias informações em uma única coluna dificulta consultas e validações.

Cardinalidade errada

Definir 1:1 quando o correto é 1:N limita o sistema e exige retrabalho.

Exemplo de estrutura problemática

alunoturmaprofessordisciplinanota
João1AProfessor ABanco de Dados8.0

Essa estrutura mistura aluno, turma, professor, disciplina e nota em uma única tabela. Isso pode gerar redundância, inconsistência e dificuldade de manutenção.

Fluxo correto

Problema real
↓
Análise
↓
Modelagem
↓
DER
↓
Banco físico
↓
SQL

Modelagem ruim custa caro, porque corrigir a estrutura do banco depois pode afetar todo o sistema.

BLOCO 8 — Pensando Como Analista

O verdadeiro trabalho do analista é transformar problemas reais em estruturas organizadas de informação.

O sistema ainda não foi programado, não possui banco e não possui interface. Mesmo assim, o analista já começa a visualizar a estrutura.

Primeiro passo: entender o problema real

Antes de pensar em SQL, tabelas ou MySQL, o analista pensa no negócio.

Exemplo: uma escola deseja cadastrar alunos, controlar notas, registrar frequência e organizar turmas.

O analista começa perguntando:

  • quais informações precisam existir?
  • quais entidades aparecem?
  • quais atributos são necessários?
  • como as entidades se relacionam?
  • quais regras precisam ser respeitadas?

O analista aprende a separar responsabilidades

Em vez de criar uma “tabela geral”, o analista separa alunos, professores, disciplinas, turmas, notas e frequência.

Aluno
↓
Turma
↓
Disciplina
↓
Nota

Modelagem é pensamento, não ferramenta

A ferramenta pode ser Draw.io, brModelo, MySQL Workbench, Oracle Data Modeler ou papel e caneta. O principal é o raciocínio estrutural.

O objetivo não é decorar diagramas. O objetivo é desenvolver pensamento analítico.

EXERCÍCIOS — CAPÍTULO 3

Exercício 3A — Identificando Entidades

Uma academia deseja controlar alunos, professores, planos, pagamentos e aulas.

  1. Quais elementos podem se tornar entidades?
  2. Explique por que essas entidades são importantes para o sistema.
  3. Existe algum elemento listado que talvez não precise virar entidade? Justifique.

Exercício 3B — Identificando Atributos

A entidade Cliente precisa armazenar informações importantes.

  1. Cite pelo menos 6 atributos possíveis para Cliente.
  2. Qual atributo poderia funcionar como identificador?
  3. Quais atributos poderiam possuir validações específicas?
  4. Existe algum atributo desnecessário? Explique.

Exercício 3C — Relacionamentos

Uma loja virtual possui clientes, pedidos, produtos e categorias.

  1. Quais relacionamentos provavelmente existem?
  2. Explique cada relacionamento.
  3. O que aconteceria se essas entidades não fossem relacionadas?
  4. Quais problemas poderiam surgir?

Exercício 3D — Cardinalidade

Identifique a cardinalidade correta nos cenários:

  1. Um cliente pode realizar vários pedidos; cada pedido pertence a apenas um cliente.
  2. Um aluno pode cursar várias disciplinas; uma disciplina pode possuir vários alunos.
  3. Um funcionário possui um crachá exclusivo; cada crachá pertence a apenas um funcionário.

Exercício 3E — Problemas de Modelagem

Analise a estrutura:

alunoturmaprofessordisciplinanota
  1. Quais problemas essa estrutura pode gerar?
  2. Existe mistura de responsabilidades?
  3. Quais entidades poderiam ser separadas?
  4. Onde pode existir redundância?
  5. Como melhorar essa modelagem?

Exercício 3F — Pensamento Analítico

Uma clínica deseja controlar pacientes, médicos, consultas, exames e pagamentos.

  1. Quais entidades provavelmente existirão?
  2. Quais atributos importantes cada entidade poderia possuir?
  3. Quais relacionamentos existirão?
  4. Quais cardinalidades provavelmente aparecerão?
  5. O que poderia acontecer se a clínica não modelasse corretamente o sistema?

Exercício 3G — Interpretação de DER

CLIENTE 1 ─── N PEDIDO
PEDIDO 1 ─── N ITEM_PEDIDO
PRODUTO 1 ─── N ITEM_PEDIDO
  1. Um cliente pode possuir vários pedidos?
  2. Um pedido pode possuir vários produtos?
  3. Por que ITEM_PEDIDO existe?
  4. Qual problema aconteceria sem essa entidade intermediária?
  5. Qual relacionamento do modelo é muitos-para-muitos?

Exercício 3H — Mini Desafio de Modelagem

Uma locadora de veículos deseja controlar clientes, veículos, locações, pagamentos e multas.

  1. Liste as entidades principais.
  2. Sugira atributos importantes para cada entidade.
  3. Explique os relacionamentos.
  4. Defina possíveis cardinalidades.
  5. Descreva quais problemas poderiam acontecer em uma modelagem ruim.
  6. Explique como a modelagem ajuda a organizar o sistema.

Exercício 3I — Desafio Final do Capítulo

Uma plataforma de cursos online deseja controlar alunos, professores, cursos, módulos, aulas, matrículas, pagamentos e certificados.

  1. Identifique as entidades principais.
  2. Defina atributos importantes.
  3. Explique os relacionamentos.
  4. Defina cardinalidades prováveis.
  5. Indique onde pode existir relacionamento N:N.
  6. Explique quais tabelas intermediárias poderiam existir.
  7. Quais problemas apareceriam sem modelagem adequada?
  8. Explique por que modelagem conceitual é importante antes da implementação física do banco.

FECHAMENTO DO CAPÍTULO 3

A partir deste ponto, o aluno já consegue transformar problemas reais em estruturas organizadas de informação.

Agora já é possível identificar entidades, definir atributos, criar relacionamentos, compreender cardinalidades, interpretar DERs, analisar problemas de modelagem e desenvolver visão estrutural de sistemas.

Mais importante: o aluno começa a desenvolver pensamento analítico profissional.

O foco deixa de ser apenas tabelas, comandos e diagramas, e passa a ser organização lógica da informação.

Os próximos capítulos aprofundarão a transformação do modelo conceitual em estruturas relacionais mais próximas da implementação, preparando o caminho para normalização, SQL e projetos completos.

Capítulo 3

Modelagem Lógica e Normalização

Transformação da modelagem conceitual em estrutura relacional organizada, refinada e preparada para implementação física em SQL. Neste capítulo, o DER comercial do capítulo anterior será convertido em tabelas, chaves, relacionamentos, tabelas associativas e formas normais.

BLOCO 1 — Da Modelagem Conceitual para as Tabelas

No capítulo anterior, a modelagem conceitual nos ajudou a enxergar o sistema antes da implementação. Identificamos entidades, atributos, relacionamentos, cardinalidades e representamos tudo visualmente por meio de DER.

Agora a pergunta muda. O aluno já não pergunta apenas “quais entidades existem?”. A pergunta passa a ser: como isso vira uma estrutura relacional real?

Problema real
        ↓
Modelagem Conceitual
        ↓
Modelagem Lógica
        ↓
Modelagem Física
        ↓
SQL no SGBD

A modelagem lógica é a ponte entre o desenho conceitual e o banco físico. Ela ainda não é o SQL final, mas já começa a pensar em tabelas, colunas, registros, chaves primárias, chaves estrangeiras e relações implementáveis.

Ideia principal

A modelagem lógica transforma o modelo conceitual em uma estrutura relacional organizada, ainda antes da criação física no MySQL.

O sistema comercial como referência

Para manter coerência com o DER do capítulo anterior, usaremos o mesmo sistema comercial simples:

  • PRODUTO — representa os itens vendidos ou controlados em estoque;
  • CATEGORIA — agrupa produtos semelhantes;
  • FORNECEDOR — representa quem fornece produtos;
  • PRODUTO_FORNECEDOR — será usada quando um produto puder ter vários fornecedores.

Entidade vira tabela

Na modelagem conceitual, falávamos em entidades. Na modelagem lógica, essas entidades começam a se transformar em tabelas.

Entidade conceitualTabela lógica
PRODUTOproduto
CATEGORIAcategoria
FORNECEDORfornecedor

Atributo vira coluna

Os atributos da entidade passam a ser colunas da tabela.

EntidadeAtributos conceituaisColunas lógicas
PRODUTOdescrição, preço, quantidadedescricao, preco, qtde
CATEGORIAnomenome
FORNECEDORnome, telefonenome, telefone

Ocorrência vira registro

Cada ocorrência de uma entidade vira um registro, ou seja, uma linha dentro da tabela.

id_produtodescricaoprecoqtde
1Mouse Gamer89.9015
2Teclado Mecânico259.908

Cada linha representa um produto real armazenado no banco.

Relacionamento vira chave estrangeira

No DER, víamos uma linha conectando CATEGORIA e PRODUTO. Na modelagem lógica, esse relacionamento precisa aparecer dentro das tabelas.

CATEGORIA 1 ─── N PRODUTO

A forma lógica de representar isso é colocar a chave da categoria dentro da tabela produto.

id_produtodescricaoprecoqtdeid_categoria
1Mouse Gamer89.90152

Agora o relacionamento deixou de ser apenas visual. Ele virou estrutura relacional.

Leitura correta

O produto possui uma coluna id_categoria porque cada produto pertence a uma categoria. Essa coluna será a chave estrangeira da tabela produto.

BLOCO 2 — PK e FK na Estrutura Relacional

Agora precisamos aprofundar dois conceitos centrais da modelagem lógica: PK e FK.

PK — Chave Primária

PK significa Primary Key, ou chave primária. Sua função é identificar cada registro de forma única dentro de uma tabela.

id_produtodescricao
1Mouse
2Mouse

Mesmo que dois produtos tenham descrições parecidas, seus identificadores são diferentes. Isso permite alterar, consultar, relacionar ou excluir exatamente o registro correto.

Problema sem PK

Se a tabela produto tivesse apenas a descrição “Mouse”, o sistema não saberia com segurança qual Mouse alterar, vender, atualizar ou relacionar com fornecedor.

Características de uma PK

  • não deve repetir;
  • não deve ser nula;
  • deve identificar apenas um registro;
  • deve permanecer estável sempre que possível.

FK — Chave Estrangeira

FK significa Foreign Key, ou chave estrangeira. Sua função é conectar uma tabela à outra.

id_categorianome
1Informática
2Periféricos
id_produtodescricaoid_categoria
10Mouse Gamer2
11SSD 1TB1

A coluna id_categoria em produto aponta para id_categoria em categoria.

produto.id_categoria
        ↓
categoria.id_categoria

Integridade referencial

A chave estrangeira ajuda a garantir que um produto não aponte para uma categoria inexistente.

id_produtodescricaoid_categoria
10Mouse99

Se a categoria 99 não existe, o relacionamento está quebrado.

Solução relacional

Com FK, o banco pode impedir que um produto seja gravado com uma categoria inexistente. Isso protege a consistência da estrutura.

PK identifica. FK relaciona.

ElementoFunção
PKidentifica o registro dentro da própria tabela
FKrelaciona o registro com outra tabela

BLOCO 3 — Relacionamento N:N e Tabela Associativa

Nem todo relacionamento é simples. No DER original, podemos simplificar dizendo que um fornecedor possui vários produtos e que um produto pertence a um fornecedor. Porém, em um sistema comercial mais realista, isso pode ser diferente.

Um produto pode ter vários fornecedores, e um fornecedor pode fornecer vários produtos.

PRODUTO N ─── N FORNECEDOR

O problema do N:N

Bancos relacionais não implementam relacionamento muitos-para-muitos diretamente dentro de uma única coluna.

id_produtodescricaofornecedores
10Mouse GamerTech, Alpha, Mega

Esse modelo é ruim porque guarda vários valores em uma única coluna.

A solução: tabela associativa

Criamos uma tabela intermediária para representar o relacionamento.

PRODUTO
   ↓
PRODUTO_FORNECEDOR
   ↓
FORNECEDOR
id_produtodescricao
10Mouse Gamer
id_fornecedornome
1Tech Distribuidora
2Alpha Tecnologia
id_produtoid_fornecedor
101
102

Agora o relacionamento N:N foi transformado em dois relacionamentos 1:N.

A relação também pode ter atributos

Às vezes, a tabela associativa não serve apenas para ligar duas tabelas. Ela também pode guardar informações próprias da relação.

id_produtoid_fornecedorpreco_custoprazo_entrega
10155.005 dias
10258.003 dias

O preço de custo não pertence apenas ao produto. Ele depende da combinação entre produto e fornecedor.

Ideia principal

Quando uma informação depende da relação entre duas entidades, ela deve ficar na tabela associativa.

BLOCO 4 — Redundância e o Nascimento da Normalização

Agora que já temos tabelas, PK, FK e relacionamentos, começamos a enxergar problemas estruturais com mais clareza.

O principal deles é a redundância.

O que é redundância?

Redundância é repetição desnecessária de informações.

id_produtodescricaocategoria
10Mouse GamerPeriféricos
11Teclado MecânicoPeriféricos
12HeadsetPeriféricos

A categoria “Periféricos” aparece repetida. Em uma tabela pequena isso parece simples, mas em um sistema real com milhares de produtos, o problema cresce.

Problemas causados pela redundância

  • desperdício de armazenamento;
  • risco de inconsistência;
  • dificuldade de atualização;
  • retrabalho;
  • relatórios incorretos.

Anomalia de atualização

Se a categoria “Periféricos” mudar para “Acessórios”, todas as linhas precisam ser atualizadas. Se uma linha ficar para trás, o banco passa a ter informações inconsistentes.

Anomalia de inserção

Se categoria e produto estiverem misturados na mesma tabela, talvez não seja possível cadastrar uma categoria nova enquanto ainda não existir produto para ela.

Anomalia de exclusão

Se o último produto de uma categoria for apagado, talvez a informação da própria categoria desapareça junto.

Origem da normalização

A normalização nasce exatamente para reduzir redundância, evitar anomalias e organizar melhor as dependências entre os dados.

BLOCO 5 — Primeira Forma Normal (1FN)

A Primeira Forma Normal resolve problemas de valores múltiplos e grupos repetitivos.

Ideia central da 1FN

Cada campo deve armazenar apenas um valor atômico.

Valor atômico

Valor atômico é um valor indivisível no contexto da tabela. Ou seja, o campo não deve guardar listas ou vários valores misturados.

Exemplo incorreto

id_produtodescricaofornecedores
10Mouse GamerTech, Alpha, Mega

A coluna fornecedores possui vários valores dentro de um único campo. Isso viola a 1FN.

Exemplo correto

id_produtodescricao
10Mouse Gamer
id_fornecedornome
1Tech
2Alpha
3Mega
id_produtoid_fornecedor
101
102
103

Grupos repetitivos

Outro problema comum é criar colunas repetidas.

id_pedidoproduto1produto2produto3
100MouseSSDHeadset

Isso limita o crescimento. E se o pedido tiver dez produtos?

Solução

id_pedidoid_produto
10010
10011
10012

Agora o crescimento acontece em linhas, não em colunas repetidas.

BLOCO 6 — Segunda Forma Normal (2FN)

A Segunda Forma Normal resolve problemas de dependência parcial.

Ideia central da 2FN

Um atributo deve depender da chave inteira, e não apenas de parte dela.

A 2FN aparece principalmente em tabelas com chave composta, como tabelas associativas.

Exemplo problemático

id_produtoid_fornecedornome_fornecedorpreco_custo
101Tech Distribuidora55.00
111Tech Distribuidora70.00

Se a chave da tabela é formada por id_produto + id_fornecedor, o campo nome_fornecedor não depende da combinação inteira. Ele depende apenas de id_fornecedor.

Isso é dependência parcial.

Estrutura correta

id_fornecedornome
1Tech Distribuidora
id_produtoid_fornecedorpreco_custo
10155.00
11170.00

Agora nome do fornecedor fica na tabela fornecedor, e preço de custo fica na tabela que representa a relação produto-fornecedor.

Regra prática

Se uma informação depende apenas de parte da chave composta, ela provavelmente está na tabela errada.

BLOCO 7 — Terceira Forma Normal (3FN)

A Terceira Forma Normal resolve problemas de dependência transitiva.

Ideia central da 3FN

Um atributo não deve depender de outro atributo não-chave. Ele deve depender da chave da tabela.

Exemplo problemático

id_fornecedornomeid_cidadenome_cidadeestado
1Tech Distribuidora10CampinasSP
2Alpha Tecnologia10CampinasSP

O nome da cidade e o estado não dependem diretamente do fornecedor. Eles dependem de id_cidade.

id_fornecedor
      ↓
id_cidade
      ↓
nome_cidade / estado

Isso é dependência transitiva.

Estrutura correta

id_cidadenome_cidadeestado
10CampinasSP
id_fornecedornomeid_cidade
1Tech Distribuidora10
2Alpha Tecnologia10

Agora a cidade fica centralizada em uma tabela própria.

Outro exemplo no sistema comercial

id_produtodescricaoid_categorianome_categoria
10Mouse Gamer2Periféricos

O nome da categoria depende de id_categoria, não diretamente de id_produto. Portanto, deve ficar na tabela categoria.

BLOCO 8 — Refinamento Lógico e Visão Profissional

Depois de aplicar modelagem lógica e normalização, o sistema comercial começa a ficar realmente organizado.

TabelaResponsabilidade
categoriaguardar os dados das categorias
cidadeguardar os dados das cidades
fornecedorguardar os dados dos fornecedores
produtoguardar os dados dos produtos
produto_fornecedorguardar a relação entre produto e fornecedor
CATEGORIA 1 ─── N PRODUTO
CIDADE    1 ─── N FORNECEDOR
PRODUTO   1 ─── N PRODUTO_FORNECEDOR
FORNECEDOR 1 ─ N PRODUTO_FORNECEDOR

Modelo lógico refinado

TabelaCampos principais
categoriaid_categoria, nome
cidadeid_cidade, nome_cidade, estado
fornecedorid_fornecedor, nome, telefone, id_cidade
produtoid_produto, descricao, preco, qtde, id_categoria
produto_fornecedorid_produto, id_fornecedor, preco_custo, prazo_entrega

Agora cada tabela possui responsabilidade clara. Essa é uma característica importante de uma boa modelagem lógica.

Equilíbrio profissional

Normalizar não significa criar tabelas infinitas. O objetivo é equilíbrio: reduzir redundância, manter clareza e permitir manutenção futura.

Resultado esperado

Um banco bem modelado é mais fácil de consultar, alterar, manter, documentar e implementar em SQL.

EXERCÍCIOS — CAPÍTULO 3

Exercício 3A — Transformação do DER em tabelas

  1. Explique como a entidade PRODUTO se transforma em tabela.
  2. Explique como os atributos descrição, preço e quantidade aparecem no modelo lógico.
  3. Explique como o relacionamento CATEGORIA 1:N PRODUTO aparece nas tabelas.

Exercício 3B — PK e FK

  1. Qual é a função da PK em uma tabela?
  2. Qual é a função da FK?
  3. Explique por que produto.id_categoria é FK.
  4. O que aconteceria se um produto apontasse para uma categoria inexistente?

Exercício 3C — Tabela associativa

  1. Por que PRODUTO N:N FORNECEDOR precisa de tabela associativa?
  2. Quais campos poderiam existir em produto_fornecedor?
  3. Por que preco_custo pode pertencer à tabela associativa?

Exercício 3D — Redundância

  1. Explique o que é redundância.
  2. Por que repetir o nome da categoria dentro de produto é ruim?
  3. Quais problemas podem ocorrer em uma atualização?

Exercício 3E — 1FN

  1. O que significa valor atômico?
  2. Por que guardar “Tech, Alpha, Mega” em uma única coluna viola a 1FN?
  3. Como resolver esse problema?

Exercício 3F — 2FN

  1. O que é dependência parcial?
  2. Por que nome_fornecedor não deve ficar em produto_fornecedor?
  3. Onde o nome do fornecedor deve ficar?

Exercício 3G — 3FN

  1. O que é dependência transitiva?
  2. Por que nome_cidade e estado devem ficar em uma tabela cidade?
  3. Dê outro exemplo de dependência transitiva.

Exercício 3H — Desafio final

Refine o sistema comercial considerando as tabelas categoria, cidade, fornecedor, produto e produto_fornecedor.

  1. Liste as PKs.
  2. Liste as FKs.
  3. Explique os relacionamentos.
  4. Indique onde a 1FN aparece.
  5. Indique onde a 2FN aparece.
  6. Indique onde a 3FN aparece.
  7. Explique por que esse modelo está mais organizado que uma tabela única.

FECHAMENTO DO CAPÍTULO 3

Ao longo deste capítulo, o aluno deixou de enxergar o banco de dados apenas como tabelas isoladas e passou a compreender a estrutura relacional de forma muito mais profissional.

Agora já é possível:

  • transformar entidades em tabelas;
  • compreender PK e FK;
  • implementar relacionamentos;
  • resolver relacionamentos N:N;
  • utilizar tabelas associativas;
  • identificar redundância;
  • compreender 1FN, 2FN e 3FN;
  • analisar dependências;
  • refinar estruturalmente um banco relacional.

Mais importante: o aluno começou a desenvolver pensamento lógico relacional.

Próximo passo

Agora SQL deixará de ser apenas comandos decorados e passará a ser implementação prática de uma estrutura lógica já compreendida.

✅ CAPÍTULO 3 — MODELAGEM LÓGICA E NORMALIZAÇÃO OFICIALMENTE FINALIZADO

Capítulo 4

SQL com MySQL

Implementação física do banco comercial no MySQL usando SQL, com foco em terminal CLI, criação de banco, tabelas, inserção dos dados reais, consultas, filtros, alterações, exclusões, chaves estrangeiras, JOIN, agregações, GROUP BY e boas práticas.

BLOCO 1 — Modelagem Física

Até aqui trabalhamos a modelagem conceitual e a modelagem lógica. Agora entramos na modelagem física, que é a implementação concreta do banco dentro de um SGBD real.

Modelagem Conceitual
↓
Modelagem Lógica e Normalização
↓
Modelagem Física
↓
SQL no MySQL

Na modelagem física, decisões como tipos reais, chaves, restrições e estrutura das tabelas deixam de ser apenas ideia e passam a existir dentro do MySQL.

Ideia principal

SQL será usado para transformar a estrutura lógica do sistema comercial em um banco físico real.

BLOCO 2 — O que é SQL?

SQL significa Structured Query Language, ou Linguagem de Consulta Estruturada. SQL não é o banco; SQL é a linguagem usada para conversar com o banco.

ConceitoSignificado
SQLlinguagem usada para criar, consultar e manipular dados
MySQLSGBD que executa comandos SQL
Bancoconjunto organizado de tabelas e dados

Usaremos SQL sempre conectado ao sistema comercial já modelado: categoria, fornecedor e produto.

BLOCO 3 — O que é MySQL e o que é SGBD?

SGBD significa Sistema Gerenciador de Banco de Dados. O MySQL é um SGBD relacional. Ele executa comandos SQL, armazena dados, controla permissões, protege integridade e gerencia as tabelas fisicamente.

Aluno escreve SQL
↓
MySQL interpreta
↓
MySQL executa
↓
Banco físico é alterado

Neste tutorial, os exemplos principais serão pensados para o CLI do MySQL, aquela tela preta de terminal, para que o aluno aprenda SQL de forma direta.

BLOCO 4 — Preparando o Ambiente MySQL

Para trabalhar com MySQL normalmente usamos o MySQL Server e alguma forma de enviar comandos. Aqui o foco pedagógico será o terminal CLI.

mysql -u root -p

Depois de informar a senha, o aluno estará dentro do ambiente interativo do MySQL.

BLOCO 5 — CREATE DATABASE e USE

O primeiro passo físico é criar o banco de dados do sistema comercial.

CREATE DATABASE comercio;
SHOW DATABASES;
USE comercio;

CREATE DATABASE cria o banco. SHOW DATABASES lista os bancos existentes. USE seleciona o banco ativo.

Query OK, 1 row affected
Database changed

BLOCO 6 — CREATE TABLE: criando as tabelas do sistema comercial

Agora criaremos as três tabelas principais, respeitando a ordem correta: primeiro tabelas independentes, depois a tabela que possui FKs.

A tabela categoria nasce antes de produto porque produto depende dela. A tabela fornecedor também nasce antes de produto pelo mesmo motivo.

CREATE TABLE categoria (
    id_categoria INT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL
);

CREATE TABLE fornecedor (
    id_fornecedor INT PRIMARY KEY,
    nome VARCHAR(80) NOT NULL,
    telefone VARCHAR(20)
);

CREATE TABLE produto (
    id_produto INT PRIMARY KEY,
    descricao VARCHAR(100) NOT NULL,
    preco DECIMAL(10,2) NOT NULL,
    qtde INT NOT NULL,
    id_categoria INT NOT NULL,
    id_fornecedor INT NOT NULL,
    estoque_minimo INT NOT NULL,

    FOREIGN KEY (id_categoria)
        REFERENCES categoria(id_categoria),

    FOREIGN KEY (id_fornecedor)
        REFERENCES fornecedor(id_fornecedor)
);

Essa estrutura implementa fisicamente o DER comercial. Produto se relaciona com categoria e fornecedor por meio das chaves estrangeiras.

SHOW TABLES;
DESCRIBE categoria;
DESCRIBE fornecedor;
DESCRIBE produto;

BLOCO 7 — INSERT INTO: inserindo todos os dados reais

Agora o banco deixa de ser apenas estrutura e começa a receber dados. Usaremos todos os dados oficiais das tabelas categoria, fornecedor e produto.

Inserindo categorias

INSERT INTO categoria (id_categoria, nome)
VALUES
(1, 'DOCE'),
(2, 'SALGADO'),
(3, 'BEBIDA'),
(4, 'LIMPEZA'),
(5, 'PERFUMARIA'),
(6, 'UTENSILIO'),
(7, 'FRUTAS'),
(8, 'VERDURA'),
(9, 'CARNE'),
(10, 'FRIOS'),
(11, 'PADARIA'),
(12, 'HIGIENE'),
(13, 'CONGELADOS'),
(14, 'MATINAIS'),
(15, 'LATICINIOS'),
(16, 'ENLATADOS'),
(17, 'TEMPEROS'),
(18, 'MASSAS'),
(19, 'BISCOITOS'),
(20, 'DOCES E SOBREMESAS'),
(21, 'PET SHOP'),
(22, 'UTILIDADES DOMESTICAS'),
(23, 'PAPELARIA'),
(24, 'DESCARTAVEIS'),
(25, 'HORTIFRUTI'),
(26, 'MERCEARIA');

Inserindo fornecedores

INSERT INTO fornecedor (id_fornecedor, nome, telefone)
VALUES
(3, 'ARMAZEM DO COMERCIO', '(19) 9999-1001'),
(4, 'COCA-COLA FEMSA', '(19) 9999-1002'),
(5, 'NESTLE BRASIL', '(19) 9999-1003'),
(6, 'AMBEV DISTRIBUIDORA', '(19) 9999-1004'),
(7, 'SADIA ALIMENTOS', '(19) 9999-1005'),
(8, 'PERDIGAO DISTRIBUICAO', '(19) 9999-1006'),
(9, 'YPE PRODUTOS', '(19) 9999-1007'),
(10, 'UNILEVER BRASIL', '(19) 9999-1008'),
(11, 'PEPSICO', '(19) 9999-1009'),
(12, 'BAUDUCCO', '(19) 9999-1010'),
(13, 'CASA DO MERCADO', '(19) 9999-1011'),
(18, 'DISTRIBUIDORA CENTRAL', '(19) 9999-1012'),
(19, 'MAX ALIMENTOS', '(19) 9999-1013'),
(20, 'BOM PRECO ATACADO', '(19) 9999-1014'),
(21, 'NOVA ERA COMERCIAL', '(19) 9999-1015'),
(22, 'SUPERMIX DISTRIBUIDORA', '(19) 9999-1016'),
(23, 'REAL COMERCIO', '(19) 9999-1017'),
(24, 'ALFA DISTRIBUICAO', '(19) 9999-1018'),
(25, 'COMERCIAL BRASIL', '(19) 9999-1019'),
(26, 'ESTRELA DO LAR', '(19) 9999-1020'),
(27, 'TOP BEBIDAS', '(19) 9999-1021'),
(28, 'VALE ALIMENTOS', '(19) 9999-1022'),
(29, 'PRIME DISTRIBUIDORA', '(19) 9999-1023'),
(30, 'IDEAL COMERCIO', '(19) 9999-1024'),
(31, 'TOTAL LIMPEZA', '(19) 9999-1025');

Inserindo produtos

A tabela produto deve ser inserida depois de categoria e fornecedor, porque possui FKs apontando para elas.

INSERT INTO produto (id_produto, descricao, preco, qtde, id_categoria, id_fornecedor, estoque_minimo)
VALUES
(12, 'BALA 7 BELO', 0, 12, 1, 5, 5),
(13, 'PIRULITO', 1, 25, 1, 5, 5),
(14, 'CHICLETE', 0, 8, 1, 5, 10),
(15, 'PACOCA', 1, 6, 1, 5, 10),
(16, 'BOMBOM', 2, 15, 1, 5, 10),
(17, 'COXINHA', 8, 20, 2, 13, 5),
(18, 'QUIBE', 10, 18, 2, 13, 5),
(19, 'MISTAO', 15, 2, 2, 13, 3),
(20, 'PASTEL', 9, 4, 2, 13, 5),
(21, 'ENROLADINHO', 6, 7, 2, 13, 5),
(22, 'COCA COLA LATA', 5, 120, 3, 4, 20),
(23, 'GUARANA LATA', 4, 15, 3, 6, 20),
(24, 'SUCO DE LARANJA', 6, 9, 3, 11, 10),
(25, 'AGUA MINERAL', 2, 18, 3, 27, 30),
(26, 'ENERGETICO', 9, 3, 3, 6, 5),
(27, 'DETERGENTE', 3, 25, 4, 9, 10),
(28, 'SABAO EM PO', 18, 5, 4, 9, 8),
(29, 'AGUA SANITARIA', 5, 6, 4, 9, 8),
(30, 'DESINFETANTE', 7, 4, 4, 10, 8),
(31, 'ESPONJA', 2, 30, 4, 31, 15),
(32, 'SHAMPOO', 15, 12, 5, 10, 5),
(33, 'CONDICIONADOR', 17, 9, 5, 10, 5),
(34, 'SABONETE', 3, 40, 5, 10, 10),
(35, 'CREME DENTAL', 6, 8, 12, 10, 10),
(36, 'DESODORANTE', 12, 2, 5, 10, 5),
(37, 'PRATO DESCARTAVEL', 8, 35, 24, 25, 10),
(38, 'COPO DESCARTAVEL', 6, 10, 24, 25, 15),
(39, 'GUARDANAPO', 4, 12, 24, 25, 20),
(40, 'PAPEL ALUMINIO', 9, 4, 22, 25, 5),
(41, 'FILME PVC', 7, 3, 22, 25, 5),
(42, 'MACA', 8, 20, 7, 28, 10),
(43, 'BANANA', 6, 18, 7, 28, 10),
(44, 'LARANJA', 5, 22, 7, 28, 10),
(45, 'MAMAO', 9, 4, 7, 28, 5),
(46, 'UVA', 14, 2, 7, 28, 5),
(47, 'ALFACE', 3, 15, 8, 28, 8),
(48, 'TOMATE', 7, 7, 8, 28, 10),
(49, 'BATATA', 5, 9, 8, 28, 12),
(50, 'CEBOLA', 6, 6, 8, 28, 10),
(51, 'CENOURA', 4, 5, 8, 28, 8),
(52, 'PICANHA', 65, 1, 9, 19, 2),
(53, 'FRANGO', 18, 8, 9, 7, 5),
(54, 'LINGUICA', 22, 4, 9, 8, 5),
(55, 'CARNE MOIDA', 35, 3, 9, 19, 5),
(56, 'BISTECA', 28, 2, 9, 7, 3),
(57, 'PRESUNTO', 32, 6, 10, 7, 5),
(58, 'MUSSARELA', 45, 4, 10, 7, 5),
(59, 'MORTADELA', 16, 12, 10, 7, 5),
(60, 'IOGURTE', 7, 5, 15, 5, 8),
(61, 'REQUEIJAO', 12, 2, 15, 5, 5),
(62, 'PAO FRANCES', 1, 130, 11, 12, 20),
(63, 'SONHO', 6, 4, 11, 12, 5),
(64, 'BOLO DE CHOCOLATE', 25, 1, 11, 12, 2),
(65, 'ROSCA DOCE', 12, 2, 11, 12, 2),
(66, 'PAO DE FORMA', 9, 6, 11, 12, 5),
(67, 'PAPEL HIGIENICO', 18, 8, 12, 10, 10),
(68, 'ABSORVENTE', 9, 3, 12, 10, 5),
(69, 'ALGODAO', 5, 2, 12, 10, 5),
(70, 'COTONETE', 4, 2, 12, 10, 5),
(71, 'ESCOVA DENTAL', 7, 4, 12, 10, 5);

Os IDs começam em valores já existentes porque o banco veio de uma base usada em Access. Isso não é problema: chaves primárias não precisam ser sequenciais perfeitas; precisam ser únicas.

BLOCO 8 — SELECT: consultando dados

SELECT consulta dados no banco. Ele não altera, não apaga e não insere registros.

SELECT * FROM categoria;
SELECT * FROM fornecedor;
SELECT * FROM produto;

Também podemos consultar apenas algumas colunas:

SELECT descricao, preco, qtde
FROM produto;

BLOCO 9 — WHERE: filtrando dados

WHERE aplica condições. Ele permite buscar apenas os registros que interessam.

SELECT *
FROM produto
WHERE id_categoria = 3;

SELECT *
FROM produto
WHERE qtde <= estoque_minimo;

SELECT descricao, preco
FROM produto
WHERE preco > 20;

Com esses dados, já é possível identificar bebidas, produtos caros e itens com estoque baixo.

BLOCO 10 — ORDER BY: ordenando resultados

ORDER BY organiza o resultado da consulta.

SELECT descricao, preco
FROM produto
ORDER BY descricao;

SELECT descricao, preco
FROM produto
ORDER BY preco DESC;

SELECT descricao, qtde
FROM produto
ORDER BY qtde;

ASC é crescente. DESC é decrescente. Quando omitimos, o MySQL usa ordem crescente por padrão.

BLOCO 11 — LIKE: pesquisas textuais

LIKE permite procurar padrões em campos de texto. O símbolo % funciona como coringa.

SELECT descricao
FROM produto
WHERE descricao LIKE 'P%';

SELECT descricao
FROM produto
WHERE descricao LIKE '%COLA%';

SELECT nome
FROM fornecedor
WHERE nome LIKE '%BRASIL%';

SELECT nome
FROM categoria
WHERE nome LIKE '%DOCE%';

Esse tipo de busca aparece em sistemas reais quando o usuário digita parte do nome de um produto, fornecedor ou categoria.

BLOCO 12 — UPDATE: alterando registros

UPDATE modifica dados existentes. O uso do WHERE é essencial.

SELECT *
FROM produto
WHERE id_produto = 22;

UPDATE produto
SET preco = 6
WHERE id_produto = 22;

SELECT *
FROM produto
WHERE id_produto = 22;

Cuidado

UPDATE sem WHERE altera todos os registros da tabela. Esse é um dos erros mais perigosos para iniciantes.

UPDATE produto
SET preco = preco + 1
WHERE id_categoria = 3;

BLOCO 13 — DELETE: removendo registros

DELETE remove registros. Assim como UPDATE, precisa de muito cuidado com WHERE.

SELECT *
FROM produto
WHERE id_produto = 26;

DELETE FROM produto
WHERE id_produto = 26;

SELECT *
FROM produto
WHERE id_produto = 26;

Cuidado extremo

DELETE FROM produto; sem WHERE apaga todos os produtos.

Ao tentar apagar uma categoria que possui produtos vinculados, a FK pode impedir a exclusão, protegendo a integridade referencial.

BLOCO 14 — FOREIGN KEY: integridade referencial real

A FOREIGN KEY é a implementação física do relacionamento entre tabelas. Ela impede que produto aponte para categoria ou fornecedor inexistente.

INSERT INTO produto
VALUES (100, 'PRODUTO TESTE', 5, 10, 3, 4, 5);

INSERT INTO produto
VALUES (101, 'PRODUTO INVALIDO', 5, 10, 999, 4, 5);

O segundo INSERT deve falhar se a categoria 999 não existir. Isso mostra que o MySQL está protegendo o relacionamento.

BLOCO 15 — JOIN: unindo tabelas relacionadas

JOIN é usado para unir dados de tabelas relacionadas. Aqui o banco relacional mostra seu verdadeiro valor.

SELECT
    produto.descricao,
    categoria.nome AS categoria
FROM produto
INNER JOIN categoria
    ON produto.id_categoria = categoria.id_categoria;

Agora o aluno não vê apenas o número da categoria; vê o nome real da categoria.

SELECT
    produto.descricao,
    categoria.nome AS categoria,
    fornecedor.nome AS fornecedor
FROM produto
INNER JOIN categoria
    ON produto.id_categoria = categoria.id_categoria
INNER JOIN fornecedor
    ON produto.id_fornecedor = fornecedor.id_fornecedor
ORDER BY produto.descricao;

Essa consulta une produto, categoria e fornecedor em um relatório comercial real.

BLOCO 16 — Funções de agregação

Funções de agregação resumem dados. As principais são COUNT, SUM, AVG, MIN e MAX.

SELECT COUNT(*) FROM produto;

SELECT SUM(qtde) FROM produto;

SELECT AVG(preco) FROM produto;

SELECT MIN(preco) FROM produto;

SELECT MAX(preco) FROM produto;

Com essas consultas, o banco começa a produzir indicadores: quantidade de produtos, estoque total, média de preço e maior ou menor valor.

BLOCO 17 — GROUP BY: agrupando dados

GROUP BY agrupa registros para produzir relatórios por categoria, fornecedor ou outro campo.

SELECT
    categoria.nome AS categoria,
    COUNT(*) AS total_produtos
FROM produto
INNER JOIN categoria
    ON produto.id_categoria = categoria.id_categoria
GROUP BY categoria.nome
ORDER BY total_produtos DESC;
SELECT
    categoria.nome AS categoria,
    SUM(produto.qtde) AS total_estoque,
    AVG(produto.preco) AS preco_medio
FROM produto
INNER JOIN categoria
    ON produto.id_categoria = categoria.id_categoria
GROUP BY categoria.nome
ORDER BY total_estoque DESC;
SELECT
    fornecedor.nome AS fornecedor,
    COUNT(*) AS total_produtos
FROM produto
INNER JOIN fornecedor
    ON produto.id_fornecedor = fornecedor.id_fornecedor
GROUP BY fornecedor.nome
ORDER BY total_produtos DESC;

BLOCO 18 — Boas Práticas e Visão Profissional

SQL profissional não é apenas escrever comandos que funcionam. É escrever comandos organizados, seguros e coerentes com a modelagem.

  • use nomes claros;
  • organize consultas longas em várias linhas;
  • teste SELECT antes de UPDATE ou DELETE;
  • use PK e FK para proteger integridade;
  • mantenha coerência entre modelagem, tabelas e comandos;
  • não decore SQL sem entender a estrutura.

Fluxo seguro

Consultar → alterar/remover → consultar novamente. Esse hábito evita muitos erros em bancos reais.

BLOCO 19 — Fechamento Oficial do Capítulo SQL com MySQL

Neste capítulo, o banco deixou de ser apenas desenho e estrutura lógica. Ele virou implementação física real no MySQL.

Aprendemos modelagem física, SQL, MySQL, SGBD, CREATE DATABASE, CREATE TABLE, INSERT, SELECT, WHERE, ORDER BY, LIKE, UPDATE, DELETE, FOREIGN KEY, JOIN, funções de agregação, GROUP BY e boas práticas.

Mais importante: entendemos como transformar uma modelagem relacional completa em um banco físico real utilizando SQL no MySQL.

✅ CAPÍTULO 4 — SQL COM MYSQL OFICIALMENTE FINALIZADO

Capítulo 6

Relacionamentos e JOIN

INNER, LEFT, RIGHT, UNION e leitura visual de junções.

Capítulo 7

Administração e SGBD

Instalação, operação, usuários, permissões, backup e ferramentas.

Capítulo 8

Transações e ACID

Atomicidade, consistência, isolamento, durabilidade e concorrência.

Capítulo 9

SQL Avançado

Views, índices, triggers, procedures, functions e performance.

Capítulo 10

Projeto Integrador

Modelagem, normalização, implementação, consultas e conexão com aplicações.

Capítulo 11

Visão Moderna

NoSQL, cloud, APIs, Big Data e IA.

Capítulo 99

Exercícios

Área prática para fixação, interpretação, raciocínio e aplicação dos conceitos. Recomenda-se seguir a ordem dos capítulos, pois alguns exercícios dependem de ideias construídas anteriormente.

Escolha um capítulo

Cada capítulo terá seus próprios exercícios. Os capítulos ainda não desenvolvidos aparecem como Em construção.

Exercícios — Capítulo 1

História dos Bancos de Dados

Do caos informacional aos bancos modernos.

1A — O Caos Informacional
🟢 Básico 📖 Interpretação Tema: sistemas manuais

Situação-problema: uma escola mantém matrículas, boletins, pagamentos e biblioteca em fichas e pastas físicas. Após alguns anos, parte das fichas está desatualizada, algumas foram arquivadas em locais errados e o relatório de alunos com pendências demora dias para ser produzido.

  1. Quais problemas de organização aparecem nesse cenário?
  2. Por que apenas “guardar documentos” não garante informação confiável?
  3. Explique como perda, dificuldade de busca e repetição prejudicam a escola.
  4. Relacione o cenário com a ideia de “caos informacional”.
Responda no caderno ou em um documento próprio.
1B — Redundância e Inconsistência
🟢 Básico 🧠 Conceitual Tema: arquivos isolados

Situação-problema: o telefone do aluno Bruno aparece no financeiro, na biblioteca e no sistema acadêmico. O telefone foi atualizado apenas no sistema acadêmico.

  1. Qual é o problema de redundância nesse caso?
  2. Qual inconsistência pode surgir?
  3. Por que a redundância aumenta a chance de erro?
  4. Explique por que atualizar o mesmo dado em vários lugares é perigoso.
Não copie definições prontas. Explique com suas palavras.
1C — Evolução dos Sistemas
🟡 Intermediário 📊 Comparação Tema: manual → arquivos → SGBD

Complete a comparação entre três formas de organização dos dados:

CaracterísticaSistema manualSistema baseado em arquivosSistema com SGBD
Velocidade de busca
Redundância
Integração
Segurança
Facilidade de manutenção
  1. Explique por que arquivos digitais melhoraram a velocidade, mas não resolveram totalmente a organização lógica dos dados.
  2. Explique por que o SGBD representou uma mudança estrutural.
1D — O Surgimento dos SGBDs
🟡 Intermediário 🧠 Análise Tema: SGBD

Analise o fluxo:

Programa
   ↓
SGBD
   ↓
Banco de Dados
  1. Qual é o papel do SGBD nesse fluxo?
  2. Por que separar os dados dos programas foi uma mudança importante?
  3. Cite quatro responsabilidades de um SGBD.
  4. Explique a diferença entre banco de dados, SGBD e SQL.
1E — Modelo Relacional e SQL
🟡 Intermediário 🔗 Relações Tema: Codd, tabelas e SQL

Observe as tabelas:

id_alunonomeid_turma
1Ana10
2Bruno20
id_turmanome_turma
101A
201B
  1. Por que o modelo relacional organiza dados em tabelas?
  2. Qual campo liga alunos e turmas?
  3. Explique por que o relacionamento evita repetição desnecessária.
  4. Interprete conceitualmente o comando abaixo, sem se preocupar ainda em executá-lo:
SELECT nome
FROM alunos
WHERE id_turma = 10;

Explique também por que dizemos que SQL é uma linguagem declarativa.

1F — Internet, Big Data, NoSQL e Cloud
🔴 Avançado 🌐 Mercado Tema: mundo moderno

Situação-problema: uma plataforma de vídeos registra usuários, vídeos assistidos, curtidas, comentários, tempo de visualização, recomendações, pagamentos e logs de acesso.

  1. Quais desses dados poderiam ficar bem em um banco relacional?
  2. Quais dados poderiam justificar o uso de NoSQL?
  3. Quais dos 5Vs do Big Data aparecem nesse cenário?
  4. Por que cloud computing pode ser útil para essa plataforma?
  5. Explique por que NoSQL não significa “fim do SQL”.
1G — Desafio Final: Rede Social Moderna
🔴 Avançado 🛠 Projeto Reflexivo Tema: síntese do capítulo

Imagine que você foi chamado para explicar a estrutura de dados de uma rede social para uma equipe iniciante.

  1. Quais tipos de dados essa rede social precisa armazenar?
  2. Quais problemas surgiriam se tudo fosse guardado em arquivos separados?
  3. Onde um SGBD ajudaria?
  4. Onde o modelo relacional seria útil?
  5. Onde tecnologias NoSQL poderiam fazer sentido?
  6. Como Big Data e IA poderiam ser usados nesse ambiente?
Produza uma resposta em formato de relatório curto, com começo, meio e conclusão.
Exercícios — Capítulo 2

Fundamentos de Banco de Dados

Dados, informação, tabelas, campos, chaves, tipos, relacionamentos, integridade e funcionamento real dos sistemas.

2A — Dados e Informação
🟢 Básico📖 Conceitual

Explique a diferença entre dado e informação. Depois transforme os dados “Maria, 8,7, Matemática, 2026” em uma informação compreensível.

Responda com suas palavras e crie uma frase completa.
2B — Estrutura das Tabelas
🟢 Básico📊 Estrutura
  1. Explique a diferença entre tabela, linha, coluna, registro e campo.
  2. Em uma tabela de clientes, identifique exemplos de campos e registros.
2C — Domínio e Tipos
🟡 Intermediário🧠 Análise
  1. Qual tipo de dado seria adequado para idade, preço, data de nascimento e e-mail?
  2. Explique por que telefone geralmente não deve ser tratado como número para cálculo.
  3. O que significa domínio de um campo?
2D — Chave Primária
🟡 Intermediário🔑 Chaves
  1. O que é chave primária?
  2. Por que nomes normalmente não são boas chaves primárias?
  3. Explique o conceito de unicidade.
2E — Relacionamentos
🟡 Intermediário🔗 Relações
  1. Explique a função da chave estrangeira.
  2. Por que relacionamentos evitam repetição desnecessária?
  3. Dê um exemplo de relacionamento entre duas entidades.
2F — Integridade
🔴 Avançado🛡 Integridade
  1. Explique integridade de entidade, referencial e de domínio.
  2. Dê um exemplo de dado inválido que o banco deveria bloquear.
  3. Por que o banco também deve validar dados, mesmo quando a aplicação já valida?
2G — Funcionamento Real
🟡 Intermediário🌐 Sistemas reais
  1. Explique o fluxo entre usuário, aplicação e banco de dados.
  2. O que acontece internamente quando um usuário salva um favorito em um aplicativo?
  3. Por que o usuário normalmente não vê SQL?
2H — Erros Clássicos
🟡 Intermediário⚠️ Diagnóstico
  1. Explique o problema de misturar nome, telefone e bairro em uma única coluna.
  2. Reescreva essa estrutura de forma correta.
  3. Cite dois erros comuns de iniciantes em banco de dados.
2I — Desafio Final: Sistema Escolar
🔴 Avançado🛠 Projeto Reflexivo

Imagine um sistema escolar.

  1. Quais tabelas poderiam existir?
  2. Quais campos seriam importantes?
  3. Onde seriam usadas chaves primárias e estrangeiras?
  4. Quais regras de integridade seriam importantes?
Exercícios — Capítulo 3

Modelagem Conceitual

Entidades, atributos, relacionamentos, cardinalidade, DER e pensamento analítico.

3A — Identificando Entidades
🟢 Básico📖 Entidades

Uma academia deseja controlar alunos, professores, planos, pagamentos e aulas.

  1. Quais elementos podem se tornar entidades?
  2. Explique por que essas entidades são importantes para o sistema.
  3. Existe algum elemento listado que talvez não precise virar entidade? Justifique.
3B — Identificando Atributos
🟢 Básico🧩 Atributos
  1. Cite pelo menos 6 atributos possíveis para a entidade Cliente.
  2. Qual atributo poderia funcionar como identificador?
  3. Quais atributos poderiam possuir validações específicas?
  4. Existe algum atributo desnecessário? Explique.
3C — Relacionamentos
🟡 Intermediário🔗 Relações

Uma loja virtual possui clientes, pedidos, produtos e categorias.

  1. Quais relacionamentos provavelmente existem?
  2. Explique cada relacionamento.
  3. O que aconteceria se essas entidades não fossem relacionadas?
  4. Quais problemas poderiam surgir?
3D — Cardinalidade
🟡 Intermediário📊 Cardinalidade
  1. Cliente realiza vários pedidos; cada pedido pertence a um cliente. Qual cardinalidade?
  2. Aluno cursa várias disciplinas; disciplina possui vários alunos. Qual cardinalidade?
  3. Funcionário possui um crachá exclusivo; cada crachá pertence a um funcionário. Qual cardinalidade?
3E — Problemas de Modelagem
🟡 Intermediário⚠️ Diagnóstico

Analise a estrutura:

alunoturmaprofessordisciplinanota
  1. Quais problemas essa estrutura pode gerar?
  2. Existe mistura de responsabilidades?
  3. Quais entidades poderiam ser separadas?
  4. Onde pode existir redundância?
  5. Como melhorar essa modelagem?
3F — Pensamento Analítico
🔴 Avançado🧠 Análise

Uma clínica deseja controlar pacientes, médicos, consultas, exames e pagamentos.

  1. Quais entidades provavelmente existirão?
  2. Quais atributos importantes cada entidade poderia possuir?
  3. Quais relacionamentos existirão?
  4. Quais cardinalidades provavelmente aparecerão?
  5. O que poderia acontecer se a clínica não modelasse corretamente o sistema?
3G — Interpretação de DER
🟡 Intermediário📐 DER
CLIENTE 1 ─── N PEDIDO
PEDIDO 1 ─── N ITEM_PEDIDO
PRODUTO 1 ─── N ITEM_PEDIDO
  1. Um cliente pode possuir vários pedidos?
  2. Um pedido pode possuir vários produtos?
  3. Por que ITEM_PEDIDO existe?
  4. Qual problema aconteceria sem essa entidade intermediária?
  5. Qual relacionamento do modelo é muitos-para-muitos?
3H — Mini Desafio de Modelagem
🔴 Avançado🛠 Projeto

Uma locadora de veículos deseja controlar clientes, veículos, locações, pagamentos e multas.

  1. Liste as entidades principais.
  2. Sugira atributos importantes para cada entidade.
  3. Explique os relacionamentos.
  4. Defina possíveis cardinalidades.
  5. Descreva problemas de uma modelagem ruim.
  6. Explique como a modelagem ajuda a organizar o sistema.
3I — Desafio Final: Cursos Online
🔴 Avançado🔥 Desafio final

Uma plataforma de cursos online deseja controlar alunos, professores, cursos, módulos, aulas, matrículas, pagamentos e certificados.

  1. Identifique as entidades principais.
  2. Defina atributos importantes.
  3. Explique os relacionamentos.
  4. Defina cardinalidades prováveis.
  5. Indique onde pode existir relacionamento N:N.
  6. Explique quais tabelas intermediárias poderiam existir.
  7. Quais problemas apareceriam sem modelagem adequada?
  8. Explique por que modelagem conceitual é importante antes da implementação física do banco.
Exercícios — Capítulo 3

Modelagem Lógica e Normalização

Transformação do DER comercial em tabelas, chaves, relacionamentos e formas normais.

3A — Entidade para tabela
  1. Explique como PRODUTO, CATEGORIA e FORNECEDOR viram tabelas.
  2. Mostre quais atributos viram colunas.
  3. Explique por que produto precisa de id_categoria e id_fornecedor.
3B — PK e FK
  1. Liste as PKs das tabelas categoria, fornecedor e produto.
  2. Liste as FKs da tabela produto.
  3. Explique o que aconteceria se produto.id_categoria apontasse para uma categoria inexistente.
3C — Tabela associativa
  1. Explique quando produto_fornecedor seria necessária.
  2. Por que preco_custo poderia ficar nessa tabela?
  3. Explique como N:N vira dois relacionamentos 1:N.
3D — Redundância
  1. Explique o problema de repetir o nome da categoria dentro de todos os produtos.
  2. Cite uma anomalia de atualização.
  3. Cite uma anomalia de exclusão.
3E — 1FN
  1. O que significa valor atômico?
  2. Por que fornecedores = “Tech, Alpha, Mega” viola 1FN?
  3. Como corrigir?
3F — 2FN
  1. O que é dependência parcial?
  2. Por que nome_fornecedor não deve ficar em produto_fornecedor?
  3. Onde esse dado deve ficar?
3G — 3FN
  1. O que é dependência transitiva?
  2. Por que nome_categoria não deve ficar na tabela produto?
  3. Explique a relação produto → categoria.
3H — Desafio de refinamento lógico
  1. Monte a estrutura final com categoria, fornecedor e produto.
  2. Indique PKs e FKs.
  3. Explique por que essa estrutura é melhor que uma tabela única.
Exercícios — Capítulo 4

SQL com MySQL

Prática com CLI, criação do banco comercial, inserção de dados reais, consultas, filtros, JOIN e relatórios.

4A — Criação do banco
  1. Escreva o comando para criar o banco comercio.
  2. Escreva o comando para selecionar esse banco.
  3. Explique a função de SHOW DATABASES.
4B — Criação das tabelas
  1. Crie a tabela categoria com PK.
  2. Crie a tabela fornecedor com PK.
  3. Explique por que produto deve ser criada depois delas.
4C — Inserção dos dados
  1. Insira três categorias.
  2. Insira três fornecedores.
  3. Insira três produtos respeitando as FKs.
4D — SELECT e WHERE
  1. Liste todos os produtos.
  2. Liste apenas os produtos da categoria BEBIDA.
  3. Liste produtos com qtde menor ou igual ao estoque_minimo.
4E — ORDER BY e LIKE
  1. Ordene os produtos pelo preço decrescente.
  2. Pesquise produtos que começam com P.
  3. Pesquise fornecedores que contenham BRASIL.
4F — UPDATE seguro
  1. Consulte o produto 22.
  2. Atualize seu preço.
  3. Consulte novamente para confirmar.
  4. Explique o risco de UPDATE sem WHERE.
4G — DELETE seguro
  1. Consulte um produto pelo ID.
  2. Remova esse produto com DELETE.
  3. Confirme a exclusão.
  4. Explique o risco de DELETE sem WHERE.
4H — FOREIGN KEY
  1. Tente explicar por que um produto não pode ter id_categoria inexistente.
  2. Explique o que a FK protege.
  3. Explique por que categoria deve existir antes de produto.
4I — JOIN
  1. Monte uma consulta que mostre produto e categoria.
  2. Monte uma consulta que mostre produto, categoria e fornecedor.
  3. Ordene o resultado pela descrição do produto.
4J — Relatórios com GROUP BY
  1. Conte produtos por categoria.
  2. Some o estoque por categoria.
  3. Calcule preço médio por categoria.
  4. Conte produtos por fornecedor.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.

🟠 Em construção

Os exercícios deste capítulo serão adicionados quando o conteúdo estiver pronto.