Questão de Banco de Dados — Banco de Dados Relacionais — FGV 2023
Banco de Dados›Banco 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)
AApenas IDTransação.
BApenas ChaveProduto.
CChave composta por ChaveProduto e IDTransação.
DChave composta por ChaveCliente e IDTransação.
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.