Poñendo unha base de datos en terceiro formulario normal (3NF)

A terceira forma normal (3NF) é un principio de base de datos que soporta a integridade dos datos baseándose nos principios de normalización da base proporcionados polo Primeiro Formulario Normal (1NF) e Segundo Formulario Normal (2NF).

Terceiro Requisitos do Formulario Normal

Existen dous requisitos básicos para que unha base de datos teña a terceira forma normal:

Sobre a dependencia da clave primaria

Explorar máis o que queremos dicir polo feito de que todas as columnas deben depender da clave primaria.

Se o valor dunha columna pode derivarse da clave primaria e outra columna da táboa, infrinxe 3NF. Considere a táboa dos empregados con estas columnas:

Realizarán os dous LastName e FirstName dependendo só do valor de EmployeeID? Ben, podería LastName depende de FirstName? Non, porque nada inherente a LastName suxeriría o valor de FirstName. Podería FirstName depender de LastName? Non, de novo porque o mesmo é certo: o que sexa un LastName, non podería proporcionar unha información sobre o valor de FirstName. Polo tanto, esta táboa é compatible con 3NF.

Pero considere esta táboa de vehículos:

O fabricante eo modelo poden derivarse do VehicleID - pero o modelo tamén podería derivar do fabricante porque un modelo de vehículo está fabricado só por un fabricante en particular. Este deseño da táboa non é compatible con 3NF e podería, polo tanto, producir anomalías de datos. Por exemplo, pode actualizar o fabricante sen actualizar o modelo, introducindo imprecisións.

Para que sexa compatible, teriamos que mover a columna dependente adicional a outra táboa e referenciala usando unha clave externa. Isto produciría dúas táboas:

Mesa de vehículos

Na táboa seguinte, o ModelID é unha chave estranxeira para a táboa Modelos :

Mesa de modelos

Esta nova táboa mapea modelos aos fabricantes. Se desexa actualizar algunha información do vehículo específica dun modelo, faríalla nesta táboa e non na táboa de vehículos.

Campos derivados no modelo 3NF

Unha táboa pode conter un campo derivado: un que se computa baseado noutras columnas da táboa. Por exemplo, considere esta táboa de ordes de widgets:

O total rompe o cumprimento de 3NF porque pode derivarse multiplicando o prezo unitario pola cantidade, en lugar de depender completamente da clave primaria. Debemos eliminar-lo da táboa para cumprir coa terceira forma normal.

De feito, como se deriva, é mellor non almacenalo na base de datos.

Podemos simplemente calcular-lo "on the fly" ao realizar consultas de base de datos. Por exemplo, poderiamos ter usado previamente esta consulta para recuperar números e números de orde:

SELECT OrderNumber, Total FROM WidgetOrders

Agora podemos usar a seguinte consulta:

SELECCIONar Orde Numérico, Número Unitario * Cantidade AS Total FROM Widget Orders

para lograr os mesmos resultados sen violar as regras de normalización.