Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

La tercera forma normal (3NF) Diseño de bases de datos

En esta lección, analizaremos la tercera forma normal (3NF) del modelo relacional y sus requisitos.

Trabajaremos con la estructura actual:

users

id first_name last_name
2 Sergio Iván
3 Iván Pérez
5 Víctor Sánchez

goods

id name
50 Plancha
30 Cafetera
20 Televisor
33 Portátil

order_items

id user_id address good_id price
8 2 México, Av. Reforma 50 70000.00
2 3 Bogotá, Cra. 15 30 2500000.00
7 5 Lima, Av. Arequipa 50 500000.00
4 5 Lima, Av. Arequipa 20 3300000.00
9 2 México, Av. Matamoros 33 10000000.00
6 2 México, Av. Matamoros 33 10000000.00

Ver en DB Fiddle

Tercera forma normal (3NF)

Para que una tabla esté en la tercera forma normal (3NF), debe cumplir con dos condiciones:

  • Estar en la segunda forma normal (2NF).
  • Todas las columnas no clave deben depender únicamente de la clave primaria, y no deben depender entre sí.

La tabla ya está en segunda forma normal (2NF), porque:

  • Cumple con los requisitos de la primera forma normal (1NF).
  • Todos los atributos que no son clave dependen completamente de la clave primaria.

Ahora, vamos a enfocarnos en el segundo requisito: asegurarnos de que las columnas no clave dependan únicamente de la clave primaria y no unas de otras.

Dependencia de las columnas de la clave primaria, pero no entre sí

El costo del pedido depende del precio del producto. A su vez, el precio del producto depende del propio producto, es decir, del good_id. Para llevar la tabla a la tercera forma, debemos llevar el precio al producto:

goods

id name price
50 Plancha 70000.00
30 Cafetera 2500000.00
20 Televisor 3300000.00
33 Portátil 10000000.00

Nuestra tabla adquiere este aspecto:

order_items

id user_id address good_id
8 2 México, Av. Reforma 50
2 3 Bogotá, Cra. 15 30
7 5 Lima, Av. Arequipa 50
4 5 Lima, Av. Arequipa 20
9 2 México, Av. Matamoros 33
6 2 México, Av. Matamoros 33

Ver en DB Fiddle

Por un lado, hemos realizado la mayor parte de la normalización necesaria, por otro, la nueva estructura tiene un gran inconveniente. El precio del producto es algo que puede cambiar, pero el costo de la compra que hicimos en el pasado, no. Cuando el precio de un producto cambia, el costo de todas las compras realizadas que incluían ese producto también cambia. Desde el punto de vista de la contabilidad y el historial de compras, esto es inaceptable.

Esto significa que el precio del producto debe ser copiado en la tabla order_items. Pero también se necesita en la tabla goods. Primero que nada, para exhibir en el sitio web.

La dirección también depende del usuario, pero de una manera más compleja. Un usuario puede tener varias direcciones. Teniendo en cuenta todo lo que hemos hablado de las formas normales, no podemos transferir las direcciones a la tabla de usuarios. No podemos almacenar varios valores en una columna y no podemos duplicar registros, ya que se violaría la unicidad de la clave primaria.

La solución correcta es tener una tabla propia para las direcciones. En ella, la dirección estará asociada con el usuario y en lugar del campo address en la tabla de pedidos, aparecerá el campo user_address_id.

Conclusiones

En esta lección, hemos estudiado la tercera forma normal. Ahora tus conocimientos sobre las formas en el modelo relacional son suficientes para trabajar con las tareas más comunes en las bases de datos.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY