Restrições e Integridades em BD

Propaganda
Banco de Dados I
2007
Módulo II: Modelagem EntidadeRelacionamento versus Relacional
(Aula 3)
Clodis Boscarioli
Agenda:
Exercícios de Mapeamento ME-R para MR;
Restrições de Domínio;
Restrições de Chave e em Valores Null;
Integridade Referencial;
Asserções;
Gatilhos;
Dependência Funcional.
Introdução
Em um banco de dados relacional existem muitas relações, e as
tuplas destas relações estão, em geral, relacionadas de diversas
maneiras.
Existem muitas limitações ou restrições em relação ao valores reais
permitidos em um banco de dados. Estas limitações ou restrições
são derivadas do mundo real.
Podem ser:
Restrições inerentes baseadas em modelo (uma relação não
pode ter tuplas repetidas)
Restrições baseadas em esquema;
Restrições baseadas em aplicação.
Introdução
Fornecem meios para assegurar que mudanças feitas no banco de
dados, por usuários autorizados, não resultem em perda da
consistência dos dados.
Resguardam o banco de dados contra danos acidentais.
Restrições no modelo entidade-relacionamento:
Declarações de chave: o conjunto de inserções válidas e
atualizações é restrito àquelas que não criam duas entidades
com o mesmo valor numa chave candidata.
Forma de um relacionamento: restringe os conjuntos
relacionamentos legais entre entidades de uma coleção de
conjuntos-entidade.
Uma restrição de integridade pode ser um predicado arbitrário
pertencente ao banco de dados. No entanto, os predicados
arbitrários podem ser custosos em relação a testes. Deve-se optar
por restrições de integridade que possam ser testadas com a
mínima manipulação.
Restrições de Domínio
São a forma mais elementar de restrições de integridade.
São testadas facilmente pelo sistema toda vez que um novo item de
dado é inserido no banco de dados.
Vários atributos podem ter o mesmo domínio.
A própria definição de restrição de domínio permite testar os valores
inseridos no banco de dados.
Dentro de cada tupla, o valor de cada atributo A deve ser um valor
atômico no domínio dom(A).
Restrições de Domínio
A cláusula check (SQL)
Permite determinar um predicado que deva ser satisfeito por
qualquer valor designado a uma variável.
Exemplo:
Garantir que o domínio relativo ao turno de trabalho de um operário
contenha somente valores maiores que um dado valor (turno
mínimo).
Sintaxe:
create domain número_conta char(10)
constraint teste_nulo_numero_conta check(value not null)
create domain tipo_conta char(10)
Constraint teste_tipo_conta check(value in (“Corrente”,”Poupança”))
Restrições de Chave e em Valores Null
Sempre existe um sub-conjunto de atributos de um
esquema de relação R com a propriedade de que duas
tuplas, em qualquer estado da relação r de R, não
tenham as mesmas combinações de valores para esses
atributos.
Seja SK este subconjunto de atributos; então, para
quaisquer tuplas distintas t1 e t2 em um estado (ou
instância) da relação r de R, tem-se a restrição que:
t1[SK] <> t2[SK]
Valores nulos não se aplicam a chaves e a atributos
definidos como not null (restrição de integridade de
entidade).
Nova definição...
Um esquema de banco de dados relacional S é um
conjunto de esquemas de relação S = {R1, R2, ..., Rm} e
um conjunto de restrições de integridade IC.
Uma instância de um banco e dados relacional DB de S
é um conjunto dos estados da relação DB = {r1, r2, ...,
rm} de forma que cada ri seja uma instância de Ri, e de
maneira que os estado da relação ri satisfaçam as
restrições de integridade especificadas em IC.
Adendo: A Junção Natural ( |X| )
A junção natural (natural join) é uma operação binária
que nos permite combinar certas seleções e um produto
cartesiano em uma única operação.
Forma-se
um produto cartesiano de duas relações e
promove-se uma seleção de tuplas, obedecendo à
equivalência dos atributos que aparecem em ambas
as relações e, finalmente, remove-se os atributos em
duplicidade.
Integridade Referencial
Utilizadas para garantir que um valor que aparece em
uma relação para um dado conjunto de atributos
também apareça para um certo conjunto de atributos em
outra relação.
Considere um par de relações r(R) e s(S) e a junção
natural r |x| s. Pode existir uma tupla tr em r que não
possa ser combinada a nenhuma tupla em s. Isto é, não
existe nenhum ts em s tal que tr[R ∩ S] = ts[R ∩ S]. Tais
tuplas são chamadas tuplas pendentes.
Dependendo do conjunto de entidades ou de
relacionamentos que está sendo modelado, tuplas
pendentes podem ou não ser aceitáveis.
Integridade Referencial
Suponha que existe uma tupla r na relação conta, com
t1[nome_agência] = “Agência Cascavel”, mas que não exista uma
tupla na relação agência para “Agência Cascavel”. Esta é uma
situação indesejável.
Espera-se que a relação agência possua todas as agências do
banco. Portanto, a tupla t1 faz referência a um conta de agência
inexistente. É desejável a implementação de uma regra de
integridade que proíba tupla pendentes desse tipo.
No entanto, nem todos os tipos de tuplas pendentes são indesejáveis.
Suponha que exista uma tupla t2 na relação agência, com t2[nomeagência] = “Agência Toledo”, mas não há nenhuma tupla da relação
conta com referência à agência Toledo. Esse caso indica que a
agência Toledo não possui nenhuma conta.
Integridade Referencial
Diferença entre as duas situações:
o atributo nome-agência do Esquema_conta é uma
chave estrangeira cuja referência é a chave primária
do Esquema_agência.
O atributo nome_agência do Esquema_agência não é
uma chave estrangeira.
Seja r1(R) e r2(R) relações com chaves primárias K1 e
K2, respectivamente. Dizemos que um subconjunto α de
R2 é uma chave estrangeira associada a K1 em relação a
r1 se é garantido que, para todo t2 em r2, existe uma
tupla t1 em r1, tal que t1[K1] = t2[α].
Exigências destes tipo são chamadas de regras de
integridade referencial.
Integridade Referencial no ME-R
Se derivarmos nosso esquema de banco de dados
relacional a partir de diagramas E-R, então toda relação
resultante de um conjunto de relacionamentos possui
regras de integridade.
Outra fonte de regras de integridade são os conjuntos
de entidades fracas.
Modificações no Banco de Dados
Modificações no banco de dados podem originar violação das regras
de integridade referencial.
Suponha a integridade referencial existente entre r1 e r2, onde r2
detém a chave estrangeira α em relação a chave primária K de r1.
Inserção: se uma tupla t2 é inserida em r2, o sistema deve
garantir que exista uma tupla t1 em r1 tal que t1[K] = t2[α]
Remoção: se uma tupla t1 é removida de r1, o sistema deve
tratar também o conjunto de tuplas em r2 que se referem a t1.
Atualização:
Se uma tupla t2 da relação r2 é atualizada e a atualização modifica
valores da chave estrangeira, então é feita uma verificação similar à
inserção.
Se uma tupla t1 da relação r1 é atualizada e a atualização modifica
os valores de uma chave primária, então deverá ser feita uma
verificação similar à realizada para a remoção.
Asserções
Uma asserção é um predicado que expressa uma condição que
desejamos que seja sempre satisfeita no banco de dados.
Restrições de domínio e regras de integridade referencial são
formas especiais de asserções.
Exemplos de outras asserções:
A soma de todos os totais em empréstimo de cada uma das
agências deve ser menor que a soma de todos os saldos das
contas dessa agência.
Todo empréstimo deve ter ao menos um cliente que mantenha
uma conta com saldo mínimo de mil reais.
Quando uma asserção é criada, o sistema verifica sua validade. Se
as asserções são válidas, então qualquer modificação posterior do
banco de dados será permitida somente quando não violar a
asserção.
Gatilhos (Triggers)
Um gatilho é um comando que é executado pelo sistema,
automaticamente, em conseqüência de uma modificação
no banco de dados.
Exigências:
Especificar as condições sob as quais o gatilho deve
ser executado;
Especificar as ações que serão tomadas quando um
gatilho for disparado.
Exemplo:
Ao invés de permitir saldos negativos em conta, o
banco pode criar condições para que a conta corrente
seja zerada e o saldo negativo seja transformado em
um empréstimo.
Dependência Funcional
Próxima aula...
Referências
Sistemas de Banco de Dados. (Cap. 6) Abraham
Silberchatz, Henry F. Korth e S. Sudarshan. 3ª Edição.
Makron Books, 1999.
Introdução a Banco de Dados (Apostila). (Cap. 5-6)
Osvaldo Kotaro Takai, Isabel Cristina Italiano, João
Eduardo Ferreira. DCC-IME-USP, 2005.
Sistemas de Banco de Dados. (Cap. 5 e 10) Ramez
Elsmari e Shamkant B. Navathe. 4ª Edição. Editora
Pearson Addison Wesley, 2005.
Download