CodeGym /Cursos /SQL SELF /Creando la tabla students y su relación con...

Creando la tabla students y su relación con la tabla courses

SQL SELF
Nivel 20 , Lección 0
Disponible

Vamos a dedicarle un poco de tiempo a repasar lo que ya hemos visto. Paso a paso, vamos a desmenuzar todo lo que pasa aquí. Más adelante habrá un montón de cosas que se basan en esto, así que mejor que lo tengas clarísimo y sepas qué hace cada comando.

Repasemos de nuevo nuestro ejemplo con estudiantes y cursos. Desde el principio. Desde la creación de las tablas hasta entender qué pasa en cada paso. ¿Listo?

Ahora vamos a crear la tabla students, que va a guardar info sobre los estudiantes, y la vamos a conectar con la tabla courses usando una clave foránea. Así vas a ver cómo se usan las claves foráneas para modelar relaciones entre entidades.

Creando la tabla students

La tabla students va a guardar info sobre los estudiantes: su identificador único, nombre y fecha de nacimiento. La vamos a crear usando el comando CREATE TABLE.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- Clave única para cada registro
    name TEXT NOT NULL,            -- Nombre del estudiante (campo obligatorio)
    birth_date DATE                -- Fecha de nacimiento del estudiante
);

¿Qué está pasando aquí?

  1. student_id SERIAL PRIMARY KEY: Es el identificador único para cada estudiante. El tipo SERIAL crea un campo autoincremental, y PRIMARY KEY asegura que el identificador sea único para cada fila.
  2. name TEXT NOT NULL: Campo para el nombre del estudiante. Ponemos NOT NULL para que no se pueda insertar ningún registro sin nombre.
  3. birth_date DATE: Campo para guardar la fecha de nacimiento. El tipo de dato DATE nos ayuda a trabajar con fechas.

Si la tabla fuera una persona, student_id sería su DNI, name es el nombre obvio, y birth_date eso que a veces escondemos, pero para la base de datos es importante.

Creando la tabla courses

Ahora vamos a crear la tabla que guarda info sobre los cursos. Va a tener el identificador del curso, su nombre y una descripción.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificador único del curso
    title TEXT NOT NULL,           -- Nombre del curso (campo obligatorio)
    description TEXT               -- Descripción del curso
);

¿Qué está pasando aquí?

  1. course_id SERIAL PRIMARY KEY: Igual que antes, es un campo autoincremental que crea un identificador único para cada curso.
  2. title TEXT NOT NULL: Campo para el nombre del curso. Ponemos NOT NULL porque es lógico que todo curso tenga nombre.
  3. description TEXT: Campo para una breve descripción del curso. Es opcional, puede estar vacío (sin NOT NULL).

Un curso sin nombre es como un libro sin portada. ¡Pero la base de datos no lo va a permitir!

Relacionando la tabla students con la tabla courses

Ahora imagina que cada estudiante solo puede estar inscrito en un curso. Para eso, vamos a añadir una clave foránea en la tabla courses que apunte al identificador del estudiante en la tabla students.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificador único del curso
    title TEXT NOT NULL,           -- Nombre del curso (campo obligatorio)
    description TEXT,              -- Descripción del curso
    student_id INT REFERENCES students(student_id) -- Clave foránea que conecta con la tabla students
);

¿Qué hace student_id INT REFERENCES students(student_id)?

  1. Creamos el campo student_id, que será un enlace al identificador único del estudiante (student_id) en la tabla students.
  2. La relación entre tablas se establece con la palabra clave REFERENCES.
  3. Esto significa que cada vez que insertes datos en courses, el valor de student_id debe existir en la tabla students. Si, por ejemplo, intentas inscribir a un estudiante con un student_id que no existe, te dará error.

Insertando datos en las tablas

Cuando ya tienes las tablas, vamos a meter algunos estudiantes y cursos. Porque estar en un aula vacía es un rollo, ¿no?

Añadiendo estudiantes

INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');

Añadiendo cursos

INSERT INTO courses (title, description, student_id) VALUES
('Fundamentos de SQL', 'Aprendiendo la sintaxis básica de SQL', 1),
('Bases de datos relacionales', 'Entendiendo los modelos relacionales', 2),
('PostgreSQL para principiantes', 'Instalación y configuración de PostgreSQL', 3);

Indicamos el student_id para cada curso, conectándolo con el identificador del estudiante en la tabla students.

Comprobando la relación entre las tablas

Ahora vamos a asegurarnos de que nuestras tablas realmente están conectadas. Para eso, vamos a hacer una consulta que muestre info de los cursos junto con los nombres de los estudiantes.

SELECT
    courses.title AS course_title,
    courses.description AS course_description,
    students.name AS student_name
FROM 
    courses
JOIN 
    students ON courses.student_id = students.student_id;

Ejemplo de resultado: Resultado de la consulta:

course_title course_description student_name
Fundamentos de SQL Aprendiendo la sintaxis básica de SQL Alex Lin
Bases de datos relacionales Entendiendo los modelos relacionales Maria Chi
PostgreSQL para principiantes Instalación y configuración de PostgreSQL Otto Song

Hemos conectado los cursos con los estudiantes usando la clave foránea — y ahora podemos obtener datos relacionados en una sola consulta. ¡Así funciona el modelo relacional!

Resumen

Espero que todo lo que acabamos de ver te haya quedado claro y sencillo. Porque pronto vamos a avanzar, y me gustaría que tengas confianza en lo que sabes.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION