Entender a normalização

Concluído

A normalização é um termo usado por profissionais de banco de dados para um processo de design de esquema que minimiza a duplicação de dados e impõe a integridade dos dados.

Embora existam muitas regras complexas que definem o processo de refatoração de dados em vários níveis (ou formulários) de normalização, uma definição simples para fins práticos é:

  1. Separar cada entidade em sua própria tabela.
  2. Separar cada atributo discreto em sua própria coluna.
  3. Identificar exclusivamente cada instância de entidade (linha) usando uma chave primária.
  4. Usar colunas de chave estrangeira para vincular entidades relacionadas.

Para entender os princípios principais da normalização, suponha que a tabela a seguir representa uma planilha que uma empresa usa para controlar suas vendas.

Diagrama mostrando os dados de um pedido em uma única tabela não normalizada.

Observe que os detalhes do cliente e do produto estão duplicados para cada item vendido e que o nome e endereço postal do cliente, bem como o nome e o preço do produto estão combinados nas mesmas células da planilha.

Agora vamos ver como a normalização muda a maneira como os dados são armazenados.

Diagrama mostrando os dados de um pedido em um esquema tabular normalizado.

Cada entidade que é representada nos dados (cliente, produto, pedido de venda e item) é armazenada em sua própria tabela e cada atributo discreto dessas entidades está em sua própria coluna.

O registro de cada instância de uma entidade como uma linha em uma tabela específica da entidade remove a duplicação dos dados. Por exemplo, para alterar o endereço de um cliente, você só precisa modificar o valor em uma única linha.

A decomposição de atributos em colunas individuais garante que cada valor seja restrito a um tipo de dados apropriado, por exemplo, os preços de produtos devem ser valores decimais, enquanto que as quantidades de itens devem ser números inteiros. Além disso, a criação de colunas individuais fornece um nível útil de granularidade nos dados para consulta. Por exemplo, você pode filtrar facilmente os clientes por aqueles que vivem em uma cidade específica.

As instâncias de cada entidade são identificadas exclusivamente por uma ID ou outro valor de chave, conhecido como chave primária; e quando uma entidade faz referência a outra (por exemplo, um pedido tem um cliente associado), a chave primária da entidade relacionada é armazenada como uma chave estrangeira. Você pode pesquisar o endereço do cliente (que é armazenado apenas uma vez) para cada registro na tabela Order referenciando o registro correspondente na tabela Customer. Normalmente, um RDBMS (sistema de gerenciamento de banco de dados relacional) pode impor a integridade referencial para garantir que um valor inserido em um campo de chave estrangeira tenha uma chave primária correspondente existente na tabela relacionada, por exemplo, impedindo pedidos de clientes inexistentes.

Em alguns casos, uma chave (primária ou estrangeira) pode ser definida como uma chave composta com base em uma combinação exclusiva de várias colunas. Por exemplo, a tabela LineItem no exemplo acima usa uma combinação exclusiva de OrderNo e ItemNo para identificar um item de um pedido individual.