Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2023

Banco de DadosBanco de Dados Relacionais
Código
fg060711
Banca
FGV
Órgão
CGE-SC
Ano
2023
Nível
Superior
Cargo
Auditor do Estado - Ciências da Computação - Tarde (Conhecimentos Específicos)
Uma rede de lojas de departamentos planeja configurar uma tabela de fato (VENDAS) que favoreça a integridade para análise de vendas no mesmo carrinho (na mesma transação de venda, tal qual a associação conhecida entre fralda e cerveja). A tabela de fato possui os seguintes atributos: ChaveCalendário(FK), ChaveLoja(FK), ChaveProduto(FK), ChaveCliente(FK), IDTransação, HoraMinVenda, ReaisVendidos e QuantidadeVendida.Assinale a opção que indica o(s) atributo(s) que deve(m) ser a chave primária da tabela de fato VENDAS.(FK = Foreign Key/chave estrangeira)
  1. AApenas IDTransação.
  2. BApenas ChaveProduto.
  3. CChave composta por ChaveProduto e IDTransação.
  4. DChave composta por ChaveCliente e IDTransação.
  5. EIDTransação, ChaveProduto e ChaveCliente.
Revelar gabarito e comentário

GabaritoC — Chave composta por ChaveProduto e IDTransação.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Chave primária em tabela fato (modelagem dimensional)

Gabarito: letra C. A chave primária da tabela fato VENDAS deve ser composta por IDTransação e ChaveProduto. Essa combinação assegura a unicidade no nível de granularidade de um produto por transação, que é justamente o que permite análises de associação (cesta de compras) sem ambiguidades. As demais alternativas falham por não garantir unicidade ou por incluir atributos desnecessários.

A tabela fato registra eventos de venda. Cada linha representa a venda de um produto em uma transação (carrinho). Portanto, a menor granularidade é o par (transação, produto). O IDTransação sozinho repete-se quando o carrinho contém mais de um item; ChaveProduto sozinho aparece em muitas transações. Já (ChaveCliente, IDTransação) ainda permite múltiplos produtos na mesma transação do mesmo cliente. A adição de ChaveCliente é redundante, pois a transação já está vinculada a um cliente pela chave estrangeira ChaveCliente.

Critério / Aspecto

Alternativa A (IDTransação)

Alternativa B (ChaveProduto)

Alternativa C (IDTransação + ChaveProduto)

Alternativa D (ChaveCliente + IDTransação)

Alternativa E (IDTransação + ChaveProduto + ChaveCliente)

Garante unicidade por produto em uma transação?

❌ Não (vários produtos/linhas p/ mesmo ID)

❌ Não (mesmo produto em várias transações)

✅ Sim

❌ Não (vários produtos na mesma transação)

✅ Sim (mas redundante)

Granularidade correta (produto + transação)?

✅ (mas com redundância)

Evita atributos desnecessários?

✅ (mas falha na unicidade)

✅ (mas falha na unicidade)

❌ (inclui cliente sem necessidade)

❌ (inclui cliente sem necessidade)

Adequado para análise de cesta de compras?

✅ (mas superdimensionado)

Resultado final

❌ Incorreta

❌ Incorreta

Correta (Gabarito)

❌ Incorreta

❌ Incorreta

Alternativa A — ❌ Incorreta

Apenas IDTransação não é suficiente, pois uma transação pode conter vários produtos, gerando múltiplas linhas com o mesmo ID. Exemplo: a transação 100 pode ter os produtos 1, 2 e 3 – três linhas distintas, portanto IDTransação não as distingue.

Alternativa B — ❌ Incorreta

Apenas ChaveProduto também não serve: o mesmo produto é vendido em milhares de transações, repetindo-se a chave.

Alternativa C — ✅ Correta ⟵ GABARITO

(IDTransação, ChaveProduto) identifica cada linha de forma única. Cada combinação de uma transação e um produto aparece no máximo uma vez na tabela fato (assumindo que o modelo agregue quantidade e valor, sem repetir o mesmo produto na mesma transação). Essa é a granularidade típica para análises de cesta de compras.

Alternativa D — ❌ Incorreta

(ChaveCliente, IDTransação) ainda permite múltiplos produtos na mesma transação, pois o cliente compra vários itens em um único carrinho. O par não é único: ex.: cliente 5, transação 10, produtos A e B geram duas linhas com a mesma chave.

Alternativa E — ❌ Incorreta

(IDTransação, ChaveProduto, ChaveCliente) inclui um atributo desnecessário. Como ChaveCliente é uma chave estrangeira que depende de IDTransação (cada transação tem um único cliente), adicioná-la não aumenta a unicidade e quebra a boa prática de manter chaves primárias mínimas. Além disso, não há ganho de integridade: a combinação (IDTransação, ChaveProduto) já é suficiente.

PEGA ESSA DICA!

Em tabelas fato, a chave primária é quase sempre composta pelas chaves estrangeiras das dimensões no nível de granularidade definido. Identifique a menor linha de detalhe – neste caso, um produto por transação – e monte a chave com os identificadores que, juntos, tornam cada linha única. Evite incluir chaves estrangeiras que já são determinadas por outros atributos da própria chave.

Link permanente: /questoes/fg060711