Gabarito — P1 — Banco de Dados I — MesaPay

Prof. Gustavo Pinto 05/05/2026 USO EXCLUSIVO DO PROFESSOR

Q1 — Modelagem e Mapeamento

16,0 pts

(a) DER completo — 9,0 pts

Entidades:

  1. RESTAURANTE { cnpj, nomeFantasia, segmento, cidade }
  2. CONTA { numConta, saldo, dataCriacao }
  3. RECEBIVEL { codRecebivel, valorBruto, dataVenda, formaPagamento }
  4. ANTECIPACAO { codAntecipacao, taxa, dataEmissao, modalidade }
  5. PARCELA { numParcela, dataVencimento, valorParcela, status } — ENTIDADE FRACA de ANTECIPACAO
    Justificativa: numParcela só identifica a parcela dentro de uma antecipação específica; sem ela a parcela não existe nem pode ser identificada unicamente.

Relacionamentos:

RelacionamentoEntidade ACard. ACard. BEntidade BObs.
POSSUIRESTAURANTE(1,1)(1,1)CONTA1:1, total em ambos
GERARESTAURANTE(0,N)(1,1)RECEBIVEL1:N
SOLICITARESTAURANTE(0,N)(1,1)ANTECIPACAO1:N
INCLUIANTECIPACAO(1,N)(0,N)RECEBIVELN:M — atrib: valorAntecipado
COMPOSTA_DE ⬦⬦ANTECIPACAO(1,N)(1,1)PARCELArel. identificador (losango duplo)
  • 0,5 pt por entidade com atributos e identificador corretos (5 × 0,5 = 2,5 pts)
  • +0,5 pt: PARCELA como fraca com justificativa válida
  • 0,8 pt por relacionamento correto (nome + entidades + cardinalidades) — 5 × 0,8 = 4,0 pts
  • +0,5 pt: identificar valorAntecipado como atributo de INCLUI
  • +0,5 pt: COMPOSTA_DE como rel. identificador (losango duplo)
  • Aceitar nomes alternativos razoáveis para entidades e relacionamentos

(b) Esquema relacional completo — 7,0 pts

RESTAURANTE(cnpj, nomeFantasia, segmento, cidade)

CONTA(numConta, saldo, dataCriacao, #cnpj)
  FK: cnpj → RESTAURANTE(cnpj)   [+ UNIQUE(cnpj) para garantir 1:1]

RECEBIVEL(codRecebivel, valorBruto, dataVenda, formaPagamento, #cnpj)
  FK: cnpj → RESTAURANTE(cnpj)

ANTECIPACAO(codAntecipacao, taxa, dataEmissao, modalidade, #cnpj)
  FK: cnpj → RESTAURANTE(cnpj)

PARCELA(#codAntecipacao, numParcela, dataVencimento, valorParcela, status)
  PK composta: (codAntecipacao + numParcela)
  FK: codAntecipacao → ANTECIPACAO(codAntecipacao)

INCLUI(#codAntecipacao, #codRecebivel, valorAntecipado)
  PK composta: (codAntecipacao + codRecebivel)
  FK: codAntecipacao → ANTECIPACAO
  FK: codRecebivel   → RECEBIVEL
  • 1,0 pt por tabela com identificadores e FKs corretos (6 tabelas × ~1,0 ≈ 6,0 pts)
  • +0,5 pt: PARCELA com PK composta correta (codAntecipacao + numParcela)
  • +0,5 pt: mencionar UNIQUE(cnpj) em CONTA ou justificar a restrição 1:1
  • Aceitar merge CONTA↔RESTAURANTE desde que a restrição 1:1 seja mantida

Q2 — Normalização (2FN)

6,0 pts

Esquema: EXTRATO(codAntecipacao, dataEmissao, taxa, modalidade, cnpj, nomeRest, segmento, codRecebivel, valorBruto, dataVenda, formaPagamento, valorAntecipado)
PK: (codAntecipacao, codRecebivel)

Não está na 2FN. Dependências funcionais parciais:

codAntecipacao → dataEmissao, taxa, modalidade,
                 cnpj, nomeRest, segmento

codRecebivel   → valorBruto, dataVenda, formaPagamento

O único atributo que depende da PK completa é valorAntecipado.

Esquemas após 2FN:

ANTECIPACAO(codAntecipacao, dataEmissao, taxa, modalidade, cnpj, nomeRest, segmento)

RECEBIVEL(codRecebivel, valorBruto, dataVenda, formaPagamento)

INCLUI(codAntecipacao, codRecebivel, valorAntecipado)
  • 1,0 pt: deps. parciais de codAntecipacao (ao menos 4 atributos corretos)
  • 0,5 pt: deps. parciais de codRecebivel
  • 0,5 pt: concluir NÃO está na 2FN com justificativa
  • 1,5 pt: esquemas ANTECIPACAO e RECEBIVEL corretos com identificadores
  • 1,5 pt: esquema INCLUI correto com PK composta e valorAntecipado
  • Aceitar nomes alternativos para as tabelas

Q3 — DDL

3,0 pts

CREATE TABLE — 3,0 pts

CREATE TABLE ANTECIPACAO (
    codAntecipacao  INT           PRIMARY KEY,
    dataEmissao     DATE          NOT NULL DEFAULT CURRENT_DATE,
    taxa            DECIMAL(5,2)  NOT NULL CHECK (taxa > 0),
    modalidade      VARCHAR(10)   NOT NULL
                                  CHECK (modalidade IN ('Padrao', 'Pontual')),
    cnpj            VARCHAR(18)   NOT NULL REFERENCES RESTAURANTE(cnpj)
);
  • 0,6 pt: PRIMARY KEY em codAntecipacao
  • 0,6 pt: NOT NULL + DEFAULT CURRENT_DATE em dataEmissao
  • 0,6 pt: CHECK (taxa > 0)
  • 0,6 pt: CHECK com os dois valores em modalidade
  • 0,6 pt: REFERENCES RESTAURANTE(cnpj)
  • Aceitar CURRENT_DATE / NOW() / GETDATE()
  • Aceitar variações de tipo (CHAR, TEXT, NUMERIC)
  • Sintaxe levemente errada mas semanticamente correta: desconto máximo de 0,1 pt por item

Resumo de Pontuação

QuestãoTemaValor
Q1aDER completo (entidades + fraca + relacionamentos + atrib N:M)9,0
Q1bMapeamento MER → Relacional7,0
Q2Normalização — 2FN (deps. parciais + esquemas resultantes)6,0
Q3DDL — CREATE TABLE ANTECIPACAO3,0
TOTAL25,0
Gabarito — uso exclusivo do professor