Banco de Dados I — 2026.2

Aula 1
Apresentação da Disciplina

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 31 de março de 2026 🕣 7h30 – 9h10

Agenda de hoje

Sobre a Disciplina

Ferramentas da Disciplina

🗂️ Modelagem ER

BRModelo Web

brmodeloweb.com

Gratuito, no navegador, notação do Heuser. Usado nas aulas de MER.

💻 Aulas e Exercícios

DB Fiddle

db-fiddle.com

Escreva e execute SQL no navegador sem instalar nada. Selecione PostgreSQL antes de rodar.

🏗️ Projeto Final

Supabase

supabase.com

PostgreSQL completo na nuvem. Cada grupo cria uma conta gratuita e usa o SQL Editor integrado.

Ementa

Avaliação

📝 Prova (P1) MER, Modelo Relacional, Normalização — 23/04 25 pts
💻 Atividade Prática SQL: DDL, DML, SELECT, JOINs — 02/06 25 pts
🏗️ Projeto Final Banco completo em grupo — jun/jul 50 pts

Projeto: EP1 (10 pts) + EP2 (15 pts) + Apresentação (25 pts)

Calendário — Março a Junho

#DataDiaConteúdo
131/03TerApresentação da disciplina. O que é BD? SGBD, modelos de dados, arquitetura em 3 níveis
202/04QuiMER: entidades, atributos, relacionamentos, cardinalidade, participação
307/04TerMER: entidades fracas, generalização/especialização. Exercícios de modelagem
409/04QuiModelo Relacional: mapeamento MER→Relacional. Normalização (1FN, 2FN, 3FN)
14/04TerViagem — sem aula (atividade assíncrona)
16/04QuiViagem — sem aula (atividade assíncrona)
21/04TerTiradentes — sem aula (atividade assíncrona)
P123/04Qui⭐ Avaliação 1 — MER, Modelo Relacional, Normalização
28/04TerViagem — sem aula (atividade assíncrona)
30/04QuiViagem — sem aula (atividade assíncrona)
505/05TerIntrodução ao SQL. DDL: CREATE TABLE, tipos de dados, constraints
607/05QuiDDL: ALTER TABLE, DROP TABLE. Laboratório prático
712/05TerDML: INSERT, UPDATE, DELETE. Transações básicas: COMMIT, ROLLBACK
814/05QuiLaboratório: criação completa de um banco (DDL + DML)
919/05TerSELECT: WHERE, ORDER BY, LIMIT. Funções escalares básicas
1021/05QuiSELECT: Funções de agregação (COUNT, SUM, AVG). GROUP BY e HAVING
1126/05TerJOINs: INNER JOIN, LEFT JOIN, RIGHT JOIN. Exercícios multi-tabela
1228/05QuiLaboratório de consultas: exercícios progressivos
AP02/06Ter⭐ Atividade Prática — DDL, DML, SELECT, JOINs

Calendário — Junho a Julho

#DataDiaConteúdo
04/06QuiCorpus Christi — sem aula
1309/06TerSubqueries (IN, EXISTS). Views. CTEs básicas
1411/06QuiÍndices: conceito e criação. Transações: ACID em profundidade
1516/06TerRevisão geral + tirar dúvidas antes do projeto
1618/06Qui🏗️ Kickoff do Projeto: formação de grupos, escolha de tema, proposta
1723/06TerOrientação: modelagem ER
1825/06QuiOrientação: modelo relacional + normalização do esquema
1930/06TerOrientação: DDL — criação das tabelas no SGBD
EP102/07Qui⭐ Entrega Parcial 1: diagrama ER + scripts DDL funcionando
2007/07TerOrientação: DML — população do banco com dados consistentes
2109/07QuiOrientação: consultas SQL (relatórios, filtros, JOINs)
EP214/07Ter⭐ Entrega Parcial 2: banco com dados + conjunto de consultas
2216/07QuiApresentações — Grupos 1 e 2
2321/07TerApresentações — Grupos 3 e 4
2423/07QuiApresentações — Grupos 5 e 6 + encerramento

Dados vs. Informação

Qual a diferença entre dado e informação?

📦 Dado

Fato bruto, isolado, sem contexto

"42"  |  "João"  |  "2026-03-31"

💡 Informação

Dados processados com contexto e significado

"João tem 42 anos e se matriculou em 31/03/2026"

Banco de dados = infraestrutura para transformar dados em informação.

O que é um Banco de Dados?

Uma coleção organizada de dados inter-relacionados, representando aspectos do mundo real, projetada para atender a um propósito específico.

  • Agenda de contatos do celular
  • Cadastro de clientes de um banco
  • Histórico de compras num e-commerce
  • Prontuário de pacientes de um hospital
Contatos 🔍 Buscar AG Ana Gomes +55 91 9 8000-0001 BC Bruno Costa +55 91 9 8000-0002 CS Carla Silva +55 91 9 8000-0003 DS Diego Santos +55 91 9 8000-0004

O que acontece sem um banco de dados?

🔁 Redundância

Mesmo dado repetido em vários arquivos

Ex: nome do cliente em planilha de vendas, faturamento e suporte

⚠️ Inconsistência

Dados divergentes entre arquivos diferentes

Ex: endereço atualizado em um lugar, desatualizado em outro

🔍 Acesso difícil

Sem mecanismo padrão para consultar e filtrar

Ex: "quantos clientes compraram mais de 3 vezes?" — impossível em CSV

🔒 Sem controle

Qualquer pessoa pode modificar ou apagar tudo

Ex: arquivo compartilhado no Google Drive com edição livre

O que é um SGBD?

Um Sistema de Gerenciamento de Banco de Dados é o software que permite criar, manter e acessar bancos de dados de forma eficiente, segura e confiável.

SGBDs no mercado

🐘 PostgreSQL

Open source, robusto, rico em recursos

← usaremos na disciplina (ver Anexo)

🐬 MySQL / MariaDB

Muito popular na web, simples e rápido

Usado por Facebook, Twitter, Wikipedia

🏢 Oracle / SQL Server

Soluções corporativas pagas e robustas

Dominantes em bancos e grandes empresas

📱 SQLite

Embarcado, sem servidor — apps e protótipos

Dentro de todo celular Android e iOS

🍃 MongoDB

NoSQL orientado a documentos JSON

Flexível para dados sem esquema fixo

🔴 Redis

NoSQL chave-valor, altíssima performance

Cache, sessões, filas em tempo real

Modelos de Dados

Foco desta disciplina: modelo relacional.

Modelo Hierárquico

  • Proposto pela IBM nos anos 1960 (IMS)
  • Estrutura em árvore: cada filho tem exatamente um pai
  • Navegação sempre de cima para baixo
  • Limitado: relacionamentos M:N são difíceis
  • Ainda usado em mainframes bancários

Problema: um funcionário que pertence a dois departamentos precisa ser duplicado na árvore.

Empresa Depto A Depto B Func 1 Func 2 Func 3 Cada nó tem exatamente um pai

Modelo em Rede

  • Padrão CODASYL (1969)
  • Estrutura em grafo: um filho pode ter múltiplos pais
  • Resolve o problema M:N do hierárquico
  • Navegação complexa via ponteiros
  • Prático mas difícil de manter

Avanço: "Estudante matriculado em vários cursos, cada curso com vários estudantes" — possível sem duplicação.

Aluno A Aluno B BD I POO LP Aluno A Aluno B Múltiplas conexões sem hierarquia

Modelo Relacional ⭐

  • Proposto por E.F. Codd (IBM, 1970)
  • Dados em tabelas (relações) com linhas e colunas
  • Relacionamentos via chaves estrangeiras
  • Linguagem padronizada: SQL
  • Independente de implementação física
  • Dominante até hoje — o foco desta disciplina

FUNCIONARIO

idnomedepto_id
1Ana Gomes10
2Bruno Costa20
3Carla Silva10

DEPARTAMENTO

idnome
10Engenharia
20Marketing

PK   FK

Modelos NoSQL

📄 Orientado a Documentos

Armazena documentos JSON/BSON. Flexível, sem esquema fixo.

Ex: MongoDB — perfil de usuário, catálogo de produtos

🔑 Chave-Valor

Estrutura mais simples: chave → valor. Altíssima performance.

Ex: Redis — sessões, cache, carrinho de compras

🌐 Orientado a Grafos

Nós e arestas para modelar relacionamentos complexos.

Ex: Neo4j — redes sociais, detecção de fraude

📊 Colunar

Armazena dados por coluna, eficiente para análises em larga escala.

Ex: Cassandra — séries temporais, IoT, analytics

NoSQL = "Not Only SQL" — usados quando o relacional não é a melhor escolha.

Arquitetura em 3 Níveis (ANSI/SPARC)

👁️

Nível Externo — Visão

O que cada usuário ou aplicação enxerga — apenas os dados relevantes para ele

🧠

Nível Conceitual — Lógico

Estrutura global do banco: tabelas, colunas, relacionamentos e restrições

💾

Nível Interno — Físico

Como os dados são efetivamente armazenados em disco (arquivos, índices, blocos)

Proposta em 1975 — base para a independência de dados.

