Baixe o app para aproveitar ainda mais
Prévia do material em texto
Revisar envio do teste: Clique aqui para iniciar o QuizSP_GRAD_686276_2402_01 2401-BANCO DE DADOS Quiz REVISAR ENVIO DO TESTE: CLIQUE AQUI PARA INICIAR O QUIZ Usuário MATHEUS PEREIRA DIONISIO Curso 2401-BANCO DE DADOS Teste Clique aqui para iniciar o Quiz Iniciado 10/05/24 15:13 Enviado 10/05/24 15:59 Data de vencimento 19/06/24 23:59 Status Completada Resultado da tentativa 10 em 10 pontos Tempo decorrido 45 minutos Resultados exibidos Todas as respostas, Respostas enviadas, Respostas corretas, Comentários Pergunta 1 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? Sala de Aula Tutoriais 1 em 1 pontos MATHEUS PEREIRA DIONISIO 117 https://senacsp.blackboard.com/webapps/blackboard/execute/courseMain?course_id=_241574_1 https://senacsp.blackboard.com/webapps/blackboard/content/listContent.jsp?course_id=_241574_1&content_id=_10944101_1&mode=reset https://www.ead.senac.br/ https://senacsp.blackboard.com/webapps/portal/execute/tabs/tabAction?tab_tab_group_id=_260_1 https://senacsp.blackboard.com/webapps/portal/execute/tabs/tabAction?tab_tab_group_id=_210_1 https://senacsp.blackboard.com/webapps/login/?action=logout SELECT (SELECT count(distinct companhia) FROM voos) / (SELECT count(*) FROM companhias); Considere como dica os seguintes comandos e suas respectivas saídas: > SELECT 4; 4 > SELECT 4/2; 2 Resposta Selecionada: b. A proporção de companhias cadastradas que operaram voos registrados na tabela voos. Respostas: a. A quan�dade de companhias que operaram voos registrados na tabela voos. b. A proporção de companhias cadastradas que operaram voos registrados na tabela voos. c. A quan�dade total de companhias cadastradas. d. Não representa nada, pois seja qual for o conteúdo das tabelas esse comando sempre retorna o número zero. e. Não representada nada, pois resultará em um erro devido a sintaxe incorreta. Comentário da resposta: b. A consulta está dividindo o “count(dis�nct companhia) FROM voos” (quan�dade de companhias que operaram voos) por “SELECT count(*) FROM companhias” (quan�dade de empresas cadastradas). Ou seja, temos a proporção de empresas que operaram voos pelo total de empresas cadastradas. Pergunta 2 Considere uma tabela que registre as doações recebidas pelos partidos políticos para as eleições de 2014 no estado de São Paulo (Fonte: http://dados.gov.br/dataset/prestacao-de-contas-das-campanhas-eleitorais). Considere que a tabela doacoes possui um schema conforme o seguinte comando: CREATE TABLE doacoes ( 1 em 1 pontos http://dados.gov.br/dataset/prestacao-de-contas-das-campanhas-eleitorais UF, SiglaPartido, DataReceita, Valor REAL, TipoReceita, FonteRecurso, EspecieRecurso, DescricaoReceita, DocumentoDoador, NomeDoador ); Considere agora a seguinte consulta SQL: SELECT SiglaPartido, sum(Valor) as total_recebido FROM doacoes GROUP BY SiglaPartido ORDER BY total_recebido DESC LIMIT 5; Assinale a alterna�va que indica qual saída o comando acima pode produzir. Resposta Selecionada: e. SiglaPartido total_recebido ------------ -------------- PSDB 57058765.03 PT 37767199.76 SD 18960025.0 PSD 17706828.38 PMDB 8748201.0 Respostas: a. … You have an error in your SQL syntax ... b. SiglaPartido total_recebido ------------ -------------- PCO 91.66 PCB 6950.0 PRTB 7327.9 PDT 10000.0 PSC 18620.0 c. SiglaPartido Valor ------------ ---------- PSDB 50000.0 PSB 50000.0 PT 700000.0 PT 1615000.0 PT 500000.0 d. SiglaPartido total_recebido ------------ -------------- PSDB 57058765.03 e. SiglaPartido total_recebido ------------ -------------- PSDB 57058765.03 PT 37767199.76 SD 18960025.0 PSD 17706828.38 PMDB 8748201.0 Comentário da resposta: e. O “GROUP BY SiglaPar�do” indica que cada par�do deve aparecer somente uma vez na saída. O LIMIT 5 indica que a saída deve ter apenas 5 registros. O “ORDER BY total_recebido DESC” indica que a coluna total_recebido deve estar em ordem decrescente. Pergunta 3 Considere os seguintes tipos de bancos de dados: (I) Relacionais com propriedades ACID (II) Em memória (III) Orientados a documentos 1 em 1 pontos (IV) Orientados a grafos Considere agora os seguintes domínios a serem modelados em bancos de dados: ( ) Soluções de cache. ( ) Entidades com alta variabilidade de atributos entre suas instâncias. ( ) Dados �nanceiros que exigem alta consistência. ( ) Análise logística de rotas de caminhões. Assinale a alterna�va que traça a correspondência mais adequada entre os �pos de bancos de dados e os domínios aos quais eles se aplicam melhor. Resposta Selecionada: d. (II) (III) (I) (IV) Respostas: a. (IV) (III) (I) (II) b. (II) (I) (III) (IV) c. (III) (II) (I) (IV) d. (II) (III) (I) (IV) e. (I) (III) (II) (IV) Comentário da resposta: d. Soluções de cache exigem pouco espaço e devem ser rápidas, por isso bancos em memória são adequados para elas. Instâncias diferentes com atributos diferentes para uma mesma entidade geram tabelas esparsas em bancos relacionais; utilizar um banco com esquema �exível, como os orientados a documentos, é interessante. A transferência entre contas correntes é um caso que exige alta consistência e todas as garantias do ACID: melhor �car com um SGBD relacional. Por �m, a análise logística pode utilizar a aplicação de algoritmos em grafos, por isso pode se valer de um SGBD orientado a grafos. Pergunta 4 1 em 1 pontos Analise a seguinte sequência de comandos realizada com o usuário administrador (aquele que possui todos os privilégios sobre a instância do SGBD): CREATE USER 'u1'@'%' IDENTIFIED BY 'senha'; CREATE USER 'u2'@'%' IDENTIFIED BY 'senha'; CREATE USER 'u3'@'%' IDENTIFIED BY 'senha'; CREATE DATABASE db1; USE db1; CREATE TABLE tb1 (id int, x int); CREATE TABLE tb2 (id int, x int); GRANT SELECT ON db1.* TO u1; GRANT SELECT, DELETE ON db1.* TO u2; GRANT UPDATE, INSERT ON db1.tb1 TO u3; CREATE DATABASE db2; USE db2; CREATE TABLE tb1 (id int, x int); CREATE ROLE r1; GRANT ALL ON db2.* TO r1; GRANT r1 TO u3; SET DEFAULT ROLE ALL TO u3; FLUSH PRIVILEGES; Considerando que os comandos apresentados já foram executados (todos com sucesso), associe a lista de comandos à lista de trechos das saídas produzidas por esses comandos. Lista de comandos (o sinal $ indica um comando realizado no sistema operacional e o sinal > indica um comando realizado no MySQL): (I) $ mysql -u u1 db2 -psenha (II) $mysql -u u2 db1 -psenha > DROP tb2; (III) $ mysql -u u3 db1 -psenha > UPDATE tb1 SET x = 2*x WHERE x > 10; (IV) $ mysql -u u3 db2 -psenha > UPDATE tb1 SET x = 2*x WHERE x > 10; Lista de trechos das saídas: ( ) SELECT command denied to user ( ) Access denied for user ( ) Query OK ( ) You have an error in your SQL syntax A sequência correta dessa associação é: Resposta Selecionada: b. (III) (I) (IV) (II) Respostas: a. (IV) (I) (III) (II) b. (III) (I) (IV) (II) c. (IV) (I) (II) (III) d. (I) (II) (III) (IV) e. (IV) (III) (II) (I) Comentário da resposta: b. O comando I resultará em acesso negado, pois u1 não tem nenhum privilégio sobre db2. O comando II resultará em erro de sintaxe, pois o comando correto seria “DROP TABLE tb2”. O comando III resultará em erro de permissão, pois, apesar de ter direito ao UPDATE, u3 não possui direito de SELECT em db1.tb1, e a condição do WHERE impõe a necessidade de leitura da tabela. Já o comando IV resultará em sucesso, pois u3 recebeu os privilégios de r1, que tem acesso total a db2. Pergunta 5 Considere as seguintes tabelas: CREATE TABLE paciente (id intprimary key, nome text); CREATE TABLE medico (id int primary key, nome text); CREATE TABLE consulta (data date, id_paciente int, id_medico int); Considere agora as seguintes consultas realizadas sobre as tabelas acima de�nidas: I) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p, consulta c, medico m WHERE c.id_paciente = p.id and c.id_medico = m.id and data = curdate(); II) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p JOIN consulta c ON c.id_paciente = p.id JOIN medico m ON c.id_medico = m.id WHERE data = curdate(); III) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p JOIN consulta c JOIN medico m ON c.id_paciente = p.id and c.id_medico = m.id WHERE data = curdate(); IV) SELECT p.nome as nome_paciente, m.nome as nome_medico, c.data FROM paciente p INNER JOIN consulta c INNER JOIN medico m ON c.id_paciente = p.id and c.id_medico = m.id WHERE data = curdate(); Obs: “curdate()” retorna a data corrente. 1 em 1 pontos Assinale a opção que iden�fica corretamente os resultados ob�dos para essas consultas. Resposta Selecionada: e. As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas. Respostas: a. As consultas I e II terão o mesmo resultado. As consultas III e IV possuem erros de sintaxe. b. As consultas I e II terão um mesmo resultado, enquanto as consultas III e IV terão um outro resultado (o resultado de III será o mesmo de IV). Todas as consultas são válidas. c. As consultas I e II terão um mesmo resultado, enquanto as consultas III e IV terão resultados diferentes (o resultado de III difere de I, II e IV; e o resultado de IV difere de I, II e III). Todas as consultas são válidas. d. As consultas I, II, III e IV terão o mesmo resultado, desde que todos os pacientes e médicos estejam vinculados a consultas marcadas para a data corrente. e. As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas. Comentário da resposta: e. No MySQL, o JOIN padrão (consulta II) é o INNER JOIN (consulta IV), o que é a mesma coisa que o resultado do produto cartesiano �ltrado pela condição de junção (consulta I). Além disso, para fazer a junção de três tabelas, há duas formas possíveis: “tabela 1 JOIN tabela 2 JOIN tabela 3 ON condição 1 and condição 2” (consulta III) e “tabela 1 JOIN tabela 2 ON condição 1 JOIN tabela 3 ON condição 2” (consulta II). Pergunta 6 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); 1 em 1 pontos Assinale a alternativa que indica uma consulta válida para identi�carmos os médicos que não possuem consulta marcada na data de hoje. Resposta Selecionada: a. 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; Respostas: a. 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; b. SELECT DISTINCT m.nome as nome_medico FROM medico m JOIN consulta c ON c.id_medico = m.id WHERE data != curdate() or data is null; c. SELECT DISTINCT m.nome as nome_medico FROM medico m RIGHT JOIN consulta c ON c.id_medico = m.id WHERE data != curdate() or data is null; d. SELECT DISTINCT m.nome as nome_medico FROM medico m LEFT JOIN consulta c WHERE c.id_medico = m.id and data != curdate() or data is null; e. Dada a modelagem apresentada, não é possível realizar a consulta desejada com um único SELECT. Comentário da resposta: a. Com um LEFT JOIN, teremos os médicos associados a alguma consulta e também os médicos sem consultas. Para que a consulta devolva os médicos sem consulta alguma marcada, temos o “data is null”. Para que a consulta devolva os médicos com consulta marcada em outros dias que não o dia corrente, temos o “data != curdate()”. Sem o DISTINCT, a consulta SQL devolveria uma linha por consulta médica, o que poderia repetir os nomes dos médicos. Como queremos listar somente os médicos, o DISTINCT é desejável. Pergunta 7 Considere a seguinte tabela: Tabela de municípios: 1 em 1 pontos n o m e u f p o p u l a c a o a r e a S ã o P a ul o S P 1 2 2 5 2 0 2 3 1 5 2 1 B el o H or iz o nt e M G 2 5 1 2 0 7 0 3 3 1 S or o c a b a S P 6 7 9 3 7 8 4 5 0 G u ar at in g u et á S P 1 2 1 7 9 8 7 5 2 R a n c h ar ia S P 2 9 7 0 7 1 5 8 7 Al ta m ir a P A 1 1 4 5 9 4 1 5 9 5 3 3 Fonte: https://cidades.ibge.gov.br/ É correto a�rmar que essa tabela: Resposta Selecionada: c. Possui os campos “nome”, “uf”, “populacao” e “area”. Respostas: a. Possui 4 campos e 7 registros. b. Possui 4 registros. c. Possui os campos “nome”, “uf”, “populacao” e “area”. d. U�liza todos os �pos de colunas presentes no MySQL: text e integer. e. Não é uma tabela; na verdade é uma tupla. Comentário da resposta: c. Cada coluna que vemos corresponde a um campo da tabela do banco de dados. A primeira linha que vemos representa os nomes dos campos; já as linhas subsequentes representam os registros da tabela do banco de dados. Pergunta 8 Considere a seguinte sequência de comandos: > SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634); id saldo ----- -------- 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; > COMMIT; > SELECT id, saldo FROM conta_corrente WHERE id in (1324, 7634); Qual é a saída produzida pelo último comando? 1 em 1 pontos Resposta Selecionada: b. id saldo ----- -------- 1324 5000.0 7634 40000.0 Respostas: a. id saldo ----- -------- 1324 5100.0 7634 40200.0 b. id saldo ----- -------- 1324 5000.0 7634 40000.0 c. id saldo ----- -------- 1324 5100.0 7634 40000.0 d. … You have an error in your SQL syntax ... e. ----- -------- 1324 7634 5000.0 40000.0 Comentário da resposta: b. Como há um erro de sintaxe no segundo UPDATE e os comandos de UPDATE estão envoltos em uma transação (BEGIN, COMMIT), então nenhum UPDATE será efe�vo. Por isso a saída final será igual a saída do primeiro SELECT. Pergunta 9 6.1.2.1 Orientações do usuário �nal para a segurança de senha 1 em 1 pontos Use a opção --password = password ou -ppassword na linha de comando. Por exemplo: shell> mysql -u francis -pfrank db_name Aviso Isso é conveniente, mas inseguro. Em alguns sistemas, sua senha �ca visível para programas de status do sistema, como ps, que podem ser invocados por outros usuários para exibir linhas de comando. Os clientes MySQL geralmente substituem o argumento da senha da linha de comandos com zeros durante sua sequência de inicialização. No entanto, ainda há um breve intervalo durante o qual o valor é visível. Além disso, em alguns sistemas, essa estratégia de substituição é ine�caz e a senha permanece visível para o ps. (Os sistemas SystemV Unix e talvez outros estejam sujeitos a esse problema.) Se o seu ambiente operacional estiver con�gurado para exibir seu comando atual na barra de título da janela do terminal, a senha permanecerá visível enquanto o comando estiver em execução, mesmo se o comando já estiver fora de vista. MYSQL. MySQL 8.0 Reference Manual. 2020. O trecho acima do manual do MySQL explica que um determinado método de login possui um certo risco de segurança. Indique qual seria uma alternativa segura ao método discutido. Resposta Selecionada: a. Logar com a opção -p sem passar o parâmetro (senha) no comando, o que fará com que a senha seja lida a par�r de um prompt seguro do terminal. Respostas: a. Logar com a opção -p sem passar o parâmetro (senha) no comando, o que fará com que a senha seja lida a par�r de um prompt seguro do terminal. b. Logar com a opção -p sem passar o parâmetro(senha) no comando, o que fará com que o usuário anônimo seja u�lizado. c. Logar como o discu�do, passando a senha na linha de comando, mas especificando o uso de uma conexão SSL segura entre cliente e banco de dados. d. Logar como o discu�do, passando a senha na linha de comando, mas usando um contêiner Docker. e. O manual do MySQL está defasado. Na úl�ma versão disponível do MySQL, o método discu�do é inteiramente seguro. Comentário da resposta: a. Com a senha sendo digitada em modo interativo (com a opção -p), não há como outro programa capturar a senha digitada, a menos que haja algum programa espião que capture as teclas sendo digitadas. Pergunta 10 Considere um banco de dados para um sistema de controle de estacionamentos. Os requisitos básicos são: o sistema precisa armazenar o horário de início e de �m da estadia de cada veículo. Para cada estadia é preciso registrar qual o veículo que foi estacionado, assim como o dono desse veículo. Assinale a alternativa que corresponda a uma modelagem para esse problema que esteja na BCFN. 1 em 1 pontos Resposta Selecionada: e. Descrição acessível: tabela estadia com campos inicio, �m e placa_veiculo; tabela veiculo com campos placa, marca, modelo, cor e cpf_dono; tabela dono com campos cpf e nome; estadia.placa_veiculo é chave estrangeira para veiculo.placa; veiculo.cpf_dono é chave estrangeira para dono.cpf. Respostas: a. Descrição acessível: tabela estadia com campos inicio, �m e placa_veiculo; tabela veiculo com campos placa, marca- modelo-cor e cpf_dono; estadia.placa_veiculo é chave estrangeira para veiculo.placa. b. Descrição acessível: tabela veiculo com campos placa, marca, modelo, cor, cpf_dono, inicios_estadias e �ns_estadias; tabela dono com campos cpf e nome_completo; estadia.cpf_dono é chave estrangeira para dono.cpf. c. Descrição acessível: tabela estadia com campos inicio, �m, duracao e placa_veiculo; tabela veiculo com campos placa, marca, modelo, cor e cpf_dono; tabela dono com campos cpf e nome; estadia.placa_veiculo é chave estrangeira para veiculo.placa; veiculo.cpf_dono é chave estrangeira para dono.cpf. d. Descrição acessível: tabela estadia com campos inicio, �m e placa_veiculo; tabela veiculo com campos placa, marca, modelo, cor e cpf_dono; tabela dono com campos cpf, nome_completo, primeiro_nome e sobre_nome; estadia.placa_veiculo é chave estrangeira para veiculo.placa; veiculo.cpf_dono é chave estrangeira para dono.cpf. e. Descrição acessível: tabela estadia com campos inicio, �m e placa_veiculo; tabela veiculo com campos placa, marca, modelo, cor e cpf_dono; tabela dono com campos cpf e nome; estadia.placa_veiculo é chave estrangeira para veiculo.placa; veiculo.cpf_dono é chave estrangeira para dono.cpf. Comentário da resposta: e. Opção A viola a 1FN – campo multivalor (marca-modelo-cor). Opção B viola a 1FN – campos com listas de valores (inicios_estadias e �ns_estadias). Opção C viola a 2FN – atributo (duracao) é função de parte da chave (inicio, �m, placa). Opção D viola a 3FN – atributos não chave (primeiro_nome e sobre_nome) dependem de outro atributo não chave (nome_completo). Opção E está na BCFN (não apresenta nenhuma violação à BCFN). Sexta-feira, 10 de Maio de 2024 15h59min12s BRT ← OK
Compartilhar