JavaRush /Курси /SQL SELF /Створення таблиці students і її зв'язку з т...

Створення таблиці students і її зв'язку з таблицею courses

SQL SELF
Рівень 20 , Лекція 0
Відкрита

Давай виділимо трохи часу і пройдемося по вже вивченому матеріалу. Ось прям по кроках розберемо все, що відбувається. Далі буде багато всього, що базується на тому, що ти вже знаєш. І класно було б, щоб ти ну прям ідеально розумів, що відбувається при виконанні кожної команди.

Давай ще раз пройдемося по нашому прикладу зі студентами і курсами. З самого початку. Від створення таблиць до розбору, що відбувається на кожному етапі. Готовий?

Зараз ми створимо таблицю students, яка буде зберігати інформацію про студентів, і зв'яжемо її з таблицею courses за допомогою зовнішнього ключа. У цьому процесі ми побачимо, як застосовуються зовнішні ключі для моделювання відносин між сутностями.

Створення таблиці students

Таблиця students буде зберігати інформацію про студентів: їх унікальний ідентифікатор, ім'я і дату народження. Ми створимо її з використанням команди CREATE TABLE.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- Унікальний ключ для кожного запису
    name TEXT NOT NULL,            -- Ім'я студента (обов'язкове поле)
    birth_date DATE                -- Дата народження студента
);

Що тут відбувається?

  1. student_id SERIAL PRIMARY KEY: Це унікальний ідентифікатор для кожного студента. Тип SERIAL створює автоінкрементне поле, а PRIMARY KEY гарантує, що ідентифікатор буде унікальним для кожного рядка.
  2. name TEXT NOT NULL: Поле для імені студента. Ми вказали NOT NULL, щоб жоден запис не міг бути доданий без імені.
  3. birth_date DATE: Поле для зберігання дати народження. Тут тип даних DATE допоможе нам працювати з датами.

Якби таблиця була людиною, то student_id — це її паспорт, name — очевидне ім'я, а birth_date — те, що ми іноді ховаємо подалі, але для бази даних це важливо.

Створення таблиці courses

Тепер створимо таблицю, яка буде зберігати інформацію про курси. Вона буде містити ідентифікатор курсу, його назву і опис.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Унікальний ідентифікатор курсу
    title TEXT NOT NULL,           -- Назва курсу (обов'язкове поле)
    description TEXT               -- Опис курсу
);

Що тут відбувається?

  1. course_id SERIAL PRIMARY KEY: Аналогічно, це автоінкрементне поле, яке створює унікальний ідентифікатор для кожного курсу.
  2. title TEXT NOT NULL: Поле для назви курсу. Ми вказали NOT NULL, бо логічно, що у будь-якого курсу має бути ім'я.
  3. description TEXT: Поле для короткого опису курсу. Це вже додаткове поле, яке може бути порожнім (без обмеження NOT NULL).

Курс без назви — це як книжка без обкладинки. Але база даних цього не дозволить!

Зв'язування таблиці students з таблицею courses

Тепер уявімо, що кожен студент може бути записаний тільки на один курс. Для цього ми додамо зовнішній ключ у таблицю courses, який буде посилатися на ідентифікатор студента з таблиці students.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Унікальний ідентифікатор курсу
    title TEXT NOT NULL,           -- Назва курсу (обов'язкове поле)
    description TEXT,              -- Опис курсу
    student_id INT REFERENCES students(student_id) -- Зовнішній ключ, що зв'язує з таблицею students
);

Що робить student_id INT REFERENCES students(student_id)?

  1. Ми створюємо поле student_id, яке буде посиланням на унікальний ідентифікатор студента (student_id) з таблиці students.
  2. Зв'язок між таблицями забезпечується ключовим словом REFERENCES.
  3. Це означає, що при кожній вставці даних у courses значення student_id має існувати в таблиці students. Якщо, наприклад, ти спробуєш записати на курс студента з неіснуючим student_id, отримаєш помилку.

Вставка даних у таблиці

Коли таблиці створені, давай додамо трохи студентів і курсів. Бо сидіти в порожній аудиторії — ну реально нудно, правда?

Додаємо студентів

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

Додаємо курси

INSERT INTO courses (title, description, student_id) VALUES
('Основи SQL', 'Вивчення базового синтаксису SQL', 1),
('Реляційні бази даних', 'Розуміння реляційних моделей', 2),
('PostgreSQL для початківців', 'Встановлення і налаштування PostgreSQL', 3);

Ми вказали student_id для кожного курсу, зв'язуючи його з ідентифікатором студента в таблиці students.

Перевіряємо зв'язок між таблицями

Тепер давай переконаємось, що наші таблиці дійсно зв'язані. Для цього створимо запит, який виведе інформацію про курси разом з іменами студентів.

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;

Приклад результату: Результат запиту:

course_title course_description student_name
Основи SQL Вивчення базового синтаксису SQL Alex Lin
Реляційні бази даних Розуміння реляційних моделей Maria Chi
PostgreSQL для початківців Встановлення і налаштування PostgreSQL Otto Song

Ми зв'язали курси зі студентами через зовнішній ключ — і тепер можемо отримувати пов'язані дані в одному запиті. Ось так працює реляційна модель!

Резюме

Я сподіваюся, що все, що ми щойно розібрали, було для тебе зрозумілим і очевидним. Бо скоро ми підемо далі, і хотілося б, щоб ти був впевнений у своїх знаннях.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