Normalización de Bases de Datos: 2FN, 3FN, DDL y DML con Ejemplos
Clasificado en Informática
Escrito el en español con un tamaño de 5,36 KB
Normalización de Bases de Datos: 2FN y 3FN
La normalización es un proceso fundamental en el diseño de bases de datos relacionales. Su objetivo es reducir la redundancia de datos y mejorar la integridad de la información. Aquí exploraremos la Segunda Forma Normal (2FN) y la Tercera Forma Normal (3FN), junto con ejemplos prácticos.
Segunda Forma Normal (2FN)
Una tabla está en 2FN si cumple con la Primera Forma Normal (1FN) y todos sus atributos no clave dependen completamente de la clave primaria.
Tercera Forma Normal (3FN)
Una tabla está en 3FN si cumple con la 2FN y ningún atributo no clave depende de otro atributo no clave.
Ejemplo para la Segunda Forma Normal (2FN)
- Tabla en 1FN (Primera Forma Normal): En la Primera Forma Normal (1FN), cada atributo contiene un solo valor y no hay repeticiones de grupos de columnas.
Ejemplo de tabla en 1FN:
CREATE TABLE Estudiantes_Cursos (
estudiante_id INT,
curso_id INT,
nombre_estudiante VARCHAR(50),
nombre_curso VARCHAR(50),
creditos_curso INT,
PRIMARY KEY (estudiante_id, curso_id)
);
- Tabla en 2FN (Segunda Forma Normal): Para cumplir con la 2FN, todos los atributos no clave deben depender completamente de la clave primaria (en este caso, estudiante_id y curso_id).
Para normalizar a 2FN, separamos la tabla en dos:
CREATE TABLE Estudiantes_Cursos (
estudiante_id INT,
curso_id INT,
PRIMARY KEY (estudiante_id, curso_id)
);
CREATE TABLE Cursos (
curso_id INT PRIMARY KEY,
nombre_curso VARCHAR(50),
creditos_curso INT
);
- En este ejemplo:
- La tabla
Estudiantes_Cursos
ahora solo contiene la información específica de la relación entre estudiantes y cursos (la clave primaria compuestaestudiante_id
ycurso_id
). - La información sobre los cursos (
nombre_curso
ycreditos_curso
) se mueve a la tablaCursos
. Esto elimina la dependencia denombre_curso
ycreditos_curso
respecto aestudiante_id
, cumpliendo así con la 2FN.
Ejemplo para la Tercera Forma Normal (3FN)
- Ejemplo para la Tercera Forma Normal (3FN): Para la 3FN, ningún atributo no clave debe depender de otro atributo no clave.
Tabla en 2FN (Estudiantes_Cursos y Cursos)
CREATE TABLE Estudiantes_Cursos (
estudiante_id INT,
curso_id INT,
PRIMARY KEY (estudiante_id, curso_id)
);
CREATE TABLE Cursos (
curso_id INT PRIMARY KEY,
nombre_curso VARCHAR(50),
creditos_curso INT,
departamento_id INT,
FOREIGN KEY (departamento_id) REFERENCES Departamentos(departamento_id)
);
Tabla de Departamentos
CREATE TABLE Departamentos (
departamento_id INT PRIMARY KEY,
nombre_departamento VARCHAR(50)
);
- En este ejemplo:
- La tabla
Cursos
ahora incluye undepartamento_id
que hace referencia a la tablaDepartamentos
. - La información sobre los departamentos (
nombre_departamento
) se mantiene en la tablaDepartamentos
, eliminando así la dependencia denombre_departamento
respecto acurso_id
en la tablaCursos
.
Sentencias DDL (Data Definition Language)
Las sentencias DDL se utilizan para definir la estructura de la base de datos.
- CREATE TABLE: Para crear una nueva tabla en la base de datos.
CREATE TABLE Empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(50),
apellido VARCHAR(50),
salario DECIMAL(10, 2)
);
- ALTER TABLE: Para modificar la estructura de una tabla existente.
ALTER TABLE Empleados
ADD fecha_contratacion DATE;
- En este ejemplo, agrega una nueva columna
fecha_contratacion
a la tablaEmpleados
.
- En este ejemplo, agrega una nueva columna
- DROP TABLE: Para eliminar una tabla de la base de datos.
DROP TABLE Empleados;
Sentencias DML (Data Manipulation Language)
Las sentencias DML se utilizan para manipular los datos dentro de la base de datos.
- INSERT INTO: Para insertar nuevos registros en una tabla.
INSERT INTO Empleados (empleado_id, nombre, apellido, salario)
VALUES (1, 'Juan', 'Perez', 3000.00);
- Esto inserta un nuevo empleado en la tabla
Empleados
.
- Esto inserta un nuevo empleado en la tabla
- UPDATE: Para actualizar registros existentes en una tabla.
UPDATE Empleados
SET salario = 3200.00
WHERE empleado_id = 1;
- Esto actualiza el salario del empleado con
empleado_id
igual a 1 en la tablaEmpleados
.
- Esto actualiza el salario del empleado con
- DELETE: Para eliminar registros de una tabla.
DELETE FROM Empleados
WHERE empleado_id = 1;
- Esto elimina el empleado con
empleado_id
igual a 1 de la tablaEmpleados
.
- Esto elimina el empleado con