Cómo usar claves foráneas en MySQL

¡Hola, bienvenid@s a todos! En el diseño de bases de datos relacionales, uno de los aspectos más importantes es establecer relaciones entre tablas. MySQL, uno de los sistemas de gestión de bases de datos más utilizados, permite definir relaciones mediante claves foráneas. En este artículo, exploraremos qué son las claves foráneas, cómo funcionan y cómo implementarlas correctamente para optimizar el diseño de tu base de datos.

¡Empecemos!

¿Qué son las claves foráneas?

Una clave foránea (“foreign key”) es una columna o conjunto de columnas en una tabla que se utiliza para establecer y reforzar un vínculo entre los datos de dos tablas. Generalmente, una clave foránea en una tabla apunta a una clave primaria en otra tabla. Este tipo de relación permite mantener la integridad referencial, asegurando que los datos relacionados sean consistentes.

Por ejemplo, en un sistema de gestión de estudiantes y cursos, podrías tener dos tablas:

  1. Estudiantes:

    • id (clave primaria)

    • nombre

    • email

  2. Cursos:

    • id (clave primaria)

    • nombre

    • estudiante_id (clave foránea que apunta a id en la tabla Estudiantes)

Ventajas de usar claves foráneas

  • Integridad de datos: Garantizan que los valores en las columnas relacionadas sean válidos.

  • Relaciones claras: Hacen que el esquema de la base de datos sea más comprensible.

  • Evitan errores: Impiden la inserción de datos huérfanos o inconsistentes.

Tipos de relaciones entre tablas

En MySQL, las relaciones se clasifican principalmente en tres tipos:

  1. Uno a uno (1:1): Cada registro en la tabla A está relacionado con un solo registro en la tabla B.

    • Ejemplo: Una tabla de usuarios y una tabla de perfiles donde cada usuario tiene un solo perfil.

  2. Uno a muchos (1:N): Un registro en la tabla A está relacionado con varios registros en la tabla B.

    • Ejemplo: Un estudiante puede estar inscrito en varios cursos.

  3. Muchos a muchos (N:M): Varios registros en la tabla A están relacionados con varios registros en la tabla B mediante una tabla intermedia.

    • Ejemplo: Estudiantes y asignaturas, donde un estudiante puede inscribirse en varias asignaturas y una asignatura puede tener varios estudiantes.

Cómo crear claves foráneas en MySQL

Veamos cómo implementar una relación “uno a muchos” entre las tablas Estudiantes y Cursos.

Paso 1: Crear las tablas

Primero, crea la tabla principal con su clave primaria:

CREATE TABLE Estudiantes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

Ahora, crea la tabla secundaria con la clave foránea:

CREATE TABLE Cursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    estudiante_id INT,
    FOREIGN KEY (estudiante_id) REFERENCES Estudiantes(id)
);
Paso 2: Insertar datos

Inserta algunos datos en la tabla Estudiantes:

INSERT INTO Estudiantes (nombre, email) VALUES
('Juan Pérez', 'juan.perez@example.com'),
('María López', 'maria.lopez@example.com');

Luego, agrega datos en la tabla Cursos relacionándolos con estudiantes existentes:

INSERT INTO Cursos (nombre, estudiante_id) VALUES
('Matemáticas', 1),
('Historia', 2);
Paso 3: Consultar las relaciones

Para obtener datos combinados de ambas tablas, usa una consulta JOIN:

SELECT Cursos.nombre AS curso, Estudiantes.nombre AS estudiante
FROM Cursos
JOIN Estudiantes ON Cursos.estudiante_id = Estudiantes.id;

Reglas importantes al usar claves foráneas

  1. Compatibilidad de tipos de datos: Asegúrate de que la clave primaria y la clave foránea tengan el mismo tipo de datos.

  2. Integridad referencial: Define acciones como ON DELETE CASCADE o ON UPDATE CASCADE para manejar los cambios en los datos relacionados.

Ejemplo con ON DELETE CASCADE:

CREATE TABLE Cursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    estudiante_id INT,
    FOREIGN KEY (estudiante_id) REFERENCES Estudiantes(id) ON DELETE CASCADE
);

En este caso, si eliminas un estudiante, todos los cursos relacionados también se eliminarán automáticamente.

Con esto concluimos la clase de crear tablas en MySQL. Si tienes alguna duda o consulta déjanos un mensaje para aclarar tus dudas.

¡Te espero en la próxima clase!

Victor Peña

Victor Peña

Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.