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:
  1. La tabla Estudiantes_Cursos ahora solo contiene la información específica de la relación entre estudiantes y cursos (la clave primaria compuesta estudiante_id y curso_id).
  2. La información sobre los cursos (nombre_curso y creditos_curso) se mueve a la tabla Cursos. Esto elimina la dependencia de nombre_curso y creditos_curso respecto a estudiante_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:
  1. La tabla Cursos ahora incluye un departamento_id que hace referencia a la tabla Departamentos.
  2. La información sobre los departamentos (nombre_departamento) se mantiene en la tabla Departamentos, eliminando así la dependencia de nombre_departamento respecto a curso_id en la tabla Cursos.

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;

    1. En este ejemplo, agrega una nueva columna fecha_contratacion a la tabla Empleados.
  • 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);

    1. Esto inserta un nuevo empleado en la tabla Empleados.
  • UPDATE: Para actualizar registros existentes en una tabla.

UPDATE Empleados
SET salario = 3200.00
WHERE empleado_id = 1;

    1. Esto actualiza el salario del empleado con empleado_id igual a 1 en la tabla Empleados.
  • DELETE: Para eliminar registros de una tabla.

DELETE FROM Empleados
WHERE empleado_id = 1;

    1. Esto elimina el empleado con empleado_id igual a 1 de la tabla Empleados.

Entradas relacionadas: