Número do Aluno: Nome do Aluno: Instituto Superior Técnico Departamento de Engenharia Informática BASES DE DADOS 2004/05 LEIC e LERCI Tagus Park 14 de Janeiro 2005 1º Exame 2º Teste - o exame é composto por 14 perguntas - inclui as perguntas P1 a P14 - duração: 2h:30m - o 2º teste é composto por 8 perguntas - inclui as perguntas P7 a P14 - duração: 1h:15m - cada pergunta vale o dobro do que está indicado Indique se está a prestar provas para o: 1º Exame ou 2º Teste Identifique esta prova preenchendo o seu nome e número nesta página, e o número em todas as restantes A prova é sem consulta. Página 1 de 17 1º Exame e 2º Teste de Base de Dados Página 2 de 17 - ALUNO NÚMERO: .......... P1 – Modelo Relacional (2v) Responda a cada alínea em baixo com sim/não ou um número. Suponha que tem duas relações R(A,B) e S(B,C). Os três atributos (A, B, C) são inteiros. Assuma que a relação R contém os seguintes tuplos: (1,2), (2,3) e (3,4) e que a relação S contém os tuplos: (2,2), (2,3) e (5,1). a) A é uma chave de R? Resposta (sim/não): sim b) b) (B, C) é uma superchave de S? Resposta (sim/não): sim c) Por quantos tuplos é constituído o resultado do produto cartesiano entre R e S? Resposta (um número): 9 d) Por quantos tuplos é constituído o resultado da junção natural entre R e S? Resposta (um número): 2 1º Exame e 2º Teste de Base de Dados Página 3 de 17 - ALUNO NÚMERO: .......... P2 – Modelo ER (2v) CuidadosMédicos.com necessita de guardar numa base de dados a seguinte informação: Os doentes são identificados pelo seu número de segurança social, e pretende-se também guardar os seus nomes e idades. Os médicos são identificados pelo seu número de segurança social e queremo também guardar o seu nome e especialidade. Cada doente tem que ter um medico de família e queremos saber desde quando o doente é assistido por esse médico. Cada médico tem pelo menos um doente. a) Desenhe um diagrama ER que capture esta informação. b) Indique uma possível restrição de integridade do domínio que não conseguisse capturar no diagrama ER. a) nss Pessoa nome ISA especial . Médico overla p Paciente idade trata data Nota: Tb foi aceite o modelo em que um paciente tem vários médicos de família, ou seja sem a seta a apontar para médico. b) Uma possível RI: - um medico não se pode tratar a si próprio. 1º Exame e 2º Teste de Base de Dados Página 4 de 17 - ALUNO NÚMERO: .......... P3 – Álgebra Relacional (2v) Considere o seguinte esquema relacional: Fornecedores(fid, fnome, morada) Peças(pid, pnome, cor) Catálogo(fid, pid, preço) A relação Fornecedores contém informação sobre os fornecedores de peças. A relação Peças contém informação sobre cada peça. A relação Catálogo lista os preços em euros de cada peça fornecida por um fornecedor. As chaves primárias estão sublinhadas. Escreva as interrogações seguintes em álgebra relacional: a) Quais os nomes dos fornecedores que fornecem todas as peças azuis fnome, pid (Fornecedores |X| Catalogo) / pid ( cor = ‘azul’(Pecas)) b) Quais os nomes dos fornecedores que fornecem exactamente três peças. c=3 (pid, fnome count distinct(pid) as c (Fornecedores |X| Catalogo) 1º Exame e 2º Teste de Base de Dados Página 5 de 17 - ALUNO NÚMERO: .......... P4 – Formas Normais (1v) Considere as relações da figura seguinte. Admita que a figura seguinte representa um esquema relacional, no qual estão apenas representados relações (rectângulos), atributos (dentro da parte mais clara rectângulos) e chaves estrangeiras (as setas com origem e destino em atributos das relações). Assuma que cada vez que é criado um registo (tuplo) na relação loan, todos os seus atributos são preenchidos: (i) loan-number é preenchido com um número único, sendo a chave primária desta relação; (ii) date é preenchida com a data/hora de criação do registo (iii) amount é o valor do empréstimo feito, (iv) branchname é preenchido com o nome da sucursal (branch) onde o empréstimo foi feito, sendo uma chave estrangeira para branch:branch-name; (v) branch-city, branch-ponhe-number e branch-manager-name são preenchidos com uma cópia do valor dos atributos correspondentes na relação branch. branch loan branch-name branch-city assets branch-phone-number branch-manager-name date loan-number branch-name amount date branch-phone-number branch-namager-name branch-city Indique a afirmação verdadeira: a) A relação loan não está 2 FN. b) A relação loan está na 2 FN, mas não está na 3 FN. c) A relação loan está na 3 FN, mas não está na BCNF. d) A relação loan está na BCNF. e) Nenhuma das hipóteses anteriores. A b) é a verdadeira 1º Exame e 2º Teste de Base de Dados Página 6 de 17 - ALUNO NÚMERO: .......... P5 – Linguagem SQL (2v) Considere as seguintes tabelas com os seguintes registos. depositor customer account Escreva em SQL a seguinte interrogação: Qual o saldo médio e o número de contas de cada sucursal, tal como está indicado na tabela seguinte: branch-name avg-balance Nr accounts Redwood 700 1 Mianus 700 1 Perryridge 400 1 Round Hill 350 1 Brighton 825 2 Downtown 500 1 select branch-name, avg(balance) as avg-balance, count(account-number) as Nr-accounts from account group by branch-name 1º Exame e 2º Teste de Base de Dados Página 7 de 17 - ALUNO NÚMERO: .......... P6 – Linguagem SQL (1v) Considere as tabelas da pergunta anterior. Indique a interrogação em SQL 92 cujo resultado são os pares de nomes de clientes que moram na mesma cidade, eliminando os pares repetidos. Por exemplo, se o João e o António moram na mesma cidade, pretende-se que a resposta inclua os pares (João, António) e (António, João). Obviamente que não se pretende pares do tipo: (João, João) e (António, António). a) SELECT DISTINCT customer1.customer-name, customer2.customer-name FROM customer AS customer1, customer AS customer2 WHERE customer1.customer-city = customer2.customer-city b) SELECT custumer1.customer-name, customer2.customer-name FROM customer AS customer2, customer AS customer1 WHERE customer1.customer-city = customer2.customer-city AND customer1.customer-name <> customer2.customer-name; c) SELECT Tx.customer-name, Ty.customer-name FROM customer AS Tx WHERE Tx.customer-city = (SELECT customer-city FROM customer AS Ty WHERE Tx.customer-city = Ty.customer-city); d) SELECT customer-name (SELECT customer-city FROM customer AS Ty) FROM customer as Tx WHERE Tx.customer-city = (SELECT customer-city FROM customer) e) Nenhuma das hipóteses anteriores A b) é a verdadeira. 1º Exame e 2º Teste de Base de Dados Página 8 de 17 - ALUNO NÚMERO: .......... P7 – Desenho de aplicações de bases de dados (2v) a) Indique uma vantagem e uma desvantagem de usar Embedded SQL em vez de usar uma API como ODBC/JDBC para invocar comandos SQL a partir de uma programa em C ou Java. Justifique. Vantagens de ESQL: Tipos de dados bem definidos Verificação sintáctica e semântica em tempo de compilação Programas mais pequenos Mais eficiente Desvantagens do ESQL: Não se conseguem executar interrogações dinâmicas Exige pré-processamento antes da compilação Depende do SGBD Não tem controlo fino de erros/excepções, logo debugging é mais dificil Não pode interrogar os metadados b) Considere o seguinte código Java com chamadas JDBC e suponha que a variável stmt foi devidamente declarada e inicializada: try { ResultSet rset = stmt.executeUpdate( "select branch_name, avg(balance) from account group by branch_name"); while (rset.next()) { System.out.println(rset.getInt("branch_name") rset.getFloat(2)); + “ } } catch (SQLException e) { System.out.println("Could not execute JDBC call: " + e); } Indique dois erros no código e como os corrigir. executeUpdate -> executeQuery getInt -> getString ou ainda " + 1º Exame e 2º Teste de Base de Dados + e -> + e.toString() Página 9 de 17 - ALUNO NÚMERO: .......... 1º Exame e 2º Teste de Base de Dados Página 10 de 17 - ALUNO NÚMERO: .......... P8 – Transacções e Gestão de Recuperação (1v) Considere a figura seguinte, a qual representa a execução de 5 transacções num sistema que fez o checkpoint no momento Tc que falhou no momento Tf e que arrancou no momento Ta. Chamemos de REDO(Ti) à operação que repõe os valores finais dos dados alterados pela transacção Ti e UNDO(Ti) a operação que repõe os valores iniciais dos dados alterados pela transacção Ti. T1 Temp o T2 T3 T5 Tc checkpoint O Sistema inicia a transacção O Sistema faz o COMMIT da transacção T4 Tf Falha do Sistema Ta Arranque do Sistema Indique a sequência das operações REDO() e UNDO() que o sistema deverá fazer quando arrancou em Ta. Nota: Relembre que durante a operação de checkpointing, todos os registos do ficheiro de log que residam em memória principal são escritos para memória estável e que todos os registos de dados modificados que residam em memória principal são escritos para disco. a) REDO(T5), REDO(T3), UNDO(T5), UNDO(T4) b) UNDO(T5), UNDO(T4), REDO(T2), REDO(T3) c) REDO(T1), REDO(T2), REDO(T3), UNDO(T5), UNDO(T4) d) REDO(T1), UNDO(T5), UNDO(T4), REDO(T2), REDO(T3) e) Nenhuma das hipóteses anteriores. A e) era a verdadeira, mas tb. foi aceite a b) embora a ordem das operações não estivesse completamente correcta. 1º Exame e 2º Teste de Base de Dados Página 11 de 17 - ALUNO NÚMERO: .......... P9 – Gestão de transacções (1v) Relativamente à pergunta P10, assuma que a lógica de cada transacção (T1 a T5) leva a base de dados de um estado consistente para outro estado consistente e diga qual ou quais das propriedades ACID o sistema visa assegurar quando, após o arranque do sistema, inicia a sequência das operações de UNDO() e REDO(): a) O isolamento entre as transacções. b) A atomicidade e durabilidade das transacções. c) Todas as propriedades ACID. d) Nenhuma das propriedades ACID. e) Nenhuma das hipóteses anteriores. A b) é a verdadeira 1º Exame e 2º Teste de Base de Dados Página 12 de 17 - ALUNO NÚMERO: .......... P10 – Gestão de transacções (1v) Considere as transacções Tduplica, Tquadrado Tmetade, que, respectivamente, duplica, eleva ao quadrado ou reduz para metade o valor do atributo A. Considere que o sistema transaccional disponibiliza as funções BEGIN_TRANSACTION e COMMIT_TRANSACTION para, respectivamente, iniciar e fazer COMMIT às transacções. Considere a sequência temporal apresentada na figura seguinte relativa ao momento em que estas funções são chamadas pelas transacções. Tduplica Tquadrado Temp o Tmetade Chamada à função BEGIN_TRANSACTION Chamada à função COMMIT_TRANSACTION Note-se que o círculo e o losango indicam as chamadas ás funções indicadas mas não indicam necessariamente a conclusão das mesmas por parte do sistema transaccional. Assuma o nível de isolamento SERIALIZABLE para as três transacções. Assumindo que A tem um valor inicial de 10, indique que valores podem ser considerados correctos para o valor final de A. a) O valor de A só pode ser 200, o resultado da sequência : Tduplica; Tquadrado; Tmetade b) O valor de A só pode ser 100, o resultado da sequência : Tduplica; Tmetade; Tquadrado c) O valor de A só pode ser 100, o resultado da sequência : Tquadrado; Tmetade; Tduplica d) O valor de A pode ser o equivalente a qualquer uma 6 das sequências possíveis: 200 (Tduplica; Tquadrado; Tmetade) 100 (Tduplica; Tmetade; Tquadrado) 100 (Tquadrado; Tmetade ; Tduplica) 100 (Tquadrado; Tduplica;Tmetade) 100 (Tmetade; Tduplica, Tquadrado) 50 (Tmetade; Tquadrado; Tduplica) e) Nenhuma das hipóteses anteriores. A a) é a verdadeira. 1º Exame e 2º Teste de Base de Dados Página 13 de 17 - ALUNO NÚMERO: .......... P11 – Controlo de concorrência (1v) Considere os 4 gráficos abaixo (G1 a G4), cada um correspondendo a uma política diferente de reserva e libertação de locks. Considere ainda que todos os locks (partilhados e exclusivos) são libertados na segunda marca temporal de todos os gráficos. Assinale quais das seguintes afirmações são verdadeiras e quais as falsas: a) A política expressa no gráfico G1 evita a ocorrência de deadlocks. b) A política expressa no gráfico G2 evita a existência de rollbacks em cascata. c) Só a política expressa no gráfico G3 conduz a schedules serializáveis. d) A política expressa no gráfico G4 detecta a existência de deadlocks e) A política expressa no gráfico G4 evita a existência de deadlocks Verdadeiras: b) e e) As outras são falsas. 1º Exame e 2º Teste de Base de Dados Página 14 de 17 - ALUNO NÚMERO: .......... P12 – Controlo de concorrência (1v) Considere o esquema relacional ilustrado na figura seguinte, na qual estão apenas representados: relações (rectângulos), atributos (dentro da parte mais clara rectângulos) e chaves estrangeiras (as setas com origem e destino em atributos das relações). branch account depositior customer branch-name branch-city assets account-number branch-name balance customer-name account-number customer-name customer-city customer-street Considere ainda duas transacções, T1 e T2, que executam, respectivamente, as operações Q1 e Q2, entre outras, de forma concorrente. Q1 – SELECT SUM(balance) FROM account WHERE branch-name = “Sucursal-1” Q2 – INSERT INTO account(account-number, branch-name, balance) VALUES (“NC-2345”, “Sucursal-1”, 12345) Considere ainda que ambas as transacções estão a executar estas operações com o nível de isolamento REPEATABLE READ. Indique as frases verdadeiras. a) Q1 nunca lê registos inseridos por Q2. b) Q1 só lê registos inseridos por Q2 quando T2 fizer commit. c) Considerando um schedule S que envolve a execução de T1 e T2, um schedule série equivalente a S é: T1;T2 d) Considerando um schedule S que envolve a execução de T1 e T2, um schedule série equivalente a S é: T2;T1 e) Nenhuma das hipóteses anteriores Verdadeira: b) As outras são falsas. 1º Exame e 2º Teste de Base de Dados Página 15 de 17 - ALUNO NÚMERO: .......... P13 - Bases de Dados Objecto-Relacional (1v) Considere a relação flat-books que se encontra na 1ª forma normal: Indique a relação resultante da aplicação da seguinte interrogação: select title, author, Publisher(pub_name, pub_branch) as publisher, set(keyword) as keyword-list from flat-books group by title, author, publisher Title Compilers Author Smith Publisher.name MG-Hill Publisher.branch NY Compilers Jones MG-Hill NY Networks Jones Oxford London Networks Frick Oxford London Keyword-list {parsing, analysis} {parsing, analysis} {internet, web} {internet, web} Nota: a 3ª e 4ª colunas fazem parte de uma só coluna que correponde a um atributo (Publisher) composto de dois camapos (name e branch). 1º Exame e 2º Teste de Base de Dados Página 16 de 17 - ALUNO NÚMERO: .......... P14 – XML (2v) Considere os seguintes dados sob o formato relacional: Id Duração Título Compositor Maestro 3 1:01 Mad Rush J. Sibelius 4 1:47 L. Beethoven 5 1:57 Andante Upon Enchanted Ground L. Bernstein NULL A. Hovhaness NULL Id 13 55 56 57 Pai 3 5 5 5 Cantor A. Karis Y. Kondonassis F. Hendrickx H. Coryn a) Escreva o documento XML obras.xml obtido depois de exportar os dados relacionais acima para a seguinte DTD: <!ELEMENT obras (peça*)> <!ELEMENT peça (duração, título, compositor, maestro?, cantor*> <!ELEMENT duração (#PCDATA)> <!ELEMENT título (#PCDATA)> <!ELEMENT compositor (#PCDATA)> <!ELEMENT maestro (#PCDATA)> <!ELEMENT cantor (#PCDATA)> <!ATTLIST peça id ID REQUIRED> 1º Exame e 2º Teste de Base de Dados Página 17 de 17 - ALUNO NÚMERO: .......... <!DOCUMENT OBRAS [ <obras> <peça id=3> <duração>1:01</duração> <título>Mad Rush</título> <compositor>J. Sibelius</compositor> <maestro>L. Bernstein</compositor> <cantor>A. Karis</cantor> </peça> <peça id=4> <duração>1:47</duração> <título>Andante</título> <compositor>L. Beethoven</compositor> </peça> <peça id=5> <duração>1:57</duração> <título>Upon Enchanted Ground</título> <compositor> A. Hovhaness</compositor> <cantor>Y. Kondonassis</cantor> <cantor>F. Hendrickx</cantor> <cantor>H. Coryn</cantor> </peça> </obras> ] b) Escreva uma interrogação em XQuery que retorne todos os maetros que dirigiram "Mad Rush" de "J. Sibelius". O resultado não deve conter duplicados. for $m in distinct (/obras/peça/maestro) return for $p in /obras/peça where $p/titulo = “Mad Rush” and $p/compositor = “J. Sibelius” and $p/maestro = $m return $m Ou for $m in distinct (/obras/peça/maestro) where $m/../titulo = “Mad Rush” and $m/../compositor = “J. Sibelius” return $m