Capítulo 9 — Dados e bancos de dados
Mapa da aula
Aula 09 publicada. Mapa, exemplo, EX025.
flowchart TD
N0["9.1 Desenhar uma tabela"]
N1["9.2 Consultar com SQL"]
N2["Laboratório — Contagem de reportes com SQLite"]
N3["9.3 Minimização de dados"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX025"]
Desenho lógico
flowchart LR
N0["9.1 Desenhar uma tabela"]
N1["9.2 Consultar com SQL"]
N2["Laboratório — Contagem de reportes com SQLite"]
N3["9.3 Minimização de dados"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX025"]
[9.1 Desenhar uma tabela]
|
v
[9.2 Consultar com SQL]
|
v
[Laboratório — Contagem de reportes com SQLite]
|
v
[9.3 Minimização de dados]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX025]
Objetivos de aprendizagem
Você vai (1) desenhar uma tabela simples para reportes de segurança; (2) consultar dados com SQL; (3) aplicar a minimização de dados.
9.1 Desenhar uma tabela
Nadia desenha uma tabela de reportes com colunas para identificador do reporte, data, unidade, categoria e veredito. Deixa de fora, de propósito, o nome de quem reportou, porque a análise precisa apenas de contagens por unidade e dados pessoais criariam risco à privacidade. Cada coluna tem um tipo e regras, como o veredito ser malicioso, inofensivo ou desconhecido. Uma tabela bem desenhada dificulta os erros: um veredito digitado errado é rejeitado, em vez de ser contado silenciosamente como uma nova categoria que distorce os resultados. O responsável pela TI revisa o desenho e aprova as regras antes que qualquer dado seja carregado.
9.2 Consultar com SQL
Usando o módulo sqlite3, que já vem com o Python, Nadia carrega reportes sintéticos e escreve consultas. Uma conta os reportes por unidade, outra conta os reportes maliciosos por mês e uma terceira encontra as categorias mais comuns. O SQL expressa essas perguntas de forma compacta e deixa o banco de dados fazer o trabalho. O laboratório mostra que os e-mails com tema de fatura foram a categoria maliciosa mais comum. Ela aprende a ler os resultados das consultas com senso crítico, verificando se uma contagem alta reflete mais ataques ou simplesmente mais reportes numa unidade específica. Ela salva cada consulta com um comentário.
Laboratório — Contagem de reportes com SQLite
# Counting synthetic reports with SQLite.
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("create table reports(id integer primary key, month text, branch text, category text, verdict text check (verdict in ('malicious','harmless','unknown')))")
rows = [("2026-01", "Central", "invoice", "malicious")] * 5 + [("2026-02", "Riverside", "parcel", "malicious")] * 3 + \
[("2026-02", "Hill", "account", "malicious")] * 2 + [("2026-03", "Central", "invoice", "malicious")] * 2 + [("2026-03", "Market", "newsletter", "harmless")] * 36
db.executemany("insert into reports(month,branch,category,verdict) values (?,?,?,?)", rows)
for r in db.execute("select category, count(*) from reports where verdict='malicious' group by category order by 2 desc"): print(r)
Execute com python3 lab_sql.py. Saída verificada:
('invoice', 7)
('parcel', 3)
('account', 2)
9.3 Minimização de dados
Minimização de dados significa coletar apenas os dados necessários para uma finalidade. Nadia explica ao responsável pela TI da Ashcombe por que os nomes de quem reporta não devem ser guardados na tabela de análise: os nomes poderiam ser usados para julgar indivíduos, o que desestimularia os reportes, e acrescentam pouco às decisões do programa. Os reportes originais permanecem no sistema de e-mail, sob suas regras normais de retenção. O princípio liga a legislação de privacidade ao objetivo, próprio dos fatores humanos, de fazer as pessoas se sentirem seguras para reportar qualquer coisa que pareça estranha. O responsável pela TI concorda.
Exemplo resolvido
Nadia desenha uma tabela de reportes sem nomes, a consulta com SQLite e defende a minimização de dados.
Caso sintético. Os dados são sintéticos.
Erros e limites
Remover os nomes impede alguns acompanhamentos. Os rótulos de categoria podem ser inconsistentes.
Exercícios
- EX025 — Nome excluído. Por que a tabela exclui os nomes de quem reporta? Rubrica: 3 = a análise precisa apenas de contagens por unidade e os nomes criam risco;; 2 = minimização;; 1 = vago;; 0 = nenhuma.
- EX026 — Categoria no topo. Que categoria maliciosa foi a mais comum no laboratório? Rubrica: 3 = fatura;; 2 = faturas;; 1 = encomenda;; 0 = nenhuma.
- EX027 — Efeito do reporte. O que Nadia deve verificar quando a contagem de uma unidade é alta? Rubrica: 3 = se reflete mais ataques ou mais reportes;; 2 = reportes;; 1 = vago;; 0 = nenhuma.
Síntese
Tabelas bem desenhadas, consultas simples e dados minimizados sustentam uma análise segura.
Continue estudando — aula 09 (capítulo 09 de 40)
← Capítulo 08 · Índice das aulas · Capítulo 10 →
Continue para a próxima aula já escrita.