Integridade dos Bancos de Dados
- Uma das maiores preocupações de qualquer desenvolvedor ou projetista de BD é encontrar uma forma de garantir a integridade dos dados que se encontram armazenados
- Isso se deve ao fato de que se houver algum dado crucial armazenado de forma incorreta, o resultado pode ser catastrófico, pois o BD pode apresentar informações imprecisas ou mesmo totalmente errôneas
- Imagine a situação:
- Uma aplicação de contas a receber tem em seu BD, vinte e dois registros de pagamento em aberto, referentes a um determinado cliente
- A ligação entre essas informações (o cadastro do cliente e o pagamento em aberto) é feita pelo pagamento de código do cliente e por isso o valor desse campo não pode ser alterado de forma nenhuma
- Digamos que um usuário ou o próprio administrador do BD tenha aberto o BD fora da aplicação e alterado o valor do campo do código do cliente na tabela de cadastro de clientes
- Logicamente o vínculo será quebrado pois os campos utilizados no relacionamento agora possuem valores distintos
- Se o próprio sistema de BD oferecer formas de restringir ou mesmo impossibilitar a quebra dessa integridade, o desenvolvedor terá menos trabalho. Acessando os dados fora da aplicação, as informações ficaram vulneráveis
- Como solução para este problema, a maioria dos sistemas hoje existentes possui recursos capazes de gerenciar esta integridade de dados.
- Será que todos os considerados SGBDs possuem esta funcionalidade?
Integridade de Entidades
- Define que as chaves primárias de uma tabela não podem ser nulas, ou seja, sempre deverão conter um valor mesmo que sejam compostas.
- Valor nulo => diferente de zero ou espaço em branco. E para números?
- Alguns sistemas: Campo requerido
- Motivo:
- A chave primária é um atributo (ou mais de um) que identifica um registro único
- Na integridade de entidade, temos validações um nível acima, onde definimos quais campos de nossa tabela são chaves primárias (PK) ou únicas (UK).
Um exemplo de chave única é o campo de CPF que nunca pode se repetir.
OBS: Geralmente chaves únicas são chamadas de chaves candidatas, pois são candidatas a chave primária, mas não são uma.
- Determina a ordem física dos registros
- É utilizada no relacionamento com outras tabelas
Integridade referencial
- Proibe este tipo de inconsistência impedindo que a relação entre a chave primária e a chave estrangeira seja quebrada
- Isto facilita para o desenvolvedor evitando que ele implemente tarefas de vigilância na aplicação
- Formas de tratamento
- Proibição:
- Não permite que o usuário altere ou exclua dados de uma chave primária que é chave estrangeira em outras tabelas
- A menos que ...
- Execução em cascata:
- A exclusão ou alteração é refletida automaticamente nas tabelas relacionadas
- Exemplo: Os produtos que pertencem à categoria H222 serão excluídos junto com a própria categoria
- Proibição:
- Exemplos:
- Com as tabelas Sales.SalesOrderDetail e Production.Product no banco de dados AdventureWorks2008R2, a integridade referencial baseia-se nas relações entre a chave estrangeira (ProductID) na tabela Sales.SalesOrderDetail e a chave primária (ProductID) na tabela Production.Product
- Essa relação assegura que o pedido de vendas nunca referencie um produto que não exista na tabela Production.Product.
- SQL:
- Suporte à Integridade Referencial permitindo que sejam criadas chaves estrangeiras (CONSTRAINT) para especificar as ações a serem desempenhadas para operações de exclusão e atualização de dados
- Access: integridade parcial
Integridade de Domínios
- Estabelece restrições e regras na definição dos domínios em si, em vez de diretamente nos campos
- Ajuda a economizar tempo e trabalho
- Vários campos são formatados a partir de domínios
- Com a regra de integridade definida neles, esses campos automaticamente herdam essas restrições
- Exemplo:
- Definir Dominio "Salario" com tipo decimal e valor maior que 1 SM
Integridade de Campos
- Eventualmente, mesmo o desenvolvedor tendo definido integridade de domínio, é necessário adicionar restrições extras aos campos
- Exemplo:
- Salário: restringir o intervalo aceito entre 622 (valor minimo) e 2700 (valor máximo).
- A integridade de campos não deve conflitar com a de domínio
- Validação de dados:
- Possibilita que o próprio SGBD faça uma verificação quanto aos valores inseridos pelo usuário se são válidos ou não
- Exemplo: Cadastro de funcionários
- Cada funcionário tem um cargo e seu salário é definido pelo cargo que ocupa
- Neste caso, mesmo que o valor para essa informação esteja dentro da regra definida para o campo deve ser efetuada uma validação para certificar-se de que o valor fornecido está dentro do padrão para o cargo do funcionário
- Formato dos dados:
- CNPJ - formato 99.999.999/9999-99
- Algumas soluções provem as "máscaras de entrada" para cada campo do BD
