Pular para o conteúdo principal

Questão de Banco de Dados — Conceitos e Fundamentos de Modelo Relacional — FGV 2024

Banco de DadosConceitos e Fundamentos de Modelo Relacional
Código
fg165224
Banca
FGV
Órgão
ALEP
Ano
2024
Cargo
Ana Leg ( )

Em uma Casa Legislativa, considere um cenário restrito, no qual parlamentares submetem proposições (propostas legislativas) para avaliação das instâncias do Parlamento.

 

O modelo de conceitual de classes a seguir modela tal situação:

 

Imagem associada para resolução da questão

 

Em um contexto no qual o modelo conceitual será mapeado segundo a abordagem Mapeamento Objeto-Relacional (ORM), e que a classe “Proposição” foi mapeada para um banco de dados relacional da seguinte forma:

 

Proposição ( {cod_proposicao} <PK>, identificacao, ementa, indexacao, tipo )

 

sendo o atributo “cod_proposicao” a chave primária da tabela (PK) e os demais atributos simples

 

Considerando a abordagem de mapeamento objeto-relacional (ORM), seja o mapeamento da classe “Parlamentar” realizado da forma que segue:

 

Parlamentar ( {cod_parlamentar} <PK>, nome, partido, email, telefone, endereco, data_nascimento, naturalidade, foto )

 

A fim de manter, no modelo lógico de banco de dados relacional, a semântica expressa na classe “Submissão” do modelo conceitual, e considerando que

 

I. o atributo id_parlamentar<FK> indica uma chave estrangeira para a chave primária da tabela “Parlamentar”;

 

II. o atributo id_proposicao<FK> indica uma chave estrangeira para a chave primária da tabela “Proposição”.

 

Nesse caso, uma abordagem correta seria

  1. Aadicionar na tabela “Parlamentar” a chave estrangeira “cod_proposicao”, referenciando a chave primária da tabela “Proposição”.
  2. Balterar a cardinalidade máxima da associação entre “Parlamentar” e “Proposição”, com vistas a torná-la com conectividade muitos-para-muitos.
  3. Ccriar a tabela “Submissão” com o seguinte esquema: Submissão ({id_parlamentar<FK>,id_proposicao<FK>} <PK>, data, id_parlamentar, id_proposicao).
  4. Dcriar a tabela “Submissão” com o seguinte esquema: Submissão (id_submissao <PK>, data, id_parlamentar<FK>).
  5. Ecriar a tabela “Submissão” com o seguinte esquema: Submissão (id_submissao <PK>, data, id_parlamentar<FK>, id_proposicao<FK>).
Revelar gabarito e comentário

GabaritoC — criar a tabela “Submissão” com o seguinte esquema: Submissão ({id_parlamentar<FK>,id_proposicao<FK>} <PK>, data, id_parlamentar, id_proposicao).

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”.

Mapeamento Objeto-Relacional (ORM): Relacionamentos N:N

Gabarito: letra C. A classe "Submissão" representa uma associação entre "Parlamentar" e "Proposição". Como um parlamentar pode submeter várias proposições e uma proposição pode ser submetida por vários parlamentares, trata-se de um relacionamento muitos-para-muitos (N:N). No modelo relacional, um relacionamento N:N é mapeado criando uma tabela associativa (ou tabela de ligação) cuja chave primária é composta pelas chaves estrangeiras que referenciam as tabelas participantes. A alternativa C é a única que cria essa tabela associativa com a chave primária composta corretamente.

O mapeamento objeto-relacional (ORM) é a técnica que traduz o modelo conceitual (classes, associações) para o modelo lógico relacional (tabelas, chaves). A regra de ouro é: a cardinalidade da associação determina onde a chave estrangeira (FK) será colocada. Em uma associação 1:N (um-para-muitos), a FK fica na tabela do lado "N" (muitos). Já em uma associação N:N (muitos-para-muitos), não é possível colocar a FK em apenas uma das tabelas sem gerar redundância ou violar a integridade — a solução é criar uma tabela associativa que registra cada par de ocorrências relacionadas.

