Você está na página 1de 112

Captulo 3 Modelo Relacional

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Estrutura Bsica
Dados conjuntos A1, A2, ..., An, uma relao r um subconjunto de A1 A2 ... An Assim, uma relao um conjunto de n-tuplas (a1,a2,...,an) onde aiAi , para cada i de 1 at n

Estrutura Bsica
Exemplo: Se nome_cliente = {Jones, Smith, Curry, Lindsay} rua_cliente = {Main, North, Park} cidade_cliente = {Harrison, Rye, Pittsfield} Ento r = {(Jones, Main, Harrison), (Smith, North, Rye), (Curry, North, Rye), (Lindsay, Park, Pittsfield)} uma relao sobre nome_cliente rua_cliente cidade_cliente

Esquema de Relao

Sejam os atributos A1, A2, ..., An R = (A1, A2, ..., An) dito ser um esquema de relao Esquema_cliente = (nome_cliente, rua_cliente, cidade_cliente) r(R) uma relao no esquema de relao R cliente (Esquema_cliente)

Instncia de Relao
Os valores correntes de uma relao (instncia da relao) so especificados por uma tabela. Um elemento t de r uma tupla; representada por uma linha na tabela.
nome_cliente
Jones Smith Curry Lindsay

rua_cliente
Main North North Park cliente

cidade_cliente
Harrison Rye Rye Pittsfield

Observaes Gerais

Como as tabelas em essncia so relaes, utiliza-se os termos matemticos relao e tupla, no lugar de tabela e linhas. Como uma relao um conjunto de tuplas, podemos usar a notao matemtica t r para denotar que a tupla t est na relao r.

Chaves
Seja K R K uma super chave de R se valores de K so suficientes para identificar uma nica tupla de cada possvel relao r(R). Por possvel r estamos querendo denotar uma relao que poderia existir na empresa que est sendo modelada. Exemplo: {cliente_nome, rua_nome} e {cliente_nome} so ambas super chaves de cliente, se assumirmos que dois clientes no possam ter o mesmo nome.

Chaves

K uma chave candidata se K mnima. Exemplo: {cliente_nome} uma chave candidata para cliente,pois ela super chave (assumindo que dois clientes no possam ter o mesmo nome) e mnima desde que nenhum subconjunto dela uma super chave.

Determinando Chaves a partir dos Conjuntos E-R Conjunto de entidades fortes. A chave primria da entidade torna-se a chave primria da relao. Conjunto de entidades fracas. A chave primria da relao consiste da unio da chave primria da entidade forte relacionada e o discriminador da entidade fraca.

Determinando Chaves a partir dos Conjuntos E-R Conjunto de relacionamentos. A unio da chave primria das entidades relacionadas tornase uma super chave da relao. Para relacionamentos binrios do tipo muitos-paramuitos, essa super chave tambm a chave primria. Para relacionamentos binrios do tipo muitos-para-um, a chave primria da entidade muitos torna-se a chave primria da relao. Para relacionamentos binrios do tipo um-paraum, pode ser a chave primria de qualquer das duas entidades.

Linguagens de Consulta Linguagem por meio da qual usurios solicitam informaes do banco de dados. Categoria de linguagens:
Procedural No-procedural

Linguagens Puras :
lgebra Relacional (procedural) Clculo relacional de tupla (no-procedural) Clculo relacional de domnio (no-procedural)

Linguagens puras (formais, sem a sintaxe agradvel das linguagens comerciais) formam a base subjacente das linguagens de consultas usadas comercialmente.

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

lgebra Relacional
Linguagem procedural Seis operadores bsicos
seleo ( ) projeo ( ) unio ( ) diferena ( - ) Produto cartesiano ( x ) Rename ( )

Os operadores tomam uma ou mais relaes como entrada e produzem uma nova relao como resultado.

Observaes Gerais
O que so operaes primrias ?
O que so operaes binrias?

Observaes Gerais
O que so operaes primrias ? So aquelas operaes que so efetuadas em cima de uma nica relao (ou seja nica tabela). Quais as operaes que vocs consideram como primrias ?

