La tercera forma normal (3NF) es un principio de base de datos que soporta la integridad de los datos basándose en los principios de normalización de la base de datos proporcionados por la primera forma normal (1NF) y la segunda forma normal (2NF).
El propósito de 3NF es mejorar el procesamiento de la base de datos al mismo tiempo que se minimizan los costos de almacenamiento.
Requisitos de la Tercera Forma Normal
Hay dos requisitos básicos para que una base de datos esté en 3NF:
- La base de datos ya debe cumplir con los requisitos de 1NF y 2NF.
- Todas las columnas de la base de datos deben depender de la clave primaria, lo que significa que el valor de cualquier columna sólo puede derivarse de la clave primaria.
Dependencia de clave primaria
Exploremos más a fondo lo que queremos decir con el hecho de que todas las columnas deben depender de la clave primaria. Si el valor de una columna puede derivarse tanto de la clave primaria como de otra columna de la tabla, viola 3NF. Considere una tabla de empleados con estas columnas:
- EmployeeID
- Nombre
- Apellido
¿Dependen tanto el apellido como el nombre del empleado del valor de EmployeeID? Bueno, ¿podría LastName depender de FirstName? No, porque nada inherente a LastName sugeriría el valor de FirstName.
¿Podría depender FirstName de LastName? No otra vez, porque lo mismo es cierto: cualquiera que sea el apellido, no puede dar una pista sobre el valor de FirstName. Por lo tanto, esta tabla es compatible con 3NF.
Pero considere esto Tabla de vehículos :
- VehicleID
- Fabricante
- Modelo
El Fabricante y el Modelo podrían derivar del VehicleID, pero el Modelo también podría derivar del Fabricante porque un modelo de vehículo es hecho solamente por un fabricante en particular. Este diseño de tabla no es compatible con 3NF, y podría, por lo tanto, dar lugar a anomalías de datos. Por ejemplo, puede actualizar el fabricante sin actualizar el modelo, introduciendo inexactitudes.
Mover la columna dependiente adicional a otra tabla y hacer referencia a ella usando una clave externa la haría compatible. Esto daría como resultado dos cuadros:
En la tabla Vehículos a continuación, el ModelID es una clave extraña a la tabla Modelos:
- VehicleID
- Fabricante
- ModelID
Esta nueva Tabla de modelos asigna los modelos a los fabricantes. Si desea actualizar cualquier información de vehículo específica de un modelo, lo haría en esta tabla, en lugar de en la Tabla de Vehículos.
- ModelID
- Fabricante
- Modelo
Campos derivados en el modelo 3NF
Una tabla puede contener un campo derivado, que es el que se calcula en base a otras columnas de la tabla. Por ejemplo, considere esta tabla de órdenes de widgets:
- Número de pedido
- Número de cliente
- Precio unitario
- Cantidad
- Total
El total rompe con el cumplimiento de la norma 3NF porque se puede obtener multiplicando el precio unitario por la cantidad, en lugar de depender totalmente de la clave primaria. El total debe ser eliminado de la tabla para cumplir con el tercer formulario normal.
De hecho, como se deriva, es mejor no almacenarlo en la base de datos en absoluto, sino simplemente computarlo sobre la marcha cuando se realizan consultas a la base de datos. Por ejemplo, es posible que hayamos utilizado previamente esta consulta para recuperar los números de orden y los totales:
SELECT Número de pedido, Total
FROM WidgetOrders
Ahora utilice la siguiente consulta para obtener los mismos resultados sin violar las reglas de normalización:
SELECT Número de pedido, Precio unitario * Cantidad AS total
FROM WidgetOrders