Modelowanie bloga: użytkownicy, posty, komentarze
Narysuj diagram ER, zidentyfikuj encje i relacje oraz przełóż je na znormalizowany schemat SQL.
Modelowanie bloga: użytkownicy, posty, komentarze to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Domena
Prosty blog: użytkownicy piszą posty, a inni użytkownicy komentują posty. Przekształćmy to w schemat.
Encje
Trzy podstawowe rzeczowniki:
- Użytkownik — id, email, name
- Post — id, author, title, body, znacznik czasu publikacji
- Komentarz — id, author, post, którego dotyczy, body
Relacje
Krotności:
- Użytkownik 1 ── ∞ Post (użytkownik pisze wiele postów)
- Użytkownik 1 ── ∞ Komentarz
- Post 1 ── ∞ Komentarz
Tabela użytkowników
Zacznijmy od użytkowników — pozostałe tabele odwołują się do tej tabeli:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
full_name VARCHAR(100) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Tabela postów
Klucz obcy do tabeli użytkowników:
CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
title VARCHAR(200) NOT NULL,
body TEXT NOT NULL,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Tabela komentarzy
Dwa klucze obce:
CREATE TABLE comments (
id BIGSERIAL PRIMARY KEY,
post_id BIGINT NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
author_id BIGINT NOT NULL REFERENCES users(id) ON DELETE RESTRICT,
body TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);Dlaczego ON DELETE CASCADE w komentarzach?
Jeśli post zostanie usunięty, jego komentarze tracą sens — pozwólmy bazie danych automatycznie je usunąć.
Dlaczego ON DELETE RESTRICT dla autora?
Nie należy po cichu usuwać treści, gdy użytkownik znika. Wymuś najpierw logiczne usunięcie użytkownika przez aplikację albo ponowne przypisanie do niego treści.
Rozszerzenie o tagi (relacja wiele-do-wielu)
Dodajmy tagi za pomocą tabeli łącznikowej:
CREATE TABLE tags (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE post_tags (
post_id BIGINT REFERENCES posts(id) ON DELETE CASCADE,
tag_id BIGINT REFERENCES tags(id) ON DELETE CASCADE,
PRIMARY KEY (post_id, tag_id)
);Komentarze wątkowe
Komentarze odwołujące się do samych siebie, aby obsługiwać odpowiedzi:
ALTER TABLE comments
ADD COLUMN parent_id BIGINT REFERENCES comments(id) ON DELETE CASCADE;Usuwanie logiczne a fizyczne
W przypadku bloga usuwanie postów w sposób logiczny jest często lepszym rozwiązaniem — odnośniki w historii użytkownika nie przestają działać. Dodaj deleted_at TIMESTAMPTZ i w każdym zapytaniu filtruj za pomocą WHERE deleted_at IS NULL.
Diagram ER opisany słowami
users (1) -< (∞) posts (1) -< (∞) comments
Dodatkowo: users (1) -< (∞) comments, posts (∞) >-< (∞) tags.
Podsumowanie
Projektowanie schematu zaczyna się od encji, relacji i krotności.
- Zastępczy klucz główny w każdej tabeli
- Klucze obce deklarują relacje
- CASCADE lub RESTRICT powinny odpowiadać założeniom biznesowym
- Relacja wiele-do-wielu = tabela łącznikowa
Szybkie sprawdzenie
Gdzie znajduje się klucz obcy w relacji jeden-do-wielu między postami a komentarzami?
Często zadawane pytania
Czy lekcja „Modelowanie bloga: użytkownicy, posty, komentarze” jest bezpłatna?
Tak — pełny tekst „Modelowanie bloga: użytkownicy, posty, komentarze” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Modelowanie bloga: użytkownicy, posty, komentarze”?
Narysuj diagram ER, zidentyfikuj encje i relacje oraz przełóż je na znormalizowany schemat SQL. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Modelowanie bloga: użytkownicy, posty, komentarze”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Modelowanie bloga: użytkownicy, posty, komentarze
- Wybór kluczy i typów
- Indeksy dla typowych zapytań
- Zasilanie bazy danych danymi testowymi