Você está na página 1de 67

Captulo 6 Regras de Integridade

Murilo S. de Camargo (Modificaes M.A R. Dantas)


1

Restries de Integridade
Restries de Domnio Integridade Referencial Asseres Gatilhos (Triggers) Dependncias Funcionais

Observaes Gerais
=Alguns autores usualmente denominam o contedo desse captulo como constraints and triggers. Exemplo : Molina, H. G., Ullman, J. D. and Widom, J., Database Systems - The Complete Book, Prentice Hall, 2002.

Restries de Integridade
Restries de Domnio H Integridade Referencial Asseres Gatilhos (Triggers) Dependncias Funcionais

Restries de Domnio
O que vem a ser uma restrio de domnio ?

Restries de Domnio
As restries de integridade resguardam o Banco de Dados contra danos acidentais, assegurando que mudanas feitas por usurios autorizados no resultem na perda de consistncia de dados.

Restries de Domnio

Por usurios autorizados ?

Restries de Domnio
Restries de domnio so a forma mais elementar de restries de integridade. Estas testam valores inseridos no Banco de Dados, e testam (efetuam) consultas para assegurar que as comparaes faam sentido.

Observaes Gerais
=Considere os seguintes atributos : - Nome_cliente - Nome_empregado - Saldo - Nome_agncia Caso 1 - razovel imaginarmos que Nome_cliente e Nome_empregado estejam em um mesmo domnio.

Observaes Gerais
=Considerando ainda os atributos : - Nome_cliente - Nome_empregado - Saldo - Nome_agncia Caso 2 - razovel imaginarmos que Saldo e Nome_agncia estejam em domnios distintos.

10

Observaes Gerais
=Considerando ainda os atributos : - Nome_cliente - Nome_empregado - Saldo - Nome_agncia Caso 3 - razovel imaginarmos que Nome_cliente e Nome_agncia estejam em : (a) um mesmo domnio, (b) domnios distintos
11

Restries de Domnio
A clusula check em SQL-92 permite restringir domnios:
Exemplo1 : Utilize a clusula check para assegurar que um domnio de hora em Hora-Salario permita s valores maiores do que o especificado. create domain hora-salario numeric(5,2) constraint valor-teste check(valor >=4.00)
12

Restries de Domnio
O domnio de hora em hora-salario declarado como um nmero decimal com 5 dgitos e 2 decimais. O domnio tem uma restrio que assegura que os valores do atributo valor dever ser maior ou igual a 4.00. A clusula constraint (que opcional) serve para indicar qual a restrio que violou a atualizao.

13

Restries de Domnio
Suponha que a voc foi solicitado que em um determinado Banco de Dados alguns valores no deveriam ser nulos. Como voc faria ?

14

Restries de Domnio
A clusula check usada para restringir os valores nulos em um domnio
Exemplo 2 : create domain numero_conta char (10) constraint teste_nulo_nconta check(value not null)

15

Restries de Domnio
A clusula check usada para restringir um determinado conjunto de valores por meio do uso da clusula in
Exemplo 3 : create domain tipo_conta char (10) constraint teste_tipo_conta check(value in (corrente, Poupana))

16

Restries de Integridade
Restries de Domnio Integridade Referencial H Asseres Gatilhos (Triggers) Dependncias Funcionais

17

Integridade Referencial
Assegura que um valor que aparece em uma relao (tabela) para um determinado conjunto de atributos aparea em outro conjunto de atributos em outra relao (tabela).
Exemplo: Se Perryridge um nome de filial que aparece na tupla (linha) da relao (tabela) conta, ento deve existir uma tupla (linha) Perryridge na relao (tabela) agencia.

18

Observaes Gerais
Como as tabelas em essncia so relaes, utiliza-se os termos matemticos relao e tupla, no lugar de tabela e linhas. Assim :

tabela - relao linha - tupla

Como uma relao um conjunto de tuplas, podemos usar a notao matemtica t r para denotar que a tupla t est na relao r.

