Quiz de Banco de Dados


1. Considere a notícia acima e a existência de diversos bancos de dados no Brasil que armazenam veículos em seus registros. Considere que cada um desses bancos de dados tenha uma tabela de veículos, cuja chave primária é a placa. Considere ainda que em cada banco de dados há outras tabelas que apontam para a tabela de veículos por meio de chaves estrangeiras.

Dadas essas considerações, assinale a alternativa correta.

Resposta Correta: Mesmo com essas mudanças, é possível manter a placa como chave primária. Quando um veículo trocar de placa, será preciso atualizar a chave primária na tabela de veículos e atualizar os valores das chaves estrangeiras nas outras tabelas. Como cada uma dessas operações pode violar as restrições do banco de dados, pode ser necessário algum subterfúgio como por exemplo a desabilitação das chaves estrangeiras durante a operação.


2. Considere as seguintes tabelas:

CREATE TABLE paciente (id int primary key, nome text);
CREATE TABLE medico (id int primary key, nome text);
CREATE TABLE consulta (data date, id_paciente int, id_medico int);

Assinale a alternativa que indica uma consulta válida para identificarmos os médicos que não possuem consulta marcada na data de hoje.

Resposta Correta:

SELECT DISTINCT m.nome as nome_medico FROM medico m LEFT JOIN consulta c ON c.id_medico = m.id WHERE data != curdate() or data is null;

3. "Infodeck introdutório aos bancos de dados NoSQL: Este texto fornece uma breve introdução aos bancos de dados NoSQL. Nossa intenção é explicar ao público técnico-gerencial por que os bancos de dados NoSQL são importantes. Descrevemos por que os bancos de dados relacionais têm sido tão dominantes e quais forças levaram o NoSQL a quebrar esse domínio. Discutimos os principais benefícios de uma abordagem NoSQL, mas enfatizamos que os bancos de dados relacionais ainda têm um grande papel a desempenhar, por isso nossa ênfase na persistência poliglota." (FOWLER, M.; SADALAGE, P. Infodeck introdutório aos bancos de dados NoSQL. 2012).

Assinale a alternativa que melhor explica o que os autores do texto citado querem dizer com "persistência poliglota".

Resposta Correta: Novos sistemas continuarão usando os SGBDs relacionais, mas ao mesmo tempo utilizarão outros bancos NoSQL para propósitos específicos.


4. Considere uma tabela de solicitações feitas por cidadãos à Prefeitura de São Paulo criada com o seguinte comando:

CREATE TABLE solicitacoes (
data_abertura text,
hora_abertura text,
prefeitura_regional text,
distrito text,
orgao text,
tema text,
assunto text,
servico text,
status_solicitacao text,
data_parecer text,
hora_parecer text
);

Considere ainda que uma certa consulta SQL produziu a seguinte saída (ordenada por qtd de forma decrescente, limitada a 5):

| tema          | qtd      |
|---------------|----------|
| Rua e bairro  | 526934   |
| Lixo e limpeza| 261443   |
| Transporte    | 249783   |
| Animais       | 195256   |
| Meio Ambiente | 185472   |

Qual das opções exibe uma consulta que poderia ter produzido a saída acima?

Resposta Correta:

SELECT tema, count(*) as qtd FROM solicitacoes GROUP BY tema ORDER BY qtd DESC LIMIT 5;

5. Considere a seguinte consulta:

SELECT nome FROM funcionario WHERE not(idade > 65 AND sexo = 'M' OR idade > 60 AND sexo = 'F');

Assinale a alternativa que indica um par válido de entrada e saída para essa consulta.

Resposta Correta:

Entrada:
| nome     | idade | sexo |
|----------|-------|------|
| Moacir   | 70    | M    |
| Geraldo  | 67    | M    |
| Enzo     | 23    | M    |
| Karolyne | 23    | F    |
| Josefina | 63    | F    |
| Ivone    | 70    | F    |

Saída:
| nome     |
|----------|
| Enzo     |
| Karolyne |

6. Considere a tabela pratos criada com: CREATE TABLE pratos (nome text, pais_origem text, vegetariano boolean, preco float);.

Qual alternativa seleciona somente os pratos vegetarianos, mostrando a diferença entre o preço médio do prato e o preço do prato vegetariano mais caro de seu país de origem?

Resposta Correta:

SELECT nome, (SELECT max(preco) FROM pratos p2 WHERE p1.pais_origem = p2.pais_origem and vegetariano) - preco as diferenca_pro_vegetariano_mais_caro FROM pratos p1 WHERE vegetariano;

7. Considere a uma tabela voos contendo um registro por voo e a coluna orig_estado_abrv, que representa o estado da federação de origem do voo.

Qual será o resultado da consulta abaixo?

SELECT count(*) FROM voos WHERE orig_estado_abrv = 'SP' AND orig_estado_abrv = 'RJ';

Resposta Correta: Zero.


8. Considere a execução de uma sequência de comandos, mas com uma parte dos comandos executados em uma sessão, e a outra parte executada em outra sessão (Transações e Permissões).

Associe corretamente a lista de comandos (I, II, III, IV) à lista de trechos das saídas produzidas (Acesso negado, Erro de sintaxe, Query OK, SELECT command denied to user).

Lista de comandos:

  1. $ mysql -u u1 db2 -psenha
  2. $ mysql -u u2 db1 -psenha > DROP tb2;
  3. $ mysql -u u3 db1 -psenha > UPDATE tb1 SET x=2*x WHERE x>10;
  4. $ mysql -u u3 db2 -psenha > UPDATE tb1 SET x=2*x WHERE x>10;

Resposta Correta: (III) (I) (IV) (II)


9. Considere agora a existência da tabela voos, com um voo por registro e com a coluna data, representando a data do voo.

Qual dos seguintes comandos exibe corretamente todos os dados dos voos ocorridos na data do voo mais antigo registrado?

Resposta Correta:

SELECT * FROM voos WHERE data = (SELECT min(data) FROM voos);

10. Considere um banco de dados para um sistema de controle de estacionamentos. Assinale a alternativa que corresponda a uma modelagem para esse problema que esteja na BCFN (Boyce-Codd Normal Form).

Requisitos: Armazenar horário de início e fim da estadia de cada veículo, o veículo estacionado, e o dono desse veículo.

Resposta Correta: A modelagem com as três tabelas: estadia (inicio, fim, placa_veiculo), veiculo (placa, marca, modelo, cor, cpf_dono) e dono (cpf, nome).


11. Sobre índices é correto afirmar que:

Resposta Correta: Considere uma base de dados construída para análises científicas que é montada uma vez e depois não é mais atualizada, e que possui muitos dados. Nesse caso compensa construir diversos índices que serão úteis para as consultas dos cientistas, pois mesmo que o tempo de criação dos índices seja grande, a alta velocidade das leituras subsequentes compensará o tempo de criação dos índices.


12. Assinale a alternativa que indica qual saída o comando abaixo pode produzir, considerando a tabela doacoes que registra doações para partidos políticos.

SELECT SiglaPartido, sum(Valor) as total_recebido FROM doacoes GROUP BY SiglaPartido ORDER BY total_recebido DESC LIMIT 5;

Resposta Correta: Uma tabela com duas colunas (SiglaPartido e total_recebido) contendo 5 linhas, ordenadas de forma decrescente pelo total_recebido (exemplo: PSDB, PT, SD, PSD, PMDB com seus respectivos totais).


13. Considere a tabela municipio criada com a chave primária id com a opção auto_increment. Considere a execução do comando: INSERT INTO municipio (nome, uf) VALUES ('Salvador', 'BA');.

Considere agora as seguintes afirmações:

  1. A execução do comando acima incorrerá em erro.
  2. A chave primária deve ser especificada no comando INSERT.

Assinale agora a opção correta.

Resposta Correta: As sentenças I e II são falsas.


14. Considere essas três formas de se utilizar o computador para se obter a previsão do tempo:

I - SELECT temperatura, precipitacao FROM previsao WHERE data = CURDATE();
II - Computador, por favor, me dê a previsão do tempo de hoje.
III - (Código Python/similar com inicialização de variáveis e loop FOR para buscar o dado)

Assinale a alternativa que corretamente ordena os itens acima em ordem crescente de abstração.

Resposta Correta: III, I, II.


15. Considere a seguinte tabela:

Tabela de municípios:

Não vou botar essa tabela no site nem ferrando

É correto afirmar que essa tabela:

Resposta Correta: Possui os campos "nome", "uf", "populacao" e "area".


16. Imagine o site de uma grande loja global de livros. Há sempre muitos clientes comprando livros na loja, e de vários lugares do mundo. Considere que o site da loja armazene seus dados (livros no estoque, vendas, etc.) em um banco de dados MySQL. Considere ainda que essa loja estabeleceu uma política de backup on-line e incremental para o banco MySQL, sendo o backup executado de hora em hora.

Considere agora as afirmações:

  1. Sendo uma loja global, não há horário sem usuários ativos, o que inviabiliza o backup off-line.
  2. Havendo um grande volume de dados, o backup completo periódico exigiria muito espaço em disco, o que sairia muito caro.
  3. Um backup on-line deve ser feito o mais rápido possível, e o backup completo poderia demorar muito.

Sobre essas afirmações, assinale a alternativa correta.

Resposta Correta: As afirmações I, II e III fazem sentido e justificam a política de backup escolhida.


17. Considere a execução de uma sequência de comando, mas com uma parte dos comandos executados em uma sessão, e a outra parte executada em outra sessão. Os comandos estão listados abaixo, de forma que 1> indica o prompt da sessão 1, enquanto 2> indica o prompt da sessão 2.

1> CREATE TABLE pessoa (id int, nome text);
1> INSERT INTO pessoa VALUES (1, 'Fulano');
1> BEGIN;
1> INSERT INTO pessoa VALUES (2, 'Ciclano');
2> BEGIN;
2> INSERT INTO pessoa VALUES (3, 'Beltrano');
2> ROLLBACK;
2> SELECT * FROM pessoa;

Assinale a alternativa que indica a saída obtida para a execução do último comando da sequência.

Resposta Correta:

+------+--------+
| id   | nome   |
+------+--------+
| 1    | Fulano |
+------+--------+

18. Considere um banco de dados com uma tabela voos, contendo a coluna companhia, com a sigla da companhia aérea que operou o voo. Considere também que esse banco possui uma tabela companhias, com um cadastro de todas as companhias aéreas existentes. O que representa a seguinte consulta?

SELECT (SELECT count(distinct companhia) FROM voos) / (SELECT count(*) FROM companhias);

Resposta Correta: A proporção de companhias cadastradas que operaram voos registrados na tabela voos.


19. Considere as seguintes tabelas: CREATE TABLE bares (nome text, preco float);, CREATE TABLE restaurantes (nome text, preco float);, CREATE TABLE cafes (nome text, preco float);. Assinale a alternativa que forneça um significado plausível para o seguinte comando:

SELECT nome, preco FROM (
  SELECT nome, preco FROM bares WHERE preco = (SELECT min(preco) FROM bares)
  UNION
  SELECT nome, preco FROM restaurantes WHERE preco = (SELECT min(preco) FROM restaurantes)
  UNION
  SELECT nome, preco FROM cafes WHERE preco = (SELECT min(preco) FROM cafes)
) as lazer WHERE preco < 100;

Resposta Correta: Um rapaz está procurando um lugar para marcar um encontro. Ele está em dúvida entre um restaurante, um bar ou um café. Como o rapaz está com pouco dinheiro, ele vai considerar somente as opções mais baratas de cada categoria, e desde que o preço da diversão não saia mais que 100 reais.


20. Considere a seguinte modelagem feita para o banco de dados de um sistema de estacionamento:

Modelagem ER de estacionamento com tabelas estadia e veículo

Assinale a alternativa que indica em que forma normal se encontra essa modelagem.

Resposta Correta: 2FN.


21. Considere ainda a existência de uma tabela acidentes_aereos, em que cada registro representa um acidente aéreo e que possui as colunas quantidade_passageiros e quantidade_vitimas_fatais. Assinale a alternativa que corretamente consulta a porcentagem de vítimas fatais (em relação ao total de passageiros) de cada acidente na tabela acidentes_aereos.

Resposta Correta:

SELECT quantidade_vitimas_fatais / quantidade_passageiros * 100 as porcentagem_sobreviventes FROM acidentes_aereos;

22. Considere o seguinte texto, que faz parte de uma descrição comercial na home page de uma suíte de produtos: "Pentaho Business Analytics: Empodere consumidores de dados com análises interativas, visualizações em tempo real e modelagens preditivas, com mínimo suporte de TI."

Assinale a alternativa que melhor esclarece o texto acima.

Resposta Correta: Os "consumidores de dados" são pessoas (analistas, gerentes, etc.) que querem explorar diretamente os dados sem a necessidade de depender de pessoas especialistas em TI ("com mínimo suporte de TI").


23. Considere a seguinte sequência de comandos:

> SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634);
(Saída: 1324 - 5000.0 | 7634 - 40000.0)
> BEGIN;
> UPDATE conta_corrente SET saldo = saldo - 100 WHERE id = 1324;
> UPDATE conta_corrente SET saldo = saldo + 200 WEHRE id = 7634;  (Erro de sintaxe proposital no WHERE)
> COMMIT;
> SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634);

Qual é a saída produzida pelo último comando?

Resposta Correta:

id      saldo
1324    5000.0
7634    40000.0

24. Considere as seguintes consultas realizadas sobre as tabelas paciente, medico e consulta:
I) SELECT ... FROM paciente p, consulta c, medico m WHERE ...
II) SELECT ... FROM paciente p JOIN consulta c ... JOIN medico m ...
III) SELECT ... FROM paciente p JOIN consulta c JOIN medico m ON ...
IV) SELECT ... FROM paciente p INNER JOIN consulta c INNER JOIN medico m ...
Assinale a opção que identifica corretamente os resultados obtidos para essas consultas.

Resposta Correta: As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas.


25. O diagrama a seguir representa uma modelagem ER para bandas de rock.

Diagrama ER Bandas de Rock

Considere as seguintes afirmações:
I - Uma banda de rock pode ter vários guitarristas.
II - Uma banda de rock deve possuir exatamente quatro músicos.
III - Uma banda de rock não pode possuir mais que um baterista.
IV - Uma banda de rock é obrigada a ter um baixista.
V - Uma banda de rock não pode possuir um flautista.
VI - Um músico pode pertencer a várias bandas.

Para um banco de dados que utilize a modelagem apresentada no diagrama, assinale a alternativa que apresente todas as afirmações verdadeiras.

Resposta Correta: I, III, IV e V.


26. O trecho do manual do MySQL (6.1.2.1) alerta que usar a senha na linha de comando (`mysql -u user -psenha`) é inseguro. Indique qual seria uma alternativa segura ao método discutido.

Resposta Correta: Logar com a opção -p sem passar o parâmetro (senha) no comando, o que fará com que a senha seja lida a partir de um prompt seguro do terminal.


27. Considere a seguinte tabela de pratos disponíveis em um restaurante: CREATE TABLE pratos (nome text, pais_origem text, vegetariano boolean, preco float);

Considerando essa tabela, assinale a alternativa com o comando que torna possível a execução da seguinte consulta:

SELECT pais_origem as pais, count(*) as qtd_pratos_vegetarianos FROM pratos_vegetarianos GROUP BY pais_origem;

+--------+-------------------------+
| pais | qtd_pratos_vegetarianos |
+--------+-------------------------+
| Índia | 10 |
| Itália | 7 |
| Brasil | 4 |
+--------+-------------------------+

Resposta Correta:

CREATE VIEW pratos_vegetarianos AS SELECT nome, pais_origem FROM pratos WHERE vegetariano;