- Seleo, projeo e rename

Observaes Gerais
O que so operaes binrias? As operaes que operam sobre um par de relaes (tabelas) so ditas operaes binrias. Quais operaes podemos considerar como binrias ?

- Unio, Diferena e Produto cartesiano

Observaes Gerais
Os operadores tomam uma ou mais relaes como entrada e produzem uma nova relao como resultado. Est certa est afirmao ? Os operadores tomam uma ou mais tabela como entrada e produzem uma nova tabela como resultado.

Operao de Seleo
Notao: P(r) Definida como: P(r)={tt r and P(t)} Onde P uma frmula do clculo proposicional, tratando termos da seguinte forma: <atributo> = < atributo > ou <constante> > < conectados por: ^ (and), (or), (not)

Observaes Gerais
A operao de seleo representada pela letra grega temos :
nome_agncia = UFSC (emprstimo)

, assim

Onde : - Predicado : nome_agncia = UFSC - Argumento da Relao : emprstimo

Operao de Seleo Exemplo


Relao r:
A B
B

1 7 5 7 12 3 23 10
C D

A=B ^ D > 5 (r)

1 7 23 10

Operao de Projeo
Notao: onde A1, A2 so nomes de atributos e r um nome de relao. O resultado definido como a relao de k colunas obtida pela remoo das colunas que no esto listadas Linhas duplicadas so eliminadas do resultado, visto que relaes so conjuntos.

A1, A2, ..., Ak(r)

Operao de Projeo - Exemplo


Relao r:
A B 10 20 30 40 C 1 1 1 2

A, C(r)

C 1 1 1 2

C 1 1 2

Operao Unio
Notao: r s Definida como: r s = {tt r or t s} Para r s ser vlida,
1. r, s devem ter o mesmo grau (aridade - mesmo nmero de atributos). 2. Os domnios dos atributos devem ser compatveis (ex.: a segunda coluna de r lida com o mesmo tipo de valores da segunda coluna de s).

Operao Unio - Exemplo


r s B 1 2 1 A B 2 3

Relaes r, s:

rs

B
1 2 1 3

Operao Diferena
Notao: r - s Definida como: r - s = {tt r and t s} A operao de diferena s pode ser realizada entre relaes compatveis.
r e s devem ter o mesmo grau. Os domnios dos atributos de r e s devem ser compatveis

Operao Diferena Exemplo


Relaes r, s:
r A B 1 2 1 s A B 2 3

r-s

B 1 1

Operao Produto Cartesiano


Notao: r s Definida como: r s = {t qt r and q s} Assuma que os atributos de r(R) e s(S) so disjuntos. (Isto , R S = ). Se os atributos de r( R) e s( S) no so disjuntos, ento uma renomeao deve ser feita.

Operao Produto Cartesiano Exemplo


Relaes r,s:
r A B 1 2 s C D 10 10 20 10 E + + -

B
1 1 1 1 2 2 2 2

D
10 10 20 10 10 10 20 10

E
+ + + + -

rs

Composio de Operaes
Pode-se construir expresses usando mltiplas operaes Exemplo : A= C(r s) rs Notao: r s Sejam r e s relaes sobre esquemas R e S, respectivamente. O resultado uma relao com esquema R S o qual obtido considerando cada par de tuplas tr de r e ts de s. Se tr e ts tm os mesmos valores em cada um dos atributos comuns (i.e., RS), ento a tupla t adicionada ao resultado, onde t tem o mesmo valor como tr em r t tem o mesmo valor como ts em s

Composio de Operaes
Exemplo: R =(A,B,C,D) S =(E,B,D) Esquema resultado = (A,B,C,D,E) r s definido como: r.A, r.B, r.C, r.D,s.E ( r.B= s.B ^ r.D= s.D ( r s))

Operao de Juno Natural Exemplo


Relaes r,s:
r A B 1 2 4 1 2 C D a a b a b s B 1 3 1 2 3 D a a a b b E

B 1 1 1 1 2

D a a a a b

Operao de Diviso
rs interessante para consultas que incluem a frase para todos. Sejam r e s relaes com esquemas R e S respectivamente, onde O resultado de r s uma relao com esquema R - S = (A1, ..., Am), tal que r s = {t t
R-S(r)

R = (A1, ..., Am , B1, ..., Bn) S = (B1, ..., Bn)

^ u s (tu r)}

Operao de Diviso - Exemplo


r s

Relaes r,s:

B 1 2 3 1 1 1 3 4 6 1 2

B 1 2

rs

Outro Exemplo de Diviso


Relaes r,s:
r A B a a a a a a a a C D a a b a b a b b E 1 1 1 1 3 1 1 1 s D a b E 1 1

rs

B a a

Operao de Designao
A operao de designao () prov uma maneira conveniente de expressar consultas complexas; escrever uma consulta como um programa seqencial consiste de uma srie de atribuies seguidas por uma expresso cujo valor apresentado como o resultado da consulta.

Operao de Designao
A designao deve sempre ser feita a uma varivel de relao temporria. Exemplo: Escrever r s como
temp1 R-S(r) temp2 R-S((temp1 s) - R-S,S(r)) result = temp1 - temp2
O resultado da expresso a direita de atribudo varivel de relao esquerda de . Pode-se usar variveis em expresses subseqentes.

Exemplo de Consultas
Encontrar todos os clientes que tenham ao menos uma conta nas agncias Downtown e Uptown.
Consulta 1 nome_cliente(nome_agncia= Downtown (depositante nome_cliente(nome_agncia = Uptown (depositante conta)) conta))

Exemplo de Consultas
Achar todos os clientes que tem uma conta em todas as agncias localizadas no Brooklyn. cliente_nome, agncia_nome (depositante conta) agncia_nome (cidade_agncia = Brooklyn(agncia))

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Clculo Relacional de Tupla


O Clculo Relacional de Tupla uma linguagem no-procedural, onde cada consulta da forma {t | P (t)} Este o conjunto de todas as tuplas t que tornam o predicado P verdadeiro. t uma varivel de tupla; t[A] denota o valor da tupla t no atributo A. t r denota que a tupla t est na relao r. P uma frmula similar quelas do clculo de predicados.

Frmulas do Clculo de Predicado


Incluem: 1. Conjunto de atributos e constantes. 2. Conjunto de operadores comparao: (e.g., <, , =, , >, ) 3. Conjunto de conectivos lgicos: and (^), or (), not () 4. Implicao (): x y, se x verdade, ento y verdade.
xyxy

5. Conjunto de quantificadores:
t r (Q( t)) existe uma tupla t na relao r que torna o predicado Q( t) verdadeiro.

O Exemplo da Empresa Bancria


agncia (nome_agncia,cidade_agncia, fundos) cliente (nome_cliente, rua_cliente, cidade_cliente) conta (nome_agncia, nmero_conta, saldo) emprstimo (nome_agncia, nmero_emprstimo, total) depositante (nome_cliente, nmero_conta) devedor (nome_cliente, nmero_emprstimo)

Exemplo de Consultas
(1) Achar os nomes de todas as agncias na relao emprestimo select nome_agencia from emprestimo

Exemplo de Consultas
(2) Achar os nomes de todas as agencias na relao emprestimo e remover as duplicatas
select distinct nome_agencia from emprestimo

Exemplo de Consultas
(3) Achar todos os numeros de emprestimos de emprestimos feitos na agencia Perryridge com totais maiores que $1200.
select numero_empestimo from emprestimo where nome_agencia = Perryridge and total > 1200

Exemplo de Consultas
(4) Achar o numero do emprestimo dos emprestimos com total entre $90,000 e $100,000 (isto e, >= $90,000 and <= $100,000) select numero_emprestimo from emprestimo where total between 90000 and 100000

Exemplo de Consultas
(5) Encontre o nome do cliente e o numero de emprestimo de todos os clientes que possuem um emprestimo na agencia Perryridge. select distinct nome_cliente,devedor.numero_emprest imo from devedor,emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = Perryridge

Exemplo de Consultas
(6) Encontre o nome e o numero do emprestimo dos clientes que possuem um emprestimo na agencia Perryridge; substitua o nome da coluna numero_emprestimo por numero_do_emprestimo_do_devedor.

Exemplo de Consultas
select distinct nome_cliente, devedor.numero_emprestimo as numero_do_emprestimo_do_dev edor from devedor, emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = Perryridge

Exemplo de Consultas
(7) Encontre o nome dos clientes e seus numeros de emprestimo para todos os clientes que possuem um emprestimo em alguma agencia.

Exemplo de Consultas
select distinct nome_cliente, T.numero_emprestimo from devedor as T, emprestimo as S where T.numero_emprestimo =S.numero_emprestimo

Exemplo de Consultas
(8) Encontre o nome de todas as agencias que possuam fundos maiores que ao menos uma agencia daquelas localizadas no Brooklyn. select distinct T.nome_agencia from agencia as T, agencia as S where T.fundos > S.fundos and S.cidade_agencia = Brooklyn

Exemplo de Consultas
(9) Listar em ordem alfabetica os nomes de todos os clientes que tem um emprestimo na agencia Perryridge:
select distinct nome_cliente from devedor, emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = Perryridge order by nome_cliente

Exemplo de Consultas
(10) Encontre todos os clientes que possuam um emprestimo, uma conta ou ambos:
(select nome_cliente from depositante ) union (select nome_cliente from devedor)

Exemplo de Consultas
(11) Encontre todos os clientes que possuem ambos uma conta e um emprestimo:
(select nome_cliente from depositante ) intersect (select nome_cliente from devedor )

Exemplo de Consultas
(12) Encontre todos os clientes que possuem uma conta mas no possuem emprestimo;
(select nome_cliente from depositante) except (select nome_cliente from devedor )

Exemplo de Consultas
(13a) Encontre a mdia dos saldos em contas na agencia Perryridge.
select avg (saldo) from contas where nome_agencia = Perryridge

Exemplo de Consultas
(13b) Encontre o numero de tuplas na relao clientes:
select count (*) from cliente

Exemplo de Consultas
(14) Encontre o numero de depositantes no banco:
select count (distinct nome_cliente) from depositante

Exemplo de Consultas
(15) Encontre o numero de depositantes em cada agencia.
select nome_agencia, count (distinct nome_cliente ) from depositante,conta where depositante.numero_conta =conta.numero_conta group by nome_agencia

Exemplo de Consultas
(16) Encontre o nome de todas as agencias onde a media do saldo das contas seja maior que $1,200
select nome_agencia, avg (saldo) from conta group by nome_agencia having avg (saldo) > 1200

Exemplo de Consultas
(17) Encontrar todos os clientes que possuem uma conta e um emprestimo no banco.
select distinct nome_cliente from devedor where nome_cliente in (select nome_cliente from depositante)

Exemplo de Consultas
(18) Encontre a media do balano de contas das agencias onde a media do balano de contas e maior que $1200.
select nome_agencia, saldo_medio from (select nome_agencia, avg (saldo) from conta group by nome_agencia) as result (nome_agencia,saldo_medio) where saldo_medio > 1200

Exemplo de Consultas
(19) Exclua todas os registros de contas da agencia Perryridge
delete from conta where nome_agencia = Perryridge

Exemplo de Consultas
(20) Apague os registros de todas as contas com saldos abaixo da media no banco
delete from conta where saldo < (select avg (saldo) from conta)

Exemplo de Consultas
(21) Adicionar uma nova tupla em conta
insert into conta values (Perryridge, A-9732, 1200) ou de forma equivalente insert into conta (nome_agencia, saldo, numero_conta) values (Perryridge, 1200, A-9732)

Exemplo de Consultas
(22) Fornea aos clientes da agencia Perryridge uma caderneta de poupana de $200 como brinde para cada emprestimo que eles tenham. O numero do emprestimo ser usado como numero da caderneta de poupana

Exemplo de Consultas
insert into conta select nome_agencia, numero_emprestimo,200 from emprestimo where nome_agencia = Perryridge insert into depositante select nome_cliente, numero_emprestimo from emprestimo, devedor where nome_agencia = Perryridge and emprestimo.numero_conta = devedor.numero_conta

Exemplo de Consultas
Encontrar o nome_agncia, nmero_emprstimo, e total para emprstimos acima de $1200: {tt emprstimo ^ t [total] > 1200 } Encontrar o nmero_emprstimo para cada emprstimo com valor acima de $1200: {ts emprstimo (t[nmero_emprstimo] = s[nmero_emprstimo] ^ s[total] > 1200)} Note que uma relao no esquema [emprstimo] definida implicitamente pela consulta.

Exemplo de Consultas
Encontrar os nomes de todos os clientes que tm um emprstimo, uma conta, ou ambos no banco: {t | s devedor (t[cliente_nome]=s[cliente_nome]) u depositante (t[cliente_nome]=u[cliente_nome])} Encontrar os nomes de todos os clientes que tm um emprstimo e uma conta no banco: {t | s devedor (t[cliente_nome]=s[cliente_nome]) u depositante (t[cliente_nome]=u[cliente_nome])}

Exemplo de Consultas
Encontrar o nome de todos os clientes que tm um emprstimo na agncia Perryridge: {t | s devedor (t[nome_cliente]=s[nome_cliente] ^ u emprstimo (u[nome_agncia]=Perryridge ^ u[nmero_emprstimo]=s[nmero_emprstimo]))} Encontrar o nome de todos os clientes que tm um emprstimo na agncia Perryridge, mas no tem conta em nenhuma agncia do banco: {t | s devedor (t[nome_cliente]=s[nome_cliente] ^ u emprstimo (u[nome_agncia]=Perryridge ^ u[nmero_emprstimo]=s[nmero_emprstimo]))} ^ (v) depositante (v[nome_cliente]= t[nome_cliente]}

Exemplo de Consultas
Encontrar os nomes de todos os clientes que tm emprstimos na agncia de Perryridge e nas cidades em que eles vivem: {t | s emprstimo (s[nome_agncia] = Perryridge ^ u devedor (u[nmero_emprstimo]=s[nmero_emprstimo] ^ t[nome_cliente]=u[nome_cliente] ^ v cliente (u[nome_cliente]=v[nome_cliente] ^ t[cidade_cliente]=v[cidade_cliente])))}

Exemplo de Consultas
Encontrar os nomes de todos os clientes que tm uma conta em todas s agncias localizadas no Brooklyn: {t | s agncia (s[cidade_agncia] = Brooklyn ) u conta (s[nome_agncia]=u[nome_agncia] ^ s depositante (t[nome_cliente]=s[nome_cliente] ^ s[nmero_conta]=u[nmero_conta]))}

Expresses de Segurana
possvel escrever expresses do clculo de tuplas que gerem relaes infinitas. Por exemplo, {t | t r} resulta em uma relao infinita se o domnio de qualquer atributo da relao r for infinito. Este problema tratado restringindo o conjunto de expresses possveis expresses seguras. Uma expresso {t | P (t)} do clculo relacional de tuplas segura se toda componente de t aparece em uma das relaes, tuplas, ou constantes que aparecem em P.

Expressividade das Linguagens


O clculo relacional de tuplas limitado por expresses de segurana equivalente em poder de expressividade lgebra relacional. Toda expresso do clculo relacional possui expresso semelhante na lgebra relacional, e vice-versa.

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Clculo Relacional de Domnio


O clculo relacional de domnio uma linguagem de consultas no-procedural equivalente ao clculo relacional de tupla. Essa forma usa variveis de domnio que tomam valores do domnio de um atributo, ao invs de valores da tupla inteira. Cada consulta uma expresso da forma: {< x1, x2, ..., xn > | P(x1, x2, ..., xn)} onde
x1, x2, ..., xn representam variveis de domnio P representa uma frmula similar quelas do clculo de predicados

Exemplo de Consultas
Achar o nome_agncia, nmero_emprstimo e total para emprstimos acima de $1200: {< b,l,a > | < b,l,a > emprstimo ^ a > 1200} Achar os nomes de todos os clientes que possuem emprstimos acima de $1200: {< c > | b,l,a (< c,l > devedor^ < b,l,a > emprstimo ^ a > 1200)} Achar os nomes de todos os clientes e o total do emprstimo dos que possuem um emprstimo na agncia Perryridge: {< c,a >| l (< c,l > devedor ^ b (< b,l,a > emprstimo ^ b = Perryridge))}

Exemplo de Consultas
Achar os nomes de todos os clientes que tm um emprstimo, uma conta, ou ambos na agncia Perryridge: {< c > | l (< c,l > devedor ^b,a (< b,l,a > emprstimo ^ b = Perryridge)) a (< c,a > depositante ^ b,n (< b,a,n > conta ^ b = Perryridge))} Achar os nomes de todos os clientes que possuem conta em todas as agncias localizadas no Brooklyn: {< c > | x,y,z (< x,y,z > agncia ^ y = Brooklyn) ) a,b (< x,a,b > conta ^ < c,a > depositante)}

Expresses de Segurana
{< x1, x2, ..., xn > | P (x1, x2 , ..., xn)} segura se todas as seguintes propriedades so vlidas: 1. Todos os valores que aparecem nas tuplas das expresses so valores de dom(P) (isto , os valores aparecem ou em P ou em uma tupla de uma relao mencionada em P). 2. Para toda sub-frmula existe da forma x(P1(x)), a subfrmula verdadeira se e somente se existe um valor x em dom(P1) tal que P1(x) verdadeiro. 3. Para toda sub-frmula para todo da forma x (P1(x)), a sub-frmula verdadeira se e somente se P1(x) verdadeiro para todos os valores x de dom(P1).

Expressividade das Linguagens


So equivalentes:
lgebra relacional Clculo relacional de tuplas restrito por expresses de segurana Clculo relacional de domnio restrito por expresses de Segurana

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Operaes da lgebra relacional Estendida


Sero vistas: Projeo generalizada Juno externa (Outer Join) Funes Agregadas

Projeo Generalizada
Estende a operao de projeo para permitir que funes aritmticas sejam usadas em listas de projees. F1, F2, ..., Fn(E) E uma expresso da lgebra relacional. Os F1, F2, ..., Fn so expresses aritmticas envolvendo constantes e atributos no esquema de E. Dada uma relao info_crdito(nome_cliente, limite, saldo_crdito), achar o quanto cada pessoa ainda pode gastar: nome_cliente, (limite saldo_crdito) (info_crdito)

Juno Externa
Uma extenso da operao de juno que evita perda de informaes. Calcula-se a juno e ento adiciona-se ao resultado da juno as tuplas de uma relao que no combinam (match) com as tuplas da outra relao. Uso de valores nulos:
Nulo significa que o valor desconhecido ou no existe. Todas as comparaes envolvendo valores nulos so falsas por definio.

Exemplo de Juno Externa


Relao emprstimo
nome_agncia
Downtown Redwood Perryridge

nmero_emprestimo
L-170 L-230 L-260

total
3000 4000 1700

Relao devedor nome_cliente


Jones Smith Hayes

numero_emprstimo L-170 L-230 L-155

Exemplo de Juno Externa


emprstimo
nome_agncia

devedor
nmero_agncia
total

nome_cliente

Downtown Redwood

L-170 L-230

3000 4000

Jones Smith

emprstimo
nome_agncia

devedor
total

nmero_emprstimo

nome_cliente

nmero_emprstimo

Downtown Redwood Perryridge

L-170 L-230 L-260

3000 4000 1700

Jones Smith nulo

L-170 L-230 nulo

Exemplo de Juno Externa


emprstimo
nome_agncia

devedor
nmero_emprstimo
total

nome_cliente

Downtown Redwood null

L-170 L-230 L-155

3000 4000 null

Jones Smith Hayes

emprstimo
nome_agncia
Downtown Redwood Perryridge null

devedor
nmero_emprstimo
L-170 L-230 L-260 L-155

total
3000 4000 1700 null

nome_cliente
Jones Smith null Hayes

Funes agregadas
A operao de agregao G tem como entrada uma coleo de valores e retorna um nico valor como resultado. avg: mdia dos valores min: valor mnimo max: valor mximo sum: soma dos valores count: nmero de valores
Onde E expresso da lgebra relacional G1, G2, ..., Gn uma lista de atributos para agrupar Fi uma funo de agregao Ai um nome de atributo

G1, G2, ..., Gn

G F1 A1, F2 A2, ..., Fm Am (E)

Exemplo de Funes Agregadas


Relao r:
A B C 7 7 3 10

sumC(r)

sum-C
27

Exemplo de Funes Agregadas


Relao conta agrupada pelo nome_agncia nome_agncia: nmero_conta saldo
Perryridge Perryridge Brighton Brighton Redwood
A-102 A-201 A-217 A-215 A-222
400 900 750 750 700

nome_agncia

sum saldo (conta) Perryridge 1300


Brighton Redwood 1500 700

nome_agncia soma_saldo

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Modificaes no Banco de Dados


O contedo do banco de dados pode ser modificado usando as seguintes operaes:
Excluso Insero Atualizao

Todas essas operaes so expressas usando o operador de designao.

Excluso
A solicitao de excluso expressa de maneira similar a uma consulta. No entanto, ao invs de mostrar as tuplas selecionadas ao usurio, elas so excludas do banco de dados. Pode-se excluir apenas tuplas inteiras; no possvel excluir valores de atributos especficos. Uma excluso expressa na lgebra relacional por: rr-E Onde r uma relao e E uma consulta da lgebra relacional.

