Capítulo 3: Modelo Relacional Estrutura das Bases de Dados Relacionais Redução a tabelas de uma Esquema ER Álgebra Relacional Operações Estendidas da Álgebra Relacional Modificação da Base de Dados Vistas Database System Concepts 3.2.1 ©Silberschatz, Korth and Sudarshan (Modificado) Linguagem de Consulta/Interrogação Linguagem a que o utilizador recorre para obter informação a partir da base de dados. Categorias de linguagens procedimentais declarativas Linguagens “Puras”: Álgebra Relacional Cálculo Relacional de Tuplos Cálculo Relacional de Domínios As linguagens puras formam a base teórica das linguagens de consulta utilizadas na prática. Database System Concepts 3.2.2 ©Silberschatz, Korth and Sudarshan (Modificado) Álgebra Relacional Linguagem declarativa Seis operadores básicos selecção projecção união diferença de conjuntos produto cartesiano renomeação Os operadores têm como argumentos relações de entrada e devolvem uma relação como resultado. Database System Concepts 3.2.3 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Selecção – Exemplo • Relação r • A=B ^ D > 5 (r) Database System Concepts A B C D 1 7 5 7 12 3 23 10 A B C D 1 7 23 10 3.2.4 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Selecção Notação: p(r) p é designado por predicado de selecção Definida como: p(r) = {t | t r e p(t)} Em que p é uma fórmula do cálculo proposicional constituída por termos ligados por: (e), (ou), (não) Cada termo é da forma: <atributo> op <atributo> ou <constante> em que op pode ser: =, , >, . <. Exemplo de selecção: branch-name=‘Perryridge’ (account) Database System Concepts 3.2.5 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Projecção – Exemplo Relação r: A,C (r) Database System Concepts A B C 10 1 20 1 30 1 40 2 A C A C 1 1 1 1 1 2 2 = 3.2.6 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Projecção Notação: A1, A2, …, Ak (r) em que A1, ..., Ak são nomes de atributos e r é uma relação. O resultado é a relação com as k colunas obtidas eliminando as colunas que não estão listadas São removidas as linhas duplicadas no resultado, dado que as relações são conjuntos E.g. eliminar o atributo branch-name de account account-number, balance (account) Database System Concepts 3.2.7 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de União – Exemplo Relações r, s: A B A B 1 2 2 3 1 s r r s: Database System Concepts A B 1 2 1 3 3.2.8 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de União Notação: r s Definida como: r s = {t | t r ou t s} Para r s ser válida: 1. r, s devem ter a mesma aridade (igual número de atributos) 2. Os domínios dos atributos têm de ser compatíveis (e.g., os valores da 2ª coluna de r são do mesmo tipo dos valores da 2ª coluna de s) E.g. determinar quais os clientes que têm uma conta ou um empréstimo customer-name (depositor) customer-name (borrower) Database System Concepts 3.2.9 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Diferença de Conjuntos-Ex. Relações r, s: A B A B 1 2 2 3 1 s r r – s: Database System Concepts A B 1 1 3.2.10 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Diferença de Conjuntos Notação: r – s Definida como: r – s = {t | t r e t s} As diferenças de conjuntos só podem ser efectuadas entre relações compatíveis. r e s devem ter a mesma aridade os domínios dos atributos de r e s devem ser compatíveis Database System Concepts 3.2.11 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Produto Cartesiano-Ex. Relations r, s: A B C D E 1 2 10 10 20 10 a a b b r s r x s: Database System Concepts A B C D E 1 1 1 1 2 2 2 2 10 10 20 10 10 10 20 10 a a b b a a b b 3.2.12 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Produto Cartesiano Notação: r x s Definida como: r x s = {t q | t r e q s} Assume que os atributos de r(R) e s(S) são disjuntos. (Ou seja, R S = ). Se os atributos de r(R) e s(S) não são disjuntos, então têm que se utilizar renomeações. Database System Concepts 3.2.13 ©Silberschatz, Korth and Sudarshan (Modificado) Composição de Operações Pode-se construir expressões combinando várias operações Exemplo: A=C(r x s) rxs A=C(r x s) Database System Concepts A B C D E 1 1 1 1 2 2 2 2 10 10 20 10 10 10 20 10 a a b b a a b b A B C D E 1 2 2 10 20 20 a a b 3.2.14 ©Silberschatz, Korth and Sudarshan (Modificado) Operação de Renomeação Permite dar um nome, e portanto referir, aos resultados de expressões de álgebra relacional. Permite que uma relação seja referida por mais de um nome. Exemplo: x (E) Devolve a expressão E com o nome X Se uma expressão de álgebra relacional E tem aridade n, então x (A1, A2, …, An) (E) Devolve a expressão E com o nome X, e com os atributos renomeados para A1, A2, …., An. Database System Concepts 3.2.15 ©Silberschatz, Korth and Sudarshan (Modificado) Definição Formal Uma expressão básica na álgebra relacional é: Uma relação na base de dados Uma relação constante Sejam E1 e E2 expressões de álgebra relacional; então todas as expressões abaixo são expressões de álgebra relacional: E1 E2 E1 - E2 E1 x E2 p (E1), P é um predicado nos atributos de E1 s(E1), S é uma lista com alguns dos atributos de E1 x (E1), x é um novo nome para o resultado de E1 Database System Concepts 3.2.16 ©Silberschatz, Korth and Sudarshan (Modificado) Exemplo Bancário branch (branch-name, branch-city, assets) customer (customer-name, customer-street, customer-only) account (account-number, branch-name, balance) loan (loan-number, branch-name, amount) depositor (customer-name, account-number) borrower (customer-name, loan-number) Database System Concepts 3.2.17 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Determinar todos os empréstimos superiores a $1200 amount > 1200 (loan) Encontrar os números dos empréstimos de montante superior a $1200 loan-number (amount > 1200 (loan)) Database System Concepts 3.2.18 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Listar os nomes de todos os clientes que têm um empréstimo, uma conta, ou ambas as coisas customer-name (borrower) customer-name (depositor) Encontrar os clientes que têm um empréstimo e uma conta no banco. customer-name (borrower) customer-name (depositor) Database System Concepts 3.2.19 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Determinar todos os clientes que têm um empréstimo na agência de Perryridge. customer-name (branch-name=‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan))) Listar os nomes dos clientes que possuem um empréstimo na agência de Perryridge mas que não tem nenhuma conta no banco. customer-name (branch-name = ‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan))) – customer-name(depositor) Database System Concepts 3.2.20 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Determinar todos os clientes que têm um empréstimo na agência de Perryridge. Query 1 customer-name(branch-name = ‘Perryridge’ (borrower.loan-number = loan.loan-number(borrower x loan))) Query 2 customer-name(loan.loan-number = borrower.loan-number( (branch-name = ‘Perryridge’(loan)) x borrower) ) Database System Concepts 3.2.21 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Determinar o saldo mais elevado entre todas as contas Renomear a relação account como d A consulta é: balance(account) - account.balance (account.balance < d.balance (account x d (account))) Database System Concepts 3.2.22 ©Silberschatz, Korth and Sudarshan (Modificado) Exemplo Clínica médicos(nEmpr,nomeM,especialidade) pacientes(nBI,nomeP,telefone,morada,idade) fármacos(codF,nomeF) consultas(nConsulta,data,nBI,nEmpr) receitas(codF,nConsulta,quantidade) Database System Concepts 3.2.23 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de Exemplo Quais os pacientes com mais de 50 anos de idade? idade > 50 (pacientes) Quais os nomes dos pacientes com mais de 50 anos de idade? nomeP (idade > 50 (loan)) Quais os fármacos que já foram receitados em consultas da clínica? nomeF((receitas.codF = fármacos.codF(receitas x fármacos))) Quais os fármacos que nunca foram receitados? nomeF(fármacos) – nomeF(receitas.codF = fármacos.codF(receitas x fármacos))) Database System Concepts 3.2.24 ©Silberschatz, Korth and Sudarshan (Modificado) Consultas de exemplo Qual a idade do paciente mais velho? Renomear a relação pacientes como d A consulta é: idade(pacientes) – pacientes.idade( pacientes.idade < d.idade (pacientes x d (pacientes) ) ) E quais os (nomes dos) pacientes com essa idade? Seja r a relação da pergunta anterior: nomeP( pacientes.idade = r.idade (pacientes x r)) Database System Concepts 3.2.25 ©Silberschatz, Korth and Sudarshan (Modificado)