Questão nº 54
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2021 (nº 54)
O seguinte diagrama, feito segundo o Modelo Entidades e Relacionamentos, indica entidades, relacionamento e atributos e, ainda, as chaves primárias das entidades de um pequeno banco de dados que guarda o saldo atual de várias contas, que podem pertencer a um ou a mais clientes que residem, possivelmente, em países distintos.

Foi feita uma transformação desse diagrama em tabelas relacionais para a terceira forma normal, na qual o sublinhado indica chaves primárias e não são usadas chaves substitutas ou artificiais (surrogate keys).
Qual a melhor representação dessa transformação?
- A`Conta(numeroConta,cpfCliente)` · `Cliente(cpfCliente,nomeCliente,codigoPais)` · `SaldoDiario(numeroConta,diaSaldo,valorSaldo)` · `Pais(codigoPais,nomePais)`
- B`Conta(numeroConta,cpfCliente,diaSaldo)` · `Cliente(cpfCliente,nomeCliente,codigoPais,numeroConta)` · `SaldoDiario(diaSaldo,valorSaldo,numeroConta)` · `Pais(codigoPais,nomePais,cpfCliente)`
- C`Conta(numeroConta,cpfCliente,diaSaldo)` · `Cliente(cpfCliente,nomeCliente,numeroConta,codigoPais)` · `ContaCliente(numeroConta,cpfCliente)` · `SaldoDiario(numeroConta,diaSaldo,valorSaldo)` · `Pais(codigoPais,nomePais,cpfCliente)`
- D`Conta(numeroConta)` · `Cliente(cpfCliente,nomeCliente)` · `ContaCliente(numeroConta,cpfCliente)` · `SaldoDiario(numeroConta,cpfCliente,diaSaldo,valorSaldo)` · `Pais(codigoPais,nomePais,cpfCliente)`
- E`Conta(numeroConta)` · `Cliente(cpfCliente,nomeCliente,codigoPais)` · `ContaCliente(numeroConta,cpfCliente)` · `SaldoDiario(numeroConta,diaSaldo,valorSaldo)` · `Pais(codigoPais,nomePais)` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Conceito-chave: Em um modelo ER, um relacionamento N:N (vários clientes para várias contas) vira uma tabela associativa (ou de ligação), que só guarda as chaves estrangeiras. Atributos do relacionamento (como diaSaldo e valorSaldo) vão para a tabela que representa esse relacionamento, e não para as entidades originais.
- (A) Incorreta: Coloca
cpfClientedentro deConta, o que quebra a relação N:N (uma conta com vários clientes teria que repetir a conta). Além disso,SaldoDiarioperde a referência ao relacionamento correto. - (B) Incorreta: Mistura tudo:
ContaganhacpfClienteediaSaldo(atributos que não pertencem a ela), eClienteganhanumeroConta, criando dependências funcionais indevidas e repetição de dados. - (C) Incorreta: Cria a tabela associativa
ContaClientecorretamente, mas erra ao colocarcpfClienteediaSaldodentro deContaecodigoPais/numeroContadentro deCliente, além decpfClienteemPais— tudo isso gera redundância e viola a 3FN. - (D) Incorreta: A tabela
SaldoDiarioincluicpfCliente, mas o saldo diário depende apenas da conta e do dia, não do cliente. Isso cria dependência parcial (ocpfClientenão é chave do saldo) e quebra a 3FN. - (E) Correta:
ContaeClienteguardam só seus atributos próprios;ContaClienterepresenta o relacionamento N:N com as duas chaves estrangeiras;SaldoDiarioguardanumeroContaediaSaldocomo chave composta (pois o saldo é por conta e por dia) evalorSaldo;PaisguardacodigoPaisenomePais. Nenhuma chave artificial é usada, e tudo está na 3FN.
Comentário do distrator mais tentador (A): A pegadinha da banca é que muitos alunos acham que, como uma conta pode ter vários clientes, basta colocar o cpfCliente na tabela Conta — mas isso força a repetir o numeroConta para cada cliente, o que é redundante e não representa corretamente o N:N. A alternativa A parece simples, mas ignora a necessidade da tabela associativa ContaCliente.
Fonte: CESGRANRIO BASA 01/2021 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.