Baixe o app para aproveitar ainda mais
Prévia do material em texto
5. Porque designamos uma das chaves candidatas de uma relação para ser uma chave primária? Para facilitar a manipulação da tupla. Essa designação é feita através do critério de identificação da chave candidata que seja mais fácil utilização e única. 10. Liste as operações da álgebra relacional e a proposta de cada uma. Operações Relacionais Unárias Seleção: usada para selecionar um subconjunto de tuplas de uma relação que satisfaça uma condição de seleção. Pode ser visto como um particionamento horizontal da relação em dois conjuntos de tupla. Ex: σ DNO=4 (EMPREGADO) Projeção: seleciona certas colunas da tabela e descarta outras. Seleciona apenas os atributos desejados para ressaltá-los. Pode ser visto como um particionamento vertical da relação. Ex: π SEXO, SALARIO (EMPREGADO) Sequência de Operações: aplicam diversas operações de álgebra relacional, uma após a outra. Com ela pode se criar uma única expressão de álgebra relacional, pelo aninhamento das operações, ou podemos aplicar uma operação por vez e criar relações de resultados intermediários. Ex: π SEXO, SALARIO (σ DNO=4 (EMPREGADO)) Operação Renomear: utilizada para “rebatizar” os atributos nas relações intermediárias e de resultado. Ex: R(PRIMEIRONOME, ULTIMONOME, SALARIO) ← π PNOME, UNOME, SALARIO (σ DNO=4 (EMPREGADO)) Operações de álgebra relacional a partir da teoria dos conjuntos União: produz uma relação que inclui todas as tuplas em R1 ou R2, ou ambas, R1 e R2; R1 e R2 devem ter uma união compatível. Ex: R1 U R2 Interseção: produz uma relação que inclui todas as tuplas em R1 e R2; R1 e R2 devem ter uma união compatível. Ex: R1 ∩ R2 Subtração: produz uma relação que inclui todas as tuplas em R1 que não estão em R2; R1 e R2 devem ter uma união compatível. Ex: R 1 – R2 Produto Cartesiano: produz uma relação que tem os atributos de R1 e R2 e inclui, como tuplas, todas as possíveis combinações de tuplas de R1 e R2. Ex: R1 x R2 Operações Relacionais Binárias Junção: usado para combinar as tuplas relacionadas em duas relações dentro de uma tupla única. Ex: DEPT_GER ← DEPARTAMENTO |X| GERSSN=SSN EMPREGADO Equijunção: junção que o único operador usado for o =. Produz todas as combinações de tuplas de R1 e R2 que satisfazem uma condição uma condição de junção apenas com as comparações de igualdade. Junção Natural: igual a Equijunção, exceto que os atributos de junção de R2 não estarão incluídos de junção tiverem os mesmos nomes, não precisarão ser especificacados de nenhuma forma. Divisão: produz uma relação R(X) que inclui todas as tuplas t[X] em R1(Z) que aparecem em R1 em combinação com todas as tuplas de R2(Y), em que Z = X U Z. Ex: R1(Z) ÷ R2(Y) 15. 5.10 a) Essa inserção satisfaz todas as restrições, assim, ela é aceitável. b) Essa inserção satisfaz todas as restrições, assim, ela é aceitável. c) Essa inserção viola a restrição de chave, porque outra tupla com o mesmo valor de DNUMERO já existe na relação DEPARTAMENTO. Para conseguir inserir, deve mudar o valor de DNUMERO que será cadastrado. d) Essa inserção viola a restrição de integridade de entidade (null para chave primária PNO), assim, ela será rejeitada. Para inserir, deve colocar um valor válido para o domínio e que não repita uma chave já existente. e) Essa inserção satisfaz todas as restrições, assim, ela é aceitável. f) Essa remoção satisfaz todas as restrições, assim, ela é aceitável. g) Essa remoção não é aceitável, porque há tuplas em EMPREGADO que se referem a essa tupla. Portanto, se a tupla for removida, vão resultar violações de integridade referencial. Para conseguir remover, existe a possibilidade de remoção em cascata (eliminar quem faz referencia a ela). h) também não é aceitável, há tuplas em TRABALHA_EM que se referem a essa tupla. Para remoção, seguir os mesmos passos que o primeiro caso. i) Aceitável. j) Inaceitável, pois não existe a chave estrangeira informada. Deve informar outra. k) Aceitável. 20. 5.15 25. 6.19. Especifique as seguintes consultas em álgebra relacional no esquema de banco de dados do Exercício 5.13: a. Liste o Pedido# e Pdata para todos os pedidos remetidos pelo Depósito de número 'W2'. π Pedido#, Pdata (σ Armazem=’W2’ (Pedido P |X| Remessa R P.pedido = R.repedido)) b. Liste as informações do Depósito do qual o Cliente chamado 'José Lopez' teve seus pedidos fornecidos. Produza uma listagem: Pedido#, Depósito#. PEDIDOS ← (σ Cnome = ‘Jose Lopez’ (PEDIDO P |X| cust=cli EMPREGADO) DEPOSITO ← (PEDIDOS |X| Pedido=Pedido (REMESSA) RESULTADO ← π Pedido, Deposito (DEPOSITO) c. Produza uma listagem NOMECLI, #D0SPEDID0S, TOTAL_MEDIA_PEDIDO, em que a coluna do meio é o número total de pedidos feitos pelo cliente, e a última coluna é a média dos valores totais dos pedidos desse cliente. π Cnome, P.Cus, Contador (*), media (tot_ped) (p. cust Fcontador(*), media(tot_ped) (Cliente C |X| cli=cust Pedido P)) d. Liste os pedidos que não foram remetidos até 30 dias da data do pedido. π P. * (σ Data_rem <= Pdata +30 (Pedido P |X| Pedido=Pedido Remessa R)) e. Liste o Pedido# dos pedidos que foram remetidos de todos os depósitos cuja a empresa seja em Nova York. π Pedido# (σ Cidade = ‘Nova York’ (REMESSA R |X| Armazem#=Deposito# DEPOSITO) 30. 8.13. Especifique as consultas do Exercício 6.16 em SQL. Mostre o resultado de cada consulta se ela fosse aplicada ao banco de dados EMPRESA da Figura 5.6. a) SELECT e.nome FROM Empregado E INNER JOIN Projeto P ON P.dnum= e.dno INNER JOIN Trabalha_em t ON p.num = t.pno WHERE e.dno= 5 AND t.horas> 10 AND p.dnome = 'ProdutoX ' b) SELECT e.nome FROM Empregado E INNER JOIN Dependente D ON e.ssn = d.ssn WHERE e1.Minicial = d.nomeDependente c) SELECT e.nome FROM Empregado E INNER JOIN Empregado e1 ON e1.SUPERSSN = e.SSN WHERE e1..Minicial = ' Franklin Wong' d) SELECT p.pjnome, SUM ( T.horas ) FROM Projeto P INNER JOIN Trabalha_em T ON T.pno = P.numero GROUP BY P.pjnome e) SELECT e.nome FROM Empregado E HAVING count (*) = ( select count (*) FROM Projeto ) f) SELECT e.nome FROM Empregado E HAVING count (*) =0 g) SELECT p.nome, AVG ( e.salario ) FROM Empregado E INNER JOIN Departamento D ON d.numero = e.dno GROUP BY d.nome h) SELECT AVG ( e.salario ) FROM Empregado E INNER JOIN Departamento D ON d.numero = e.dno WHERE e.sexo = ' Feminino ' i) SELECT e.nome, e.endereço FROM Empregado E, DepartamentoLocalização D, Projeto P WHERE e.dno = d.numero AND d.numeor = p.numero AND p.localização = 'Houston ' AND d.localização < > ' Houston' j) SELECT e.Unome FROM Empregado E INNER JOIN Departamento D ON d.Gerssn = e.ssn LEFT JOIN Dependente DE ON DE.essn = E.ssn 35. 8.18. Especifique as consultas e as atualizações dos Exercícios 6.17 e 5.11, os quais se referem ao banco de dados COMPANHIA AÉREA (Figura 5.8), em SQL. a) SELECT numero_voo, codAeroportoPart, codAeroportoCheg FROM Trajeto_voo b) SELECT t.numero_voo, it.data FROM Trajeto_voo T INNER JOIN Instancia_Trajeto IT ON t.numero_voo = it. numero_voo WHERE t.codAeroportoCheg = ' LAX ' AND t.codAeroportoPart = ' IAH' c) SELECT t.numero_voo, t.codAeroportoPart, t.horarioAgenCheg, it.data FROM Trajeto_voo T INNER JOIN Aeroporto A ON a.codAeroporto= t.codAeroporto INNER JOIN Instancia_Trajeto IT ON it.numero_voo = t.numero_voo WHERE a.cidade = 'Houston' AND a.cidade = 'Los Angeles' d) SELECT λ FROM ReservaAssentos WHERE numero_voo = ' CO197' e) SELECT t.numAssentosDisp FROM Instancia_Projeto IP WHERE numero_voo = ' CO197' AND data = ' 1999-10-09'
Compartilhar