Banco de Dados I — 2026.2 · Aula de Revisão

Revisão Geral
MER · Modelo Relacional · Normalização

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 23/04/2026 (Quinta)
Correção — Atividade MER

O que era esperado

✔ Mínimo 5 entidades

Cada entidade com seus atributos e chave primária claramente identificados.

✔ Entidade fraca ou generalização

Ao menos uma das duas. Entidade fraca: retângulo duplo, relacionamento de identificação.

✔ Cardinalidades definidas

1:1, 1:N ou N:M em todos os relacionamentos, com participação (total/parcial).

✔ Atributos nos relacionamentos

Quando o relacionamento tem propriedades próprias (ex: quantidade em "contém").

Correção — Atividade MER

Erros mais comuns

Atributo virou entidade

Ex: "Endereço" como entidade com um único atributo. Se não tem relacionamentos próprios, é atributo.

Cardinalidade invertida

Um cliente faz muitos pedidos (1:N do cliente para pedido) — não N:1 nem N:M.

Chave primária ausente ou ambígua

Todo atributo (ou conjunto) que identifica unicamente uma entidade deve ser sublinhado.

Entidade fraca sem identificação

Entidade fraca precisa do losango duplo (relacionamento identificador) ligando-a à entidade forte.

Correção — Mapeamento MER → Relacional

Gabarito — Sistema Delivery

USUARIO(id, nome, email, telefone, dt_cadastro)
CLIENTE(id, cpf, endereco_entrega)  FK: id → USUARIO(id)
ENTREGADOR(id, cnh, tipo_veiculo, placa)  FK: id → USUARIO(id)
RESTAURANTE(id, nome, endereco, categoria, nota_media)
ITEM_CARDAPIO(numero, id_restaurante, nome, descricao, preco)
  FK: id_restaurante → RESTAURANTE(id)
PEDIDO(id, dt_hora, status, valor_total, taxa_entrega, forma_pagamento, id_cliente, id_restaurante, id_entregador)
PEDIDO_ITEM(id_pedido, numero_item, id_restaurante, quantidade, observacao)
  FK: id_pedido → PEDIDO  ·  (numero_item, id_restaurante) → ITEM_CARDAPIO
Banco de Dados I — 2026.2 · Prévia

Do esquema ao código
DDL & DML

DDL — define a estrutura DML — manipula os dados
SQL — Sublinguagens

O que são DDL e DML?

DDL — Data Definition Language

Define a estrutura do banco. Cria, altera e remove tabelas. Não toca nos dados.

CREATE TABLE   ALTER TABLE   DROP TABLE

DML — Data Manipulation Language

Manipula os dados dentro das tabelas já criadas. Insere, atualiza, remove e consulta.

INSERT   UPDATE   DELETE   SELECT

Primeiro vem o DDL — sem a estrutura, não há onde guardar os dados. Depois o DML popula o banco.

DDL — iFood · Parte 1

CREATE TABLE — Um exemplo

Cada tabela do esquema relacional vira um CREATE TABLE. Começando pela mais simples:

CREATE TABLE cliente (
  cli_cpf    VARCHAR(11) PRIMARY KEY, -- chave primária
  cli_nome   VARCHAR(100) NOT NULL,   -- obrigatório
  cli_cidade VARCHAR(80)           -- opcional (pode ser NULL)
);

Tipo de dado

Define o que a coluna aceita: VARCHAR, INT, DATE, NUMERIC

PRIMARY KEY

Identifica unicamente cada linha. Não pode ser NULL nem repetido.

NOT NULL

Torna o campo obrigatório. Sem isso, a coluna aceita ausência de valor.

DDL — iFood · Parte 2

CREATE TABLE — As demais tabelas

Tabelas que referenciam outras precisam ser criadas depois das referenciadas:

CREATE TABLE restaurante (
  rest_id     SERIAL PRIMARY KEY, -- gerado automaticamente
  rest_nome   VARCHAR(100) NOT NULL,
  rest_bairro VARCHAR(80)
);

CREATE TABLE pedido (
  num_pedido  SERIAL PRIMARY KEY,
  data_pedido DATE NOT NULL,
  cli_cpf     VARCHAR(11) REFERENCES cliente(cli_cpf), -- FK
  rest_id     INT REFERENCES restaurante(rest_id) -- FK
);

CREATE TABLE pedido_item (
  num_pedido INT REFERENCES pedido(num_pedido),
  cod_item   INT REFERENCES item(cod_item),
  qtd        INT NOT NULL,
  PRIMARY KEY (num_pedido, cod_item) -- PK composta
);
DML — iFood · INSERT

INSERT INTO — Populando o banco

Seguimos a mesma ordem: primeiro os dados das tabelas sem FK, depois os que dependem delas:

-- Clientes e restaurante
INSERT INTO cliente VALUES ('111', 'Ana', 'Belém');
INSERT INTO cliente VALUES ('222', 'Bia', 'Ananindeua');
INSERT INTO restaurante (rest_nome, rest_bairro) VALUES ('Saboroso', 'Umarizal');

-- Itens do cardápio
INSERT INTO item (item_nome, item_preco) VALUES ('X-Burguer', 25.00);
INSERT INTO item (item_nome, item_preco) VALUES ('Fritas', 10.00);

-- Pedido P01 da Ana no Saboroso
INSERT INTO pedido VALUES (DEFAULT, '2026-04-10', '111', 1);
INSERT INTO pedido_item VALUES (1, 1, 1); -- 1 X-Burguer
INSERT INTO pedido_item VALUES (1, 2, 2); -- 2 Fritas
Atividade em Sala

Pratique agora — DB Fiddle

Acesse db-fiddle.com no navegador. Selecione PostgreSQL no menu superior e execute os comandos que vimos.

① Cole o DDL

No painel esquerdo, cole os CREATE TABLE do iFood — cliente, restaurante, pedido e pedido_item.

② Cole o DML

No painel direito, cole os INSERT INTO com os dados da Ana e da Bia. Clique em Run.

Deu erro? Leia a mensagem — ela quase sempre aponta a linha exata do problema. Erros de FK são os mais comuns: tente inserir fora de ordem.

Próximos Passos

Semana de 28–30/04

Sem aula presencial. Atividade assíncrona de normalização — entrega até 05/05. Use o exemplo do iFood como referência.

05/05 — Avaliação 1 (P1)

Prova presencial cobrindo MER, Modelo Relacional e Normalização. Revise os slides e os exercícios assíncronos.

Dica de estudo: releia Heuser caps. 2–5 e tente normalizar uma tabela do zero, como fizemos hoje com o iFood.

Banco de Dados I — 2026.2

Bom recesso!
Até 05/05

📖 Heuser, caps. 2–5 · Pratique normalizações antes da prova