12 regras de Codd
O Dr. Edgar F. Codd, após sua extensa pesquisa sobre o Modelo Relacional de sistemas de banco de dados, propôs doze regras próprias, que segundo ele, um banco de dados deve obedecer para ser considerado um verdadeiro banco de dados relacional.
Essas regras podem ser aplicadas em qualquer sistema de banco de dados que gerencia dados armazenados usando apenas seus recursos relacionais. Esta é uma regra básica, que atua como base para todas as outras regras.
Regra 1: Regra de Informação
Os dados armazenados em um banco de dados, sejam dados do usuário ou metadados, devem ser um valor de alguma célula da tabela. Tudo em um banco de dados deve ser armazenado em formato de tabela.
Regra 2: Regra de acesso garantido
Cada elemento de dados (valor) é garantido como acessível logicamente com uma combinação de nome de tabela, chave primária (valor de linha) e nome de atributo (valor de coluna). Nenhum outro meio, como ponteiros, pode ser usado para acessar os dados.
Regra 3: Tratamento Sistemático de Valores NULL
Os valores NULL em um banco de dados devem receber um tratamento sistemático e uniforme. Esta é uma regra muito importante porque um NULL pode ser interpretado como um dos seguintes - dados ausentes, dados não conhecidos ou dados não aplicáveis.
Regra 4: Catálogo online ativo
A descrição da estrutura de todo o banco de dados deve ser armazenada em um catálogo online, conhecido como data dictionary, que pode ser acessado por usuários autorizados. Os usuários podem usar a mesma linguagem de consulta para acessar o catálogo que eles usam para acessar o próprio banco de dados.
Regra 5: regra abrangente de sublinguagem de dados
Um banco de dados só pode ser acessado usando uma linguagem com sintaxe linear que suporta definição de dados, manipulação de dados e operações de gerenciamento de transações. Este idioma pode ser usado diretamente ou por meio de algum aplicativo. Se a base de dados permitir o acesso aos dados sem qualquer ajuda desta linguagem, é considerado uma violação.
Regra 6: Ver regra de atualização
Todas as visualizações de um banco de dados, que teoricamente podem ser atualizadas, também devem ser atualizáveis pelo sistema.
Regra 7: regra de inserção, atualização e exclusão de alto nível
Um banco de dados deve oferecer suporte à inserção, atualização e exclusão de alto nível. Isso não deve ser limitado a uma única linha, ou seja, também deve suportar operações de união, interseção e subtração para produzir conjuntos de registros de dados.
Regra 8: Independência de dados físicos
Os dados armazenados em um banco de dados devem ser independentes dos aplicativos que acessam o banco de dados. Qualquer mudança na estrutura física de um banco de dados não deve ter nenhum impacto sobre como os dados estão sendo acessados por aplicativos externos.
Regra 9: Independência de dados lógicos
Os dados lógicos em um banco de dados devem ser independentes da visão de seu usuário (aplicativo). Qualquer mudança nos dados lógicos não deve afetar os aplicativos que os utilizam. Por exemplo, se duas tabelas forem mescladas ou uma for dividida em duas tabelas diferentes, não deve haver impacto ou alteração no aplicativo do usuário. Esta é uma das regras mais difíceis de aplicar.
Regra 10: Independência de integridade
Um banco de dados deve ser independente do aplicativo que o utiliza. Todas as suas restrições de integridade podem ser modificadas de forma independente, sem a necessidade de qualquer alteração no aplicativo. Essa regra torna um banco de dados independente do aplicativo front-end e de sua interface.
Regra 11: Independência de Distribuição
O usuário final não deve ser capaz de ver que os dados estão distribuídos em vários locais. Os usuários sempre devem ter a impressão de que os dados estão localizados em apenas um site. Essa regra é considerada a base dos sistemas de banco de dados distribuídos.
Regra 12: Regra de Não-Subversion
Se um sistema tiver uma interface que fornece acesso a registros de baixo nível, a interface não deve ser capaz de subverter o sistema e contornar as restrições de segurança e integridade.