19

Integridade Referencial
Definio Formal:
Sejam as relaes r1(R1) e r2(R2) com chaves primrias K1 e K2, respectivamente. O subconjunto de R2 uma chave estrangeira referenciando K1 na relao r1, se para toda relao t2 em r2 existir uma tupla t1 em r1 tal que t1[K1]=t2[]. Restries de integridade podem ser descritas : (r2) K1(r1)
20

Restries de Integridade
Aluno Matricula Nome_aluno .... K1 e r1 Disciplina Cod_Disciplina Nome_Disciplina .....

Matricula Cod_Disciplina
(r2) K1(r1)

e r2

21

Integridade Referencial no Modelo E-R


Considere o conjunto de relacionamentos R entre as entidades E1 e E2. O esquema relacional para R inclui as chaves primrias K1 de E1 e K2 de E2. Ento K1 e K2 formam chaves estrangeiras no esquema relacional de E1 e E2, respectivamente.

22

Restries de Integridade
Aluno Matricula Nome_aluno .... K1 e E1 K2 e E2 Disciplina Cod_Disciplina Nome_Disciplina .....

Matricula Cod_Disciplina
(r2) K1(r1)

e r2

23

Integridade Referencial no Modelo E-R


Entidades fracas tambm so uma fonte de restries de integridade referencial. O esquema de relao para uma entidade fraca deve incluir a chave primria da entidade da qual ela depende.

24

Modificaes no Banco de Dados

O que seriam modificaes no Banco de Dados ?


Insero Remoo Atualizao

25

Modificaes no Banco de Dados


Os testes apresentados a seguir devem ser efetuados para cada tipo de modificao no banco de dados, de maneira a preservar a seguinte restrio de integridade referencial:

(r2) K(r1)

26

Modificaes no Banco de Dados


Insert. Se uma tupla (linha) t2 inserida em r2 (tabela),o sistema precisa assegurar que existe uma tupla (linha) t1 em r1 (na tabela )tal que t1[K]=t2[]. Isto : t2[] K(r1) Vamos supor a insero da aluna Andria na tabela disciplina BD. A aluna deve existir na tabela r1 para que a insero ocorra sem erros (sem inconsistncia no Banco de Dados).
27

Modificaes no Banco de Dados


Delete. Se uma tupla (linha) t1 removida de r1 (tabela) o sistema precisa computar o conjunto de tuplas (linhas)em r2 (na tabela) que referencia t1 : =t1[K] (r2)

Se este conjunto no estiver vazio, ento ou o comando delete rejeitado com um erro, ou as tuplas de t1 devem ser removidas (cascateando a deleo se possvel).

28

Modificaes no Banco de Dados

Update - Existem dois casos:


Se uma tupla t2 atualizada na relao r2 e a atualizao modifica valores para a chave estrangeira , ento feito um teste similar ao caso de insero. Seja t2 denotando o novo valor da tupla t2. O sistema deve assegurar que: t2[] K(r1)

29

Modificaes no Banco de Dados


Se uma tupla t1 atualizada em r1, e a atualizao modifica valores da chave primria (K), ento um teste similar ao caso de delete deve ser feito. O sistema precisa computar :

(= t1) [K] (r2)


usando o antigo valor de t1 (o valor anterior aplicao da atualizao). Se este conjunto no vazio, a atualizao rejeitada com um erro, ou a atualizao cascateada nas tuplas do conjunto, ou ou as tuplas do conjunto podem ser removidas.

30

Integridade Referencial em SQL


Chaves primrias, candidatas e chaves estrangeiras podem ser especificadas como parte da declarao create table do SQL:
A clusula primary key da declarao create table inclui uma lista de atributos que compreendem a chave primria.

31

Integridade Referencial em SQL


Chaves primrias, candidatas e chaves estrangeiras podem ser especificadas como parte da declarao create table do SQL:
A clusula unique key da declarao create table inclui uma lista de atributos que compreendem a chave candidata.

