Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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 :
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
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
24
25
(r2) K(r1)
26
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
29
30
31
32
33
34
35
36
37
38
39
40
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.
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
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
65
66
67