0Pricing
SQL Interview Prep · Lección

Normalización hasta la 3NF

Primera, segunda y tercera forma normal, junto con las anomalías que eliminan.

Normalización hasta la 3NF es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

Por qué los entrevistadores preguntan sobre la normalización

La normalización es un concepto fundamental del modelado de bases de datos, y los entrevistadores la utilizan para comprobar si comprende la integridad de los datos en el nivel de diseño. La pregunta suele plantearse así: «¿Qué es la normalización y por qué es importante?»

La normalización es el proceso de organizar columnas y tablas para reducir la redundancia y evitar anomalías de actualización, inserción y eliminación. Cada forma normal (1NF, 2NF, 3NF) añade una regla más estricta.

Una respuesta sólida menciona las anomalías que elimina la normalización, no solo las definiciones de los libros de texto.

Las tres anomalías

Antes de estudiar las formas normales, debe conocer los problemas que resuelven. Una tabla mal diseñada que almacena todo en un solo lugar presenta tres anomalías:

  • Anomalía de actualización: el mismo dato se almacena en muchas filas, por lo que un cambio debe aplicarse a todas o los datos dejan de ser coherentes.
  • Anomalía de inserción: no puede añadir un dato sin proporcionar también información no relacionada (p. ej., no puede añadir un producto sin un pedido).
  • Anomalía de eliminación: al eliminar una fila, borra accidentalmente otro dato independiente.

Si puede detectar estas anomalías en una tabla de ejemplo, podrá justificar cada paso de la normalización.

Una tabla inicial sin normalizar

Este es un ejemplo clásico de entrevista: una tabla amplia que mezcla pedidos, clientes y productos. Observe que el correo electrónico del cliente y el precio del producto se repiten en varias filas. Ahí es donde aparecen las anomalías.

En la entrevista, su tarea consiste en llevar esta tabla hasta 3NF y explicar cada división.

-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
  order_id     INT,
  customer_id  INT,
  customer_email VARCHAR(255),
  product_id   INT,
  product_name VARCHAR(100),
  unit_price   DECIMAL(10,2),
  quantity     INT
);

Primera forma normal (1NF)

1NF exige que cada columna contenga un único valor atómico y que no haya grupos repetitivos ni arrays dentro de una celda.

Una tabla infringe 1NF si una columna almacena una lista separada por comas como 'phone1, phone2' o si tiene columnas product1, product2, product3.

La solución: asigne a cada valor su propia fila. El entrevistador quiere oír: «valores atómicos, ningún grupo repetitivo y una clave que identifique cada fila».

-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'

-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
  customer_id INT,
  phone       VARCHAR(20),
  PRIMARY KEY (customer_id, phone)
);

Dependencias funcionales

Para explicar 2NF y 3NF debe utilizar el término dependencia funcional. Escribimos A -> B para indicar que «A determina B»: para cada valor de A existe exactamente un valor de B.

En nuestra tabla de pedidos:

  • customer_id -> customer_email
  • product_id -> product_name, unit_price
  • order_id, product_id -> quantity

En realidad, la normalización consiste en asegurarse de que cada columna que no sea una clave dependa de la clave completa y de nada más que la clave.

Segunda forma normal (2NF)

2NF se aplica cuando la clave primaria es compuesta. Impide que una columna que no sea clave dependa únicamente de una parte de la clave (una dependencia parcial).

La clave de nuestra línea de pedido es (order_id, product_id). Sin embargo, product_name y unit_price dependen solo de product_id, no de la clave completa. Se trata de una dependencia parcial, por lo que infringe 2NF.

La solución: traslade los atributos de los productos a una tabla products cuya clave sea product_id.

CREATE TABLE products (
  product_id   INT PRIMARY KEY,
  product_name VARCHAR(100),
  unit_price   DECIMAL(10,2)
);

CREATE TABLE order_items (
  order_id   INT,
  product_id INT,
  quantity   INT,
  PRIMARY KEY (order_id, product_id),
  FOREIGN KEY (product_id) REFERENCES products(product_id)
);

Tercera forma normal (3NF)

3NF elimina las dependencias transitivas: una columna que no es clave depende de otra columna que tampoco es clave, en lugar de depender directamente de la clave.

Suponga que una tabla orders contiene customer_id y customer_email. En este caso, order_id -> customer_id -> customer_email. El correo electrónico depende de la clave únicamente a través de customer_id, lo que constituye una dependencia transitiva.

La solución: separe los clientes en su propia tabla. Ahora, las columnas que no son claves de cada tabla dependen únicamente de su clave.

CREATE TABLE customers (
  customer_id    INT PRIMARY KEY,
  customer_email VARCHAR(255)
);

CREATE TABLE orders (
  order_id    INT PRIMARY KEY,
  customer_id INT,
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

La regla mnemotécnica de una línea

A los entrevistadores les gusta que un candidato pueda resumir 3NF en una sola frase. La formulación clásica es:

«Cada columna que no sea clave debe depender de la clave, de toda la clave y de nada más que la clave».

  • La clave -> 1NF (existe una clave y hay valores atómicos).
  • Toda la clave -> 2NF (no hay dependencia parcial).
  • Nada más que la clave -> 3NF (no hay dependencia transitiva).

Esta sola frase le permite reconstruir las tres formas cuando sea necesario.

BCNF: la pregunta de seguimiento

Un entrevistador perspicaz puede preguntarle por la forma normal de Boyce-Codd (BCNF), una versión más estricta de 3NF.

BCNF exige que, para toda dependencia funcional X -> Y, X sea una superclave. 3NF permite una excepción poco frecuente cuando el atributo dependiente forma parte de una clave candidata; BCNF elimina incluso esa excepción.

En la práctica, no encontrará muchas infracciones de BCNF, pero mencionarla y decir «BCNF es 3NF sin excepciones para los atributos primos» demuestra un conocimiento profundo.

Cuándo NO normalizar

Una respuesta de nivel sénior reconoce el equilibrio entre ventajas y costes. La normalización mejora la integridad, pero puede perjudicar el rendimiento de lectura porque responder a una consulta requiere más joins.

La desnormalización deliberada es aceptable cuando:

  • La carga de trabajo tiene muchas lecturas y los joins son el cuello de botella.
  • Está creando una capa de análisis o informes (los esquemas en estrella se tratarán más adelante).
  • Puede mantener sincronizada la copia redundante (triggers, ETL, vistas materializadas).

Diga: «Normalice para garantizar la integridad en OLTP; desnormalice deliberadamente para acelerar las lecturas en OLAP».

Recorrido en la pizarra

Integre todo. En una entrevista en vivo, si le proporcionan una tabla desordenada:

  • Indique la clave candidata y enumere las dependencias funcionales.
  • Compruebe la atomicidad y los grupos repetitivos (1NF).
  • Si la clave es compuesta, compruebe si existen dependencias parciales (2NF).
  • Compruebe las dependencias entre columnas que no son claves (3NF).
  • Dibuje las tablas resultantes con sus claves primarias y foráneas.

Explicar estos pasos en voz alta es exactamente lo que evalúa el entrevistador.

Comprobación rápida

Ponga a prueba su comprensión de las formas normales.

Resumen: la normalización hasta 3NF

Ahora puede responder de principio a fin a la pregunta habitual de entrevista sobre normalización:

  • La normalización elimina las anomalías de actualización, inserción y eliminación al reducir la redundancia.
  • 1NF: valores atómicos, sin grupos repetitivos.
  • 2NF: no hay dependencia parcial de una clave compuesta.
  • 3NF: no hay dependencia transitiva (entre una columna no clave y otra que tampoco es clave).
  • Puede resumirse como «la clave, toda la clave y nada más que la clave».
  • BCNF refuerza 3NF; desnormalice deliberadamente para acelerar las lecturas en cargas analíticas.

Preguntas frecuentes

¿La lección «Normalización hasta la 3NF» es gratis?

Sí — el texto completo de «Normalización hasta la 3NF» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Normalización hasta la 3NF»?

Primera, segunda y tercera forma normal, junto con las anomalías que eliminan. Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Normalización hasta la 3NF»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Normalización hasta la 3NF
  2. Modelado ER y cardinalidad de relaciones
  3. Esquema de estrella y diseño de almacenes de datos
  4. Colección completa de problemas de simulación de entrevista
← Volver a SQL Interview Prep