32

Integridade Referencial em SQL


Chaves primrias, candidatas e chaves estrangeiras podem ser especificadas como parte da declarao create table do SQL: A clusula foreing key da declarao create table
inclui uma lista de atributos que compreendem a chave estrangeira e o nome da relao referida pela chave estrangeira.

33

Integridade Referencial em SQL - Exemplo


create table cliente (nome-cliente char(20) not null, rua char(30), cidade char(30), primary key (nome-cliente))

34

Integridade Referencial em SQL - Exemplo


create table agencia (nome-agencia char(15) not null, cidade-agencia char(30), ativos integer, primary key (nome-agencia))

35

Integridade Referencial em SQL - Exemplo


create table conta (nome-agencia char(15), numero-conta char(10) not null, saldo integer, primary key (numero-conta), foreign key (nome-agencia) references agencia)

36

Integridade Referencial em SQL - Exemplo


create table depositante (nome-cliente char(20) not null, numero-conta char(10) not null, primary key (nome-cliente, numero-conta), foreign key (numero-conta) references conta, foreign key (nome-cliente) references cliente)

37

Aes em Cascata em SQL


create table conta ... foreign key (nome-agencia) references agencia on delete cascade on update cascade, ...)

38

Aes em Cascata em SQL


Devido s clusulas on delete cascade, se a remoo de uma tupla (linha) em agencia (na tabela) resultar em violao da restrio de integridade referencial, a remoo feita em cascata na relao (tabela) conta, removendo as tuplas (linhas) que se referem agncia que foi removida. Atualizaes em cascata so semelhantes.

39

Aes em Cascata em SQL


Se existe uma cadeia de dependncias de chave estrangeira atravs de mltiplas relaes, com on delete cascade especificado para cada dependncia, uma remoo ou atualizao no final da cadeia pode se propagar atravs de toda a cadeia.

40

Aes em Cascata em SQL


Se um cascateamento de atualizao ou remoo causa uma violao de restrio que no pode ser tratada por uma operao em cascata subseqente, o sistema aborta a transao. Como resultado, todas as mudanas causadas por uma transao e suas aes de cascateamento sero desfeitas.

41

Restries de Integridade
Restries de Domnio Integridade Referencial Asseres H Gatilhos (Triggers) Dependncias Funcionais

42

Asseres
Asseres ? O que vem a ser isto ?

43

Asseres
Uma assero um predicado expressando uma condio que queremos que o Banco de Dados sempre satisfaa.

44

Asseres
Uma assero em SQL-92 tem a forma
create assertion <nome-assero> check <predicado>

Quando uma assero feita, o sistema testa a sua validade. Este teste pode introduzir uma quantidade significativa de sobrecarga; assim as asseres devem ser usadas com grande cuidado.
E quanto a portabilidade ?
45

Asseres - Exemplo
A soma de todos os totais dos emprstimos para cada agncia deve ser menor do que a soma de todos os saldos das contas na agncia.

46

Asseres - Exemplo
create assertion restricao-soma check (not exists (select * from agencia where (select sum(total) from emprestimo where emprestimo.nome-agencia = agencia. nomeagencia ) >= (select sum( saldo) from conta where emprestimo. nome-agencia =agencia.nomeagencia)))

47

Asseres Exemplo

Todo cliente de emprstimo precisa manter uma conta com o saldo mnimo de $1000.00.

48

Asseres Exemplo
create assertion restricao-saldo check
(not exists (select * from emprestimo where not exists ( select * from devedor, depositante, conta where emprestimo.numero-emprestimo = devedor.numero-emprestimo and devedor.nome-cliente = depositante.nome-cliente and depositante.numero-conta = conta.numero-conta and conta.saldo >= 1000)))

49

Restries de Integridade
Restries de Domnio Integridade Referencial Asseres Gatilhos (Triggers) H Dependncias Funcionais

