Você está na página 1de 28

Captulo 3: Modelo Relacional !

Estrutura das Bases de Dados Relacionais" Reduo a tabelas de um Esquema ER" lgebra Relacional" Operaes Estendidas da lgebra Relacional" Modicao da Base de Dados" Vistas"

Database System Concepts!

1!

Silberschatz, Korth and Sudarshan (modicado)!

Estrutura Bsica !
Formalmente, dados os conjuntos D1, D2, . Dn,, uma relao r um

subconjunto de" D1 x D2 x x Dn! Portanto, uma relao um conjunto de tuplos (a1, a2, , an) em que a i D i!

Database System Concepts!

2!

Silberschatz, Korth and Sudarshan (modicado)!

Esquema de Relao !
A1, A2, , An so atributos" R = (A1, A2, , An ) um esquema de relao!

"

"E.g. Customer-schema = (customer-name, customer-street, customer-city)" "E.g. "customer(Customer-schema)"

r(R) uma relao no esquema de relao R"

"

Database System Concepts!

3!

Silberschatz, Korth and Sudarshan (modicado)!

Instncia de Relao !
Os valores correntes (instncia da relao) de uma relao

podem ser descritos por uma tabela"


Um elemento t de r um tuplo, representado por uma linha da

tabela"
clientes ! id ! 13123! 43242! 36645! 21313! nome ! Lus Trindade! Pedro Silva! Joana Sobral! Susana Dias! morada ! Rue Central! Rua da Soa! Rua D Maria! Av do Brasil! cidade ! Paris! Coimbra! Coimbra! Lisboa! tuplos" atributos"

Database System Concepts!

4!

Silberschatz, Korth and Sudarshan (modicado)!

Linguagem de Consulta/Interrogao !
Linguagem a que o utilizador recorre para obter informao a

partir da base de dados."


Categorias de linguagens"

procedimentais" declarativas"
Linguagens Puras:"

lgebra Relacional" Clculo Relacional de Tuplos" Clculo Relacional de Domnios"


As linguagens puras formam a base terica das linguagens de

consulta utilizadas na prtica."

Database System Concepts!

5!

Silberschatz, Korth and Sudarshan (modicado)!

Interrogao de bases de dados !


Como deve ser uma linguagem de interrogao?" O que so perguntas (ou interrogaes)?" E como so as respostas? " Uma resposta a uma pergunta a uma base de dados relacional

uma relao (ou tabela)."


Eg. a resposta pergunta quais os clientes com contas com saldos inferiores a 10, e de quanto so esses saldos, uma relao com atributos nome (ou n) de cliente e saldo, e cujos tuplos so aqueles que se pretendem"
Logo uma pergunta uma funo (ou melhor uma operao)

que, dado um conjunto de relaes, devolve uma relao"


Para formalizar uma pergunta precisamos de um conjunto de

operadores que operem sobre relaes"


lgebra relacional como linguagem de interrogao"
Database System Concepts! 6! Silberschatz, Korth and Sudarshan (modicado)!

lgebra Relacional !
Seis operadores bsicos"

seleco" projeco" unio" diferena de conjuntos" produto cartesiano" renomeao"


Os operadores tm como argumentos relaes de entrada e

devolvem uma relao como resultado."

Database System Concepts!

7!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Seleco !
Notao:

p(r)"

p designado por predicado de seleco! Denida como:"

"

" " p(r) = {t | t r e p(t)}"

"onde p uma frmula do clculo proposicional constituda por termos ligados por: (e), (ou), (no)"
Cada termo da forma:"

"

"<atributo> "op "<atributo> ou <constante>" onde op pode ser: =, , >, . <. "

Exemplo de seleco:

branch-name=Perryridge (account)"

Database System Concepts!

8!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Seleco Exemplo !


Relao r! r ! A !



A=B D > 5 (r)" B !



C ! 1" 5" D ! 7 ! 7 !

12" 3" 23" 10 !

A = B D > 5 (r) !
A !

B !

C ! 1" D ! 7 !

23" 10 !

Database System Concepts!

9!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Projeco !
Notao:"

A1, A2, , Ak (r) " "onde A1, ..., Ak so nomes de atributos e r uma relao."
O resultado a relao com os k atributos (k colunas) obtidos

eliminando os atributos (colunas) que no esto listadas"


So removidas as linhas duplicadas no resultado, dado que as

relaes so conjuntos"
E.g. eliminar o atributo branch-name de account

" account-number, balance (account) "

Database System Concepts!

10!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Projeco Exemplo !


Relao r:" r ! A !



A,C (r)" A !




Database System Concepts!

