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


  • 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