50

Gatilhos (Triggers)
Gatilhos (Triggers) O que vem a ser um gatilho em um Banco de Dados ?

51

Gatilhos (Triggers)
Um gatilho um comando executado automaticamente pelo sistema como um efeito de uma modificao no Banco de Dados.

52

Gatilhos (Triggers)
Para projetar um gatilho, precisamos:
Especificar as condies sob as quais o gatilho deve ser executado. Especificar as aes a serem tomadas quando o gatilho executado.

O SQL-92 no inclui os gatilhos, mas muitas implementaes suportam gatilhos.


53

Exemplo Gatilhos
Suponha que em vez de permitir saldos negativos, o banco trate saque a descoberto assim :
ajustando o saldo para zero criando um emprstimo no valor da quantia saldo negativo a este emprstimo dado um nmero igual ao nmero da conta estourada
54

Exemplo Gatilhos
A condio para executar o trigger uma atualizao na relao depsito que resulte em um valor de saldo negativo.

55

Exemplo Gatilhos
define trigger saque-descoberto on update of conta T (if new T.saldo < 0 then (insert into emprestimo values (T.nome-agencia,T.numero-conta, - new T.saldo) insert into devedor (select nome-cliente, numero-conta from depositante where T.numero-conta = depositante.numero-conta) update conta S set S.saldo =0 where S.numero-conta =T.numero-conta))

56

Exemplo Gatilhos
A declarao new usado antes de T.saldo indica que o valor de T.saldo depois da atualizao deve ser usado; se omitido, o valor antes da atualizao usado.

57

Restries de Integridade
Restries de Domnio Integridade Referencial Asseres Gatilhos (Triggers) Dependncias Funcionais H

58

Dependncias Funcionais
O que vem a ser as dependncias funcionais ? Para que servem ?

59

Dependncias Funcionais
Restries ao conjunto de relaes vlidas. Requerem que o valor para um certo conjunto de atributos determine unicamente o valor para outro conjunto de atributos. A noo da dependncia funcional generaliza a noo de superchave.

60

Dependncias Funcionais
Seja R o esquema de uma relao com R, R

A dependncia funcional realiza-se em R se, e somente se em qualquer relao vlida r(R), sempre que duas tuplas t1 e t2 de r combinam nos atributos , eles tambm combinam nos atributos . Isto ,
t1[]=t2[] t1[]=t2[]
61

Dependncias Funcionais
K uma superchave para a relao R se e somente se K R

K uma chave candidata para R se, e somente se


K R, and Para nenhum K, R

62

Dependncias Funcionais
A dependncia funcional nos permite expressar restries que as superchaves no expressam. Considere o esquema:
esquema_info_emprestimo = (nome_agncia, nmero_emprstimo, nmero_cliente, total)

63

Dependncias Funcionais
O conjunto de dependncias funcionais que queremos garantir para esse esquema de relao :
numero_emprestimo total numero_emprestimo nome_agencia

entretanto, no esperamos que a seguinte dependncia funcional se verifique:


numero_emprestimo nome_cliente
64

Uso de Dependncias Funcionais


Usamos dependncia funcional para:
testar relaes para ver se elas so vlidas sob um dado conjunto de dependncias funcionais. Se uma relao R vlida sob um conjunto F de dependncias funcionais, diz-se que r satisfaz F.

65

Uso de Dependncias Funcionais


Usamos dependncia funcional para:
especificar restries no conjunto de relaes vlidas; diz-se que F vale em R se todas as operaes em R satisfazem o conjunto de dependncias funcionais F.

66

Uso de Dependncias Funcionais


Nota: Uma instncia especfica de um esquema de relao pode satisfazer uma dependncia funcional mesmo se a dependncia funcional no valha em todas as instncias legais. Por exemplo, uma instncia especfica de esquema-emprestimo, por acaso satisfaz numero-emprestimo nome-cliente

67

Você também pode gostar