B ! 10 ! 20 ! 30 ! 40 !

C ! 1 ! 1 ! 1 ! 2 ! A,C (r)!

C ! 1 ! 1 ! 1 ! 2 !
11!

A !

C ! 1 ! 1 ! 2 !

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Unio !
Notao: r s! Denida como: "

" "

"r s = {t | t r ou t s}"

Para r s ser vlida:"

!1. r, s devem ter a mesma aridade (igual nmero de atributos)" "2. Os domnios dos atributos devem ser compatveis (e.g., os valores da 2 coluna de r so do mesmo tipo dos valores da 2 coluna de s)"
E.g. determinar quais os clientes que tm uma conta ou um

emprstimo customer-name (depositor) customer-name (borrower)!

Database System Concepts!

12!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Unio Exemplo !


Relaes r, s:! A !


r ! B ! 1 ! 2 ! 1 ! A !

s ! B ! 2 ! 3 !

r s:"
rs ! A !




Database System Concepts!

B ! 1 ! 2 ! 1 ! 3 !

13!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Diferena de Conjuntos !


Notao: r s" Denida como:"

"

" r s = {t | t r e t s}""

As diferenas de conjuntos s podem ser efectuadas entre

relaes compatveis."
r e s devem ter a mesma aridade" os domnios dos atributos de r e s devem ser compatveis"

"

Database System Concepts!

14!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Diferena de Conjuntos-Ex. !


Relaes r, s:! A !


r ! B ! 1 ! 2 ! 1 ! A !

s ! B ! 2 ! 3 !

r s:" r-s ! A !

B ! 1 ! 1 !

Database System Concepts!

15!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Produto Cartesiano !


Notao: r x s" Denida como:"

"

"r x s = {t q | t r e q s}"

Assume que os atributos de r(R) e s(S) so disjuntos. (Ou seja,

R S = )."
Se os atributos de r(R) e s(S) no so disjuntos, ento tm que

se utilizar renomeaes."

Database System Concepts!

16!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Produto Cartesiano-Ex. !


Relaes r e s:" r ! A !

r x s:" A !








Database System Concepts!

s ! B ! 1 ! 2 ! C !



D ! 10 ! 13 ! 20 ! 10 ! E ! a ! a ! b ! b !

rxs ! B ! 1 ! 1 ! 1 ! 1 ! 2 ! 2 ! 2 ! 2 ! C !







D ! 10 ! 13 ! 20 ! 10 ! 10 ! 13 ! 20 ! 10 ! E ! a ! a ! b ! b ! a ! a ! b ! b !
17!

Silberschatz, Korth and Sudarshan (modicado)!

Composio de Operaes !
Pode-se construir expresses combinando vrias operaes" Exemplo: A=C(r x s)"

rxs ! A !







B ! 1 ! 1 ! 1 ! 1 ! 2 ! 2 ! 2 ! 2 ! C !







D ! 10 ! 13 ! 20 ! 10 ! 10 ! 13 ! 20 ! 10 ! E ! a ! a ! b ! b ! a ! a ! b ! b ! A !


A=C(r x s) ! B ! 1 ! 1 ! 2 ! C !


D ! 10 ! 13 ! 20 ! E ! a ! a ! b !

Database System Concepts!

18!

Silberschatz, Korth and Sudarshan (modicado)!

Operao de Renomeao !
Permite dar um nome a, e portanto referir, os resultados de

expresses de lgebra relacional."


Permite que uma relao seja referida por mais de um nome." A expresso:"

x(E) "
"devolve a expresso E com o nome X"
Se uma expresso de lgebra relacional E tem aridade n, ento"

x (A1, A2, , An) (E) "


"devolve a expresso E com o nome X, e com os atributos renomeados para A1, A2, ., An."

Database System Concepts!

19!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
frmacos PK codF nomeF quantidade consultas mdicos PK nEmpr nomeM especialidade PK nConsulta data FK1 nBI FK2 nEmpr pacientes PK nBI nomeP telefone morada idade receitas PK,FK1 codF PK nConsulta

Database System Concepts!

20!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
mdicos(nEmpr,nomeM,especialidade)! pacientes(nBI,nomeP,telefone,morada,idade)! frmacos(codF,nomeF)! consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!

Database System Concepts!

21!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
mdicos(nEmpr,nomeM,especialidade)! frmacos(codF,nomeF)! pacientes(nBI,nomeP,telefone,morada,idade)! consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!
mdicos PK nEmpr nomeM especialidade frmacos PK codF nomeF quantidade consultas PK nConsulta data FK1 nBI FK2 nEmpr pacientes PK nBI nomeP telefone morada idade receitas PK,FK1 codF PK nConsulta

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 (pacientes)) "

