CodeGym /Cursos /SQL SELF /Principios de la tercera forma normal (3NF)

Principios de la tercera forma normal (3NF)

SQL SELF
Nivel 25 , Lección 3
Disponible

La tercera forma normal (3NF) es un paso más para poner orden en nuestros datos. En resumen, una tabla está en 3NF si:

  1. Ya está en segunda forma normal (2NF).
  2. Todos los atributos que no son clave dependen solo de la clave primaria y de nada más (¡nada de dependencias transitivas!).

En otras palabras, la 3NF exige que todos los datos de la tabla estén directamente relacionados con su clave primaria y no dependan de otros atributos que no sean clave.

Una dependencia transitiva aparece si el atributo A depende del atributo B, y el atributo B depende del atributo C, creando una cadena de dependencias A → B → C. Por ejemplo, "Empleado" depende de "Departamento", y "Departamento" depende de "Ubicación". Así que "Empleado" depende transitivamente de "Ubicación".

Ejemplo de violación de la 3NF

Supón que tenemos una tabla employees que guarda datos de empleados:

employee_id name department department_manager
1 Otto Lin Marketing Leo Zhang
2 Alex Song Finance Maria Chi
3 Anna Ming Finance Maria Chi

Aquí:

  • employee_id — clave primaria.
  • department y department_manager — atributos que no son clave.

A primera vista todo parece bien, pero si miramos de cerca, hay un problema: department_manager no depende de employee_id, sino de department. Así que tenemos una dependencia transitiva: employee_id → department → department_manager.

Problemas que pueden surgir

Si cambiamos el nombre del jefe de un departamento ("Finance"), tendremos que actualizar todas las filas donde aparece ese departamento. Si por accidente se nos olvida actualizar alguna, los datos se vuelven inconsistentes. Es un dolor de cabeza que se puede evitar.

Llevar la tabla a 3NF

Para eliminar las dependencias transitivas, vamos a dividir la tabla en dos: una guardará datos de empleados y la otra de departamentos.

Tabla employees

employee_id name department
1 Otto Lin Marketing
2 Alex Song Finance
3 Anna Ming Finance

Tabla departments

department department_manager
Marketing Leo Zhang
Finance Maria Chi

Ahora todo está bien estructurado y cada tabla hace lo suyo:

  1. La tabla employees guarda datos de empleados.
  2. La tabla departments guarda datos de departamentos y sus managers.

Si el manager de un departamento cambia, solo tenemos que actualizar una fila en la tabla departments, no en todos los registros de empleados.

¿Cómo saber si una tabla viola la 3NF?

Para saber si una tabla viola la 3NF, revisa:

  1. ¿Hay dependencias transitivas en la tabla? Por ejemplo, el atributo A depende del atributo B, que depende del atributo C.
  2. ¿Todos los atributos que no son clave dependen directamente de la clave primaria? Si algo depende de otro atributo que no es clave, la tabla no está en 3NF.

Ejemplo práctico: tienda

Veamos la tabla sales, que contiene datos de ventas:

sale_id product_name product_price customer_name
1 Teléfono 20 000 Otto Lin
2 Portátil 50 000 Alex Song
3 Teléfono 20 000 Anna Ming

Aquí se ve claramente la redundancia: la información del precio del producto se repite en cada venta. Si el precio cambia, los datos se vuelven inconsistentes al instante.

Para arreglar la violación de la 3NF, vamos a dividir la tabla en dos:

  1. La tabla sales guardará la info de las ventas.
  2. La tabla products — datos de productos y sus precios.

Tabla sales

sale_id product_id customer_name
1 1 Otto Lin
2 2 Alex Song
3 1 Anna Ming

Tabla products

product_id product_name product_price
1 Teléfono 20 000
2 Portátil 50 000

Ahora, si el precio de un producto cambia, solo actualizamos una fila en la tabla products y los datos siguen siendo consistentes.

Ejercicio práctico

Aquí tienes un reto: tienes una tabla students_courses así:

student_id student_name course_name teacher_name
1 Otto Lin Matemáticas Maria Chi
2 Alex Song Programación Leo Zhang
1 Otto Lin Programación Leo Zhang

Divide la tabla para que cumpla la 3NF. Pista: tienes que crear tres tablas (students, courses, teachers) y enlazarlas bien.

¿Por qué es importante cumplir la 3NF?

¿Por qué molestarse con la tercera forma normal (3NF)? Porque de verdad te hace la vida más fácil. Cuando las tablas están en 3NF, los datos son más limpios — nada de duplicados innecesarios, así que hay menos riesgo de romper algo sin querer. Las actualizaciones son más rápidas y sencillas, porque todo está en un solo sitio y no copiado por todas partes.

Además, la estructura de la base se vuelve más flexible. Si quieres añadir un campo nuevo o cambiar uno viejo, no tienes que rehacer todo el sistema.

Peeeero, como en toda buena historia, hay un pero: si te pasas normalizando, puedes acabar con un montón de tablas pequeñitas y consultas complicadas con muchos JOINs. A veces eso puede ralentizar las cosas. Así que lo importante es el equilibrio. Donde haga falta — normaliza, y donde es más fácil dejar un poco de redundancia — no te asustes.

Más adelante vamos a profundizar: aprenderemos a crear relaciones entre tablas y a montar bases de datos que sean cómodas y fiables. ¡Vamos a por un diseño de base de datos top!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION