Questão nº 63
Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 63)
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:
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, nas relações apresentadas, os atributos indicados como chaves primárias <PK> ou estrangeiras <FK> entre chaves, assinale a opção que representa um mapeamento ORM possível para as classes “Tramitação” e “Despacho”, mantendo-se a completa semântica do modelo conceitual.
- ATramitação ( {cod_tramitacao} <PK>, forma, regime )
Despacho ( {cod_despacho} <PK>, data, andamento ) - BTramitação ( {cod_tramitacao} <PK>, forma, regime )
Despacho ( { cod_tramitacao <FK>, cod_despacho} <PK>, data, andamento )- Restrição da tabela Despacho: cod_tramitacao REFERENCIA Tramitação(cod_tramitacao)
- CTramitação ( {cod_tramitacao, cod_despacho <FK> } <PK>, forma, regime )
Despacho ( {cod_despacho} <PK>, data, andamento )- Restrição da tabela Tramitação: cod_despacho REFERENCIA Despacho(cod_despacho)
- DTramitação ( {cod_proposicao<FK>, cod_tramitacao} <PK>, forma, regime )
Despacho ( { {cod_proposicao, cod_tramitacao} <FK>, cod_despacho} <PK>, data, andamento )- Restrição da tabela Tramitação: cod_proposicao REFERENCIA Proposição(cod_proposicao)
- Restrição da tabela Despacho: {cod_proposicao, cod_tramitacao} REFERENCIA Tramitação(cod_proposicao, cod_tramitacao)
- ETramitação ( {cod_proposicao <FK>, cod_tramitacao} <PK>, forma, regime )
Despacho ( {cod_proposicao<FK>,cod_tramitacao<FK>,cod_despacho}<PK>, data, andamento )- Restrição da tabela Tramitação: cod_proposicao REFERENCIA Proposição(cod_proposicao)
- Restrições da tabela Despacho: cod_proposicao REFERENCIA Proposição(cod_proposicao), e cod_tramitacao REFERENCIA Tramitação (cod_tramitacao)
Resposta comentada
Gabarito Alternativa D
O Mapeamento Objeto-Relacional (ORM) é a técnica de converter dados entre um sistema de tipos incompatíveis usado em uma linguagem de programação orientada a objetos (como classes e objetos) e um banco de dados relacional (como tabelas e linhas). Em essência, ele permite que você interaja com o banco de dados usando objetos da sua aplicação, sem precisar escrever SQL diretamente.
Analisando o modelo conceitual e as alternativas:
- As relações entre
ProposiçãoeTramitação, e entreTramitaçãoeDespacho, são de composição (indicado pelo losango preenchido) e de cardinalidade 1 para muitos (1 para 1..*). Isso significa que umaTramitaçãopertence a umaProposiçãoe umDespachopertence a umaTramitação. - Em mapeamento ORM para composição 1-para-muitos, a chave primária da entidade "pai" (o lado do "1") geralmente se torna parte da chave primária da entidade "filha" (o lado do "muitos"), além de ser uma chave estrangeira. Isso garante que a identidade da entidade filha seja dependente da entidade pai e que cada instância da filha seja única dentro do contexto da pai.
Proposição ( {cod_proposicao} <PK>, identificacao, ementa, indexacao, tipo )
- Tramitação (1) -- (1..*) Proposição: A chave primária de
Proposição(cod_proposicao) deve ser uma chave estrangeira emTramitaçãoe fazer parte da chave primária deTramitação. Assim,{cod_proposicao, cod_tramitacao}seria a PK deTramitação. - Despacho (1) -- (1..*) Tramitação: A chave primária de
Tramitação({cod_proposicao, cod_tramitacao}) deve ser uma chave estrangeira emDespachoe fazer parte da chave primária deDespacho. Assim,{cod_proposicao, cod_tramitacao, cod_despacho}seria a PK deDespacho.
(A) Incorreta: Esta alternativa ignora completamente as relações de composição e cardinalidade, tratando Tramitação e Despacho como entidades independentes, sem chaves estrangeiras que as liguem a Proposição ou entre si.
(B) Incorreta: Embora estabeleça uma relação entre Tramitação e Despacho (com cod_tramitacao como FK e parte da PK de Despacho), ela falha em conectar Tramitação a Proposição, perdendo a semântica da primeira composição. Além disso, se cod_tramitacao fosse a única PK de Tramitação, implicaria que cod_tramitacao é globalmente único, o que não é o padrão para um identificador em uma composição 1-para-muitos.
(C) Incorreta: Esta alternativa inverte a direção da relação entre Tramitação e Despacho, sugerindo que Tramitação referencia Despacho, o que contradiz o modelo conceitual. Além disso, também falha em conectar Tramitação a Proposição.
(D) Correta: Esta opção implementa corretamente as relações de composição 1-para-muitos.
Tramitação ( {cod_proposicao<FK>, cod_tramitacao} <PK>, forma, regime ): A chave primária deProposição(cod_proposicao) é corretamente incluída como chave estrangeira e parte da chave primária deTramitação. Isso garante que cadacod_tramitacaoseja único dentro de umaProposiçãoespecífica.Despacho ( { {cod_proposicao, cod_tramitacao} <FK>, cod_despacho} <PK>, data, andamento ): A chave primária composta deTramitação({cod_proposicao, cod_tramitacao}) é corretamente incluída como chave estrangeira composta e parte da chave primária deDespacho. Isso garante que cadacod_despachoseja único dentro de umaTramitaçãoespecífica.- As restrições de chave estrangeira estão formuladas de forma precisa para chaves compostas, garantindo a integridade referencial e a completa semântica do modelo.
(E) Incorreta: Esta alternativa é um distrator muito forte, pois a estrutura das chaves primárias é idêntica à da alternativa D, que está correta. No entanto, o erro está na formulação das restrições de chave estrangeira para a tabela Despacho.
Restrições da tabela Despacho: cod_proposicao REFERENCIA Proposição(cod_proposicao), e cod_tramitacao REFERENCIA Tramitação (cod_tramitacao)- Para uma chave estrangeira composta que referencia a chave primária composta de
Tramitação({cod_proposicao, cod_tramitacao}), a restrição deve serREFERENCIA Tramitação(cod_proposicao, cod_tramitacao). A formulação apresentada em E, com duas referências separadas (cod_proposicaoparaProposiçãoecod_tramitacaoparaTramitação), é semanticamente incorreta para a dependência direta deDespachoemTramitaçãovia sua chave primária composta. A chave estrangeira emDespachodeve referenciar a combinação decod_proposicaoecod_tramitacaona tabelaTramitaçãocomo uma única unidade lógica, não como duas referências independentes, uma delas (cod_tramitacao) para uma coluna que não é única por si só na tabelaTramitação.
Fonte: FGV ALEP 2024 Analista Legislativo - Desenvolvedor de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.
