Las relaciones entre tablas en SQL permiten organizar y conectar datos de diferentes tablas mediante claves. Existen tres tipos principales de relaciones: uno a uno, uno a muchos y muchos a muchos. Estas relaciones son fundamentales para mantener la integridad y la estructura de la base de datos.
Uno a Uno (1:1): Cada fila de una tabla está relacionada con una sola fila de otra tabla.
Uno a Muchos (1:N): Una fila de una tabla puede estar relacionada con múltiples filas de otra tabla.
Muchos a Muchos (M:N): Muchas filas de una tabla pueden estar relacionadas con muchas filas de otra tabla. Para implementar esta relación, se utiliza una tabla intermedia.
Imaginemos que estamos creando un sistema para gestionar estudiantes y cursos. Necesitamos dos tablas: estudiantes y cursos, y una tabla intermedia inscripciones para establecer la relación de muchos a muchos.
CREATE TABLE estudiantes (
id INT PRIMARY KEY,
nombre VARCHAR(100),
edad INT
); | id | nombre | edad |
|----|-----------------|------|
| 1 | Urian Viera | 20 |
| 2 | María González | 22 |
| 3 | Brenda Viera | 19 |
| 4 | Ana Martínez | 21 |
| 5 | Luis Fernández | 23 | CREATE TABLE cursos (
id INT PRIMARY KEY,
nombre VARCHAR(100),
creditos INT
); | id | nombre | creditos |
|----|-----------------|----------|
| 1 | Matemáticas | 3 |
| 2 | Historia | 4 |
| 3 | Ciencias | 3 |
| 4 | Lengua Española | 2 |
| 5 | Programación | 5 | CREATE TABLE inscripciones (
estudiante_id INT,
curso_id INT,
PRIMARY KEY (estudiante_id, curso_id),
FOREIGN KEY (estudiante_id) REFERENCES estudiantes(id),
FOREIGN KEY (curso_id) REFERENCES cursos(id)
); La tabla inscripciones conecta a los estudiantes con los cursos, permitiendo manejar inscripciones de manera eficiente y asegurando la integridad referencial entre las tablas estudiantes y cursos.
estudiante_id INT: Esta columna almacena el identificador del estudiante que se inscribe en un curso.curso_id INT: Esta columna almacena el identificador del curso al que el estudiante se inscribe.PRIMARY KEY (estudiante_id, curso_id): Define una clave primaria compuesta, asegurando que cada combinación de estudiante y curso sea única. Esto evita inscripciones duplicadas para el mismo estudiante en el mismo curso.FOREIGN KEY (estudiante_id) REFERENCES estudiantes(id): Establece una relación entre estudiante_id en la tabla inscripciones y id en la tabla estudiantes, garantizando que solo se puedan inscribir estudiantes existentes.FOREIGN KEY (curso_id) REFERENCES cursos(id): Similarmente, establece una relación entre curso_id en la tabla inscripciones y id en la tabla cursos, asegurando que solo se puedan inscribir en cursos existentes.1. Insertar datos en las tablasInsertamos algunos estudiantes y cursos:
INSERT INTO estudiantes (id, nombre, edad) VALUES
(1, 'Urian Viera', 20),
(2, 'María González', 22);
INSERT INTO cursos (id, nombre, creditos) VALUES
(1, 'Matemáticas', 3),
(2, 'Historia', 4); 2. Inscribir estudiantes a cursosAhora inscribimos a los estudiantes en los cursos:
INSERT INTO inscripciones (estudiante_id, curso_id) VALUES
(1, 1), -- Urian Viera se inscribe en Matemáticas
(1, 2), -- Urian Viera se inscribe en Historia
(2, 1); -- María González se inscribe en Matemáticas 3. Consultar inscripcionesPara ver qué cursos están inscritos los estudiantes, puedes realizar una consulta con un JOIN:
SELECT e.nombre AS estudiante, c.nombre AS curso
FROM inscripciones i
JOIN estudiantes e ON i.estudiante_id = e.id
JOIN cursos c ON i.curso_id = c.id; | estudiante | curso |
|------------------|-------------|
| Urian Viera | Matemáticas |
| Urian Viera | Historia |
| María González | Matemáticas | Al definir claves foráneas, asegúrate de que las filas en la tabla relacionada existan para mantener la integridad referencial.
Es posible establecer restricciones adicionales en las claves foráneas, como *ON DELETE CASCADE, que elimina automáticamente las filas relacionadas si se elimina la fila principal.