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:
- A base de datos debe cumprir xa os requisitos de 1NF e 2NF .
- Todas as columnas da base de datos deben depender da clave primaria , o que significa que o valor de calquera columna só se pode derivar da clave primaria.
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:
- EmpregadoID
- Nome
- Apelido
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:
- VehicleID
- Fabricante
- Modelo
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 :
- VehicleID
- Fabricante
- ModelID
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.
- ModelID
- Fabricante
- Modelo
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:
- Número de orde
- Número de cliente
- Prezo por unidade
- Cantidade
- Total
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 WidgetOrdersAgora podemos usar a seguinte consulta:
SELECCIONar Orde Numérico, Número Unitario * Cantidade AS Total FROM Widget Orderspara lograr os mesmos resultados sen violar as regras de normalización.