KWALIFIKACJA INF3 - STYCZEŃ 2018

PYTANIE NR 20.
Którą relację w projekcie bazy danych należy ustalić między tabelami widocznymi na rysunku zakładając, że każdy klient sklepu internetowego dokona przynajmniej dwóch zamówień?
Ilustracja przedstawia dwa diagramy tabelaryczne, które odnoszą się do projektu bazy danych.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Relacja między klientem a zamówieniami w sklepie internetowym jest typu jeden-do-wielu, ponieważ jeden klient może złożyć wiele zamówień, a każde zamówienie należy do dokładnie jednego klienta. Warunek "co najmniej dwa zamówienia" dodatkowo wyklucza 1:1 i wspiera wybór 1:n po stronie Klienta → Zamówienie.

Pełne wyjaśnienie:

W modelu relacyjnej bazy danych krotność relacji opisuje, ile rekordów jednej tabeli może być powiązanych z rekordami drugiej tabeli.

Dla encji Klient i Zamówienie w sklepie internetowym typowy sens biznesowy jest taki, że:

  • jeden klient może złożyć wiele zamówień w czasie (np. kolejne zakupy w różnych dniach),
  • pojedyncze zamówienie jest składane przez jednego, konkretnego klienta.

Z tego wynika relacja 1:n, gdzie "1" jest po stronie Klienta, a "wiele" po stronie Zamówienia. Warunek w treści ("każdy klient dokona przynajmniej dwóch zamówień") dodatkowo wzmacnia interpretację, że po stronie zamówień na pewno występuje wielokrotność.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • Odpowiedź "1:1" oznaczałaby, że jeden klient może mieć co najwyżej jedno zamówienie i jedno zamówienie dotyczy jednego klienta. To przeczy założeniu o co najmniej dwóch zamówieniach na klienta.
  • Odpowiedź "1:n, gdzie 1 jest po stronie Zamówienia, a wiele po stronie Klienta" odwraca sens relacji. Sugerowałaby, że jedno zamówienie może być przypisane do wielu klientów, co w standardowym sklepie internetowym nie ma sensu (zamówienie ma jednego nabywcę).
  • Odpowiedź "n:n" oznaczałaby, że wiele zamówień jest powiązanych z wieloma klientami jednocześnie. Taka relacja wymagałaby dodatkowej encji pośredniej i odpowiada raczej sytuacjom typu "klient–produkt" (wiele produktów kupowanych przez wielu klientów), a nie "klient–zamówienie".

W praktycznej implementacji relacji 1:n zwykle klucz obcy (np. identyfikator klienta) znajduje się w tabeli Zamówienie, co zapewnia spójność: nie da się wstawić zamówienia bez wskazania istniejącego klienta (o ile nie dopuszcza się zamówień "gościnnych").

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Relacja 1:n (jeden-do-wielu) oznacza, że jeden rekord w tabeli A może być powiązany z wieloma rekordami w tabeli B, ale każdy rekord w tabeli B wskazuje na dokładnie jeden rekord z tabeli A. Zwykle realizuje się to kluczem obcym w tabeli po stronie "wiele".
Sprawdź, czy dla pojedynczego obiektu możesz mieć wiele powiązanych obiektów. Jeśli jeden klient może mieć wiele zamówień, to "1" jest po stronie klienta, a "wiele" po stronie zamówień. Pomaga też pytanie: "Czy rekord B może istnieć dla wielu rekordów A naraz?"
Relacja n:n oznaczałaby, że jedno zamówienie może dotyczyć wielu klientów jednocześnie. W typowym sklepie internetowym zamówienie ma jednego nabywcę (jednego klienta). Relacja n:n pasuje raczej do klient–produkt, bo wielu klientów kupuje wiele produktów.
Nie zmienia typu relacji (nadal jest 1:n), ale zmienia obowiązkowość uczestnictwa: klient nie może mieć 0 zamówień. To jest ograniczenie biznesowe, które można wymuszać logiką aplikacji, triggerami lub procedurami, a nie samą krotnością 1:n.
Najczęściej dodaje się w tabeli zamówień kolumnę z identyfikatorem klienta (klucz obcy), np. klient_id. Klucz główny klienta (np. id) jest referencjonowany przez zamówienie. Dzięki temu wiele wierszy w Zamówieniu może wskazywać tego samego klienta.
Relacja 1:1 oznacza, że jednemu rekordowi w tabeli A odpowiada co najwyżej jeden rekord w tabeli B i odwrotnie. Stosuje się ją np. do rozdzielenia danych rzadko używanych, danych wrażliwych lub do modelowania dziedziczenia. Dla klient–zamówienie zwykle nie pasuje.
Najczęstsze błędy to odwracanie stron relacji (mylenie "1" i "n"), wybór n:n tylko dlatego, że "jest dużo rekordów w obu tabelach", oraz ignorowanie kontekstu biznesowego (np. że zamówienie ma jednego nabywcę). Pomaga testowanie przykładami danych.
Tak. W relacyjnych bazach danych relację n:n realizuje się przez tabelę pośrednią (asocjacyjną), która zawiera co najmniej dwa klucze obce do obu tabel. Przykład: Zamówienie–Produkt realizuje się tabelą PozycjaZamówienia, bo jedno zamówienie ma wiele produktów i produkt może być w wielu zamówieniach.
Możesz użyć zliczania i grupowania, np. policzyć liczbę zamówień dla klienta: GROUP BY po identyfikatorze klienta oraz COUNT(*). To nie tworzy relacji, ale pozwala zweryfikować w danych, czy relacja 1:n występuje i czy spełnione są założenia biznesowe.
Ćwicz rozpoznawanie relacji na przykładach domen (sklep, szkoła, biblioteka), rysuj proste ERD i zamieniaj je na schemat relacyjny. Zwracaj uwagę, gdzie trafia klucz obcy przy 1:n oraz kiedy potrzebna jest tabela pośrednia przy n:n. Sprawdzaj się krótkimi zadaniami.
info

To pytanie poprawnie rozwiązuje 55% zdających egzamin. średnie

W praktyce zawodowej kluczowe jest to, że relacja między klientem a zamówieniami w sklepie internetowym jest typu jeden-do-wielu, ponieważ jeden klient może złożyć wiele zamówień, a każde zamówienie należy do dokładnie jednego klienta.

Źródła:

  • R. Elmasri, S.B. Navathe, "Fundamentals of Database Systems", rozdziały o modelu ER i ograniczeniach krotności (cardinality constraints), Pearson (kolejne wydania).
  • A. Silberschatz, H.F. Korth, S. Sudarshan, "Database System Concepts", część dotycząca modelowania danych oraz relacji 1:1, 1:n, n:n, McGraw-Hill (kolejne wydania).
  • PostgreSQL Documentation: "Foreign Keys" (integralność referencyjna i relacje między tabelami) https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK (dostęp: 2026-03-02)

Materiały:

  • Podręczniki akademickie do projektowania baz danych (model ER, model relacyjny)
  • Dokumentacje DBMS (np. opis kluczy obcych i integralności referencyjnej)
  • Ćwiczenia z rysowania ERD dla prostych domen (sklep, biblioteka, rezerwacje)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego