La tercera forma normal (3NF) es un paso más para poner orden en nuestros datos. En resumen, una tabla está en 3NF si:
- Ya está en segunda forma normal (2NF).
- 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.departmentydepartment_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:
- La tabla
employeesguarda datos de empleados. - La tabla
departmentsguarda 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:
- ¿Hay dependencias transitivas en la tabla? Por ejemplo, el atributo A depende del atributo B, que depende del atributo C.
- ¿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:
- La tabla
salesguardará la info de las ventas. - 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!
GO TO FULL VERSION