Skip to main content

Como converter um banco de dados para a terceira forma normal (3NF)

Modelagem de Dados - Normalização - Primeira Forma Normal (Pode 2024)

Modelagem de Dados - Normalização - Primeira Forma Normal (Pode 2024)
Anonim

A terceira forma normal (3NF) é um princípio de banco de dados que suporta a integridade dos dados, baseando-se nos princípios de normalização do banco de dados fornecidos pela Primeira Forma Normal (1NF) e pela Segunda Forma Normal (2NF).

Terceiros requisitos de formulário normal

Existem dois requisitos básicos para um banco de dados estar na terceira forma normal:

  • O banco de dados já deve atender aos requisitos de 1NF e 2NF.
  • Todas as colunas do banco de dados devem depender da chave primária, o que significa que o valor de qualquer coluna pode ser derivado apenas da chave primária.

Sobre a dependência da chave primária

Vamos explorar mais o que queremos dizer com o fato de que todas as colunas devem depender da chave primária.

Se o valor de uma coluna puder ser derivado da chave primária e de outra coluna na tabela, ela violará 3NF. Considere uma tabela Funcionários com estas colunas:

  • ID do Empregado
  • Primeiro nome
  • Último nome

Ambos LastName e FirstName dependem apenas do valor de EmployeeID? Bem, o LastName poderia depender do FirstName? Não, porque nada inerente no LastName sugeriria o valor de FirstName. O FirstName poderia depender do LastName? Não novamente, porque o mesmo é verdadeiro: qualquer que seja um LastName, ele não poderia fornecer uma dica quanto ao valor de FirstName. Portanto, esta tabela é compatível com 3NF.

Mas considere esta tabela de veículos:

  • VehicleID
  • Fabricante
  • Modelo

O fabricante e o modelo podem derivar do VehicleID - mas o modelo também pode derivar do fabricante porque um modelo de veículo é fabricado apenas por um determinado fabricante. Esse design de tabela não é compatível com 3NF e pode, portanto, resultar em anomalias de dados. Por exemplo, você pode atualizar o fabricante sem atualizar o modelo, apresentando imprecisões.

Para torná-lo compatível, precisaríamos mover a coluna dependente adicional para outra tabela e fazer referência a ela usando uma chave estrangeira. Isso resultaria em duas tabelas:

Tabela de Veículos

Na tabela abaixo, o ModelID é uma chave estrangeira para o Modelos mesa:

  • VehicleID
  • Fabricante
  • ModelID

Tabela de modelos

Esta nova tabela mapeia modelos para fabricantes. Se você quiser atualizar qualquer informação de veículo específica para um modelo, você faria isso nesta tabela, em vez de na tabela Veículos.

  • ModelID
  • Fabricante
  • Modelo

Campos Derivados no Modelo 3NF

Uma tabela pode conter um campo derivado - um que é calculado com base em outras colunas na tabela. Por exemplo, considere esta tabela de pedidos de widgets:

  • Número do pedido
  • Número do cliente
  • Preço unitário
  • Quantidade
  • Total

O total quebra a conformidade de 3NF porque pode ser derivado pela multiplicação do preço unitário pela quantidade, em vez de depender totalmente da chave primária. Devemos removê-lo da tabela para cumprir o terceiro formulário normal.

Na verdade, como é derivado, é melhor não armazená-lo no banco de dados.

Podemos simplesmente calculá-lo "on the fly" ao executar consultas de banco de dados. Por exemplo, podemos ter usado essa consulta anteriormente para recuperar números e totais de pedidos:

SELECT OrderNumber, Total FROM WidgetOrders

Agora podemos usar a seguinte consulta:

SELECT OrderNumber, UnitPrice * Quantidade AS Total FROM WidgetOrders

para obter os mesmos resultados sem violar as regras de normalização.