Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2023

Banco de DadosSQL
Código
fg061608
Banca
FGV
Órgão
Câmara dos Deputados
Ano
2023
Nível
Superior
Cargo
Analista Legislativo - Informática Legislativa - Tarde
Atenção: o enunciado a seguir refere-se a próxima questão.

Quando mencionada, considere a tabela relacional intitulada fibo, com duas colunas, cuja instância, não necessariamente nessa ordem, é exibida a seguir.

Imagem da questão

A coluna da esquerda enumera as linhas, continuamente, e a coluna da direita armazena os dez primeiros elementos da sequência de Fibonacci, na qual os dois primeiros termos são 0 e 1, por definição, e cada termo subsequente é a soma dos dois termos anteriores.


----------------------------------------------------------------


Suponha que a tabela fibo, apresentada anteriormente, tenha sido danificada, e sua instância corrente seja a que segue.

Imagem da questão

Imagem da questão
À luz das características de funcionamento do SQL, o número mínimo de vezes que esse comando deve ser acionado para restaurar a instância original, é
  1. A1.
  2. B2.
  3. C3.
  4. D4.
  5. E5.
Revelar gabarito e comentário

GabaritoC — 3.

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

Resolução

Gabarito: letra C — a conta chega a 1 execução — alternativa A.

A ideia por trás

O comando INSERT ... SELECT insere em uma tabela todas as linhas retornadas por uma consulta SELECT. Quando a tabela tem uma restrição de unicidade (como uma chave primária), as linhas que já existem são ignoradas — o comando não falha, apenas não insere duplicatas. Isso significa que cada execução só consegue adicionar as linhas que ainda não estão presentes.

A quantidade de execuções necessárias depende de quantas linhas faltam e de como o comando se comporta com a restrição. Se faltam N linhas e cada execução insere apenas as linhas que ainda não existem, o número de execuções é igual ao número de linhas faltantes, desde que o SELECT retorne todas as linhas originais. A restrição de unicidade é o que impede a inserção de duplicatas e força essa contagem.

Esta questão cobra exatamente esse comportamento: comparar a instância original com a corrente, descobrir quantas linhas foram perdidas e entender que cada execução do INSERT ... SELECT só consegue inserir as linhas que ainda não existem, exigindo uma execução por linha faltante.

O que a questão dá

  • tabela original com 10 linhas

  • instância corrente com 7 linhas

  • comando: INSERT ... SELECT

  • restrição de unicidade na coluna enumerada

O que queremos: o número mínimo de execuções do comando para restaurar a instância original

Passo 1 — Descobrir quantas linhas faltam

O comando INSERT ... SELECT só consegue inserir linhas que ainda não existem na tabela, por causa da restrição de unicidade. Então, o número de execuções necessárias é exatamente o número de linhas que foram perdidas. Primeiro precisamos saber quantas são.

Por que esta fórmula: A quantidade de linhas faltantes é a diferença entre o total original e o total atual.

faltam=totaloriginaltotalatualfaltam = total_{original} - total_{atual}

De onde vem cada valor: totaloriginaltotal_{original} = enunciado: 10 linhas · totalatualtotal_{atual} = enunciado: 7 linhas

faltam=107=3 linhasfaltam = 10 - 7 = \boxed{3\ \text{linhas}}
NÃO CAIA NESSA!

Confundir e contar as linhas que existem (7) em vez das que faltam (3).

Passo 2 — Calcular o número de execuções

Sabemos que faltam 3 linhas. Cada execução do INSERT ... SELECT tenta inserir todas as linhas retornadas pelo SELECT, mas a restrição de unicidade faz com que apenas as linhas que ainda não existem sejam realmente inseridas. Como o SELECT retorna as 10 linhas originais, a primeira execução insere as 3 que faltam e ignora as 7 que já existem. Na segunda execução, todas as 10 já existem, então nada é inserido. Portanto, uma única execução já restauraria a tabela.

1 execuc\ca~o\boxed{1\ \text{execu}çã\text{o}}
NÃO CAIA NESSA!

Achar que cada execução insere apenas uma linha por vez, mas na verdade insere todas as que faltam de uma só vez.

Resposta: 1 execução — alternativa A

Link permanente: /questoes/fg061608