# Integridade de dados

Integridade de dados é a manutenção e a garantia da precisão e consistência de dados durante todo o ciclo de vida da informação, e é um aspecto crítico para o projeto, implementação e uso de qualquer sistema que armazene, processe ou recupere dados. O termo integridade de dados é de alcance amplo e pode ter significados amplamente diferentes, dependendo do contexto específico mesmo abaixo do guarda-chuva da computação. Este artigo fornece apenas uma visão geral de alguns dos diferentes tipos e preocupações da integridade dos dados.
A integridade dos dados é o oposto da decomposição dos dados, que é uma forma de perda de dados. A intenção geral de qualquer técnica de integridade de dados é a mesma: garantir que os dados sejam gravados exatamente como pretendido (como um banco de dados que rejeite corretamente as possibilidades mutuamente exclusivas) e, após a recuperação posterior, assegure-se de que os dados sejam os mesmos quando foram originalmente gravados. Em suma, a integridade dos dados visa evitar involuntárias mudanças na informação. A integridade dos dados não deve ser confundida com segurança de dados, a disciplina de proteger dados de acesso não autorizado.
Quaisquer alterações não intencionais dos dados como resultado de operação de armazenamento, recuperação ou processamento, - incluindo intenção maliciosa, inesperada falha de hardware e erro humano -, são falhas na integridade dos dados. Se as alterações forem resultado de acesso não autorizado, também pode ser uma falha de segurança de dados. Dependendo dos dados envolvidos, isso poderia se manifestar como benigno como um único pixel em uma imagem que aparecesse de cor diferente do que foi originalmente gravada, até a perda de fotos de férias ou um banco de dados crítico de negócios, ou até mesmo perda catastrófica da vida humana em um sistema de segurança crítica (safety-critical system ou life-critical system).

## Tipos de integridade
### Integridade física

A integridade física lida com os desafios associados à forma correta de armazenamento e obtenção dos dados. Os desafios com integridade física podem incluir falhas Eletromecânicas, falhas de projeto, fadiga de material, corrosão, quedas de energia, desastres naturais, atos de guerra e terrorismo e outros perigos ambientais especiais, tais como radiação ionizante, temperaturas extremas, pressões e forças G. Garantir a integridade física inclui métodos como redundância de hardware, uma fonte de alimentação ininterrupta, certos tipos de implementações RAID, dispositivos resistentes à radiação (radiation hardened chips), memória ECC (para detecção e correção de erros), uso de um sistema de arquivos clusterizado, uso de sistemas de arquivos que empregam checksum como ZFS, armazenamento que calcula os paridade, como exclusivo ou use uma função criptográfica hash e até ter um temporizador watchdog em subsistemas críticos.
A integridade física muitas vezes faz uso extensivo de algoritmos de detecção de erros conhecidos como códigos de correção de erros. Os erros de integridade dos dados induzidos pelo ser humano são muitas vezes detectados através do uso de verificações e algoritmos mais simples, como o algoritmo Damm ou algoritmo Luhn. Estes são usados ​​para manter a integridade dos dados após a transcrição manual de um sistema de computador para outro por um intermediário humano (por exemplo, cartões de crédito ou transações bancárias). Os erros de transcrição induzidos por computador podem ser detectados através de funções hash.
Nos sistemas em produção, essas técnicas são usadas em conjunto para garantir vários graus de integridade de dados. Por exemplo, um sistema de arquivos de computador pode ser configurado em uma matriz RAID tolerante a falhas, mas pode não fornecer checksum bloqueante para detectar e prevenir corrupção de dados silenciosos. Como outro exemplo, o sistema de gerenciamento de banco de dados (SGBD) pode ser compatível com as propriedades ACID, mas podem não ser o controlador RAID ou o cache de gravação interno da unidade de disco rígido.

### Integridade lógica

Este tipo de integridade diz respeito à correção ou racionalidade de um dado, dado o contexto particular. Isso inclui tópicos como integridade referencial e integridade da entidade em um banco de dados relacional ou corretamente ignorando os absurdos dados de um sensor em sistemas robotizados. Essas preocupações envolvem garantir que os dados "façam sentido", dado o seu ambiente. Os desafios incluem erros de software, falhas de projetos e erros humanos. Métodos comuns de garantir a integridade lógica incluem implantar restrições de checagem (check), de chave estrangeira (foreign keys), programa de asserção, e outras verificações de sanidade em tempo de execução.
Ambas as integridades física e lógica muitas vezes compartilha muitos desafios comuns, como erros humanos e falhas de projeto, e ambas devem lidar adequadamente com solicitações concorrentes/simultâneas para gravar e recuperar dados, o último dos quais é inteiramente um assunto por conta própria.

## Banco de dados

