Praktyczne projekty SQL – baza dla sklepu, platformy e-learningowej i rejestru faktur

Poznaj trzy praktyczne projekty baz danych w SQL – dla sklepu, e-learningu i faktur. Naucz się projektować relacje i pisać zapytania SQL.
07 sierpnia 2025
blog
Poziom: Podstawowy

Artykuł przeznaczony dla osób uczących się SQL i projektowania relacyjnych baz danych na poziomie podstawowym, w tym początkujących analityków, programistów i administratorów.

Z tego artykułu dowiesz się

  • Jak zaprojektować relacyjną bazę danych dla sklepu internetowego, uwzględniając produkty, klientów, zamówienia i płatności?
  • Jakie encje i relacje są kluczowe w bazie danych platformy e-learningowej oraz jak może wyglądać przykładowy schemat tabel w SQL?
  • Czym różni się projekt bazy dla rejestru faktur od pozostałych i jakie praktyki pomagają zapewnić integralność oraz zgodność danych finansowych?

Wprowadzenie do praktycznych projektów baz danych w SQL

Bazy danych odgrywają kluczową rolę w niemal każdym systemie informatycznym, stanowiąc fundament dla przechowywania, organizowania i przetwarzania informacji. SQL (Structured Query Language) jest standardowym językiem zapytań służącym do manipulowania danymi w relacyjnych bazach danych i jednym z podstawowych narzędzi w pracy analityków, programistów czy administratorów systemów.

W praktyce projektowanie baz danych różni się w zależności od specyfiki branży oraz rodzaju danych, jakie będą w nich przetwarzane. Inaczej będzie wyglądać struktura bazy danych dla sklepu internetowego, gdzie skupiamy się na produktach, klientach i zamówieniach, niż dla platformy e-learningowej, w której kluczowe są kursy, użytkownicy i postępy w nauce. Jeszcze inna logika obowiązuje w przypadku rejestru faktur, gdzie główną rolę odgrywają dokumenty księgowe, kontrahenci i wartości finansowe.

W niniejszym artykule skupimy się na trzech praktycznych przykładach projektów baz danych, które ilustrują różnorodność zastosowań SQL w realnych scenariuszach. Przedstawione przypadki nie tylko pokazują, jak tworzyć odpowiednią strukturę tabel i relacje pomiędzy nimi, ale również uczą jak projektować systemy zgodne z potrzebami biznesowymi i użytkowymi.

Dzięki omówieniu trzech różnych kontekstów — handlu elektronicznego, edukacji online oraz ewidencji księgowej — można lepiej zrozumieć, jak elastyczne i przydatne są relacyjne bazy danych w rozwiązywaniu konkretnych problemów. Każdy z projektów reprezentuje inny typ danych i wyzwania, co pozwala na poszerzenie kompetencji w zakresie modelowania oraz optymalizacji baz w różnych środowiskach.

Projekt 1: Baza danych dla sklepu internetowego

Baza danych dla sklepu internetowego to jeden z najczęściej spotykanych przykładów praktycznego zastosowania języka SQL. Jej głównym celem jest przechowywanie i organizowanie danych związanych z produktami, klientami, zamówieniami oraz płatnościami. Zaprojektowanie takiej bazy wymaga przemyślanej struktury relacyjnej, która zapewnia integralność danych i umożliwia sprawną obsługę procesów sprzedażowych. Ten wpis powstał w odpowiedzi na zagadnienia, które regularnie pojawiają się na szkoleniach prowadzonych przez Cognity.

W projekcie tego typu kluczowe są tabele reprezentujące:

  • Produkty – zawierają informacje o nazwie, opisie, cenie, dostępności i kategoriach.
  • Klientów – przechowują dane kontaktowe, historię zamówień i preferencje zakupowe.
  • Zamówienia – łączą klientów z produktami, uwzględniając daty, status realizacji i szczegóły płatności.
  • Płatności – rejestrują metody płatności, kwoty i daty transakcji.
  • Dostawy – opisują sposób i status dostarczenia zamówienia do klienta.