Exemplos de Excluso
Excluir todos os registros de contas na agncia Perryridge. conta conta - nome_agncia = Perryridge (conta) Excluir todos os registros de emprstimo com total entre 0 e 50. emprstimo emprstimo - total 0 and total 50 (emprstimo) Excluir todas as contas nas agncias localizadas em Needham. r1 cidade_agncia = Needham (conta agncia) r2 nome_agncia, nmero_conta, saldo (r1) depositante) r3 nome_cliente, nmero_conta (r2 conta conta - r2 depositante depositante - r

Insero
Para inserir dados em uma relao, deve-se:
Especificar uma tupla a ser inserida, ou Escrever uma consulta cujo resultado um conjunto de tuplas a ser inserido

Em lgebra relacional, uma insero expressa por: Onde r uma relao e E uma expresso da lgebra relacional. A insero de uma nica tupla expressa especificando E como uma relao constante contendo uma tupla.

rrE

Exemplos de Insero
Inserir informao no banco de dados especificando que o cliente Smith tem $1200 na conta A-973 na agncia Perryridge. conta conta {(Perryridge, A-973, 1200)} depositante depositante {(Smith, A-973)} Incluir, a ttulo de presente para todos os clientes de emprstimos na agncia Perryridge, uma conta de poupana de poupana de $200. Faa o nmero de emprstimo servir como nmero de conta para essas novas contas de poupana. r1 (nome_agncia = Perryridge (devedor emprstimo)) conta conta nome_agncia, nmero_emprstimo, 200 (r1) depositante depositante nome_cliente, nmero_emprstimo (r1)

Atualizao
Um mecanismo para mudar um valor em uma tupla sem mudar todos os valores na tupla Usa-se o operador de projeo generalizada para esta tarefa
Cada Fi ou o i-simo atributo de r, se seu valor no modificado, ou uma expresso para o valor do atributo a ser modificado. Fi uma expresso, envolvendo somente constantes e os atributos de r, os quais do o novo valor para o atributo.

r F1, F2, ..., Fn(r)

Exemplos de Atualizao
Fazer pagamento de juros aumentando todos os saldos em 5 por cento. conta nome_agncia, nmero_conta, saldo saldo*1.05 (conta) Fazer pagamentos de juros de 6% para contas com saldo acima de $10.000 e 5% para as outras contas.
conta nome_agncia, nmero_conta, saldo saldo*1.06 (saldo > 10000 (conta)) nome_agncia, nmero_conta, saldo saldo*1.05 (saldo 10000 (conta))

Modelo Relacional
Estrutura dos Bancos de Dados Relacionais lgebra Relacional Clculo Relacional de Tuplas Clculo Relacional de Domnio Operaes de lgebra Relacional Estendida Modificaes no Banco de Dados Vises

Vises
Em alguns casos, no desejvel que todos os usurios vejam possam ver o modelo lgico inteiro (isto , as relaes armazenadas de fato no banco de dados).

Vises
Considere um pessoa que precise conhecer o nmero do emprstimo de um cliente mas no precisa ver o total do emprstimo. Esta pessoa deveria ver uma relao descrita, na lgebra relacional, como nome_cliente, nmero_emprstimo (devedor emprstimo) Toda relao que no parte do modelo conceitual mas tornada visvel para um usurio como uma relao virtual chamada de uma viso.

Definio de Vises
Uma viso definida usando a declarao create view que tem a forma create view v as <expresso de consulta> onde < expresso de consulta > qualquer expresso correta da lgebra relacional. O nome da viso representado por v. Uma vez definida a viso, o nome da viso pode ser usado para se referir relao virtual que a definio da viso gera. Definio de viso no o mesmo que criar uma nova relao a partir da avaliao da expresso de consulta. Ao invs disso, uma definio de viso causa o armazenamento de uma expresso para ser substituda nas consultas que usam a viso.

Exemplos de Vises
Considere a viso (chamada de todos_clientes) consistindo das agncias e seus clientes.
create view todos_clientes as

nome_agncia, nome_cliente (depositante conta) nome_agncia, nome_cliente (devedor emprstimo)

Pode-se encontrar todos os clientes da agncia Perryridge escrevendo:

nome_cliente

(nome_agncia= Perryridge (todos_clientes))

Atualizaes Atravs de Vises


Modificaes no banco de dados expressas como vises devem ser traduzidas em modificaes de relaes reais do banco de dados. Considere a pessoa que precisa ver todos os dados de emprstimo na relao exceto o total. A viso, agncia_emprstimo, dada pessoa poderia ser definida como:

Atualizaes Atravs de Vises


create view agncia_emprstimo as
nome_agncia, nmero_emprstimo (emprstimo) Como permite-se que o nome de uma viso aparea em referncias a nomes de relaes, se poderia escrever : agncia_emprstimo agncia_emprstimo {(Perryridge, L-37)}

Atualizaes Atravs de Vises


A insero anterior deve ser representada por uma insero na relao emprstimo do banco de dados a qual usada a construo da viso agncia_emprstimo. Uma insero na relao emprstimo requer o valor do atributo total. Uma insero pode ser tratada das seguintes maneira:
Rejeitando a insero e apresentando uma mensagem de erro para o usurio; Inserindo a tupla (Perryridge, L-37, nulo) na relao emprstimo.

Vises Definidas Usando Outras Vises


Uma viso pode ser usada na expresso de definio de outra viso. Uma relao de viso v1 dita depender diretamente de uma relao de viso v2, se v2 usada na expresso que define v1 Uma relao de viso v1 dita depender de uma relao de viso v2, se e somente se existe um caminho de v2 para v1 no grafo de dependncia. Uma relao de viso v dita ser recursiva se ela depende dela mesma.

Expanso de Vises
uma maneira de definir o significado de vises definidas em termos de outras vises. Seja a viso v1 definida por uma expresso e1 que pode por sua vez conter usos de relaes de vises.

Expanso de Vises
A expanso de viso de uma expresso repete os seguintes passos de substituio:
repeat Encontrar todas as relaes de viso vi em e1 Substituir a relao de viso vi pela expresso que define vi until no existirem mais relaes de viso em e1

Desde que as definies de viso no so recursivas, esse loop deve terminar.

Você também pode gostar