Cómo Establecer Relaciones entre Tablas en SQL: Guía Completa

¿Qué son las relaciones entre tablas en SQL?

  Relaciones entre tablas en SQL

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.

Tipos de relaciones

  Relaciones entre tablas en SQL

  1. Uno a Uno (1:1): Cada fila de una tabla está relacionada con una sola fila de otra tabla.

  2. Uno a Muchos (1:N): Una fila de una tabla puede estar relacionada con múltiples filas de otra tabla.

  3. 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.

  Conceptos Clave

  • Clave Primaria (Primary Key): Un campo o combinación de campos que identifican de manera única cada fila en una tabla.
  • Clave Foránea (Foreign Key): Un campo en una tabla que establece una relación con la clave primaria de otra tabla.

Ejemplo Práctico

Definición de Tablas

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.

Tabla: estudiantes

sql
CREATE TABLE estudiantes (
  id INT PRIMARY KEY,
  nombre VARCHAR(100),
  edad INT
);

Respuesta:

bash
| 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   |

Tabla: cursos

sql
CREATE TABLE cursos (
  id INT PRIMARY KEY,
  nombre VARCHAR(100),
  creditos INT
);

Respuesta:

bash
| id | nombre          | creditos |
|----|-----------------|----------|
| 1  | Matemáticas     | 3        |
| 2  | Historia        | 4        |
| 3  | Ciencias        | 3        |
| 4  | Lengua Española  | 2       |
| 5  | Programación    | 5        |

Tabla: inscripciones (tabla intermedia)

Tabla: cursos

sql
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)
);
  Importante

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.

Relaciones en Acciones

1. Insertar datos en las tablas

Insertamos algunos estudiantes y cursos:

sql
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 cursos

Ahora inscribimos a los estudiantes en los cursos:

sql
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 inscripciones

Para ver qué cursos están inscritos los estudiantes, puedes realizar una consulta con un JOIN:

sql
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;

Respuesta:

bash
| estudiante      | curso        |
|------------------|-------------|
| Urian Viera      | Matemáticas |
| Urian Viera      | Historia    |
| María González   | Matemáticas |
  Consideraciones Importantes

  • 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.