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)