🧰 CAPÍTULO 00: KIT DE SOBREVIVÊNCIA — BANCO DE DADOS
Este capítulo assume que você já passou pelo Capítulo 00 — Fundamentos Comuns (terminal, Git, POO em Python, JSON/HTTP). Se ainda não viu, comece por lá.
🎯 Objetivos de Aprendizagem
Estimativa de dedicação: 2 horas de estudo autoguiado. Ao final deste capítulo, você será capaz de:
- 🔹 Ler e escrever
SELECT/INSERTbásicos — o suficiente para acompanhar as Atividades 02 a 04, antes de o DDL/DML formal chegar na Atividade 05. - 🔹 Ler a notação Crow's Foot (pé de galinha) usada em todos os diagramas ER do curso.
- 🔹 Subir e derrubar seu primeiro container Docker com um banco de dados.
🏢 Por que isso importa
A Atividade 01 já pede para você subir um banco via Docker, e as Atividades 02 a 04 já usam CREATE TABLE/INSERT/SELECT em exemplos e scripts de seed — três semanas antes de a Atividade 05 ensinar DDL formalmente. Este capítulo adianta o básico para você acompanhar sem travar.
🧠 1. SQL de Leitura em 15 Minutos
SQL é a linguagem para conversar com um banco relacional. Três comandos resolvem 80% do que você vai precisar nas primeiras semanas:
💻 Exemplo Completo
-- 1. Criar a estrutura (tabela) que vai guardar os dados
CREATE TABLE produto (
id INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100) NOT NULL,
preco DECIMAL(10,2) NOT NULL
);
-- 2. Inserir dados
INSERT INTO produto (nome, preco) VALUES ('Notebook TecPro X1', 3500.00);
INSERT INTO produto (nome, preco) VALUES ('Mouse Sem Fio', 89.90);
-- 3. Consultar dados
SELECT nome, preco FROM produto WHERE preco > 100;
🖥️ Resultado da Consulta
+----------------------+---------+
| nome | preco |
+----------------------+---------+
| Notebook TecPro X1 | 3500.00 |
+----------------------+---------+
🔍 Detalhamento do Código:
CREATE TABLE: define o "molde" — nome da tabela e, entre parênteses, cada coluna com seu tipo (INT,VARCHAR(100),DECIMAL(10,2)).PRIMARY KEY AUTO_INCREMENT: identificador único da linha, gerado automaticamente pelo banco.INSERT INTO tabela (colunas) VALUES (...): adiciona uma linha nova.SELECT colunas FROM tabela WHERE condição: recupera linhas que satisfazem a condição — aqui, só produtos com preço acima de 100 (por isso o "Mouse Sem Fio", 89.90, não aparece no resultado).
Esse mesmo trio (CREATE TABLE / INSERT / SELECT) é reaproveitado em praticamente todo mini-projeto SQLAlchemy dos 20 capítulos teóricos — a diferença é que lá o SQL fica "escondido" atrás de classes Python.
🧠 2. Notação ER / Crow's Foot Ilustrada
Todos os diagramas de entidade-relacionamento do curso (a partir da Atividade 02) usam a notação Crow's Foot ("pé de galinha") para representar cardinalidade — quantas linhas de uma tabela se relacionam com quantas linhas de outra.
| Símbolo | Nome | Significado |
|---|---|---|
|| | Um, exatamente | Exatamente 1 |
o| | Zero ou um | 0 ou 1 |
o{ | Zero ou muitos | 0, 1 ou mais |
|{ | Um ou muitos | 1 ou mais |
💻 Exemplo em Mermaid erDiagram
erDiagram
CLIENTE ||--o{ PEDIDO : realiza
PEDIDO ||--|{ ITEM_PEDIDO : contém
PRODUTO ||--o{ ITEM_PEDIDO : "está em"
🔍 Detalhamento do Diagrama:
CLIENTE ||--o{ PEDIDO: 1 Cliente (||) pode realizar 0 ou muitos Pedidos (o{) — mas todo Pedido pertence a exatamente 1 Cliente.PEDIDO ||--|{ ITEM_PEDIDO: 1 Pedido tem 1 ou muitos Itens (|{) — um pedido sem nenhum item não faz sentido no negócio.- O lado com
||ouo|(uma "barra") lê-se "um"; o lado com{(um "pé de galinha" aberto) lê-se "muitos".
Para desenhar seus próprios diagramas ER, o curso usa o draw.io. O erDiagram do Mermaid acima é só para você aprender a ler rápido, direto no navegador — sem precisar abrir outra ferramenta.
🧠 3. Docker: Seu Primeiro Container
Um container é um "computador isolado dentro do seu computador", já com o banco de dados instalado e configurado — evita instalar MySQL/PostgreSQL direto no seu sistema operacional.
flowchart LR
A["💻 Seu computador"] -->|"docker run"| B["📦 Container PostgreSQL"]
B -->|"porta 5432"| C["🔌 Cliente SQL (pgAdmin / DBeaver)"]
style B fill:#e3f2fd,stroke:#1e88e5
💻 Comandos Essenciais
# 1. Baixa a imagem e sobe um container PostgreSQL 17
docker run --name tecpro-postgres -e POSTGRES_PASSWORD=tecpro123 -p 5432:5432 -d postgres:17
# 2. Confere se o container está rodando
docker ps
# 3. Para o container quando terminar de usar
docker stop tecpro-postgres
🔍 Detalhamento do Comando:
--name tecpro-postgres: dá um nome amigável ao container (em vez de um ID aleatório).-e POSTGRES_PASSWORD=tecpro123: variável de ambiente — a senha do usuáriopostgresdentro do container.-p 5432:5432: mapeia a porta5432do container para a porta5432da sua máquina (host:container) — é assim que o pgAdmin/DBeaver consegue se conectar.-d: roda o container em segundo plano (detached), sem travar o terminal.
Se docker run falhar com "port is already allocated", outro processo (talvez um PostgreSQL instalado direto no Windows) já está usando a porta 5432. Mude o mapeamento para -p 5433:5432 e conecte seu cliente SQL na porta 5433.
💡 Checkpoint de Lógica
Reflexão Profissional: Por que a notação Crow's Foot marca dois números em cada lado do relacionamento (ex: || de um lado e o{ do outro) em vez de só um? (Resposta: porque a cardinalidade real de um relacionamento sempre tem um mínimo e um máximo de cada lado — "um Pedido pertence a exatamente 1 Cliente" (mínimo=máximo=1) é uma regra de negócio diferente de "um Cliente tem 0 ou muitos Pedidos" (mínimo=0), e o diagrama precisa capturar as duas coisas para o mapeamento para tabelas na Atividade 03 funcionar sem ambiguidade.) 🧠🛡️
🧪 Quiz de Fixação e Autoavaliação
🧪 Quiz de Autoavaliação — Capítulo 00 (Banco de Dados)
🧪 Quiz de Autoavaliação — Capítulo 00 (Banco de Dados)
1. No comando SELECT nome, preco FROM produto WHERE preco > 100;, o que a cláusula WHERE faz?
-
A) Cria a tabela
produto. - B) Ordena os resultados por preço.
- C) Filtra apenas as linhas que satisfazem a condição informada.
- D) Insere uma nova linha na tabela.
💡 Ver Resposta e Justificativa
Resposta Correta: C
Justificativa: WHERE filtra linhas antes de retorná-las — só as que atendem à condição (preco > 100) aparecem no resultado.
2. Em CLIENTE ||--o{ PEDIDO, o que o símbolo o{ do lado de PEDIDO significa?
- A) Exatamente 1 Pedido.
- B) Zero ou muitos Pedidos.
- C) Um ou muitos Pedidos, nunca zero.
- D) O Pedido é opcional para o sistema existir.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: O "pé de galinha" aberto ({) combinado com o círculo (o) significa "zero ou muitos" — um Cliente pode existir sem nenhum Pedido ainda.
3. No comando docker run ... -p 5432:5432 -d postgres:17, para que serve o -p 5432:5432?
- A) Define a senha do banco.
- B) Mapeia a porta do container para uma porta acessível no seu computador.
- C) Define o nome do container.
- D) Roda o container em segundo plano.
💡 Ver Resposta e Justificativa
Resposta Correta: B
Justificativa: -p host:container conecta a porta interna do container a uma porta da sua máquina — sem isso, ferramentas como pgAdmin não conseguiriam alcançar o banco.
🛠️ Ponte para a Ação
Você está pronto para a jornada. Siga para: 👉 CAPÍTULO 01: INTRODUÇÃO E VISÃO GERAL (ANSI/SPARC) 👉 ATIVIDADE 01: SETUP DO AMBIENTE E DUAL-DATABASE
📌 Resumo Executivo & Key Takeaways
- SQL:
CREATE TABLEdefine a estrutura,INSERTadiciona dados,SELECT ... WHERErecupera e filtra. - Crow's Foot: cada lado de um relacionamento tem um mínimo e um máximo —
||é "exatamente 1",o{é "zero ou muitos". - Docker:
docker run -p host:container -d imagemsobe um banco isolado em segundo plano;docker psconfere,docker stopderruba.