Você está na página 1de 26

Restries de Integridade

Restries de Integridade

Objetivo primordial de um SGBD

garantir a integridade de dados

Para garantir a integridade de um banco de dados

SGBDs oferecem o mecanismo de restries de


integridade

Uma restrio de integridade uma regra de


consistncia de dados que garantida pelo prprio
SGBD

Precisa ser testada quando um registro


includo, alterado ou excludo do BD
Restries de Integridade (RI

RI garantem !ue mudanas feitas no


banco de dados por usu"rios autori#ados
n$o resultem na perda da consist%ncia
dos dados
Restries de Integridade B"sicas

Restri$o de va#io

Restries de dom&nio

Restries de c'ave prim"ria

Integridade referencial

('ec) constraints

Gatil'os

*sseres
Garantidas pelo
SGBD
O programador
+$o se preocupa
(om estas restries
Restries de Integridade Sem,ntica

-" muitas restries de integridade !ue n$o se


encai.am nas categorias b"sicas

/ssas restries s$o c'amadas de restries


sem,nticas (ou regras de neg0cio

/.emplos de restries sem,nticas1

2m empregado do departamento 34inanceiro5 n$o


pode ter a categoria funcional 3/ngen'eiro56

2m empregado n$o pode ter um sal"rio maior !ue


seu superior imediato6

7amb8m c'amadas de regras de neg0cio


Restries de 9a#io
Restries de 9alor 9a#io

O cliente :;< n$o tem


nome

/sta tupla se refere a um


cliente an=nimo> o !ue
n$o tem muito sentido no
BD

/ste pode ser um caso


em !ue se deseja proibir
valores va#ios>
restringindo o dom&nio do
atributo nome para not
null
Matricula Nome endereco
:;< Rua (arval'o ?@:
:;A Pedro Rua Pedro ('aves BB
666
Restries de 9alor 9a#io

2m valor de campo pode assumir o valor va#io


(3null5 em ingl%s

(olunas nas !uais n$o s$o admitidos valores va#ios


c'amadas de colunas obrigat0rias

(olunas nas !uais podem aparecer valores va#ios


c'amadas de colunas opcionais

*bodagem relacional

todas colunas !ue compem a c'ave prim"ria


devem ser obrigat0rias

demais c'aves podem conter colunas opcionais


Restries de 9alor 9a#io

Regra 3+ulo5

Permite> ou no> !ue um atributo de uma tabela ten'a valor


nulo (aus%ncia de valor

/.emplo em SCD1

Create table funcionario


(matricula integer not null,
nome varchar(30) not null,
telefone varchar(20))

Insert into funcionario values(568, ,48


335425!")

#ostgre$%& 'rro( )ull value in column *nome+ violates


notnull constraint
Restries de Dom&nio
Restries de Dom&nio

RefereEse ao dom&nio de um atributo

(onjunto de valores !ue podem aparecer em


uma coluna (atributo

Dom&nio de valores v"lidos para um atributo

Restries de dom&nio s$o as mais


elementares

4acilmente verificadas pelo sistema


Restries de Dom&nio

Similar aos tipos de vari"veis em linguagens de


programa$o

9"rios atributos podem ter o mesmo dom&nio> mas tem


casos em !ue n$o fa# sentido

/.emplo1 o atributo idade 8 num8rico> precisa ser de


dom&nio inteiro, e n$o do tipo c'aracter> como 8 o caso
do atributo nome
Create table funcionario
(matricula integer not null,
nome varchar(30) not null,
i,a,e integer,
en,ereco varchar(35))
Restries de Dom&nio

O padr$o SCD suporta um conjunto restrito de tipos de dom&nio1

(adeia com comprimento de caracteres fi.o> com comprimento


especificado pelo usu"rio

+Fmero de casas decimais

Inteiro (conjunto finito de nFmeros inteiros

Data

666
Create table funcionario
(matricula integer not null,
nome varchar(30) not null,
,ata)ascimento date,
en,ereco varchar(35))
Matricula Nome dataNascimento endereco
:;< Garia B:HIBH@AJK Rua (arval'o ?@:
:;A Pedro @;HI?H@AAI Rua Pedro ('aves BB
Insert into funcionario values (5AB> 3Paulo5> 20/15/1999> 3*v Ipiranga @AII5
Restries de ('ave
Restries de ('ave E Prim"ria

Regra 3c'ave prim"ria5

restringe !ue cada lin'a de uma tabela deve


ser identificada por um valor Fnico

Pode ser simples ou composta


('ave simples c'ave composta
Create table me,ico
(co,igo- integer not null,
nome varchar(30) not null,
en,ereco varchar(35),
PRIMARY KEY (matricula) )
Create table consulta
(co,igo-e,ico integer not null,
co,igo.aciente integer not null,
,ata ,ate not null,
PRIMARY KEY (co,igo-e,ico,
co,igo.aciente, ,ata))
Restries de ('ave L ('ave (andidata

Restries Unique garantem !ue os dados contidos em


uma coluna ou um grupo de colunas 8 Fnico em rela$o
a todas as lin'as da tabela

Sintaxe: quando escrita como uma restrio de coluna


CREATE TABLE produto (nroProduto integer UNIQUE,
nome varchar(3!, preco rea"!#

Sintaxe: quando escrita como uma restrio de tabela


CREATE TABLE produto (nroProduto integer,
nome varchar(3!, preco rea",
UNIQUE (product$no!!#
Restries de Integridade
Referencial
Restries de Integridade Referencial

2ma das restries mais importantes em BD

Definio1 8 a garantia de !ue um valor !ue


aparece em uma rela$o R@> para um conjunto
de atributos> deve obrigatoriamente
corresponder a valores de um conjunto de
atributos em uma rela$o RBM O2

valores de atributos !ue s$o chave estrangeira


em uma relao R1 possuem valores
correspondentes em chaves primrias da tabela
referenciada RB
Restries de Integridade Referencial

/.emplo
C/'01' 102&' cidade
(co,igoCi,a,e integer )31 )4&&,
,escricao varchar(40) )31 )4&&,
esta,o char(2),
PRIMARY KEY (codigoCidade))
C/'01' 102&' cliente
(co,igoCliente integer )31 )4&&,
nome varchar(30) )31 )4&&,
co,Ci,a,e integer,
./I-0/5 6'5 (co,igoCliente),
73/'I8) 6'5 (co,Ci,a,e) REFERENCES Cidade (codigoCidade))
codigolient
e
Nome endereco codigoidade
:;< Garia Rua (arval'o ?@: @
:;A Pedro Rua Pedro ('aves
BB
:
codigoidad
e
Descricao !stado
@ 4lorian0poli
s
S(
B S$o Nos8 S(
(liente
(idade
9iola a restri$o cidade : n$o e.iste
" restrio garante #ue no ir e$istir %&!N'! #ue more numa cidade #ue no e$ista na ta(ela &D"D!
Restries de Integridade Referencial

* restri$o de integridade 8 testada !uando1

Inclus$o1 se uma tupla tB 8 inserida em uma rela$o


rB> o sistema precisa assegurar !ue e.iste uma tupla
t@ em uma rela$o r@ tal !ue t@Or@PQtBOrBP

/.1 inclui novo cliente> testa se a cidade e.iste

/.clus$o1 2ma c'ave prim"ria referenciada )


removida

O+ D/D/7/

/.1 Remove uma cidade referenciada por algum cliente

*ltera$o1 2ma c'ave prim"ria referenciada 8


alterada

O+ 2PD*7/

/.1 *ltera a c'ave primaria da cidade referenciada em cliente


Restries de Integridade Referencial

*RS/S1

+TO permite altera$o ou e.clus$o (N* "'&*N ou


Restrict (default1

n$o permite a e.clus$oHaltera$o en!uanto 'ouver


depend%nciaM

/.1 s0 permite e.cluir a cidade !uando nen'um cliente


referenciar esta cidade

+!' D!,"-%' 1 se 'ouver um valor default para a


coluna da c'ave estrangeira> ela recebe este valor

"+"D! 1 propaga a e.clus$oHaltera$oM

+!' N-%% 1 atribui o valor nulo6


Restries de Integridade Referencial E I+(D2STO

&ncluso1 ao inserir um novo cliente> 8 preciso garantir !ue o


c0digo da cidade na tabela cliente /UIS7* na tabela cidade

Para garantir isso criaEse a tabela de cliente com a c'ave


estrangeira codidade
C/'01' 102&' cliente
(co,igoCliente integer )31 )4&&,
nome varchar(30) )31 )4&&,
co,Ci,a,e integer,
./I-0/5 6'5 (co,igoCliente),
73/'I8) 6'5 (co,Ci,a,e) REFERENCES Cidade (codigoCidade))
codlient
e
Nome endereco codidad
e
:;< Garia Rua (arval'o ?@: @
:;A Pedro Rua Pedro ('aves
BB
B
codidad
e
Descricao !stado
@ 4lorian0poli
s
S(
B S$o Nos8 S(
(liente (idade
Restries de Integridade Referencial E /U(D2STO

/.clus$o1 ao e.cluir uma cidade da tabela &D"D!> o SGBD precisa garantir !ue
n$o e.ista nen'um cliente na tabela (DI/+7/ referenciando esta cidade

v"rias opes para garantir a integridade1


(oo 1! Setar para nulo o codigo da cidade na tabela (DI/+7/
C/'01' 102&' cliente
(co,igoCliente integer )31 )4&&, nome varchar(40) )31 )4&&, codigoCidade integer,
./I-0/5 6'5 (co,igoCliente),
73/'I8) 6'5 (co,igoCi,a,e) /'7'/')C'$ Ci,a,e (co,igoCi,a,e) 3N E!E"E SE" N#!!))
(oo 2! assumir um valor default
C/'01' 102&' cliente
(co,igoCliente integer )31 )4&&, nome varchar(40) )31 )4&&, codigoCidade integer,
./I-0/5 6'5 (co,igoCliente),
73/'I8) 6'5 (co,igoCi,a,e) /'7'/')C'$ Ci,a,e (co,igoCi,a,e) 3N E!E"E SE" EFA#!"))
codlient
e
Nome endereco codidad
e
:;< Garia Rua (arval'o ?@: +2DD
:;A Pedro Rua Pedro ('aves
BB
B
codidad
e
Descricao !stado
@ 4lorian0poli
s
S(
B S$o Nos8 S(
K S$o Nos8 S(
(liente (idade
Restries de Integridade Referencial E /U(D2STO
(oo "! +TO permitir a e.clus$o da cidade @ por!ue tem clientes morando nesta
cidade6 * cidade K pode ser e.clu&da
C/'01' 102&' cliente
(co,Cliente integer )31 )4&&, nome varchar(40) )31 )4&&,en,ereco varchar(40), codCidade
integer,
./I-0/5 6'5 (co,Cliente),
73/'I8) 6'5 (co,Ci,a,e) /'7'/')C'$ Ci,a,e (co,Ci,a,e) 3N E!E"E RES"RIC"))

codlient
e
Nome endereco codidad
e
:;< Garia Rua (arval'o ?@: @
:;A Pedro Rua Pedro ('aves
BB
@
codidad
e
Descricao !stado
@ 4lorian0poli
s
S(
B S$o Nos8 S(
K S$o Nos8 S(
(liente (idade
Restries de Integridade Referencial E /U(D2STO
.opo /0 remove as referencias (remove a cidade e todos os clientes da cidade
C/'01' 102&' cliente
(co,Cliente integer )31 )4&&, nome varchar(40) )31 )4&&, en,ereco varchar (40),
codCidade integer,
./I-0/5 6'5 (co,Cliente),
73/'I8) 6'5 (co,Ci,a,e) /'7'/')C'$ Cidade (co,igoCi,a,e) 3N E!E"E CASCAE))

codlient
e
Nome endereco codidad
e
:;< Garia Rua (arval'o
?@:
@
:;A Pedro Rua ('aves BB @
codidad
e
Descricao !stado
@ 4lorian0poli
s
S(
B S$o Nos8 S(
(liente (idade
IS7O +VO W permitido neste conte.to1 significa !ue *O R/GO9/R * (ID*D/>
R/GO9* 7*GB/G O (DI/+7/
Restries de Integridade Referencial E /U(D2STO

!$cluso1 on delete cascade 8 Ftil !uando1 ao eliminar uma nota fiscal os seus itens
sejam removidos6
codProduto Nome valor
:;< Pao K>II
:;A Deite B>II
Numero codProduto #tde
II@ :;< B
II@ :;A :
Produto
ItensXnota
numero codliente Data
II@ @ BIHIBHBII
?
IIB B BIHI:HBII
<
IIK @ BIHI;HBII
<
+ota
(R/*7/ 7*BD/ I7/+SX+O7*
(numero integer +O7 +2DD> codProduto integer +O7 +2DD> !tde float>
PRIG*RY Z/Y (numero>
4OR/IG+ Z/Y (codProduto R/4/R/+(/S Produto (codProduto ON D!%!'! R!+'R&'0,
4OR/IG+ Z/Y (numero R/4/R/+(/S N*'" (numero ON D!%!'! "+"D!0

Você também pode gostar