La Segunda Forma Normal (2FN) es una de las reglas de normalización en bases de datos que busca eliminar redundancias y asegurar que la estructura de la base de datos sea más eficiente. Para que una base de datos esté en 2FN, debe cumplir con los siguientes dos requisitos:
-
Estar en la Primera Forma Normal (1FN): Esto significa que la tabla no debe tener atributos multivaluados, y todos los valores de las columnas deben ser atómicos (indivisibles).
-
Eliminar dependencias parciales: En una tabla que está en 2FN, cada columna no clave debe depender completamente de la clave primaria y no solo de una parte de ella. Esto significa que, si la clave primaria es compuesta (es decir, tiene más de una columna), ninguna columna no clave debe depender solo de una parte de la clave primaria.
Ejemplo:
Supongamos que tenemos una tabla de estudiantes y sus cursos con una clave primaria compuesta por (ID_Alumno, ID_Curso):
ID_Alumno | ID_Curso | Nombre_Alumno | Nombre_Curso | Profesor |
---|---|---|---|---|
1 | 101 | Juan Pérez | Matemáticas | López |
1 | 102 | Juan Pérez | Historia | García |
2 | 101 | Ana López | Matemáticas | López |
En esta tabla, la clave primaria es la combinación de ID_Alumno e ID_Curso.
Problema:
- Nombre_Alumno depende solo de ID_Alumno (no de la combinación completa de la clave primaria).
- Nombre_Curso depende solo de ID_Curso (no de la clave primaria).
- Profesor depende solo de ID_Curso (no de la clave primaria).
Este es un ejemplo de dependencias parciales, lo que viola la 2FN.
Solución para cumplir la 2FN:
-
Crear una tabla para los alumnos:
ID_Alumno Nombre_Alumno 1 Juan Pérez 2 Ana López -
Crear una tabla para los cursos:
ID_Curso Nombre_Curso Profesor 101 Matemáticas López 102 Historia García -
Crear una tabla de relación entre alumnos y cursos:
ID_Alumno ID_Curso 1 101 1 102 2 101
MÁS EJEMPLOS
Está la siguiente tabla en 2FN?
Estudiante_ID | Nombre | Curso |
---|---|---|
101 | Ana | Matemáticas |
101 | Ana | Historia |
102 | Luis | Química |
102 | Luis | Biología |
103 | Marta | Física |
103 | Marta | Química |
103 | Marta | Historia |
La clave primaria parece ser la combinación de Estudiante_ID y Curso, ya que cada estudiante puede estar inscrito en varios cursos. Así, la clave primaria sería (Estudiante_ID, Curso).
Ahora, vamos a revisar las dependencias:
- Nombre depende solo de Estudiante_ID, no de la combinación completa de la clave primaria.
- Esto significa que Nombre depende de solo una parte de la clave primaria (Estudiante_ID), lo cual es una dependencia parcial.
Conclusión:
La tabla no está en 2FN porque Nombre depende solo de Estudiante_ID, no de la combinación completa de la clave primaria (Estudiante_ID, Curso). Para cumplir con 2FN, se debe eliminar esta dependencia parcial.
Solución:
Podemos dividir la tabla en dos tablas para cumplir con la 2FN:
-
Tabla de estudiantes:
Estudiante_ID Nombre 101 Ana 102 Luis 103 Marta -
Tabla de cursos:
Estudiante_ID Curso 101 Matemáticas 101 Historia 102 Química 102 Biología 103 Física 103 Química 103 Historia
De esta manera, hemos eliminado la dependencia parcial (ya que ahora Nombre depende solo de Estudiante_ID, y no de la combinación de Estudiante_ID y Curso), y la base de datos cumple con la Segunda Forma Normal (2FN).
OTRO EJEMPLO
SOLUCIÓN
Otro ejemplo:
SOLUCIÓN
Otro ejemplo más
SOLUCIÓN
debemos recordar que:
Paso 1: Verificar si está en Primera Forma Normal (1FN)
La tabla está en 1FN porque:
- Todos los valores de las columnas son atómicos (no hay listas ni valores compuestos).
- No hay valores duplicados en una columna.
Paso 2: Dividir la tabla para cumplir con 2FN
Para cumplir con la 2FN, debemos eliminar las dependencias parciales, es decir debemos crear las divisiones precisas para que cada columna no clave debe depender directamente de su clave primaria, no sólo de una parte de ella si esta es compuesta.
La Primera Forma Normal (1NF) es un concepto fundamental en la teoría de bases de datos relacionales. Una base de datos está en Primera Forma Normal (1NF) si cumple con las siguientes condiciones:
-
Los atributos son atómicos (no pueden ser divididos): Esto significa que cada valor en una columna debe ser indivisible. No puede haber listas, conjuntos o valores compuestos en una sola celda.
-
No hay duplicados de filas: Cada fila debe ser única, es decir, debe haber una clave primaria o un identificador único para cada registro.
-
Cada campo contiene un solo valor: No se permiten grupos de atributos repetitivos o múltiples valores en una celda. Por ejemplo, si se tiene una lista de teléfonos en una celda, se debe separar esa lista en varias filas o tablas.
Ejemplo:
Supón que tienes una tabla de Estudiantes con la siguiente estructura:
ID | Nombre | Teléfonos |
---|---|---|
1 | Juan | 1234, 5678 |
2 | María | 2345, 6789, 1122 |
Esta tabla no está en 1NF porque el campo "Teléfonos" contiene múltiples valores (una lista de números).
Para convertirla a 1NF, deberíamos crear una tabla donde cada teléfono se represente en una fila separada:
ID | Nombre | Teléfono |
---|---|---|
1 | Juan | 1234 |
1 | Juan | 5678 |
2 | María | 2345 |
2 | María | 6789 |
2 | María | 1122 |
Ahora, la tabla está en Primera Forma Normal (1NF) porque cada celda contiene un solo valor atómico y no hay listas ni conjuntos.
Ejemplo : Tabla de Pedidos
Imagina una tabla que registra pedidos de clientes, donde cada pedido puede contener varios productos. Supongamos que la tabla original es la siguiente:
Pedido_ID | Cliente | Productos |
---|---|---|
1 | Juan | Camisa, Pantalones |
2 | María | Zapatos, Sombrero |
3 | Carlos | Pantalones, Chaqueta |
Esta tabla no está en 1NF porque la columna "Productos" contiene múltiples valores (varios productos) en una sola celda.
Para poner la tabla en 1NF, debemos descomponer la columna "Productos" en filas separadas. Así que la tabla corregida se verá de esta manera:
Pedido_ID | Cliente | Producto |
---|---|---|
1 | Juan | Camisa |
1 | Juan | Pantalones |
2 | María | Zapatos |
2 | María | Sombrero |
3 | Carlos | Pantalones |
3 | Carlos | Chaqueta |
Ahora, cada celda contiene solo un valor, y la tabla está en 1NF.
Ejemplo: Tabla de Cursos de Estudiantes
Supón que tienes una tabla que almacena la información de los cursos que están tomando los estudiantes, donde cada estudiante puede estar inscrito en varios cursos:
Estudiante_ID | Nombre | Cursos |
---|---|---|
101 | Ana | Matemáticas, Historia |
102 | Luis | Química, Biología |
103 | Marta | Física, Química, Historia |
En esta tabla, la columna "Cursos" contiene múltiples valores para un solo estudiante, lo que viola la regla de la Primera Forma Normal (1NF).
Para convertir esta tabla a 1NF, debemos separar los cursos en filas individuales:
Estudiante_ID | Nombre | Curso |
---|---|---|
101 | Ana | Matemáticas |
101 | Ana | Historia |
102 | Luis | Química |
102 | Luis | Biología |
103 | Marta | Física |
103 | Marta | Química |
103 | Marta | Historia |
Con esta reorganización, la tabla ahora está en Primera Forma Normal (1NF), ya que cada celda contiene un solo valor, y no hay listas ni grupos de valores.
Ejemplo: Tabla de Clientes y Direcciones
Imagina una tabla donde los clientes pueden tener múltiples direcciones, pero en la tabla original se guardan todas las direcciones en una sola columna.
Cliente_ID | Nombre | Direcciones |
---|---|---|
1 | Juan | Calle Falsa 123, Av. Libertad 456 |
2 | María | Calle Real 789 |
3 | Carlos | Calle Luna 101, Calle Sol 202 |
En este caso, la columna "Direcciones" contiene varias direcciones para un solo cliente, lo cual no está en 1NF.
Para cumplir con la Primera Forma Normal (1NF), debemos separar las direcciones en filas distintas. El resultado sería el siguiente:
Cliente_ID | Nombre | Dirección |
---|---|---|
1 | Juan | Calle Falsa 123 |
1 | Juan | Av. Libertad 456 |
2 | María | Calle Real 789 |
3 | Carlos | Calle Luna 101 |
3 | Carlos | Calle Sol 202 |
Ahora, la tabla está en 1NF, ya que cada celda contiene un solo valor y no hay listas de direcciones.
Ejemplo : Tabla de Empleados y Proyectos
Imagina una tabla donde los empleados están trabajando en múltiples proyectos, pero en la tabla original se listan todos los proyectos de un empleado en una sola celda.
Empleado_ID | Nombre | Proyectos |
---|---|---|
101 | Alicia | Proyecto A, Proyecto B |
102 | Roberto | Proyecto C |
103 | Ana | Proyecto D, Proyecto E, Proyecto F |
Aquí, la columna "Proyectos" contiene múltiples proyectos para un solo empleado, lo cual no cumple con la Primera Forma Normal (1NF).
Para cumplir con la 1NF, debemos dividir los proyectos en filas separadas, como se muestra a continuación:
Empleado_ID | Nombre | Proyecto |
---|---|---|
101 | Alicia | Proyecto A |
101 | Alicia | Proyecto B |
102 | Roberto | Proyecto C |
103 | Ana | Proyecto D |
103 | Ana | Proyecto E |
103 | Ana | Proyecto F |
De esta forma, cada celda contiene un solo valor, y la tabla cumple con la Primera Forma Normal (1NF).