CodeGym /Kursy /SQL SELF /Tworzenie tabeli students i jej powiązania z tabelą cou...

Tworzenie tabeli students i jej powiązania z tabelą courses

SQL SELF
Poziom 20, Lekcja 0
Dostępny

Dobra, poświęćmy chwilę i przejdźmy jeszcze raz przez to, co już przerabialiśmy. Krok po kroku rozkminimy wszystko, co się dzieje. Dalej będzie sporo rzeczy, które bazują na tym materiale, więc fajnie by było, żebyś naprawdę ogarniał, co się dzieje przy każdej komendzie.

Jeszcze raz przejdźmy przez nasz przykład ze studentami i kursami. Od samego początku. Od tworzenia tabel, po rozkminę co się dzieje na każdym etapie. Gotowy?

Teraz stworzymy tabelę students, która będzie przechowywać info o studentach, i połączymy ją z tabelą courses przez klucz obcy. W tym procesie zobaczysz, jak używać kluczy obcych do modelowania relacji między encjami.

Tworzenie tabeli students

Tabela students będzie przechowywać info o studentach: ich unikalny identyfikator, imię i datę urodzenia. Stworzymy ją za pomocą komendy CREATE TABLE.

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY, -- Unikalny klucz dla każdego rekordu
    name TEXT NOT NULL,            -- Imię studenta (pole wymagane)
    birth_date DATE                -- Data urodzenia studenta
);

Co tu się dzieje?

  1. student_id SERIAL PRIMARY KEY: To jest unikalny identyfikator dla każdego studenta. Typ SERIAL robi autoinkrementowane pole, a PRIMARY KEY gwarantuje, że identyfikator będzie unikalny dla każdego wiersza.
  2. name TEXT NOT NULL: Pole na imię studenta. Ustawiliśmy NOT NULL, żeby nie dało się dodać rekordu bez imienia.
  3. birth_date DATE: Pole na datę urodzenia. Typ danych DATE pozwala nam ogarniać daty.

Gdyby tabela była człowiekiem, to student_id — to jej dowód, name — oczywiste imię, a birth_date — coś, co czasem chowamy, ale dla bazy danych to ważne info.

Tworzenie tabeli courses

Teraz stworzymy tabelę, która będzie przechowywać info o kursach. Będzie mieć identyfikator kursu, jego nazwę i opis.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Unikalny identyfikator kursu
    title TEXT NOT NULL,           -- Nazwa kursu (pole wymagane)
    description TEXT               -- Opis kursu
);

Co tu się dzieje?

  1. course_id SERIAL PRIMARY KEY: Podobnie, to autoinkrementowane pole, które tworzy unikalny identyfikator dla każdego kursu.
  2. title TEXT NOT NULL: Pole na nazwę kursu. Ustawiliśmy NOT NULL, bo logiczne, że każdy kurs musi mieć nazwę.
  3. description TEXT: Pole na krótki opis kursu. To już dodatkowe pole, które może być puste (bez NOT NULL).

Kurs bez nazwy — to jak książka bez okładki. Ale baza danych na to nie pozwoli!

Łączenie tabeli students z tabelą courses

Wyobraź sobie teraz, że każdy student może być zapisany tylko na jeden kurs. Do tego dodamy klucz obcy do tabeli courses, który będzie wskazywał na identyfikator studenta z tabeli students.

CREATE TABLE courses (
    course_id SERIAL PRIMARY KEY,  -- Unikalny identyfikator kursu
    title TEXT NOT NULL,           -- Nazwa kursu (pole wymagane)
    description TEXT,              -- Opis kursu
    student_id INT REFERENCES students(student_id) -- Klucz obcy, łączący z tabelą students
);

Co robi student_id INT REFERENCES students(student_id)?

  1. Tworzymy pole student_id, które będzie wskazywać na unikalny identyfikator studenta (student_id) z tabeli students.
  2. Relacja między tabelami jest ustawiona przez słowo kluczowe REFERENCES.
  3. To znaczy, że przy każdym INSERT do courses wartość student_id musi istnieć w tabeli students. Jeśli np. spróbujesz zapisać na kurs studenta z nieistniejącym student_id, dostaniesz błąd.

Wstawianie danych do tabel

Jak już mamy tabele, to wrzućmy trochę studentów i kursów. Bo nudno siedzieć w pustej sali, nie?

Dodajemy studentów

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

Dodajemy kursy

INSERT INTO courses (title, description, student_id) VALUES
('Podstawy SQL', 'Nauka podstawowej składni SQL', 1),
('Relacyjne bazy danych', 'Zrozumienie modeli relacyjnych', 2),
('PostgreSQL dla początkujących', 'Instalacja i konfiguracja PostgreSQL', 3);

Podaliśmy student_id dla każdego kursu, łącząc go z identyfikatorem studenta w tabeli students.

Sprawdzamy powiązanie między tabelami

Teraz sprawdźmy, czy nasze tabele faktycznie są połączone. Do tego stworzymy zapytanie, które wyświetli info o kursach razem z imionami studentów.

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;

Przykład wyniku: Wynik zapytania:

course_title course_description student_name
Podstawy SQL Nauka podstawowej składni SQL Alex Lin
Relacyjne bazy danych Zrozumienie modeli relacyjnych Maria Chi
PostgreSQL dla początkujących Instalacja i konfiguracja PostgreSQL Otto Song

Połączyliśmy kursy ze studentami przez klucz obcy — i teraz możemy pobierać powiązane dane jednym zapytaniem. Tak właśnie działa model relacyjny!

Podsumowanie

Mam nadzieję, że wszystko, co właśnie przerobiliśmy, było dla Ciebie jasne i oczywiste. Bo zaraz idziemy dalej i fajnie by było, żebyś był pewny swojej wiedzy.

2
Zadanie
SQL SELF, poziom 20, lekcja 0
Niedostępne
Tworzenie tabeli `students`
Tworzenie tabeli `students`
2
Zadanie
SQL SELF, poziom 20, lekcja 0
Niedostępne
Tworzenie tabeli `courses` i klucza obcego
Tworzenie tabeli `courses` i klucza obcego
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION