Como lidar com o SQL Modificação Anomalias e formas normais
Uma série de problemas - chamados anomalias de modificação - pode praga um banco de dados se você não estruturar o banco de dados SQL corretamente. Para evitar esses problemas, você pode normalizar a estrutura de banco de dados. Normalização geralmente implica dividir uma tabela de banco de dados em duas tabelas simples.
anomalias de modificação são assim chamadas porque eles são gerados pela adição de, a mudança, ou o apagamento dos dados a partir de uma tabela de base de dados.
Suponha, por exemplo, que a sua empresa vende produtos de limpeza doméstica, e você cobrar todos os clientes o mesmo preço para cada produto. A tabela SALES mantém o controle de tudo para você. Suponha que o cliente 1001 afasta-se e não é mais um cliente. Você não se importa o que ele comprou no passado, porque ele não vai comprar nada de você novamente. Você quer apagar a sua linha da tabela.
Se você fizer isso, no entanto, você não apenas perder o fato de que o cliente 1001 comprou lavandaria detergent- você também perde o fato de que detergente para a roupa custa R $ 12. Esta situação é chamada de supressão anomalia. Na exclusão de um fato (que o cliente 1001 comprou sabão em pó), você excluir inadvertidamente um outro fato (que detergente para a roupa custa R $ 12).
Você pode usar a mesma tabela para ilustrar uma anomalia de inserção. Por exemplo, suponha que você deseja adicionar desodorante vara para a sua linha de produtos a um preço de US $ 2. Não é possível adicionar esses dados para a tabela SALES até que um cliente compra desodorante stick.
O problema com a tabela de vendas é que esta tabela lida com mais de uma coisa: abrange não apenas quais os produtos que os clientes compram, mas também o que os produtos de custo. Para eliminar as anomalias, você tem que dividir tabela de vendas em duas tabelas, cada uma tratando de um único tema ou idéia.
CUST_PURCH, que trata da única ideia de compras do cliente.
PROD_PRICE, que lida com a única idéia de preço do produto.
Agora você pode excluir a linha para o cliente 1001 de CUST_PURCH sem perder o facto de detergente para a roupa custa R $ 12. (O custo de detergente está agora armazenado na PROD_PRICE.) Você também pode adicionar desodorante vara para PROD_PRICE ou não alguém tenha comprado o produto. informações de compra são armazenados em outro lugar, na tabela de CUST_PURCH.
O processo de dividir uma tabela em várias tabelas, cada um dos quais tem um único tema, é chamado normalização. Uma operação de normalização que resolve um problema não pode afetar outros problemas. Você pode ter que executar várias operações sucessivas de normalização para reduzir cada tabela resultante para um único tema.
Cada tabela de banco de dados deve lidar com um - e apenas um - tema principal. Às vezes (como você provavelmente adivinhou) determinar que uma tabela realmente lida com dois ou mais temas pode ser difícil.
Você pode classificar as tabelas de acordo com os tipos de anomalias de modificação a que está sujeito. Em um artigo 1970, E. F. Codd identificou três fontes de anomalias modificação e definido primeiro, segundo e terceiro formas normais (1NF, 2NF, 3NF) como remédios para esses tipos de anomalias. Nos anos seguintes, Codd e outros descobriram outros tipos de anomalias e especificou novas formas normais para lidar com eles.
A forma Boyce-Codd normal (BCNF), a quarta forma normal (4FN), ea quinta forma normal (5NF) cada proporcionou um maior grau de proteção contra anomalias de modificação. Não até 1981, no entanto, fez um papel, escrito por Ronald Fagin, descreva forma normal chave de domínio, ou DK / NF. Usando esta última forma normal permite-lhe garantia que a tabela está livre de anomalias de modificação.
As formas são normais aninhado no sentido em que uma tabela que é em 2NF é automaticamente também em 1NF. Do mesmo modo, uma tabela em 3NF é automaticamente em 2NF, e assim por diante. Para a maioria das aplicações práticas, colocando um banco de dados em 3NF é suficiente para assegurar um elevado grau de integridade. Para ter certeza absoluta da sua integridade, você deve colocar o banco de dados em DK / NF.
Depois de normalizar um banco de dados, tanto quanto possível, você pode querer fazer denormalizations selecionados para melhorar o desempenho. Se fizer isso, estar ciente dos tipos de anomalias que podem agora se tornou possível.