Prévia do material em texto
Revisar envio do teste: Clique aqui para iniciar o QuizSP_GRAD_686276_2303_01 2302-BANCO DE DADOS Quiz REVISAR ENVIO DO TESTE: CLIQUE AQUI PARA INICIAR O QUIZ Usuário FELIPE AUGUSTO SANTINHO Curso 2302-BANCO DE DADOS Teste Clique aqui para iniciar o Quiz Iniciado 24/08/23 17:17 Enviado 24/08/23 17:33 Data de vencimento 27/09/23 23:59 Status Completada Resultado da tentativa 10 em 10 pontos Tempo decorrido 16 minutos Resultados exibidos Todas as respostas, Respostas enviadas, Respostas corretas, Comentários Pergunta 1 Resposta Selecionada: d. Ao elaborar um sistema, um desenvolvedor criou uma tabela no MySQL utilizando o seguinte comando: CREATE TABLE livro ( titulo TEXT, autor TEXT, editora TEXT, ano INTEGER); O desenvolvedor deve agora documentar essa tabela por meio de um diagrama ER. Qual das alternativas exibe um diagrama que o desenvolvedor poderia utilizar para realizar essa documentação? Descrição acessível: Figura possui um retângulo “Livro” associado (ligado por retas) a quatro circunferências. As circunferências são “título”, “autor”, “editora” e “livro”. Sala de Aula Tutoriais 1 em 1 pontos FELIPE AUGUSTO SANTINHO 137 https://senacsp.blackboard.com/webapps/blackboard/execute/courseMain?course_id=_219523_1 https://senacsp.blackboard.com/webapps/blackboard/content/listContent.jsp?course_id=_219523_1&content_id=_9893850_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 Respostas: a. b. c. d. Descrição acessível: Figura possui um retângulo “Livro” associado (ligado por uma reta) a uma circunferência. O rótulo das circunferências é “título, autor, editora, livro”. Descrição acessível: Figura possui um grande retângulo “Livro” associado (ligado por retas) a quatro pequenos retângulos. Os retângulos pequenos são “título”, “autor”, “editora” e “livro”. Descrição acessível: Figura possui um retângulo cujo texto possui duas linhas. Primeira linha é “Livro”. Segunda linha é “título, autor, editora, ano”. Descrição acessível: Figura possui um retângulo “Livro” associado (ligado por retas) a quatro circunferências. As circunferências são “título”, “autor”, “editora” e “livro”. e. Comentário da resposta: Descrição acessível: Figura possui um grande quadrado “Livro” com quatro pequenos quadrados dentro desse quadrado maior. Os quadrados pequenos são: “título”, “autor”, “editora” e “livro”. d. A opção d é a que segue corretamente a nomenclatura visual de diagramas ERs: entidades são representadas como retângulos, e os atributos das entidades são representados como circunferências associadas ao retângulo da entidade. Pergunta 2 Resposta Selecionada: a. Respostas: a. b. 6.1.2.1 Orientações do usuário final para a segurança de senha 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 fica 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 é ineficaz 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 configurado 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. 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. 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. 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. 1 em 1 pontos c. d. e. Comentário da resposta: 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. Logar como o discu�do, passando a senha na linha de comando, mas usando um contêiner Docker. O manual do MySQL está defasado. Na úl�ma versão disponível do MySQL, o método discu�do é inteiramente seguro. 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 3 Resposta Selecionada: e. Respostas: a. b. c. d. e. Comentário da resposta: 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); Considere agora as seguintes consultas realizadas sobre as tabelas acima definidas: 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. Assinale a opção que iden�fica corretamente os resultados ob�dos para essas consultas. As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas. As consultas I e II terão o mesmo resultado. As consultas III e IV possuem erros de sintaxe. 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. 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. 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. As consultas I, II, III e IV terão o mesmo resultado, independentemente do conteúdo das tabelas. 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 filtrado 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). 1 em 1 pontos Pergunta 4 Resposta Selecionada: e. Respostas: a. b. c. d. e. Comentário da resposta: Considere a tabela abaixo, denominada tab1 e contendo as colunas col1 e col2. c o l 1 c o l 2 1 0 1 2 0 2 3 0 3 Descrição acessível: Tabela com duas colunas: col1 e col2. Conteúdo compostoapenas de números. A SQL possui um recurso que possibilita a execução de operações aritméticas entre as colunas, como demonstra a seguinte consulta: > SELECT col1 + col2 as soma FROM tab1; soma 11 22 33 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. SELECT quantidade_vitimas_fatais / quantidade_passageiros * 100 as porcentagem_sobreviventes FROM acidentes_aereos; (SELECT quantidade_vitimas_fatais FROM acidentes_aereos) / (SELECT quantidade_passageiros FROM acidentes_aereos) * 100; SELECT porcentagem_sobreviventes FROM acidentes_aereos; SELECT IN acidentes_aereos VALUE quantidade_vitimas_fatais / quantidade_passageiros * 100 as porcentagem_sobreviventes; SELECT quantidade_vitimas_fatais FROM quantidade_passageiros * 100 IN acidentes_aereos; SELECT quantidade_vitimas_fatais / quantidade_passageiros * 100 as porcentagem_sobreviventes FROM acidentes_aereos; e. Para obter a porcentagem de ví�mas é preciso dividir, em cada registro, e quan�dade de ví�mas pela quan�dade de passageiros e mul�plicar essa proporção por 100. Pergunta 5 1 em 1 pontos 1 em 1 pontos Resposta Selecionada: a. Respostas: a. b. c. d. e. Comentário da resposta: 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. 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; 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; 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; 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; 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; Dada a modelagem apresentada, não é possível realizar a consulta desejada com um único SELECT. 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 6 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. 1 em 1 pontos Resposta Selecionada: b. Respostas: a. b. c. d. e. Comentário da resposta: 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 é: (III) (I) (IV) (II) (IV) (I) (III) (II) (III) (I) (IV) (II) (IV) (I) (II) (III) (I) (II) (III) (IV) (IV) (III) (II) (I) 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 7 Resposta Selecionada: b. Respostas: a. Considere a seguinte modelagem feita para o banco de dados de um sistema de estacionamento: Descrição acessível: tabela estadia com campos inicio, fim e placa_veiculo; tabela veiculo com campos placa, marca, modelo, cor, cpf_dono e nome_dono; estadia.placa_veiculo é chave estrangeira para veiculo.placa. Assinale a alternativa que indica em que forma normal se encontra essa modelagem. 2FN. 1FN. 1 em 1 pontos b. c. d. e. Comentário da resposta: 2FN. 3FN. BCFN. Essa modelagem não atende nem à 1FN. b. Essa modelagem viola a 3FN, pois cpf_dono e nome_dono são funcionalmente dependentes entre si. Como há uma violação da 3FN e não há violações nem da 2FN nem da 1FN, então a modelagem apresentada está na 2FN. A modelagem não viola a 1FN pois não há campos mul�valorados. Ela também não viola a 2FN, o que ocorreria se algum atributo não primário fosse funcionalmente dependente de parte de alguma chave da tabela. Pergunta 8 Resposta Selecionada: c. Respostas: a. b. c. d. e. Comentário da resposta: Considere o seguinte texto, que faz parte de uma descrição comercial na home page de uma suíte de produtos, servindo de link para mais detalhes sobre um produto específico. 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. Pentaho Platform. [s. d.]. Disponível em: https://www.hitachivantara.com/en-us/products/data-management-a nalytics/pentaho-platform.html. Acesso em: 15 jul. 2020. Assinale a alterna�va que melhor esclarece o texto acima. 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”). Os “consumidores de dados” são painéis de monitoração que servem aos especialistas de TI. Assim, o suporte da TI age somente quando necessário. Os “consumidores de dados” são aplicações resilientes que possuem indisponibilidade mínima, mesmo sem a intervenção constante de operadores de TI. 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”). Os “consumidores de dados” são pessoas (analistas, gerentes, etc.) que querem explorar diretamente os dados, mas desde que minimamente tenham todo o suporte do pessoal de TI ao seu dispor. A chamada leva o leitor a acreditar que é possível explorar os dados diretamente. Mas isso é impossível, já que sempre deve exis�r uma aplicação projetada pela TI corpora�va entre o usuário final e os dados. c. O Pentaho é uma ferramenta de análise de dados que dispensa a necessidadede uma aplicação geradora de relatórios e o usuário final. Esse estilo arquitetural de análise de dados é o estilo dos data warehouses. Pergunta 9 Como o MySQL utiliza índices Os índices são usados para rapidamente localizar linhas com valores de coluna específicos. Sem um índice, o MySQL deve começar com a primeira linha e depois ler a tabela inteira para encontrar as linhas relevantes. Quanto maior a tabela, mais isso custa. Se a tabela �ver um índice para as colunas em questão, o MySQL poderá determinar 1 em 1 pontos 1 em 1 pontos Resposta Selecionada: d. Respostas: a. b. c. d. e. Comentário da resposta: rapidamente a posição a ser procurada no meio do arquivo de dados sem precisar examinar todos os dados. Isso é muito mais rápido do que ler todas as linhas sequencialmente. (Traduzido da documentação oficial do MySQL. Disponível em: <h�ps://dev.mysql.com/doc/refman/8.0/en/mysql-inde xes.html>. Acesso em: mar. 2020. Sobre índices é correto afirmar que: Considere uma base de dados construída para análises cien�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 cien�stas, 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. A criação de índices é imprescindível para qualquer tabela do MySQL. Considere um sistema muito acessado por usuários de todo o mundo e uma tabela que armazene os eventos de login desses usuários. Nesse caso, a criação de um índice nessa tabela de registro de login é conveniente para acelerar o tempo de inserção, provendo uma melhor experiência para o usuário. Índices deixam inserções mais lentas e consomem mais espaço em disco. Por essas razões devem ser usados apenas em tabelas com mais de um milhão de registros. Só nesses casos os custos compensarão os ganhos de velocidade de leitura. Considere uma base de dados construída para análises cien�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 cien�stas, 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. Os índices são recursos u�lizados em bancos de dados an�gos. O sistema de o�mização de consultas do MySQL (optimum lookup process) dispensa a u�lização de índices em tabelas do MySQL. d. Índices aceleram consultas e são muito u�lizados. Um problema muito comum em sistemas lentos é a falta de índices em tabelas do banco de dados (seja no MySQL ou em outros SGBDs). Por outro lado, o preço a se pagar é: inserções mais lentas e mais espaço ocupado no disco. Contudo, tabelas muito pequenas podem dispensar índices. Pergunta 10 Resposta Selecionada: b. Respostas: a. b. c. 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); Considere como dica os seguintes comandos e suas respectivas saídas: > SELECT 4; 4 > SELECT 4/2; 2 A proporção de companhias cadastradas que operaram voos registrados na tabela voos. A quan�dade de companhias que operaram voos registrados na tabela voos. A proporção de companhias cadastradas que operaram voos registrados na tabela voos. A quan�dade total de companhias cadastradas. 1 em 1 pontos https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html Quinta-feira, 24 de Agosto de 2023 17h33min29s BRT d. e. Comentário da resposta: Não representa nada, pois seja qual for o conteúdo das tabelas esse comando sempre retorna o número zero. Não representada nada, pois resultará em um erro devido a sintaxe incorreta. 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. ← OK