250 likes | 368 Views
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. Linguagem de Consulta/Interrogação.
E N D
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
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.
Á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.
Operação de Selecção – Exemplo A B C D • Relação r 1 5 12 23 7 7 3 10 • A=B ^ D > 5(r) A B C D 1 23 7 10
Operação de Selecção • Notação: p(r) • p é designado por predicado de selecção • Definida como: p(r) = {t | t re 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)
Operação de Projecção – Exemplo • Relação r: A B C 10 20 30 40 1 1 1 2 A C A C • A,C (r) 1 1 1 2 1 1 2 =
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 accountaccount-number, balance (account)
Operação de União – Exemplo • Relações r, s: A B A B 1 2 1 2 3 s r r s: A B 1 2 1 3
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)
Operação de Diferença de Conjuntos-Ex. • Relações r, s: A B A B 1 2 1 2 3 s r r – s: A B 1 1
Operação de Diferença de Conjuntos • Notação: r – s • Definida como: r – s = {t | t re 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
Operação de Produto Cartesiano-Ex. A B C D E Relations r, s: 1 2 10 10 20 10 a a b b r s r xs: 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
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.
Composição de Operações • Pode-se construir expressões combinando várias operações • Exemplo: A=C(r x s) • r x s • A=C(r x s) 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 10 20 20 a a b 1 2 2
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.
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
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)
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))
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)
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)
Consultas de Exemplo • Determinar todos os clientes que têm um empréstimo na agência de Perryridge. • Query 1customer-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) )
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 rd (account)))
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)
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)))
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 rd (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))