Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Orientado a Objetos e Objeto-Relacional — FGV 2024

Banco de DadosBanco de Dados Orientado a Objetos e Objeto-Relacional
Código
fg165223
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:   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.Imagem associada para resolução da questão
  1. ATramitação ( {cod_tramitacao} <PK>, forma, regime ) Despacho ( {cod_despacho} <PK>, data, andamento )
  2. 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)
  3. 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)
  4. 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)
  5. 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)
Revelar gabarito e comentário

GabaritoD — Tramitaçã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)

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): Chaves e Relacionamentos

Gabarito: letra D. O mapeamento ORM correto preserva a semântica do modelo conceitual propagando a chave primária da entidade forte (Proposição) para as entidades fracas (Tramitação e Despacho), formando chaves primárias compostas e uma cadeia de chaves estrangeiras que reflete a dependência de existência. A alternativa D é a única que faz isso corretamente, pois a tabela Tramitação recebe cod_proposicao como FK e a tabela Despacho referencia a chave composta de Tramitação.

O mapeamento objeto-relacional (ORM) é a ponte entre o paradigma orientado a objetos do modelo conceitual e o modelo relacional de tabelas. Quando uma classe é mapeada para uma tabela, cada atributo vira uma coluna, e os relacionamentos entre classes precisam ser traduzidos em chaves estrangeiras (FK). A grande questão aqui é identificar a natureza dos relacionamentos entre as entidades do diagrama: se uma entidade é fraca (não tem atributos suficientes para formar uma chave primária própria), ela depende da entidade forte para existir, e sua chave primária é composta pela chave da entidade forte mais um discriminador parcial.

No modelo conceitual, a classe Proposição é a entidade forte, com chave primária cod_proposicao. A classe Tramitação representa um histórico de andamentos de uma proposição — cada proposição pode ter várias tramitações, mas uma tramitação só existe se a proposição existir. Isso caracteriza uma entidade fraca em relação a Proposição. A classe Despacho, por sua vez, representa os despachos dados em cada tramitação — cada tramitação pode ter vários despachos, mas um despacho só existe se a tramitação existir. Despacho é, portanto, uma entidade fraca em relação a Tramitação.

A regra de ouro do mapeamento ORM para entidades fracas é: a chave primária da entidade fraca é a chave primária da entidade forte + um discriminador parcial. E a chave estrangeira que liga a entidade fraca à forte é exatamente essa chave primária da entidade forte. No caso de uma cadeia de dependência (Proposição → Tramitação → Despacho), a chave primária de Despacho deve conter a chave de Tramitação, que por sua vez já contém a chave de Proposição. Isso garante a integridade referencial e a dependência de existência.

Vamos aplicar isso ao caso concreto. A tabela Tramitação deve ter chave primária composta por cod_proposicao (FK para Proposição) e cod_tramitacao (discriminador parcial). A tabela Despacho deve ter chave primária composta por cod_proposicao, cod_tramitacao (ambos FK para Tramitação) e cod_despacho (discriminador parcial). A alternativa D é a única que segue exatamente essa estrutura, propagando a chave de Proposição através da cadeia e mantendo a semântica completa do modelo conceitual.

A pegadinha da banca está em alternativas que tratam Tramitação e Despacho como entidades fortes independentes (A, B, C) ou que quebram a cadeia de dependência (E). A chave para acertar é reconhecer a dependência de existência e a necessidade de propagar a chave primária da entidade forte para as fracas.

Critério

Alternativa D (correta)

Alternativa E (incorreta)

Chave primária de Tramitação

{cod_proposicao, cod_tramitacao} — composta, com FK para Proposição

{cod_proposicao, cod_tramitacao} — composta, com FK para Proposição

Chave primária de Despacho

{{cod_proposicao, cod_tramitacao} FK, cod_despacho} — composta, referenciando a chave composta de Tramitação

{cod_proposicao FK, cod_tramitacao FK, cod_despacho} — composta, com FKs separadas

FK de Despacho para Tramitação

Referencia a chave composta {cod_proposicao, cod_tramitacao} de Tramitação

Referencia apenas cod_tramitacao de Tramitação (e cod_proposicao diretamente a Proposição)

Integridade referencial da cadeia

Preservada: o par {cod_proposicao, cod_tramitacao} em Despacho garante que o despacho pertence à tramitação correta da proposição correta

Quebrada: um despacho pode ter cod_proposicao de uma proposição diferente daquela da tramitação referenciada

Semântica do modelo conceitual

Mantida integralmente (dependência de existência em cadeia)

Perdida parcialmente (dependência de existência não é garantida entre Proposição e Tramitação no Despacho)

Alternativa A — ❌ Incorreta

Esta alternativa mapeia Tramitação e Despacho como entidades fortes independentes, cada uma com sua própria chave primária simples (cod_tramitacao e cod_despacho). Isso perde completamente a semântica do modelo conceitual: não há nenhuma referência a cod_proposicao, então não é possível saber a qual proposição uma tramitação pertence, nem a qual tramitação um despacho pertence. O relacionamento entre as classes é ignorado, o que viola a regra de que todo relacionamento deve ser representado por chaves estrangeiras.

Alternativa B — ❌ Incorreta

Aqui, Tramitação é tratada como entidade forte (chave primária cod_tramitacao), e Despacho referencia Tramitação com uma chave estrangeira cod_tramitacao. O problema é que Tramitação não referencia Proposição: não há FK para cod_proposicao, então não é possível saber a qual proposição uma tramitação pertence. Além disso, Despacho referencia apenas cod_tramitacao, mas como Tramitação não tem uma chave única que identifique a proposição, a semântica do relacionamento Proposição-Tramitação é perdida. A dependência de existência de Tramitação em relação a Proposição não é representada.

Alternativa C — ❌ Incorreta

Esta alternativa inverte a direção do relacionamento: Tramitação referencia Despacho (cod_despacho como FK), o que é semanticamente incorreto. No modelo conceitual, Despacho depende de Tramitação (uma tramitação gera despachos), não o contrário. Além disso, Tramitação é tratada como entidade forte com chave primária composta por cod_tramitacao e cod_despacho, o que é um absurdo lógico: a chave primária de Tramitação não pode depender de um atributo de Despacho, pois isso criaria uma dependência circular. A relação de dependência está invertida.

Alternativa D — ✅ Correta ⟵ GABARITO

Esta alternativa segue exatamente a regra de mapeamento para entidades fracas em cadeia. Tramitação tem chave primária composta por cod_proposicao (FK para Proposição) e cod_tramitacao (discriminador parcial). Despacho tem chave primária composta por cod_proposicao, cod_tramitacao (ambos FK para Tramitação) e cod_despacho (discriminador parcial). As restrições de integridade referencial são declaradas corretamente: cod_proposicao referencia Proposição, e o par {cod_proposicao, cod_tramitacao} referencia Tramitação. Isso preserva a dependência de existência e a semântica completa do modelo conceitual.

Alternativa E — ❌ Incorreta

Esta alternativa acerta ao propagar cod_proposicao para Tramitação e ao usar chaves compostas, mas erra na tabela Despacho: ela referencia cod_proposicao diretamente a Proposição e cod_tramitacao diretamente a Tramitação, em vez de referenciar a chave composta {cod_proposicao, cod_tramitacao} de Tramitação. Isso quebra a cadeia de dependência: um despacho poderia existir com um cod_proposicao que não corresponde ao cod_proposicao da tramitação referenciada, violando a integridade referencial e a semântica do modelo. A restrição correta é que o par {cod_proposicao, cod_tramitacao} em Despacho deve referenciar a chave composta de Tramitação, não cada atributo separadamente.

PEGA ESSA DICA!

Para identificar a alternativa correta em questões de mapeamento ORM, siga este roteiro: 1) Identifique a entidade forte (a que tem chave primária própria). 2) Identifique as entidades fracas (as que dependem de outra para existir). 3) Para cada entidade fraca, a chave primária deve ser a chave da entidade forte + um discriminador parcial. 4) A chave estrangeira deve referenciar a chave primária completa da entidade forte. 5) Em cadeias de dependência, a chave deve ser propagada integralmente. A alternativa que seguir todos esses passos é a correta.

Gabarito: letra D

Link permanente: /questoes/fg165223