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)
Download

Acetatos - centria