Sie sind auf Seite 1von 21

Captulo 5: Integridade e Segurana !

Restries ao Domnio" Integridade Referencial" Asseres" Triggers" Segurana e Autorizaes"

Database System Concepts!

1!

Silberschatz, Korth and Sudarshan (modicado)!

Restries ao Domnio !
As restries de integridade impem-se para garantir que os

dados cam protegidos contra estragos acidentais. Devem assegurar que da actualizao dos dados no resulta a perda da consistncia. "
Restries ao domnio so a forma mais elementar de restrio

de integridade."
Testam condies sobre valores a introduzir em atributos,

restringindo o domnio do atributo em causa."


Em SQL, as restries ao domnio so denidas aquando da

denio das tabelas"


A forma mais comum de restrio ao domnio a proibio do

valor null (em SQL, colocando not null depois do atributo)."

Database System Concepts!

2!

Silberschatz, Korth and Sudarshan (modicado)!

Restries check !
Em SQL, podem-se impor outras restries usando, depois dum

nome de atributo A, " check(condio(A))! !onde condio(A) denota uma condio imposta sobre o atributo A."
Ou ento, aps a declarao de todos os atributos, podem-se impor restries que envolvam mais do que um atributo.! create table products (" product_no integer," name varchar2(50)," price number check (price > 0)," discounted_price number check (discounted_price > 0)," check (price > discounted_price));"

Database System Concepts!

3!

Silberschatz, Korth and Sudarshan (modicado)!

Restries check !
create table alunos(" " " num_aluno number(6) not null," " " nome varchar2(30) not null," " " local varchar2(25)," " " data_nsc date not null," " sexo char(1) not null check ( sexo in ( 'F' , 'M' ) ), " " " cod_curso number(3) not null);"

"
As restries do tipo check:"

no podem ser denidas sobre uma view." apenas podem referir colunas na tabela onde so denidas i.e. no podem referir colunas noutras tabelas." no podem incluir sub-consultas."

Database System Concepts!

4!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade Referencial !
Garante que um valor que ocorre numa relao para um certo

conjunto de atributos tambm ocorre num outro conjunto de atributos de outra relao."
Exemplo: Se Perryridge o nome de uma agncia que ocorre num dos tuplos da relao loan, ento existe um tuplo na relao branch para o balco Perryridge."
Denio Formal"

Sejam r1(R1) e r2(R2) duas relaes com (super-)chaves K1 e K2 respectivamente." O subconjunto de R2 uma chave externa referindo K1 na relao r1, se para todo t2 em r2 existe um tuplo t1 em r1 tal que t1[K1] = t2[]." Uma restrio de integridade referencial um tipo de dependncia de incluso porque pode ser formalizada atravs de (r2) K1 (r1)"
e.g. branch_name(loan) branch_name (branch)"
Database System Concepts! 5! Silberschatz, Korth and Sudarshan (modicado)!

Integridade de referncia e tuplos soltos !


Tuplos soltos Tuplos que desaparecem numa juno."

Considere as relaes r1(R1) e r2(R2)" Um tuplo t de ri (i = 1 ou i=2) um tuplo solto se t no pertence a:"
" " "Ri (r1 r2)" Dizer que K de r2 uma chave externa referindo K em r1

(assumindo que K contm todos os atributos comuns a R1 e R2) o mesmo que dizer que:"
r2 no pode ter tuplos soltos na juno com r1, ou que" r1 r2 = r1 r2"

Database System Concepts!

6!

Silberschatz, Korth and Sudarshan (modicado)!

Tuplos soltos - Exemplo !


emprstimos ! nmero ! A-102 ! A-216 ! nome_baco ! Sete Rios ! Almada ! valor ! 400 ! 750 ! balces ! nome_balco ! Sete Rios ! Benca ! cidade ! Lisboa ! Lisboa ! Tuplo solto"

emprstimos balces ! nmero ! A-102 ! nome_baco ! Sete Rios ! valor ! 400 ! cidade ! Lisboa !

emprstimos balces ! nmero ! A-102 ! NULL ! nome_baco ! Sete Rios ! Benca ! valor ! 400 ! NULL ! cidade ! Lisboa ! Lisboa ! No causa " qualquer problema"

Porque a chave extrena de nome_baco em emprstimos, " referindo balces, e no o contrrio"


Database System Concepts! 7! Silberschatz, Korth and Sudarshan (modicado)!

Tuplos soltos - Exemplo !


emprstimos ! nmero ! A-102 ! A-216 ! nome_baco ! Sete Rios ! Almada ! valor ! 400 ! 750 ! balces ! nome_balco ! Sete Rios ! Benca ! cidade ! Lisboa ! Lisboa !

emprstimos balces ! nmero ! A-102 ! nome_baco ! Sete Rios ! valor ! 400 ! cidade ! Lisboa !

Tuplo solto indesejvel"

emprstimos balces ! nmero ! A-102 ! A-216 ! nome_baco ! Sete Rios ! Almada ! valor ! 400 ! 750 ! cidade ! Lisboa ! NULL ! No queremos " permitir"

Temos que garantir que "

!emprstimos balces = emprstimos balces ! ou seja que nome_baco em emprstimos chave externa referindo balces"
Database System Concepts! 8! Silberschatz, Korth and Sudarshan (modicado)!

Vericao da Integridade Referencial e Modicao da Base de Dados !


Aquando das modicaes da Base de Dados, necessrio

efectuar um conjunto de testes de modo a garantir a preservao da seguinte restrio de integridade referencial:" " " (r2) K (r1)"
Insero. Se um tuplo t2 inserido em r2, o sistema tem de

garantir que existe um tuplo t1 em r1 tal que t1[K] = t2[]. Ou seja"


"

t2 [] K (r1)"

Remoo. Se um tuplo t1 removido de r1, o sistema deve

calcular o conjunto de tuplos em r2 que referenciam t1:"

"

= t1[K] (r2)"

"Se este conjunto no vazio, o comando de remoo rejeitado, ou os tuplos que referenciam t1 devem ser eles prprios removidos (remoes em cascata so possveis). " "
Database System Concepts! 9! Silberschatz, Korth and Sudarshan (modicado)!

Modicao da Base de Dados (Cont.) !


Actualizao. Existem duas situaes:"

Se um tuplo t2 actualizado na relao r2 em que modicado o valor da chave externa , ento efectuado um teste similar ao da insero. Seja t2 o novo valor do tuplo t2. O sistema deve garantir que"
" " t2[] K(r1)"

Se o tuplo t1 actualizado em r1, e a operao altera o valor da chave primria (K), ento efectuado um teste semelhante ao da remoo. O sistema deve calcular"
" " = t1[K] (r2)" "usando o valor anterior de t1 (o valor antes da actualizao). Se o conjunto no vazio, a actualizao:"
pode ser rejeitada, " pode ser propagada em cascata, " os tuplos podem ser removidos. "

Database System Concepts!

10!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade Referencial em SQL !


As chaves primrias, candidatas e externas podem ser

especicadas na instruo SQL create table:"


A clusula primary key da instruo create table inclui a lista de dos atributos que formam a chave primria." Uma clusula unique key da instruo create table inclui uma lista de atributos que formam uma chave candidata." Uma clusula foreign key da instruo create table inclui quer uma lista de atributos que constituem uma chave externa quer o nome da relao (e eventualmente nomes de atributos) referenciada por essa chave externa."

Database System Concepts!

11!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade Referncial em SQL Exemplo !


create table cursos("cod_curso number(3) not null," "nome varchar(35) not null! "primary key (cod_curso));" " create table cadeiras( "cod_cadeira number(3) not null, ," "primary key (cod_cadeira ));" " create table curso_cadeira(" "cod_curso number(3) not null," "cod_cadeira number(3) not null," "semestre number(2) not null," "primary key (cod_curso, cod_cadeira)," "foreign key (cod_curso) references cursos," "foreign key (cod_cadeira) references cadeiras);" !

Database System Concepts!

12!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade de referncia em SQL !


Em SQL tuplos com valor null so ignorados no teste de

integridade referencial:"
Em SQL, se de R2 uma chave externa referindo K1 na relao r1 ento para todo t2 em r2 tal que nenhum dos atributos de em t2 tem valor null, tem que existir um tuplo t1 em r1 tal que t1[K1] = t2[]." Facilita em certos casos: E.g. relao chefe_de em empregados no que se refere ao topo da hierarquia." Quando no se pretende isto, pode-se sempre especicar os atributos em como sendo not null."

Database System Concepts!

13!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade de referncia em SQL !


A integridade de referncia vericada apenas no nal duma

transaco"
Passos intermdios podem violar a integridade referencial desde que passos posteriores a reponham" Caso contrrio seria impossvel criar alguns estados da base de dados, e.g. inserir dois tuplos cujas chaves externas apontam um para o outro (e.g. atributo cnjuge da relao casado)!

Database System Concepts!

14!

Silberschatz, Korth and Sudarshan (modicado)!

Integridade Referncial em SQL Exemplo !


e1! E1! R1! E2! e2!

R2! E3! e3!

create table E1(e1 number(3) not null primary key);" create table E2(e2 number(3) not null primary key);" create table E3(e3 number(3) not null primary key);" create table R1(e1 number(3) not null, " " " " " "e2 number(3) not null," "primary key (e1, e2)," "foreign key (e1) references E1," "foreign key (e2) references E2);" create table R2(e1 number(3) not null, " " " " " "
Database System Concepts! 15!

"e2 number(3) not null," "e3 number(3) not null," "primary key (e1, e2, e3)," "foreign key (e1,e2) references R1," "foreign key (e3) references E3);"
Silberschatz, Korth and Sudarshan (modicado)!

Aces em Cascata em SQL !


create table account! ! !. . . !foreign key(branch_name) !references branch ! !on delete cascade ! !on update cascade !. . . )!
Com as clusulas on delete cascade, se a remoo de um

tuplo na relao branch resulta na violao da restrio da integridade referencial, a remoo propaga-se em cascata para a relao account, removendo o tuplo que referia a agncia que tinha sido eliminada."
Actualizaes em cascata so semelhantes. No esto

implementadas pelo Oracle!"

Database System Concepts!

16!

Silberschatz, Korth and Sudarshan (modicado)!

Aces em cascata em SQL (cont.) !


Se existe uma cadeia de dependncias de chaves externas

atravs de vrias relaes, com um on delete cascade especicado em cada dependncia, uma remoo ou actualizao num dos extremos pode-se propagar atravs de toda a cadeia."
Se uma remoo ou actualizao em cascata origina uma

violao de uma restrio que no pode ser tratada por uma outra operao em cascata, o sistema aborta a transaco. Como resultado, todas as alteraes provocadas pela transaco e respectivas aces em cascata sero anuladas."
Alternativas s operaes em cascata:"

on delete set null! on delete set default!

"

Database System Concepts!

17!

Silberschatz, Korth and Sudarshan (modicado)!

Asseres !
Uma assero um predicado que exprime uma condio que

gostaramos de ver sempre satisfeita na base de dados."


Em SQL as asseres tm a forma:"

" "create assertion <nome> check <predicado>"


Quando se dene uma assero, o sistema testa-a, e volta a

test-la, sempre que h modicaes na base de dados (que a possam violar)"


Estes testes podem introduzir um overhead signicativo; logo as asseres so para usar com cuidado e de forma comedida."
Impor uma condio da forma para todo o X, P(X), h que o

fazer usando uma dupla negao: no existe X tal que not P(X) "
O Oracle no permite denir asseres."

Database System Concepts!

18!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo de Assero !
Em cada balco, a soma dos montantes de todos os seus

emprstimos tem que ser sempre inferior soma de todos os seus depsitos.! !create assertion sum_constraint check (not exists (select * from branch ! where! ! ! ! ! !(select sum(amount) from loan ! ! where loan.branch_name = branch.branch_name! ! ! ! ! !) ! >= some! ! ! ! ! !(select sum(balance) from account ! ! where account.branch_name = branch.branch_name! ! ! ! ! !)! ! ! ! ! )! ! !)!

Database System Concepts!

19!

Silberschatz, Korth and Sudarshan (modicado)!

Outro Exemplo !
Todo o emprstimo tem que estar sempre ligado a pelo menos um

cliente de uma conta (de depsito) cujo saldo no inferior a metade do valor do emprstimo" !create assertion balance_constraint check (not exists ( select * from loan ! where not exists ( select * !! from borrower natural inner join depositor! !! ! !! ! ! natural inner join account !! where loan.loan_number = borrower.loan_number !! ! and account.balance >= 0,5 * loan.ammount! "" " "" " " )! !! ! !! ! )! ! ! ! )!

Database System Concepts!

20!

Silberschatz, Korth and Sudarshan (modicado)!

Exemplo de Assero !
key! E! ISA! disjoint"

E1!

E2!

Uma especializao duma entidade geral E (com chave key) em E1 e E2

disjunta."

create assertion disjE1E2 check (not exists ((select key from E1) intersect (select key from E2)))!

Database System Concepts!

21!

Silberschatz, Korth and Sudarshan (modicado)!

Das könnte Ihnen auch gefallen