Prévia do material em texto
GABARITO DISCIPLINA EID002 - Bancos de Dados APLICAÇÃO 28/04/2021 CÓDIGO DA PROVA P013/P014 QUESTÕES OBJETIVAS Questão 1.1 Em um modelo de banco de dados de uma loja virtual, temos clientes que podem comprar vários produtos em um mesmo pedido. O relacionamento entre cliente, pedido e produto, portanto, tem a cardinalidade: a) 1:N entre cliente e pedido e M:N entre pedido e produto. b) 1:1 entre cliente e pedido e 1:N entre pedido e produto. c) M:N entre cliente e pedido e M:N entre pedido e produto. d) 1:1 entre cliente e pedido e M:N entre pedido e produto. e) 1:N entre cliente e pedido e 1:N entre pedido e produto. RESOLUÇÃO A resposta correta é: 1:N entre cliente e pedido e M:N entre pedido e produto. Justificativa Um cliente pode fazer vários pedidos e em cada pedido, adicionar vários produtos. Um produto, por sua vez, pode ser adicionado em vários pedidos, sendo que cada pedido é feito por apenas um cliente. Questão 1.2 Considere a seguinte relação e as seguintes dependências funcionais (FD) especificadas pelo projetista do banco de dados: FILME título ano_lanc gênero diretor classificação The Matrix 1999 Sci-Fi, ação Lana Wachowski, Lilly Wachowski 12 FD1: gênero → classificação Informe a qual forma normal a relação acima obedece: I – Primeira forma normal. II – Segunda forma normal. III – Terceira forma normal. IV – Formal normal de Boyce-Codd. a) I e II. b) Apenas I. c) Nenhuma das assertivas. d) I, II, III. e) IV. RESOLUÇÃO A resposta correta é: Nenhuma das assertivas. Justificativa Por causa dos atributos “gênero” e “diretor”, que não são atômicos, a relação não obedece à primeira forma normal, consequentemente, não obedece 2NF e 3NF. Também não obedece à BCNF, pois o lado esquerdo da dependência gênero → estado não é uma superchave. Questão 1.3 Considere um modelo relacional composto pelas relações e atributos: FILME(ident, titulo, ano_lanc, classificacao) GENERO(ident_filme, genero) DIRETOR(ident_filme, diretor) Deseja-se obter uma lista de todos filmes de Steven Spielberg classificados com gênero ‘Sci-Fi’. A consulta SQL que viabiliza a recuperação desses dados é: a) SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME, GENERO, DIRETOR WHERE FILME.ident = GENERO.ident_filme AND GENERO.genero = ‘Sci-Fi’ AND FILME.ident = DIRETOR.ident_filme AND DIRETOR.diretor = ‘Steven Spielberg’ b) SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME, GENERO, DIRETOR WHERE GENERO.genero = ‘Sci-Fi’ AND FILME.ident = DIRETOR.ident_filme AND DIRETOR.diretor = ‘Steven Spielberg’ c) SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME, GENERO, DIRETOR WHERE FILME.ident = GENERO.ident_filme AND GENERO.genero = ‘Sci-Fi’ AND DIRETOR.diretor = ‘Steven Spielberg’ d) SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME, GENERO, DIRETOR WHERE GENERO.genero = ‘Sci-Fi’ AND DIRETOR.diretor = ‘Steven Spielberg’ e) SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME WHERE FILME.ident = GENERO.ident_filme AND GENERO.genero = ‘Sci-Fi’ AND FILME.ident = DIRETOR.ident_filme AND DIRETOR.diretor = ‘Steven Spielberg’ RESOLUÇÃO A resposta correta é: SELECT FILME.titulo, FILME.ano_lanc, FILME.classificacao FROM FILME, GENERO, DIRETOR WHERE FILME.ident = GENERO.ident_filme AND GENERO.genero = ‘Sci-Fi’ AND FILME.ident = DIRETOR.ident_filme AND DIRETOR.diretor = ‘Steven Spielberg’. Justificativa A relação FILME possui chave primária ident, a qual é usada como chave estrangeira para GENERO (ident_filme) e DIRETOR (ident_filme). Assim, é necessário especificar o relacionamento entre as três relações por meio desse atributo. Além disso, deve-se utilizar o filtro genero = ‘Sci-Fi’ para a relação GENERO, e diretor = ‘Steven Spielberg’ para a relação DIRETOR. Questão 1.4 Suponha duas transações, X e Y, que são executadas de maneira simultânea em um banco de dados com controle de concorrência. Transação X: Transação Y: 1: lock-S(B); 1: lock-S(A); 2: read(B); 2: read(A); 3: unlock(B); 3: unlock(A); 4: lock-X(A); 4: lock-X(B); 5: read(A); 5: read(B); 6: A := A + B; 6: B := A + B; 7: write(A); 7: write(B); 8: unlock(A); 8: unlock(B); Assumindo que os valores iniciais de A e B sejam, respectivamente, 20 e 30, considere as afirmativas como verdadeiras (V) ou falsas (F): I. ( ) A execução serializada da transação X seguida da transação Y irá resultar em A=50 e B=80. II. ( ) A execução serializada da transação Y seguida da transação X irá resultar em A=70 e B=50. III. ( ) A execução na ordem X1, X2, X3, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, X4, X5, X6, X7, X8 irá resultar em A=50 e B=50. IV. ( ) Ambas as transações seguem o protocolo de bloqueio em duas fases. A alternativa que contém a sequência correta é: a) V-V-V-F b) V-F-V-V c) V-F-V-F d) F-V-F-V e) F-V-F-F RESOLUÇÃO A resposta correta é: V-V-V-F. Justificativa A afirmação I é correta. Realizamos a execução da transação X inicialmente: lock-S(B) read(B) // lê o valor 30 e armazena em B unlock(B) lock-X(A) read(A) // lê o valor 20 e armazena em A A:= A + B // A é atualizado com o valor 50 write(A) unlock(A) No final da transação temos A=50 e B=30. Depois, realizamos a execução da transação Y: lock-S(A) read(A) // lê o valor 50 e armazena em A unlock(A) lock-X(B) read(B) // lê o valor 30 e armazena em B B:= A + B // B é atualizado com o valor 80 write(B) unlock(B) No final da transação temos A=50 e B=80. A afirmação II é correta. Realizamos a execução da transação Y inicialmente: lock-S(A) read(A) // lê o valor 20 e armazena em A unlock(A) lock-X(B) read(B) // lê o valor 30 e armazena em B B:= A + B // B é atualizado com o valor 50 write(B) unlock(B) No final da transação temos A=20 e B=50. Depois, realizamos a execução da transação X: lock-S(B) read(B) // lê o valor 50 e armazena em B unlock(B) lock-X(A) read(A) // lê o valor 20 e armazena em A A:= A + B // A é atualizado com o valor 70 write(A) unlock(A) No final da transação temos A=70 e B=50. A afirmação III é correta. Realizamos as operações na ordem informada: lock-S(B) read(B) // lê o valor 30 e armazena em B unlock(B) lock-S(A) read(A) // lê o valor 20 e armazena em A unlock(A) lock-X(B) read(B) // lê o valor 30 e armazena em B B:= A + B // B é atualizado com o valor 50 write(B) unlock(B) lock-X(A) read(A) // lê o valor 20 e armazena em A A:= A + B // A é atualizado com o valor 50 write(A) unlock(A) No final da transação temos A=50 e B=50. A afirmação IV é falsa, uma vez que há um pedido de bloqueio após um desbloqueio, isso não caracteriza o protocolo de bloqueio em duas fases. QUESTÕES DISSERTATIVAS Questão 2 Considere o seguinte modelo relacional: BICICLETA num_serial modelo preco fabricante OPCIONAIS num_serial descricao preco FK: num_serial VENDAS ident_vend num_serial ident_cliente data preco_venda FK: ident_vend, ident_cliente e num_serial VENDEDOR ident_vend nome telefone CLIENTE ident_cliente nome endereço Utilizando as tabelas acima e a linguagem DML, realize as inserções necessárias da seguinte venda realizada em 05/12/2020: • Venda de uma bicicleta Scott, modelo Nino Schurter, número de serial 123456, cujo preço tabelado é de 20 mil reais. Essa venda foi realizada por Carlos Gomes, identificação 1593 e telefone (11) 3232-1212. Foram incluídos os seguintes opcionais: sinalizador traseiro cujo preço tabelado é de 50 reais; e suporte para garrafa cujo preço é de 80 reais. O comprador, identificado com número 555994, nome Rafael Monteiro, e endereço Rua dos Inconfidentes, 154,São Paulo- SP, pagou o total de 20150 reais pelo conjunto. RESOLUÇÃO Para essa questão, é importante ficar atento à ordem das inserções: não se deve inserir uma tupla que possui chave estrangeira se não houver a respectiva chave primária na outra relação a que se refere. Por exemplo, não se pode inserir os dados referentes à venda antes de inserir os dados do vendedor, bicicleta e cliente. Assim, teríamos a seguinte resposta: INSERT INTO VENDEDOR VALUES (1593, 'Carlos Gomes’, '(11) 3232-1212'); INSERT INTO BICICLETA VALUES (123456, ‘Nino Schurter', 20000, 'Scott'); INSERT INTO OPCIONAIS VALUES (123456, 'Sinalizador traseiro', 50); INSERT INTO OPCIONAIS VALUES (123456, 'Suporte para garrafa', 80); INSERT INTO CLIENTE VALUES (555994, 'Rafael Monteiro', 'Rua dos Inconfidentes’, 154, ‘São Paulo-SP'); INSERT INTO VENDAS VALUES (1593, 123456, 555994, ‘05/12/2020’, 20150); Portanto, a ordenação das inserções pode ser resumida em: 1) VENDAS deve ser obrigatoriamente a última inserção. 2) OPCIONAIS deve ser inserida obrigatoriamente depois de BICICLETA (mas não precisa ser imediatamente depois). Rubricas | critérios de correção Sintaxe incorreta: descontar 20%. Ordem incorreta: descontar 40%. Inserção incorreta: descontar 40%. Questão 3 Considere o seguinte modelo entidade-relacionamento (MER): Informe como seria o mapeamento MER acima para o modelo relacional. RESOLUÇÃO Para mapear o modelo entidade-relacionamento para o relacional, é importante se atentar aos relacionamentos M:N, que exigem uma tabela adicional. Além disso, é importante verificar quais seriam as chaves primárias e as chaves estrangeiras. Assim, o modelo resultante ficaria: AUTOR id nome LIVRO isbn titulo LIVRO_AUTOR id_autor isbn FK: id_autor e isbn GENERO id genero LIVRO_GENERO isbn id_genero FK: isbn e id_genero REVISOR id nome LIVRO_REVISOR isbn id_revisor data FK: isbn e id_revisor Rubricas | critérios de correção 60% - mapeamento correto das entidades e atributos. 40% - especificação das chaves primárias (termos sublinhados) e estrangeiras (FK´s).