Nível Externo — Visão

  • Cada usuário/aplicação vê apenas seus dados
  • Implementado com Views SQL
  • Garante segurança: salário visível só pelo RH
  • Permite simplificar dados complexos
  • Vários níveis externos coexistem

👨‍💼 Visão do Funcionário

Vê: nome, cargo, departamento

Não vê: salário dos colegas, dados financeiros

🏢 Visão do Gerente

Vê: equipe completa + salários do setor

Não vê: dados de outros departamentos

📊 Visão do RH

Vê: todos os funcionários e todos os salários

Nível Conceitual — Lógico

  • Esquema global — toda a estrutura do BD
  • Define tabelas, colunas, tipos e domínios
  • Define restrições: PK, FK, NOT NULL, UNIQUE
  • Define relacionamentos entre entidades
  • Gerenciado pelo DBA (Administrador de BD)
  • O modelo ER é uma ferramenta para projetá-lo

Esquema conceitual (exemplo)

TABLE Funcionario (
  id       INT PRIMARY KEY,
  nome    VARCHAR(100) NOT NULL,
  salario DECIMAL(10,2),
  depto   INT REFERENCES Depto(id)
)

Nível Interno — Físico

  • Como os dados são fisicamente gravados em disco
  • Organização em páginas e blocos (ex: 8KB cada)
  • Estruturas de índice: B-Tree, Hash, GiST
  • Compressão, criptografia, particionamento
  • Gerenciado automaticamente pelo SGBD
  • O desenvolvedor normalmente não precisa se preocupar

📁 Arquivo de dados

Registros armazenados em páginas de disco

Bloco 1: linhas 1-100  |  Bloco 2: linhas 101-200 …

🌲 Índice B-Tree

Estrutura de árvore para buscas em O(log n)

Ex: buscar por id = 42 em 1 milhão de registros

💿 Buffer Pool

Páginas em memória RAM para evitar acesso a disco

Independência de Dados

🔧 Independência Física

Posso mudar como os dados são armazenados sem afetar a estrutura lógica.

Ex: reorganizar índices, trocar o disco, mudar formato — o esquema não muda.

🏗️ Independência Lógica

Posso mudar a estrutura lógica sem quebrar as aplicações que usam o banco.

Ex: adicionar uma coluna nova sem precisar alterar o sistema.

Independência é o principal benefício da arquitetura em 3 níveis.

Próxima Aula — 02/04 (Qui)

Modelagem
Entidade-Relacionamento

📖 Leitura recomendada: Heuser, cap. 2

Anexo

Instalação do PostgreSQL

PostgreSQL é o SGBD que usaremos na disciplina. É gratuito, open source e disponível para todos os sistemas operacionais.

🪟 Windows

Instalador gráfico oficial com pgAdmin incluso

postgresql.org/download/windows

🍎 macOS

Postgres.app (mais simples) ou Homebrew

postgresapp.com

🐧 Linux

Via gerenciador de pacotes (apt, dnf, pacman)

postgresql.org/download/linux

Versão recomendada: PostgreSQL 17 (última estável)

Anexo

Instalação — Windows

1. Download

Acesse postgresql.org/download/windows → clique em "Download the installer" → escolha a versão 17 para Windows x86-64.

2. Instalação

  • Execute o instalador como Administrador
  • Componentes: PostgreSQL Server + pgAdmin 4 + Command Line Tools
  • Defina uma senha para o usuário postgres (anote!)
  • Porta padrão: 5432 — não altere

3. Teste no terminal

psql -U postgres -c "SELECT version();"
# deve mostrar: PostgreSQL 17.x ...
Anexo

Instalação — macOS e Linux

macOS — Opção 1: Postgres.app (recomendado)

Baixe em postgresapp.com, arraste para Aplicativos, clique em Initialize. Pronto.

macOS — Opção 2: Homebrew

brew install postgresql@17
brew services start postgresql@17

Ubuntu / Debian

sudo apt update && sudo apt install -y postgresql
sudo systemctl start postgresql

Fedora / RHEL

sudo dnf install postgresql-server postgresql-contrib
sudo postgresql-setup --initdb && sudo systemctl start postgresql
Anexo

Primeiro Acesso

Via terminal (psql)

# conectar ao PostgreSQL
psql -U postgres

# criar um banco de dados de teste
CREATE DATABASE bd1_teste;

# conectar a ele
\c bd1_teste

# verificar versão
SELECT version();

Via pgAdmin 4 (interface gráfica)

  • Abra o pgAdmin → clique em Add New Server
  • Name: local  |  Host: localhost  |  Port: 5432
  • Username: postgres  |  Password: (a que você definiu)
  • Salve e expanda o servidor para ver os bancos