No cenário da questão, a classe "Submissão" é a associação entre "Parlamentar" e "Proposição". A cardinalidade é N:N, pois um parlamentar pode submeter várias proposições e uma proposição pode ser submetida por vários parlamentares. Portanto, o mapeamento correto é criar a tabela "Submissão" com uma chave primária composta pelas chaves estrangeiras id_parlamentar e id_proposicao, além do atributo data (que é um atributo da associação).

A pegadinha da questão está em duas frentes: (1) confundir a cardinalidade da associação e tentar resolver com uma FK simples em uma das tabelas (alternativas A e D); (2) criar a tabela associativa com uma chave primária artificial id_submissao em vez da chave composta (alternativa E). A chave primária composta é essencial para garantir a unicidade do par (parlamentar, proposição) e refletir a semântica da associação N:N.

Guarde a regra: associação N:N → tabela associativa com PK composta pelas FKs. É exatamente esse critério que separa a alternativa correta das demais.

Critério

Alternativa C (Gabarito)

Alternativa E (Distrator)

Chave primária

Composta: {id_parlamentar, id_proposicao}

Artificial: id_submissao

Chaves estrangeiras

id_parlamentar e id_proposicao (ambas)

id_parlamentar e id_proposicao (ambas)

Garantia de unicidade do par (parlamentar, proposição)

Sim — a PK composta impede duplicidade

Não — permite submissões duplicadas do mesmo par

Fidelidade à semântica da associação N:N

Alta — reflete diretamente o par relacionado

Média — exige controle externo para evitar duplicatas

Forma canônica de mapeamento ORM para N:N

Sim — é a abordagem padrão

Não — é uma variação funcional, mas não canônica

Alternativa A — ❌ Incorreta

Adicionar a FK cod_proposicao na tabela "Parlamentar" representaria uma associação 1:N (um parlamentar teria várias proposições), mas a semântica da classe "Submissão" é N:N. Além disso, isso criaria redundância, pois uma proposição submetida por vários parlamentares exigiria repetir os dados do parlamentar em várias linhas, violando a integridade e a normalização.

Alternativa B — ❌ Incorreta

Alterar a cardinalidade máxima da associação para muitos-para-muitos não é uma ação de mapeamento — a cardinalidade é uma propriedade do modelo conceitual, definida pela regra de negócio. O mapeamento ORM deve respeitar a cardinalidade existente, não alterá-la. A solução correta é criar a tabela associativa, não mudar a semântica do relacionamento.

Alternativa C — ✅ Correta ⟵ GABARITO

Cria a tabela associativa "Submissão" com a chave primária composta {id_parlamentar, id_proposicao}, onde cada uma é uma FK referenciando as tabelas "Parlamentar" e "Proposição", respectivamente. O atributo data é um atributo da associação. Essa é a implementação canônica de um relacionamento N:N no modelo relacional.

Alternativa D — ❌ Incorreta

Cria a tabela "Submissão" com apenas uma FK (id_parlamentar), o que representaria uma associação 1:N entre "Submissão" e "Proposição" (cada submissão teria uma única proposição). Isso não reflete a cardinalidade N:N da classe "Submissão", pois uma proposição poderia ser submetida por vários parlamentares, exigindo múltiplas linhas na tabela "Submissão" com a mesma proposição — o que é possível, mas a ausência da FK id_proposicao impede registrar qual proposição foi submetida.

Alternativa E — ❌ Incorreta

Cria a tabela "Submissão" com uma chave primária artificial id_submissao e duas FKs. Embora funcione tecnicamente, não é a abordagem mais correta para mapear uma associação N:N. A chave primária composta pelas FKs é preferível porque: (1) garante a unicidade do par (parlamentar, proposição), evitando submissões duplicadas; (2) reflete diretamente a semântica da associação; (3) evita a necessidade de uma chave artificial desnecessária. A banca cobra a forma canônica de mapeamento.

Gabarito: letra C — a tabela associativa com chave primária composta pelas chaves estrangeiras é a abordagem correta para mapear a associação N:N da classe "Submissão".

Link permanente: /questoes/fg165224