Struktura bazy powinna zapewniać możliwość łatwego przeszukiwania produktów, efektywnego zarządzania stanami magazynowymi oraz śledzenia historii zakupów. Dobrze zaprojektowana relacyjna baza danych dla sklepu internetowego pozwala na generowanie raportów sprzedaży, analizę zachowań klientów, a także automatyzację procesów biznesowych. Jest to doskonały przykład projektu SQL, który łączy praktyczną funkcjonalność z solidnymi podstawami modelowania danych.

Projekt 2: Baza danych dla platformy e-learningowej

Platformy e-learningowe zyskują na popularności jako narzędzia do zdalnego nauczania i szkoleń online. Projektowanie bazy danych dla takiego systemu wymaga dostosowania struktury do specyficznych potrzeb edukacyjnych, takich jak zarządzanie kursami, użytkownikami, materiałami dydaktycznymi oraz postępami w nauce.

W odróżnieniu od projektów e-commerce czy finansowych, baza danych platformy e-learningowej skupia się na odwzorowaniu relacji pomiędzy:

  • studentami (użytkownikami),
  • kursami i modułami tematycznymi,
  • materiałami edukacyjnymi (np. pliki PDF, wideo),
  • prowadzącymi (instruktorami),
  • zadaniami, testami i wynikami,
  • certyfikatami końcowymi.

Główne cele struktury to zapewnienie elastyczności w tworzeniu treści edukacyjnych oraz możliwość śledzenia aktywności i wyników uczestników. Relacje w bazie danych umożliwiają m.in. zapis jednego użytkownika na wiele kursów, przypisywanie materiałów do konkretnych modułów oraz rejestrowanie wyników testów.

Przykładowy fragment schematu bazy danych może wyglądać następująco:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role ENUM('student', 'instructor') NOT NULL
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT
);

CREATE TABLE enrollments (
    user_id INT,
    course_id INT,
    enroll_date DATE,
    PRIMARY KEY (user_id, course_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

W powyższym przykładzie pokazano tylko fragment struktury – użytkownicy mogą zapisywać się na kursy, co rejestrowane jest w osobnej tabeli enrollments. Tego typu relacyjne podejście pozwala elastycznie zarządzać zarówno użytkownikami, jak i treściami edukacyjnymi.

Tabela poniżej prezentuje zestawienie kluczowych encji i typowych relacji w projekcie e-learningowym:

Encja Opis Relacje
users Użytkownicy platformy (studenci i instruktorzy) 1:N z enrollments, 1:N z courses (dla instruktorów)
courses Kursy dostępne na platformie N:M z users przez enrollments, 1:N z modules
modules Moduły tematyczne kursu 1:N z materials
materials Pliki i treści edukacyjne N:1 z modules
tests Zadania lub testy oceniające 1:N z results

Dobrze zaprojektowana baza danych pozwala nie tylko prowadzić e-learning w sposób uporządkowany, ale także analizować postępy użytkowników, automatyzować proces przyznawania certyfikatów i skutecznie zarządzać dużą liczbą kursów oraz uczestników. Jeśli chcesz nauczyć się, jak samodzielnie budować podobne struktury, sprawdź nasz Kurs SQL podstawowy - praktyczne wykorzystanie języka SQL i budowa baz danych.

Projekt 3: Baza danych dla rejestru faktur

System rejestru faktur to fundament w zarządzaniu finansami przedsiębiorstwa – umożliwia śledzenie transakcji, kontrolę rozliczeń oraz generowanie raportów podatkowych. W odróżnieniu od baz danych używanych w sklepach czy platformach e-learningowych, baza faktur skupia się przede wszystkim na danych liczbowych, zgodności z przepisami oraz integralności finansowej.

Podstawowym celem tego projektu jest stworzenie przejrzystej, relacyjnej struktury umożliwiającej ewidencjonowanie faktur zakupowych i sprzedażowych, a także powiązanych z nimi klientów, firm oraz produktów lub usług. W praktyce oznacza to konieczność integracji wielu typów danych – od dat i kwot, przez stawki VAT, aż po statusy płatności.

W typowej strukturze rejestru faktur można wyróżnić następujące tabele:

  • Faktury – zawiera informacje o numerze dokumentu, dacie wystawienia, terminie płatności, statusie (opłacona/nieopłacona) i powiązaniach do klienta oraz firmy wystawiającej fakturę.
  • Klienci – dane kontrahentów, takie jak nazwa, NIP, adres czy forma kontaktu.
  • Pozycje faktur – lista produktów lub usług przypisanych do konkretnej faktury wraz z ilością, ceną netto, stawką VAT i wartością brutto.
  • Produkty lub usługi – słownik dostępnych pozycji, które mogą pojawić się na fakturze.

Strukturalnie projekt ten różni się od poprzednich przede wszystkim naciskiem na:

  • Precyzyjne obliczenia finansowe – każda wartość musi być dokładnie wyliczona i przechowywana z uwzględnieniem zaokrągleń oraz zgodności z przepisami podatkowymi.
  • Spójność danych – raz wystawiona faktura nie może być dowolnie modyfikowana, co implikuje zastosowanie odpowiednich ograniczeń i kontroli wersji.
  • Zgodność z przepisami – struktura musi umożliwiać generowanie danych wymaganych przez urzędy (np. JPK).

Na szkoleniach Cognity pokazujemy, jak poradzić sobie z tym zagadnieniem krok po kroku – poniżej przedstawiamy skrót tych metod.

Przykładowy fragment definicji tabeli faktura może wyglądać następująco:

CREATE TABLE faktura (
    id INT PRIMARY KEY,
    numer VARCHAR(50) NOT NULL,
    data_wystawienia DATE NOT NULL,
    termin_platnosci DATE NOT NULL,
    klient_id INT NOT NULL,
    firma_id INT NOT NULL,
    status VARCHAR(20) CHECK (status IN ('opłacona', 'nieopłacona')),
    FOREIGN KEY (klient_id) REFERENCES klient(id),
    FOREIGN KEY (firma_id) REFERENCES firma(id)
);

Projekt bazy rejestru faktur to doskonałe ćwiczenie z zakresu projektowania relacji, zarządzania typami danych finansowych oraz zapewniania zgodności z rzeczywistymi wymaganiami prawnymi i biznesowymi.

Porównanie struktur i relacji w przedstawionych projektach

Trzy zaprezentowane projekty baz danych – dla sklepu internetowego, platformy e-learningowej oraz rejestru faktur – różnią się pod względem struktury, typów przechowywanych danych oraz charakteru powiązań między tabelami. Każdy z nich spełnia inne wymagania biznesowe i operacyjne, co ma bezpośredni wpływ na sposób projektowania relacyjnych schematów.

Cecha Sklep internetowy Platforma e-learningowa Rejestr faktur
Główne encje Produkty, Klienci, Zamówienia Kursy, Użytkownicy, Lekcje Faktury, Klienci, Pozycje faktur
Rodzaj relacji Wielu-do-wielu (produkty-zamówienia) Wielu-do-jednego (lekcje-kurs) Jeden-do-wielu (faktura-pozycje)
Charakter danych Dynamiczne (zmieniające się stany magazynowe, zamówienia) Treści edukacyjne i postępy użytkowników Transakcyjne i archiwalne (dokumenty księgowe)
Priorytet projektowy Wydajność obsługi transakcji Strukturalna spójność treści Dokładność i zgodność z przepisami
Typowe klucze obce klient_id, produkt_id kurs_id, użytkownik_id klient_id, faktura_id

Różnice w strukturze wynikają przede wszystkim z kontekstu biznesowego:

  • Sklep internetowy wymaga elastyczności w obsłudze koszyków, zamówień i stanów magazynowych.
  • Platforma e-learningowa skupia się na relacjach między kursami, materiałami a użytkownikami oraz ich postępem.
  • Rejestr faktur koncentruje się na przechowywaniu i odwzorowaniu dokładnych danych finansowych, zgodnych z wymogami prawnymi.

Poniższy fragment kodu ilustruje przykład relacji wiele-do-wielu w projekcie sklepu internetowego przy użyciu tabeli pośredniczącej:

CREATE TABLE zamowienia_produkty (
    zamowienie_id INT REFERENCES zamowienia(id),
    produkt_id INT REFERENCES produkty(id),
    ilosc INT,
    PRIMARY KEY (zamowienie_id, produkt_id)
);

Podobne podejścia są wykorzystywane w pozostałych projektach, jednak z różnym ukierunkowaniem na typ relacji i integralność danych. Rozumienie strukturalnych różnic pozwala lepiej dostosować bazę danych do konkretnej domeny aplikacyjnej. Jeśli chcesz nauczyć się projektować takie struktury samodzielnie, sprawdź Kurs MySQL - projektowanie bazy danych za pomocą języka SQL - poziom od podstaw.

💡 Pro tip: Dobieraj typ relacji do natury danych i kierunku zapytań: M:N z tabelą pośrednią dla koszyków, 1:N dla dokument–pozycje, 1:1 dla rozszerzeń. E‑commerce optymalizuj pod transakcje, e‑learning pod spójność treści i postępy, a rejestr faktur pod niezmienność, audyt i zgodność.

Przykładowe zapytania SQL dla każdego projektu

Każdy z trzech przedstawionych projektów bazuje na odmiennych strukturach danych i obsługuje różne przypadki użycia. Poniżej przedstawiono przykładowe zapytania SQL, które ilustrują typowe operacje wykonywane w ramach danego typu systemu. Różnice między nimi wynikają głównie z charakterystyki przechowywanych danych i zależności między encjami.

Projekt Cel zapytania Przykładowe zapytanie
Baza sklepu internetowego Lista zamówień klienta z ostatnich 30 dni
SELECT o.id, o.data_zamowienia, s.nazwa AS status
FROM zamowienia o
JOIN statusy s ON o.status_id = s.id
WHERE o.klient_id = 123
  AND o.data_zamowienia >= CURRENT_DATE - INTERVAL '30 days';
Platforma e-learningowa Sprawdzenie postępów użytkownika w kursie
SELECT k.tytul, p.procent_ukonczenia
FROM kursy k
JOIN postepy p ON k.id = p.kurs_id
WHERE p.uzytkownik_id = 456;
Rejestr faktur Sumaryczna wartość faktur danego kontrahenta w danym miesiącu
SELECT SUM(f.kwota_brutto) AS laczna_wartosc
FROM faktury f
WHERE f.kontrahent_id = 789 
  AND DATE_TRUNC('month', f.data_wystawienia) = DATE_TRUNC('month', CURRENT_DATE);

Podstawowe różnice między zapytaniami:

  • Sklep internetowy skupia się na relacjach między klientami, zamówieniami i statusem realizacji.
  • Platforma e-learningowa operuje na danych związanych z użytkownikami, kursami i ich postępami.
  • Rejestr faktur koncentruje się na aspektach księgowych: kontrahentach, datach i wartościach faktur.

Choć używane konstrukcje SQL bywają podobne (łączenia tabel, filtrowanie po datach), to kontekst biznesowy każdego projektu determinuje unikalne potrzeby i struktury zapytań.

Najlepsze praktyki projektowania baz danych

Dobre projektowanie baz danych to fundament wydajnych, skalowalnych i łatwych w utrzymaniu aplikacji. Niezależnie od tego, czy tworzysz system sprzedaży online, platformę edukacyjną czy moduł obsługi faktur, warto stosować sprawdzone praktyki projektowe, które zwiększają spójność danych i upraszczają przyszłe modyfikacje.

  • Normalizacja danych: Unikaj powielania informacji poprzez odpowiednią normalizację tabel. Dzięki temu zmniejszysz ryzyko niespójności i uprościsz aktualizacje danych.
  • Poprawne definiowanie kluczy: Stosuj klucze główne (PRIMARY KEY) dla jednoznacznej identyfikacji rekordów oraz klucze obce (FOREIGN KEY) do wiązania powiązanych tabel w relacje.
  • Nazewnictwo: Używaj przejrzystych i spójnych nazw tabel oraz kolumn, które jasno opisują przechowywane dane i ich znaczenie. Unikaj skrótów niezrozumiałych poza kontekstem projektu.
  • Typy danych: Dobieraj odpowiedni typ danych do przechowywanych wartości. Pomaga to w oszczędnym wykorzystaniu przestrzeni i gwarantuje poprawność wprowadzanych danych.
  • Indeksowanie: Twórz indeksy dla kolumn często używanych w zapytaniach wyszukiwania i sortowania, aby zwiększyć wydajność odczytu danych.
  • Integralność danych: Wymuszaj reguły integralności, takie jak unikalność, not null, czy ograniczenia długości, aby zapobiegać wprowadzaniu błędnych lub niekompletnych danych.
  • Modularność i skalowalność: Projektuj bazę z myślą o możliwych zmianach i rozszerzeniach – unikaj zbyt sztywnych struktur, które będą trudne do rozbudowy.
  • Bezpieczeństwo dostępu: Ogranicz dostęp do danych poprzez przydzielanie odpowiednich uprawnień użytkownikom i aplikacjom. Ochrona danych powinna być integralną częścią projektu.

Stosowanie tych praktyk pozwala tworzyć bazy danych, które są nie tylko funkcjonalne, ale również odporne na błędy, łatwe w zarządzaniu i przygotowane na rozwój systemu.

💡 Pro tip: Projektuj pod zapytania: zidentyfikuj krytyczne use case’y i na ich podstawie dobierz klucze, indeksy oraz typy danych, aby uniknąć pełnych skanów. Wymuszaj reguły integralności w bazie (PRIMARY/FOREIGN KEY, CHECK, UNIQUE), nie tylko w aplikacji.

Podsumowanie i dalsze kroki

Praktyczne projekty baz danych w SQL pozwalają nie tylko na rozwijanie umiejętności technicznych, ale także na zrozumienie realnych potrzeb różnych typów systemów informatycznych. Każdy z zaprezentowanych przykładów – baza sklepu internetowego, platformy e-learningowej i rejestru faktur – ma swoją specyfikę, wynikającą z odmiennych funkcji i oczekiwań użytkowników.

Baza danych sklepu skupia się na zarządzaniu produktami, zamówieniami i klientami, co odpowiada potrzebom handlu elektronicznego. Platforma e-learningowa wymaga struktury wspierającej kursy, użytkowników i postępy w nauce, natomiast rejestr faktur koncentruje się na przejrzystości dokumentów finansowych i zgodności z wymogami księgowymi.

Każdy z tych projektów ukazuje inne aspekty modelowania danych – od prostych relacji encji do bardziej złożonych powiązań między tabelami. Różnice w strukturze, kluczach i typach danych wynikają bezpośrednio z funkcji, jakie ma pełnić dana aplikacja.

Przeanalizowanie tych przykładów stanowi solidny fundament do dalszej nauki projektowania baz danych i tworzenia zaawansowanych zapytań SQL. Niezależnie od branży, umiejętność tworzenia efektywnych i dobrze zaprojektowanych baz danych jest dziś nieodzownym elementem pracy z danymi. Jeśli chcesz poznać więcej takich przykładów, zapraszamy na szkolenia Cognity, gdzie rozwijamy ten temat w praktyce.

Kurs SQL średniozaawansowany
średnio zaawansowany
cena
od 3621 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL średniozaawansowany...
Kurs SQL - podstawy relacyjnych baz danych i wirtualizacja
początkujący
cena
od 2961 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQL - podstawy relacyjnych baz danych i wirtualizacja...
Kurs SQLite - samokonfigurująca baza relacyjna do zarządzania i przechowywania danych
ogólny
cena
od 3855 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs SQLite - samokonfigurująca baza relacyjna...
icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments