Questão de Banco de Dados — Modelagem e Mapeamento ER-relacional — FCC 2024
Banco de Dados›Modelagem e Mapeamento ER-relacional
Código
fc147208
Banca
FCC
Órgão
Pref J Guararapes
Ano
2024
Cargo
AGR ( )
Considere uma tabela “cidadao” com os campos CPF (chave primária), nome, contato e uma tabela “imposto” com os campos IDImposto (chave primária), nomeImposto e periodicidade. Cada cidadão paga diversos impostos. Em um banco de dados relacional, considerando o mundo real, bem como as regras de modelagem de dados, a cardinalidade da relação entre as tabelas “cidadao" e “imposto” é
Amuitos-para-muitos e pode ser modelada repetindo-se a chave primária de uma entidade na outra de forma cruzada.
Bmuitos-para-muitos e pode ser modelada criando-se uma tabela associativa entre “cidadao' e “imposto”.
Cum-para-muitos e pode ser modelada utilizando as notações pé-de-galinha. UML, Chen ou Information Engineering.
Dum-para-um, poiz cada pagamento de imposto está associado única e exclusivamente a um único cidadão.
Emuitos-para-um, pois muitos cidadãos pagam o mesmo tipo de imposto em periodicidades variáveis (anualmente, mensalmente etc.).
Revelar gabarito e comentário▾
GabaritoB — muitos-para-muitos e pode ser modelada criando-se uma tabela associativa entre “cidadao' e “imposto”.
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”.
Cardinalidade em Modelagem de Dados: Relação entre Cidadão e Imposto
Gabarito: letra B. A relação entre as tabelas "cidadao" e "imposto" é muitos-para-muitos (N:M), pois um cidadão pode pagar diversos impostos e um mesmo imposto pode ser pago por diversos cidadãos. No modelo relacional, essa cardinalidade não pode ser representada diretamente entre as duas tabelas; é necessário criar uma tabela associativa (também chamada de tabela de ligação ou entidade associativa) que contenha as chaves estrangeiras de ambas as tabelas originais.
A cardinalidade é um conceito fundamental na modelagem de dados, pois define quantas ocorrências de uma entidade podem estar associadas a uma ocorrência de outra entidade. No caso apresentado, temos duas entidades: Cidadão (com CPF como chave primária) e Imposto (com IDImposto como chave primária). A regra de negócio "cada cidadão paga diversos impostos" indica que um cidadão pode se relacionar com vários impostos. Mas a pergunta crucial é: um imposto pode ser pago por vários cidadãos? No mundo real, sim — o IPTU, por exemplo, é pago por milhões de cidadãos. Portanto, a relação é N:M.
Para implementar um relacionamento N:M em um banco de dados relacional, não é possível simplesmente adicionar uma chave estrangeira em uma das tabelas, pois isso criaria redundância e violaria a integridade dos dados. A solução correta é criar uma tabela associativa (ou tabela de ligação), que terá como chave primária a combinação das chaves primárias das duas tabelas originais (CPF e IDImposto), e cada uma dessas chaves será uma chave estrangeira referenciando as tabelas originais. Essa tabela associativa pode, inclusive, armazenar atributos próprios do relacionamento, como a data de pagamento ou o valor pago.
Vamos comparar as cardinalidades para fixar o conceito:
Cardinalidade
Descrição
Implementação no modelo relacional
1:1 (um para um)
Cada registro de uma tabela se relaciona com no máximo um registro da outra
Chave estrangeira em uma das tabelas (ou tabela mesclada)
1:N (um para muitos)
Cada registro da tabela "um" pode se relacionar com vários registros da tabela "muitos", mas cada registro da tabela "muitos" se relaciona com apenas um da tabela "um"
Chave estrangeira no lado "muitos"
N:M (muitos para muitos)
Cada registro de uma tabela pode se relacionar com vários registros da outra, e vice-versa
Tabela associativa com chaves estrangeiras para cada tabela original
A pegadinha desta questão está em confundir a cardinalidade N:M com a 1:N. A alternativa C, por exemplo, afirma que é um-para-muitos, mas isso estaria correto apenas se um imposto fosse pago por um único cidadão, o que não é o caso no mundo real. A alternativa E também tenta confundir ao dizer "muitos-para-um", invertendo a direção da relação. A alternativa A erra ao sugerir que a modelagem N:M pode ser feita repetindo a chave primária de uma entidade na outra de forma cruzada, o que causaria redundância e violaria a integridade referencial.
Guarde a fronteira entre as cardinalidades: a chave para identificar uma relação N:M é verificar se ambos os lados podem ter múltiplas ocorrências. Se apenas um lado pode ter múltiplas, é 1:N. Se ambos podem, é N:M e exige tabela associativa. É exatamente nesse critério que as alternativas se dividem.
Cardinalidade N:M: Cidadão paga vários impostos; Imposto pago por vários cidadãos; Implementação (Tabela associativa, Chaves estrangeiras (CPF, IDImposto), Chave primária composta); Erros comuns (Repetir chave na outra tabela (redundância), Confundir com 1:N ou N:1)
Alternativa A — ❌ Incorreta
Afirma que a relação muitos-para-muitos pode ser modelada repetindo-se a chave primária de uma entidade na outra de forma cruzada. Isso é incorreto e causaria redundância de dados e anomalias de atualização, violando os princípios da normalização. A forma correta de modelar N:M é com uma tabela associativa, não repetindo chaves.
Alternativa B — ✅ Correta ⟵ GABARITO
A relação é muitos-para-muitos (N:M) e a modelagem correta é criar uma tabela associativa entre "cidadao" e "imposto". Essa tabela conterá as chaves estrangeiras CPF e IDImposto, formando uma chave primária composta, e poderá armazenar atributos do relacionamento (como data de pagamento). É exatamente o que a alternativa descreve.
Alternativa C — ❌ Incorreta
Afirma que a relação é um-para-muitos (1:N). Isso estaria correto apenas se um imposto fosse pago por um único cidadão, o que não é verdade no mundo real (muitos cidadãos pagam o mesmo imposto). A cardinalidade correta é N:M. As notações citadas (pé-de-galinha, UML, Chen) são formas de representar qualquer cardinalidade, não definem a cardinalidade em si.
Alternativa D — ❌ Incorreta
Afirma que a relação é um-para-um (1:1), pois cada pagamento de imposto está associado a um único cidadão. O erro está em confundir a entidade "pagamento" (que seria a tabela associativa) com a relação entre "cidadao" e "imposto". A relação entre as entidades originais é N:M, pois um cidadão paga vários impostos e um imposto é pago por vários cidadãos.
Alternativa E — ❌ Incorreta
Afirma que a relação é muitos-para-um (N:1), pois muitos cidadãos pagam o mesmo tipo de imposto. O erro está em inverter a direção da relação. A cardinalidade é muitos-para-muitos (N:M), pois além de muitos cidadãos pagarem o mesmo imposto, um cidadão também paga diversos impostos. A periodicidade variável é um atributo do imposto, não define a cardinalidade.
NÃO CAIA NESSA!
A banca tenta confundir a cardinalidade N:M com 1:N e N:1. A chave é verificar se ambos os lados podem ter múltiplas ocorrências. Se um cidadão paga vários impostos e um imposto é pago por vários cidadãos, a relação é N:M. Se apenas um lado tiver múltiplas ocorrências, seria 1:N ou N:1. Nesta questão, o mundo real mostra que ambos os lados são múltiplos, então é N:M. Com treino, você identifica essa troca de longe 💪.
PEGA ESSA DICA!
Para identificar a cardinalidade, faça duas perguntas: "Um registro da tabela A pode se relacionar com quantos registros da tabela B?" e "Um registro da tabela B pode se relacionar com quantos registros da tabela A?". Se ambas as respostas forem "vários", é N:M e exige tabela associativa. Se apenas uma for "vários", é 1:N (chave estrangeira no lado muitos).