A integridade dos dados contém diretrizes para retenção de dados, especificando ou garantindo a duração de tempo que os dados podem ser mantidos em um banco de dados específico. Ele especifica o que pode ser feito com valores de dados quando sua validade ou utilidade expiram. Para alcançar a integridade dos dados, essas regras são consistentes e rotineiramente aplicadas a todos os dados que entram no sistema, e qualquer relaxamento no comprimento das regras pode causar erros nos dados. A implementação de verificações dos dados o mais próximo possível da fonte de entrada (como a entrada de dados humanos) faz com que menos dados incorretos entrem no sistema. A estrita aplicação das regras de integridade de dados faz com que as taxas de erro sejam menores, resultando em economia de tempo na solução de problemas e rastreamento de dados errados e os erros que eles causam nos algoritmos.
A integridade dos dados também inclui regras que definem as relações que partes dos dados podem ter como, por exemplo, um registro de "Cliente" que pode ser vinculado aos "Produtos" adquiridos, mas não a dados não relacionados, como "Ativos corporativos". A integridade dos dados geralmente inclui verificações e correção de dados inválidos, com base em um fixo esquema de banco de dados ou um conjunto de regras predefinidas. Um exemplo é o bloqueio da inserção de um dado textual onde é esperado um valor de data e hora. As regras para derivação de dados também são aplicáveis, especificando como um valor de dados é derivado com base em algoritmos, contribuintes e condições. Ele também especifica as condições de como o valor dos dados pode ser novamente derivado.

### Tipos de restrições de integridade

A integridade dos dados é normalmente aplicada em um sistema de banco de dados por uma série de restrições de integridade ou regras. Três tipos de restrições de integridade são uma parte inerente do modelo de dados relacionais: integridade de entidade, de domínio e referencial:
* Integridade de entidade diz respeito ao conceito de chave primária. A integridade da entidade é uma regra de integridade que afirma que cada tabela deve ter uma chave primária e que a coluna ou as colunas escolhidas para serem a chave primária devem ser únicas e não nulas;
* Integridade referencial diz respeito ao conceito de chave estrangeira. A regra de integridade referencial estabelece que qualquer valor de chave estrangeira pode ser apenas em um de dois estados: normalmente o valor de chave primária de alguma outra tabela ou, ocasionalmente, dependendo das regras do proprietário dos dados, null. Neste último caso, afirma-se explicitamente que não há relação entre os objetos representados no banco de dados ou que essa relação é desconhecida.
* Integridade de domínio especifica que as colunas de uma tabela em um banco de dados relacional devem ser declaradas em um domínio definido. A principal unidade de dados no modelo de dados relacionais é o item de dados. Tais itens de dados são considerados atômicos/indivisíveis. Um domínio é um conjunto de valores do mesmo tipo. Os domínios são, portanto, conjuntos/faixas de valores a partir dos quais os valores reais são adicionados às colunas de uma tabela.
* Integridade definida pelo usuário refere-se a um conjunto de regras especificadas por um usuário, que não pertencem à entidade, domínio e categorias de integridade referencial.
Se um banco de dados suporta esses recursos, é de responsabilidade do banco de dados garantir a integridade dos dados. Já se o banco de dados não suporta esses recursos, é de responsabilidade dos aplicativos/sistemas garantirem a integridade dos dados. Em todo caso, é de responsabilidade do banco de dados suportar o modelo de consistência para o armazenamento e recuperação de dados.
Ter um sistema de integridade de dados único, bem controlado e bem definido aumenta:
* estabilidade: um sistema centralizado executa todas as operações de integridade de dados;
* desempenho: todas as operações de integridade de dados são realizadas na mesma camada do modelo de consistência;
* reutilização: todos os aplicativos se beneficiam de um único sistema centralizado de integridade de dados;
* manutenção: um sistema centralizado facilita a administração da integridade de dados.
Bancos de dados modernos suportam esses recursos (see Comparativo entre sistemas gerenciadores de bancos de dados relacionais) e, de fato, tornou-se responsabilidade do banco de dados a garantia da integridade dos dados. Empresas e, de fato, muitos sistemas de banco de dados, oferecem produtos e serviços para migração de sistemas legados para bancos de dados modernos.

### Exemplos

Um exemplo de um mecanismo de integridade de dados é a relação pai-e-filho de registros relacionados. Se um registro pai possui um ou mais registros filho relacionados, todos os processos de integridade referencial são tratados pelo próprio banco de dados, o que garante automaticamente a precisão e integridade dos dados, de modo que nenhum registro filho possa existir sem um pai (também chamado de órfão) e que nenhum pai perca seus registros de filhos. A integridade também garante que nenhum registro pai pode ser excluído enquanto possuir algum registro filho. Tudo isso é tratado no nível do banco de dados e não exige checagens da integridade através da codificação em cada aplicativo.

## Sistemas de arquivos

Várias pesquisas mostram que nem o sistema de arquivos amplamente utilizados (incluindo UFS, Ext, XFS, JFS e NTFS) nem soluções de hardware RAID fornecem proteção suficiente contra problemas de integridade de dados.
Alguns sistemas de arquivos (incluindo Btrfs e ZFS fornecem dados internos e checksum de metadados, o que é usado para detectar silenciosa corrupção de dados e melhorar a integridade dos dados. Se uma corrupção é detectada dessa forma e os mecanismos RAID internos fornecidos por esses sistemas de arquivos também são usados, esses sistemas de arquivos podem, adicionalmente, reconstruir dados corrompidos de forma transparente. Esta abordagem permite uma melhor proteção de integridade de dados cobrindo todos os caminhos de dados, que geralmente é conhecido como proteção de dados de ponta a ponta.

## Armazenamento de dados

Além dos dados em bancos de dados, existem padrões para abordar a integridade dos dados em dispositivo de armazenamento de dados.