Escolar Documentos
Profissional Documentos
Cultura Documentos
Resumo SBD PDF
Resumo SBD PDF
4 SQL
As linguagens formais proporcionam uma notao concisa para a representao de
consultas, mas os bancos de dados comerciais precisam de uma linguagem de
consulta mais fcil para o utilizador a SQL combinao de construtores em lgebra
e clculo relacional.
Ela mais que simples linguagem de consulta pois permite tambm definir estruturas
de dados, modificar dados e especificao de restries de segurana.
4.1. Histrico
SQL=Structured Query Language Linguagem de Consulta Estruturada. Actual SQL-
92.
A linguagem SQL tem diversas partes:
Linguagem de definio de dados DDL
Linguagem interactiva de manipulao de dados DML: baseada na lgebra relacional
e no clculo relacional de tuplos.
Incorporao DML
Definio de vises
Autorizao
Integridade
Controle de transaces
Neste captulo cobre-se a DML interactiva e os recursos DML bsicos da SQL.
Usaremos como exemplo empresa com os seguintes esquemas de relaes:
Esquema_agncia=(nome_agncia, cidade_agncia, fundos)
Esquema_cliente=(nome_cliente, rua_cliente, cidade_cliente)
Esquema_emprstimo=(nome_agncia, nmero_emprstimo, total)
Esquema_devedor=(nome_cliente, nmero_emprstimo)
Esquema_conta=(nome_agncia, nmero_conta, saldo)
Esquema_depositante=(nome_cliente, nmero_conta)
4.2.8. Duplicidade
O uso de relaes com duplicidade (tuplos repetidos) por vezes til. A SQL d
tambm o nmero de repeties.
Podemos definir a semntica da duplicidade de uma consulta SQL usando verses
multiconjuntos dos operadores relacionais.
... ser preciso???
4.8. Vises
ser preciso???
4.9.1. Remoo
Um pedido de remoo de dados expresso muitas vezes do mesmo modo que uma
consulta.
Podemos remover apenas tuplos inteiros.
delete from r
where P
ex: delete from depositante
where nome_cliente = Smith
ex: delete from conta
where nome_agncia in (select nome_agncia
from agncia
where cidade_agncia = Perryridge)
Assim, podemos ver que podemos atingir mais que uma relao numa operao de
delete, por meio de comandos select-from-where aninhados numa clususla where de
um delete.
Os tuplos a remover tambm podem ser da relao da clusula delete:
ex: delete from conta
where saldo < (select avg (saldo)
from conta)
importante que todos ostestes sejam efectuados antes de remover.
4.9.2. Insero
Para inserir dados numa relao podemos especificar um tuplo a ser inserido ou
escrever uma consulta cujo resultado um conjunto de tuplos a inserir.
ex: + simples: insert into conta
values (Perryridge, A-9732, 1200)
Para quem no se lembrar da ordem:
insert into conta (nome_agncia, nmero_conta, saldo)
values (Perryridge, A-9732, 1200)
ou qualquer outra ordem.
+ genericamente: insert into conta
select nome_agncia, nmero_emprstimo, 200
from emprstimo
where nome_agncia = Perryridge
mal: insert into conta
select *
from conta
Pode inserir-se tuplos com atributos a null, mas, com DDL pode impedir-se isso se
assim o pretendermos.
4.9.3. Actualizaes
ex: update conta
set saldo = saldo * 1.05
ex: update conta
set saldo = saldo * 1.06
where saldo > 10000
update conta
set saldo = saldo*1.05
where saldp <= 10000
ateno ordem, portanto.
4.10.1. Exemplos
emprstimo inner join devedor on emprstimo.nmero_emprstimo =
devedor.nmero_emprstimo
Os atributos do resultado consistem nos atributos da relao da esquerda seguidos
dos atributos da relao da direita (com repetio).
podemos rebaptizar a relao resultado, bem assim como os atributos resultado, com
a clusula as.
O left outer join processado como se segue: Primeiro, o resultado da juno interna
(inner join) processado como anteriormente. Ento, para todo o tuplo t da relao
emprstimo do lado esquerdo que no apresente correspondncia com nenhum tuplo
da relao devedor do lado direito da juno interna, um tuplo r adicionado ao
resultado da juno da maneira como ser descrita. Os atributos do tuplo r que so
derivados da relao do lado esquerdo so preenchidos pelos valores do tuplo t e os
restantes so preenchidos com o valor nulo.
ex: Encontre todos os clientes que tenham uma conta, mas nenhum emprstimo no
banco
select d-CN
from (depositante left outer join devedor
on depositante.nome_cliente = devedor.nome_cliente)
as db1 (d-CN, nmero_conta, b-CN, nmero_emprstimo)
where b-CN is null
6.3. Asseres
Uma assero um predicado que expressa uma condio que desejamos que seja
sempre satisfeita no banco de dados. Restries de domnio e regras de integridade
so formas especiais de asseres. Outros ex:
A soma de todos os totais em conta emprstimo de cada uma das agncias deve ser
menor que a soma de todos os saldos das contas dessa agncia.
Todo o emprstimo deve ter ao menos um cliente que mantenha uma conta com saldo
mnimo de 1000 dlares.
--> trivial se
Para distinguir os conceitos de uma relao que satisfaz uma dependncia e de uma
dependncia realizando-se num esquema, voltemos ao ex. do banco.
Se considerarmos a relao cliente (com o Esquema_cliente), como mostrado,
notamos que rua_cliente -> cidade_cliente satisfeita. Mas, no mundo real, possvel
que duas cidades distintas tenham o mesmo nome de rua. Logo, no incluiremos a
dependncia no conjunto de dependncias funcionais que so realizadas no
Esquema_cliente.
Na relao emprstimo (do Esquema_emprstimo) vemos que nmero_emprstimo-
>total satisfeita. Aqui diferente, pois na vida real normal que cada conta tenha
apenas um total. Portanto queremos que a condio nmero_emprstimo -> toatla
seja sempre satisfeita para a relao emprstimo. Por outras palavras, precisamos da
restrio nmero_emprstimo -> total para o Esquem_emprstimo.
J na relao agncia, nome_agncia -> fundos realaizada no Esquema_agncia, j
o mesmo no se passando com o inverso, embora na relao, essa dependncia
possa ser satisfeita.
exerccio:
Computar a cobertura cannica para F, sendo F, no esquema (A,B,C)
A --> BC
B --> C
A --> B
AB --> C
Soluo: A --> B
B --> C
EXERCCIOS:
6.7. Por que h certas dependncias funcionais chamadas de triviais?
Porque so dependncias funcionais satisfeitas por todas as relaes. Em geral, uma
dependncia funcional --> trivial se
6.8. Relacione todas as dependncias atendidas (satisfeitas na) pela relao da figura:
A B C
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c3
A --> B
AC --> B
+ as triviais : A --> A B --> B C --> C AB --> A, etc.
6.9. Use a definio de dependncia funcional para discutir como funciona cada um
dos axiomas da Armstrong (reflexividade, aumento e transitividade)
Reflexividade:
se t1[] = t2[] e ento forosamente =. Logo t1[] = t2 []
Incremento:
se t1[] = t2[] , de --> temos que t1[] = t2[]. Como, por reflexividade --> ,
se t1[] = t2[] ento t1[] = t2[]
Transitividade: Est feito na pgina 204 do livro.
6.10. Explique como a dependncia funcional pode ser usada par explicar o seguinte:
Um conjunto de relacionamentos um para um entre o conjunto de entidades
estudantes e orientador.
Um conjunto de relacionamentos muitos para um entre o conjunto de entidades
estudantes e orientador.
e o B?
tambm no.
ver se C ou D so extrnsecos em CD-->E
(F {CD->E}) U {(CD D) -->E}
A-->BC U C-->E
B-->D
E-->A
CD-->E
A-->B
A-->C
A-->D
A-->E
CD-->A
BC-->E
BC-->A
Consistncia:
A exigncia de consistncia significa que que a soma de A com B deve permanecer
inalterada aps a execuo da transaco.
responsabilidade do programador da aplicao que codifica a transaco. Esta
tarefa pode ser facilitada por meio do teste automtico dos requisitos de integridade,
conforme visto no cap. 6.
Atomicidade:
Suponhamos que h uma falha a meio, depois de write(A) mas antes de write(B) da
transaco (falta de energia, falha da mquina ou de software). Ento a soma de A+B
no preservada --> estado inconsistente.
A ideia bsica por detrs da atomicidade a seguinte: O sistema de banco de dados
mantm um registo (em disco) dos antigos valores de quaisquer dados sobre os quais
a transaco executa uma gravao e, se a transaco no for completada, os valores
antigos so restabelecidos para parecer que nada dela foi executado.
da responsabilidade do prprio sistema de banco de dados.
Durabilidade:
Garante que uma vez completada a transaco com sucesso, todas as actualizaes
realizadas permanecero mesmo que depois haja uma falha no sistema.
Suponhamos agora que uma falha se d e h perda de dados na memria, mas no
no disco. Podemos garantir a durabilidade se se garantir uma de:
1. As actualizaes realizadas pela transaco foram gravadas em disco, antes da
transaco se completar
2. Informaes gravadas no disco, sobre as actualizaes realizadas pela transaco,
so suficientes para que o banco de dados possa reconstruir essas actualizaes
quando o sitema for reiniciado aps uma falha.
da responsabilidade do componente de gerenciamento de recuperao.
Isolamento:
Quando h mais que uma transaco em simultneo (concorrentes) com operaes
que podem ser intercaladas.
Uma soluo realizar transaces em srie mas isso muito ineficiente. H pois
outras tcnicas que veremos frente.
da responsabilidade do componente de controlo de concorrncia.
13.5. SERIALIZAO
Vamos s considerar as operaes significativas do ponto de vista da escala de
execuo: read e write.
Dizemos que S tem viso serializada se for equivalente em viso a uma escala de
execuo sequencial.
13.6. RECUPERAO
Se uma Ti falha, precisamos de desfazer os seus efeitos, mas tambm necessario
assegurar que qualquer transaco Tj que dependa de Ti seja abortada.
Para assegurar isso temos de colocar restries aos tipos de escalas que se podem
usar.
13.6.2.
ESCALAS EM CASCATA
O retorno em cascata indesejvel, mesmo em escalas recuperveis, j que leva a
destruir uma quantidade de trabalho. Logo, conveniente restringir s sem cascata.
Uma escala sem cascata aquela na qual para cada par de transaces Ti e Tj, tal
que Tj leia um item de dados previamente escrito por Ti, a operao de efectivao de
Ti aparea antes da operao de leitura de Tj. Toda a escala sem cascata
recupervel.
EXERCCIOS
13.1.Liste as propriedades ACID. Explique a utilidade de cada uma.
Atomicidade: Para garantir que uma transaco (com vrias operaes) ou
totalmente feita ou nada feito. Se assim no fosse corramos facilmente o risco de
inconsistncia de dados. Da responsabilidade do programador.
Consistncia: Para garantir que nada desaparece ou aparece sempre que feita
qualquer transaco. da responsabilidade do sistema de base de dados.
Isolamento: Apesar de duas transaces poderem ser executadas em simultneo,
para rendibilizar os recursos de sistema, para cada uma delas como se a outra no
existisse. da responsabilidade do sistema de controlo de concorrncia
Durabilidade: Depois de efectivada a transaco h que garantir que os dados se
mantm, mesmo que haja qualquer falha de sistema. Da responsabilidade do sistema
de recuperao.
13.2. Suponha que haja um sistema de banco de dados que nuca falhe. Um
gerenciador de recuperao necessrio para esse sistema?
No, uma vez que este responsvel pela recuperao de dados consistentes quando
h uma falha a meio de uma transaco que tem de ser pois abortada, ou de uma
falha mesmo aps a efectivao de uma transaco para garantir a durabilidade. Se
no h falhas, no se justifica este componente.
13.3. Considere o sistema de arquivo de seu sistema operativo favorito. Os aspectos
de atomicidade e durabilidade so relevantes em relao aos seguintes itens?
Justifique a sua resposta.
(a) Utilizador do sistema operativo
(b) Implementador do sistema de ficheiros.
(b) Sim. Por exemplo se o utilizador manda gravar um ficheiro para actualizao,
espera-se que o sistema grave/actualize a verso antiga totalmente, ou, se impossvel
por falha, que no faa nada, de modo a ter acessvel a verso antiga. Por outro lado,
quanto durabilidade tambm pois se se termina a operao (efectivao) que,
eventualmente, apaga verses anteriores, espera-se que essa verso se mantenha
para sempre.
(a) No. O utilizador no tem que se preocupar com isso.
13.4. Os implementadores de sistemas de banco de dados prestaram muito mais
ateno s propriedades ACID que os implementadores de sistemas de arquivo. Por
qu?
Porque uma base de dados, se no atender aquelas propriedades, rapidamente deixa
de ser fivel e os dados tornam-se completamente inconsistentes. Alm disso as
bases de dados jogam com grandes quantidades de informao interrelacionada e por
vezes sensvel e, onde, inconsistncias no so fceis de descobrir.
No caso dos sistemas de ficheiros embora possa ser produzida informao
inconsistente, muito mais fcil descobrir esse facto.
13.5. Durante a sua execuo, uma transaco atravessa vrios estados, at ser
finalmente efectivada ou abortada. Liste todas as possveis sucesses de estados
pelos quais uma transaco pode passar. Explique por que cada transio de estado
pode acontecer.
Activa estado inicial em execuo
parcialmente efectivada depois de a ltima operao j ter sido feita mas ainda em
memria. Daqui pode ir para abortada ou efectivada
efectivada Concluda, sem possibilidade de ser abortada
Em falha...
abortada Chegou-se concluso que a transaco no pode ser terminada. H que
recuperar os dados antigos e desfazer as operaes da transaco j realizadas.
13.6. Explique a distino entre os termos escala sequencial e escala serializvel
Escala sequencial quando as transaces se realizam uma a seguir outra. No h
concorrncia. Escala serializvel uma escala em que embora isso no se verifique,
os resultados so equivalentes a uma escala sequencial.
13.7. Considere as duas transaces seguintes:
T1: read(A);
read(B);
if A = 0 then B:= B+1;
write(B)
T2: read(B);
read(A);
if B = 0 then A:=A+1;
write(A)
Seja um requisito de consistncia A=0 V B=0, com valores iniciais A=B=0.
(a) Mostre que toda a execuo sequencial que envolve essas duas transaces
preserva a consistncia do banco de dados.
Se T1, T2, o resultado final B=1 e A=0 pois o if de T2 falso. Similarmente se T2,T1
o resultado final A=1 e B=0, pelo que a consistncia se preserva.
(b) Mostre uma execuo concorrente de T1 e T2 que produza uma escala no
serializvel
T1 T2
read(A)
read(B)
read(B)
read(A)
if B ...
write(A)
if A...
write(B)
T1 --------> T2
ex:
read(B)
read(A)
read(A)
if A ...
write(B)
read(B)
if B...
write(A)
13.8. Dado que toda a escala conflito serializvel viso serializvel, por que
enfatizamos serializao de conflito em vez de serializao de viso?
Porque o algoritmo para testar a serializao de conflito muito mais simples.
13.9.
Considere o grfico de precedncia da figura. A escala correspondente conflito
serializvel? Justifique.
. O grfico de precedncia no tem ciclos.
13.10.