Capítulo 3: Modelo Relacional
description
Transcript of Capítulo 3: Modelo Relacional
©Silberschatz, Korth and Sudarshan (Modificado)3.2.1Database System Concepts
Capítulo 3: Modelo RelacionalCapí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
©Silberschatz, Korth and Sudarshan (Modificado)3.2.2Database System Concepts
Linguagem de Consulta/InterrogaçãoLinguagem 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.
©Silberschatz, Korth and Sudarshan (Modificado)3.2.3Database System Concepts
Álgebra RelacionalÁ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.
©Silberschatz, Korth and Sudarshan (Modificado)3.2.4Database System Concepts
Operação de Selecção – ExemploOperação de Selecção – Exemplo
• Relação r A B C D
1
5
12
23
7
7
3
10
A=B ^ D > 5 (r)A B C D
1
23
7
10
©Silberschatz, Korth and Sudarshan (Modificado)3.2.5Database System Concepts
Operação de SelecçãoOperaçã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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.6Database System Concepts
Operação de Projecção – ExemploOperação de Projecção – Exemplo
Relação r: A B C
10
20
30
40
1
1
1
2
A C
1
1
1
2
=
A C
1
1
2
A,C (r)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.7Database System Concepts
Operação de ProjecçãoOperaçã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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.8Database System Concepts
Operação de União – ExemploOperação de União – Exemplo
Relações r, s:
r s:
A B
1
2
1
A B
2
3
rs
A B
1
2
1
3
©Silberschatz, Korth and Sudarshan (Modificado)3.2.9Database System Concepts
Operação de UniãoOperaçã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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.10Database System Concepts
Operação de Diferença de Conjuntos-Ex.Operação de Diferença de Conjuntos-Ex.
Relações r, s:
r – s:
A B
1
2
1
A B
2
3
rs
A B
1
1
©Silberschatz, Korth and Sudarshan (Modificado)3.2.11Database System Concepts
Operação de Diferença de ConjuntosOperaçã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
©Silberschatz, Korth and Sudarshan (Modificado)3.2.12Database System Concepts
Operação de Produto Cartesiano-Ex.Operação de Produto Cartesiano-Ex.
Relations r, s:
r x s:
A B
1
2
A B
11112222
C D
1010201010102010
E
aabbaabb
C D
10102010
E
aabbr
s
©Silberschatz, Korth and Sudarshan (Modificado)3.2.13Database System Concepts
Operação de Produto CartesianoOperaçã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.
©Silberschatz, Korth and Sudarshan (Modificado)3.2.14Database System Concepts
Composição de OperaçõesComposiçã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
11112222
C D
1010201010102010
E
aabbaabb
A B C D E
122
102020
aab
©Silberschatz, Korth and Sudarshan (Modificado)3.2.15Database System Concepts
Operação de RenomeaçãoOperaçã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.
©Silberschatz, Korth and Sudarshan (Modificado)3.2.16Database System Concepts
Definição FormalDefiniçã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
©Silberschatz, Korth and Sudarshan (Modificado)3.2.17Database System Concepts
Exemplo BancárioExemplo 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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.18Database System Concepts
Consultas de ExemploConsultas 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))
©Silberschatz, Korth and Sudarshan (Modificado)3.2.19Database System Concepts
Consultas de ExemploConsultas 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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.20Database System Concepts
Consultas de ExemploConsultas 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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.21Database System Concepts
Consultas de ExemploConsultas 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) )
©Silberschatz, Korth and Sudarshan (Modificado)3.2.22Database System Concepts
Consultas de ExemploConsultas 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)))
©Silberschatz, Korth and Sudarshan (Modificado)3.2.23Database System Concepts
Exemplo ClínicaExemplo 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)
©Silberschatz, Korth and Sudarshan (Modificado)3.2.24Database System Concepts
Consultas de ExemploConsultas 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)))
©Silberschatz, Korth and Sudarshan (Modificado)3.2.25Database System Concepts
Consultas de exemploConsultas 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))