Repaso
English

¿Cómo modelas una relación muchos a muchos, por ejemplo alumnos y cursos?

Opciones

  1. Guardando una lista de ids de cursos en una columna de la tabla de alumnos
  2. Creando una tabla de unión con dos foreign keys, como enrollments (Opción correcta)
  3. Duplicando la tabla de alumnos por cada curso
  4. No se puede modelar en una base de datos relacional

Respuesta

Creando una tabla de unión enrollments(student_id, course_id) con dos foreign keys

Por qué

Un alumno cursa muchos cursos y un curso tiene muchos alumnos. Una columna relacional no puede guardar una lista, así que creas una tercera tabla en medio.

enrollments(student_id, course_id, enrolled_at): cada fila enlaza un alumno con un curso. La pareja (student_id, course_id) suele ser su primary key, lo que evita duplicados.

La tabla de unión también puede guardar datos de la relación (fecha, nota).

CREATE TABLE enrollments (
    student_id INT REFERENCES students(id),
    course_id  INT REFERENCES courses(id),
    enrolled_at DATE,
    PRIMARY KEY (student_id, course_id)
);

Recuerda

Muchos a muchos = tabla de unión con dos foreign keys.

Términos clave

Practica esta pregunta en Repaso