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?
student_id SERIAL PRIMARY KEY: Esse é o identificador único de cada estudante. O tipoSERIALcria um campo auto-incrementado, e oPRIMARY KEYgarante que o id vai ser único pra cada linha.name TEXT NOT NULL: Campo pro nome do estudante. A gente colocouNOT NULLpra não deixar inserir estudante sem nome.birth_date DATE: Campo pra guardar a data de nascimento. O tipoDATEajuda 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?
course_id SERIAL PRIMARY KEY: Mesma ideia, é um campo auto-incrementado que cria um id único pra cada curso.title TEXT NOT NULL: Campo pro nome do curso. ColocamosNOT NULLporque, né, todo curso tem que ter nome.description TEXT: Campo pra uma descrição do curso. Esse é opcional, pode ficar vazio (semNOT 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)?
- A gente cria o campo
student_id, que vai ser um link pro id único do estudante (student_id) da tabelastudents. - A ligação entre as tabelas rola por causa da palavra-chave
REFERENCES. - Isso quer dizer que, toda vez que você inserir dados em
courses, o valor destudent_idtem que existir na tabelastudents. Se tentar colocar umstudent_idque 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.
GO TO FULL VERSION