CodeGym /Cursos /SQL SELF /Criando a tabela students e sua relação com...

Criando a tabela students e sua relação com a tabela courses

SQL SELF
Nível 20 , Lição 0
Disponível

Criando a tabela students e sua relação com a tabela courses

Bora dar uma revisada rapidinha no que já vimos até agora. Vamos passar por cada passo, bem devagar, pra entender tudo que tá rolando. Daqui pra frente vai ter muita coisa que depende desse conteúdo, então é bom você sacar direitinho o que acontece em cada comando.

Vamos relembrar nosso exemplo de estudantes e cursos. Do zero mesmo. Desde criar as tabelas até entender o que acontece em cada etapa. Preparado?

Agora a gente vai criar a tabela students, que vai guardar as infos dos estudantes, e conectar ela com a tabela courses usando uma foreign key. Nesse processo, vamos ver como usar foreign keys pra modelar relações entre entidades.

Criando a tabela students

A tabela students vai guardar as infos dos estudantes: o id único, o nome e a data de nascimento. Vamos criar ela usando o comando CREATE TABLE.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- Chave única pra cada registro
    name TEXT NOT NULL,            -- Nome do estudante (campo obrigatório)
    birth_date DATE                -- Data de nascimento do estudante
);

O que tá rolando aqui?

  1. student_id SERIAL PRIMARY KEY: Esse é o identificador único de cada estudante. O tipo SERIAL cria um campo auto-incrementado, e o PRIMARY KEY garante que o id vai ser único pra cada linha.
  2. name TEXT NOT NULL: Campo pro nome do estudante. A gente colocou NOT NULL pra não deixar inserir estudante sem nome.
  3. birth_date DATE: Campo pra guardar a data de nascimento. O tipo DATE ajuda a trabalhar com datas.

Se a tabela fosse uma pessoa, student_id seria tipo o RG, name é o nome óbvio, e birth_date é aquela info que a gente às vezes esconde, mas pro banco de dados é importante.

Criando a tabela courses

Agora vamos criar a tabela que vai guardar as infos dos cursos. Ela vai ter o id do curso, o nome e a descrição.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificador único do curso
    title TEXT NOT NULL,           -- Nome do curso (campo obrigatório)
    description TEXT               -- Descrição do curso
);

O que tá rolando aqui?

  1. course_id SERIAL PRIMARY KEY: Mesma ideia, é um campo auto-incrementado que cria um id único pra cada curso.
  2. title TEXT NOT NULL: Campo pro nome do curso. Colocamos NOT NULL porque, né, todo curso tem que ter nome.
  3. description TEXT: Campo pra uma descrição do curso. Esse é opcional, pode ficar vazio (sem NOT NULL).

Curso sem nome é tipo livro sem capa. Mas o banco de dados não deixa isso passar!

Conectando a tabela students com a tabela courses

Agora imagina que cada estudante só pode se inscrever em um curso. Pra isso, vamos adicionar uma foreign key na tabela courses que vai referenciar o id do estudante na tabela students.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Identificador único do curso
    title TEXT NOT NULL,           -- Nome do curso (campo obrigatório)
    description TEXT,              -- Descrição do curso
    student_id INT REFERENCES students(student_id) -- Foreign key conectando com a tabela students
);

O que faz student_id INT REFERENCES students(student_id)?

  1. A gente cria o campo student_id, que vai ser um link pro id único do estudante (student_id) da tabela students.
  2. A ligação entre as tabelas rola por causa da palavra-chave REFERENCES.
  3. Isso quer dizer que, toda vez que você inserir dados em courses, o valor de student_id tem que existir na tabela students. Se tentar colocar um student_id que não existe, vai dar erro.

Inserindo dados nas tabelas

Com as tabelas criadas, bora colocar uns estudantes e cursos. Porque ficar numa sala vazia é chato, né?

Adicionando estudantes

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

Adicionando cursos

INSERT INTO courses (title, description, student_id) VALUES
('Fundamentos de SQL', 'Aprendendo a sintaxe básica de SQL', 1),
('Bancos de Dados Relacionais', 'Entendendo modelos relacionais', 2),
('PostgreSQL para Iniciantes', 'Instalação e configuração do PostgreSQL', 3);

A gente colocou o student_id pra cada curso, conectando ele com o id do estudante na tabela students.

Testando a relação entre as tabelas

Agora bora conferir se nossas tabelas tão realmente conectadas. Pra isso, vamos fazer uma query que mostra as infos dos cursos junto com os nomes dos estudantes.

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;

Exemplo de resultado: Resultado da query:

course_title course_description student_name
Fundamentos de SQL Aprendendo a sintaxe básica de SQL Alex Lin
Bancos de Dados Relacionais Entendendo modelos relacionais Maria Chi
PostgreSQL para Iniciantes Instalação e configuração do PostgreSQL Otto Song

Conectamos os cursos com os estudantes usando a foreign key — e agora dá pra pegar os dados relacionados numa query só. Assim que funciona o modelo relacional!

Resumo

Espero que tudo que a gente acabou de ver tenha ficado claro pra você. Porque logo mais vamos avançar, e é importante você estar confiante no que aprendeu.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION