0Pricing
SQL Interview Prep · Lekcja

Schemat gwiazdy i projektowanie hurtowni danych

Tabele faktów i wymiarów, kompromisy denormalizacji oraz modelowanie OLAP.

Schemat gwiazdy i projektowanie hurtowni danych to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 3 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 Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

OLTP a OLAP

Pytania dotyczące hurtowni danych zaczynają się od jednego rozróżnienia, którego rekruterzy oczekują od Państwa bezbłędnego opanowania: OLTP a OLAP.

  • OLTP (transakcyjne): wiele małych operacji odczytu i zapisu, wysoki poziom normalizacji zapewniający integralność. Zasila aplikację.
  • OLAP (analityczne): niewiele dużych odczytów agregujących dane historyczne, celowo zdenormalizowanych dla szybkości. Zasila raporty i pulpity nawigacyjne.

Schematy gwiazdy są rozwiązaniem projektowym OLAP. Ich głównym celem są szybkie zapytania analityczne, a nadmiarowość jest akceptowana w zamian za szybkość.

Fakty i wymiary

Schemat gwiazdy dzieli dane na dwa rodzaje tabel:

  • Tabela faktów: mierzalne zdarzenia lub transakcje (sprzedaż, kliknięcie). Zawiera liczbowe miary oraz klucze obce do wymiarów.
  • Tabele wymiarów: opisowy kontekst, według którego można dzielić dane (data, produkt, klient, sklep).

Tabela faktów znajduje się w centrum, a wymiary otaczają ją niczym ramiona gwiazdy — stąd nazwa.

Budowa tabeli faktów

Tabela faktów składa się głównie z kluczy obcych i liczbowych miar. Ma dużo wierszy i niewiele kolumn, a jej rozmiar stale rośnie.

Miary to addytywne wartości liczbowe, które można agregować: ilość, przychód, koszt. Ziarno (jeden wiersz = jedno ?) musi być jasno określone; w tym przypadku jeden wiersz oznacza jedną pozycję produktową w ramach jednej sprzedaży.

CREATE TABLE fact_sales (
  sale_id      BIGINT PRIMARY KEY,
  date_key     INT  NOT NULL,   -- FK to dim_date
  product_key  INT  NOT NULL,   -- FK to dim_product
  customer_key INT  NOT NULL,   -- FK to dim_customer
  store_key    INT  NOT NULL,   -- FK to dim_store
  quantity     INT,             -- measure
  revenue      DECIMAL(12,2),   -- measure
  cost         DECIMAL(12,2)    -- measure
);

Budowa tabeli wymiarów

Wymiary mają niewiele wierszy i są szerokie: zawierają wiele opisowych kolumn, według których można filtrować i grupować dane. Są celowo zdenormalizowane, aby zapytanie wymagało tylko jednego złączenia dla każdego wymiaru.

Proszę zauważyć, że dim_product przechowuje kategorię i markę w tym samym wierszu, zamiast w oddzielnych tabelach. Właśnie o tę nadmiarowość chodzi: pozwala uniknąć dodatkowych złączeń podczas wykonywania zapytania.

CREATE TABLE dim_product (
  product_key  INT PRIMARY KEY,   -- surrogate key
  product_id   INT,              -- natural/business key
  product_name VARCHAR(100),
  category     VARCHAR(50),      -- denormalized
  brand        VARCHAR(50),      -- denormalized
  unit_price   DECIMAL(10,2)
);

Zapytanie do schematu gwiazdy

To właśnie zyskujemy dzięki temu projektowi. Typowe zapytanie analityczne łączy tabelę faktów z kilkoma wymiarami, filtruje dane i wykonuje agregację. Jedno złączenie dla każdego wymiaru, bez głębokich łańcuchów złączeń.

Rekruterzy proszą o napisanie dokładnie tego rodzaju zapytania dla schematu gwiazdy.

SELECT d.category,
       t.year,
       SUM(f.revenue) AS total_revenue
FROM fact_sales f
JOIN dim_product d ON d.product_key = f.product_key
JOIN dim_date    t ON t.date_key    = f.date_key
WHERE t.year = 2025
GROUP BY d.category, t.year
ORDER BY total_revenue DESC;

Klucze zastępcze

Wymiary używają klucza zastępczego: pozbawionego znaczenia biznesowego całkowitoliczbowego klucza głównego (takiego jak product_key), generowanego przez hurtownię danych i niezależnego od klucza naturalnego systemu źródłowego.

Dlaczego rekruterzy zwracają na to uwagę:

  • Oddziela hurtownię od zmieniających się kluczy biznesowych.
  • Ogranicza szerokość tabel faktów (złączenia po liczbach całkowitych są szybkie).
  • Jest niezbędny do śledzenia historii za pomocą wolno zmieniających się wymiarów (w następnej scenie).

Wolno zmieniające się wymiary

To ulubiony temat podczas rozmów rekrutacyjnych dotyczących hurtowni danych: jak obsłużyć zmianę atrybutu wymiaru, na przykład przeprowadzkę klienta do innego miasta? Są to wolno zmieniające się wymiary (SCD):

  • Typ 1: nadpisanie starej wartości. Brak historii.
  • Typ 2: dodanie nowego wiersza z datami obowiązywania i flagą bieżącego rekordu. Pełna historia; wymaga to kluczy zastępczych.
  • Typ 3: zachowanie kolumny „poprzednia wartość”. Ograniczona historia.

Typ 2 jest najczęściej oczekiwaną odpowiedzią w przypadku śledzenia zmian w czasie.

-- SCD Type 2 dimension
CREATE TABLE dim_customer (
  customer_key INT PRIMARY KEY,   -- surrogate
  customer_id  INT,              -- natural key
  city         VARCHAR(50),
  valid_from   DATE,
  valid_to     DATE,
  is_current   BOOLEAN
);

Schemat gwiazdy a schemat płatka śniegu

Należy spodziewać się pytania porównawczego. Schemat płatka śniegu normalizuje wymiary do tabel podrzędnych (produkt -> kategoria -> dział), podczas gdy schemat gwiazdy zachowuje je w płaskiej strukturze.

  • Schemat gwiazdy: mniej złączeń, szybsze odczyty, pewna nadmiarowość. Preferowany ze względu na wydajność zapytań.
  • Schemat płatka śniegu: mniejsze zużycie miejsca i łatwiejsze utrzymanie wymiarów, ale więcej złączeń w każdym zapytaniu.

Warto powiedzieć: „Domyślnie wybieraj schemat gwiazdy ze względu na szybkość zapytań; schemat płatka śniegu stosuj tylko wtedy, gdy wymiary są duże i wykorzystywane ponownie”.

Wymiar daty

Niemal każdy schemat gwiazdy ma dedykowany wymiar daty zamiast surowej kolumny daty. Zawiera on wcześniej obliczone informacje o roku, kwartale, miesiącu, dniu tygodnia, dniach świątecznych i okresach fiskalnych.

Dzięki temu analitycy mogą grupować dane według „kwartału fiskalnego” lub „is_weekend” za pomocą prostego złączenia, zamiast rozproszonych funkcji daty. Samodzielne wspomnienie o wymiarze daty bez wcześniejszej podpowiedzi to mocny sygnał, że mają Państwo doświadczenie w budowaniu hurtowni danych.

CREATE TABLE dim_date (
  date_key   INT PRIMARY KEY,   -- e.g. 20250131
  full_date  DATE,
  year       INT,
  quarter    INT,
  month      INT,
  day_of_week VARCHAR(10),
  is_weekend BOOLEAN,
  fiscal_qtr VARCHAR(6)
);

Wybór ziarna

Najważniejszą decyzją dotyczącą tabeli faktów jest ziarno: określenie, co reprezentuje jeden wiersz. Należy ustalić je przed wszystkim innym.

  • Zbyt ogólne ziarno (jeden wiersz na dzień i sklep) powoduje utratę szczegółów.
  • Zbyt szczegółowe ziarno (jeden wiersz na zeskanowany produkt) sprawia, że tabela gwałtownie się rozrasta.

Jasne określenie ziarna, na przykład „jeden wiersz na produkt w każdej pozycji zamówienia”, decyduje o tym, które wymiary i miary powinny się w nim znaleźć. Rekruterzy zwracają uwagę na taką dyscyplinę.

Kiedy denormalizować

Należy powiązać to z normalizacją. Systemy OLTP normalizuje się do 3NF w celu zapewnienia integralności, natomiast w hurtowniach celowo denormalizuje się wymiary, aby przyspieszyć odczyt.

Należy umieć wyjaśnić następujący kompromis:

  • Niektóre nadmiarowe dane wymiarów są akceptowalne, ponieważ hurtownia jest zasilana kontrolowanym procesem ETL, a nie doraźnymi zapisami aplikacji.
  • Mniejsza liczba złączeń oznacza szybsze agregacje wykonywane na miliardach wierszy faktów.

To właśnie trafna ocena sytuacji, a nie ślepe trzymanie się reguły, odróżnia tu odpowiedzi na poziomie seniora.

Szybki test

Projektują Państwo hurtownię danych sprzedażowych i muszą zachować pełną historię miasta klienta na wypadek jego przeprowadzki.

Podsumowanie: schemat gwiazdy i projektowanie hurtowni

Mogą już Państwo odpowiadać na pytania dotyczące modelowania hurtowni danych:

  • OLTP stosuje normalizację w celu zapewnienia integralności, a OLAP denormalizuje dane dla szybszego odczytu.
  • Schemat gwiazdy ma centralną tabelę faktów (klucze obce + liczbowe miary), otoczoną płaskimi wymiarami.
  • Należy używać kluczy zastępczych i dedykowanego wymiaru daty.
  • Zmiany należy śledzić za pomocą SCD typu 2, a ziarno tabeli faktów określić w pierwszej kolejności.
  • Ze względu na wydajność zapytań należy preferować schemat gwiazdy zamiast schematu płatka śniegu.

Często zadawane pytania

Czy lekcja „Schemat gwiazdy i projektowanie hurtowni danych” jest bezpłatna?

Tak — pełny tekst „Schemat gwiazdy i projektowanie hurtowni danych” 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 Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Schemat gwiazdy i projektowanie hurtowni danych”?

Tabele faktów i wymiarów, kompromisy denormalizacji oraz modelowanie OLAP. Ćwiczysz SQL Interview Prep 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 Interview Prep?

Nie wymagamy żadnego doświadczenia. SQL Interview Prep 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 3 z 4.

Ile czasu zajmuje lekcja „Schemat gwiazdy i projektowanie hurtowni danych”?

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 Interview Prep?

Tak. Każda lekcja SQL Interview Prep 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

  1. Normalizacja do postaci 3NF
  2. Modelowanie ER i krotność relacji
  3. Schemat gwiazdy i projektowanie hurtowni danych
  4. Pełny zestaw zadań do próbnej rozmowy rekrutacyjnej
← Powrót do SQL Interview Prep