Beruflich Dokumente
Kultur Dokumente
1!
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,
2!
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));"
3!
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."
4!
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)!
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"
6!
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"
emprstimos balces ! nmero ! A-102 ! nome_baco ! Sete Rios ! valor ! 400 ! cidade ! Lisboa !
emprstimos balces ! nmero ! A-102 ! A-216 ! nome_baco ! Sete Rios ! Almada ! valor ! 400 ! 750 ! cidade ! Lisboa ! NULL ! No queremos " permitir"
!emprstimos balces = emprstimos balces ! ou seja que nome_baco em emprstimos chave externa referindo balces"
Database System Concepts! 8! Silberschatz, Korth and Sudarshan (modicado)!
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
t2 [] K (r1)"
"
= 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)!
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. "
10!
11!
12!
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."
13!
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)!
14!
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)!
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
16!
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:"
"
17!
Asseres !
Uma assero um predicado que exprime uma condio que
fazer usando uma dupla negao: no existe X tal que not P(X) "
O Oracle no permite denir asseres."
18!
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! ! ! ! ! !)! ! ! ! ! )! ! !)!
19!
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! "" " "" " " )! !! ! !! ! )! ! ! ! )!
20!
Exemplo de Assero !
key! E! ISA! disjoint"
E1!
E2!
disjunta."
create assertion disjE1E2 check (not exists ((select key from E1) intersect (select key from E2)))!
21!