Database System Concepts!

22!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
mdicos(nEmpr,nomeM,especialidade)! frmacos(codF,nomeF)! pacientes(nBI,nomeP,telefone,morada,idade)! consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!
mdicos PK nEmpr nomeM especialidade frmacos PK codF nomeF quantidade consultas PK nConsulta data FK1 nBI FK2 nEmpr pacientes PK nBI nomeP telefone morada idade receitas PK,FK1 codF PK nConsulta

Quais os nomes dos frmacos que j foram receitados em consultas da

clnica?"

nomeF((receitas.codF = frmacos.codF(receitas x frmacos))) "

Database System Concepts!

23!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
mdicos(nEmpr,nomeM,especialidade)! frmacos(codF,nomeF)! pacientes(nBI,nomeP,telefone,morada,idade)! consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!
mdicos PK nEmpr nomeM especialidade frmacos PK codF nomeF quantidade consultas PK nConsulta data FK1 nBI FK2 nEmpr pacientes PK nBI nomeP telefone morada idade receitas PK,FK1 codF PK nConsulta

Quais os nomes dos frmacos que nunca foram receitados?"

nomeF(frmacos) " nomeF(receitas.codF = frmacos.codF(receitas x frmacos))) "

Database System Concepts!

24!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
mdicos(nEmpr,nomeM,especialidade)! frmacos(codF,nomeF)! pacientes(nBI,nomeP,telefone,morada,idade)! consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!
mdicos PK nEmpr nomeM especialidade frmacos PK codF nomeF quantidade consultas PK nConsulta data FK1 nBI FK2 nEmpr pacientes PK nBI nomeP telefone morada idade receitas PK,FK1 codF PK nConsulta

Qual a idade do paciente mais velho?" Renomear a relao pacientes como d" A consulta :"

idade(pacientes) " pacientes.idade( " pacientes.idade < d.idade (pacientes x d (pacientes) ) " ) "
Database System Concepts! 25! Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
pacientes !
Nome ! Idade !

d(pacientes) !
d.Nome ! d.Idade !

pacientes x d(pacientes) !
Nome ! Idade ! d.Nome ! d.Idade !

Ana ! Rui ! Carla !

30 ! 20 ! 25 !

Ana !

30 ! 20 ! 25 !

Ana !

30 ! 30 ! 30 ! 20 ! 20 ! 20 ! 25 ! 25 ! 25 !

Ana ! Rui ! Carla ! Ana ! Rui ! Carla ! Ana ! Rui ! Carla !

30 ! 20 ! 25 ! 30 ! 20 ! 25 ! 30 ! 20 ! 25 !

Rui ! Carla !

Ana ! Ana ! Rui ! Rui ! Rui !

pacientes.Idade < d.Idade (pacientes x d(pacientes)) !


Nome ! Idade ! d.Nome ! d.Idade !

Rui ! Rui ! Carla !

20 ! 20 ! 25 !

Ana ! Carla ! Ana !

30 ! 25 ! 30 !

Carla ! Carla ! Carla !

! pacientes.Idade ( pacientes.Idade < d.Idade Idade (pacientes) Idade (pacientes) Idade ! (pacientes x d(pacientes))) ! pacientes.Idade ( pacientes.Idade < d.Idade 30 ! Idade ! (pacientes x d(pacientes))) ! 20 ! 25 !
Database System Concepts!

20 ! 25 !
26!

Idade !

30 !

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo Clnica !
frmacos receitas PK,FK1 PK codF nConsulta quantidade

mdicos(nEmpr,nomeM,especialidade)! pacientes(nBI,nomeP,telefone,morada,idade)! frmacos(codF,nomeF)!

PK

codF nomeF

consultas

consultas(nConsulta,data,nBI,nEmpr)! receitas(codF,nConsulta,quantidade)!

mdicos PK nEmpr nomeM especialidade

PK FK1 FK2

nConsulta data nBI nEmpr pacientes PK nBI nomeP telefone morada idade

E quais os (nomes dos) pacientes com essa idade?"

Seja r a relao da pergunta anterior:"

nomeP( pacientes.idade = r.idade (pacientes x r)) "

Database System Concepts!

27!

Silberschatz, Korth and Sudarshan (modicado)!

Denio Formal !
Uma expresso bsica na lgebra relacional :"

Uma relao na base de dados" Uma relao constante"


Sejam E1 e E2 expresses de lgebra relacional; ento todas as

expresses abaixo so expresses 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!

28!

Silberschatz, Korth and Sudarshan (modicado)!

Você também pode gostar