KWALIFIKACJA INF3 - WRZESIEŃ 2015

PYTANIE NR 17.
Aby utworzyć relację jeden do wielu, w tabeli po stronie "wiele", należy zdefiniować
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Relację jeden do wielu realizuje się tak, że rekordy tabeli po stronie "wiele" przechowują odwołanie do rekordu nadrzędnego.
Dlatego w tabeli "wiele" definiuje się klucz obcy, który wskazuje klucz podstawowy tabeli po stronie "jeden". Pozostałe propozycje mylą typ klucza lub kierunek referencji.

Pełne wyjaśnienie:

W relacyjnych bazach danych relacja jeden do wielu (1..N) oznacza, że jeden rekord w tabeli nadrzędnej może być powiązany z wieloma rekordami w tabeli podrzędnej. Kluczowe jest to, gdzie przechowuje się informację o powiązaniu.

Poprawne rozwiązanie to: "klucz obcy wskazujący na klucz podstawowy tabeli po stronie "jeden"". W praktyce w tabeli po stronie "wiele" (np. Zamówienia) dodaje się kolumnę (np. id_klienta), która jest kluczem obcym i przechowuje wartości klucza podstawowego z tabeli po stronie "jeden" (np. Klienci.id). Dzięki temu każdy rekord "wiele" wie, do którego rekordu nadrzędnego należy.

Dlaczego pozostałe odpowiedzi są niepoprawne:

  • "klucz sztuczny odnoszący się do kluczy podstawowych obu tabel" – klucz sztuczny (surrogate key) to sposób identyfikacji rekordu, ale sam w sobie nie opisuje mechanizmu relacji 1..N. Nie zastępuje on klucza obcego, który faktycznie tworzy powiązanie między tabelami.
  • "klucz obcy wskazujący na klucz obcy tabeli po stronie "jeden"" – w typowej relacji 1..N klucz obcy w tabeli "wiele" wskazuje klucz kandydujący lub najczęściej podstawowy tabeli "jeden". Wskazywanie na "klucz obcy" w tabeli nadrzędnej nie jest standardowym sposobem modelowania tej relacji i zwykle oznacza błędne zrozumienie roli tabeli nadrzędnej.
  • "klucz podstawowy wskazujący na klucz podstawowy tabeli po stronie "jeden"" – klucz podstawowy nie "wskazuje" na inny klucz; klucz podstawowy identyfikuje rekord we własnej tabeli. Do wskazywania rekordów w innej tabeli służy klucz obcy.

Wskazówka egzaminacyjna: jeżeli widzisz relację 1..N, zadaj sobie pytanie: "Która tabela ma wiele rekordów zależnych?" To właśnie tam trafia kolumna z identyfikatorem rekordu nadrzędnego, czyli FOREIGN KEY.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Relacja jeden do wielu (1..N) oznacza, że jeden rekord tabeli nadrzędnej może mieć wiele powiązanych rekordów w tabeli podrzędnej, np. jeden klient i wiele zamówień. Technicznie realizuje się to przez przechowywanie identyfikatora rekordu nadrzędnego w tabeli po stronie "wiele".
Dodaj w tabeli po stronie "wiele" kolumnę będącą kluczem obcym i ustaw ją tak, aby wskazywała na klucz podstawowy tabeli po stronie "jeden". Następnie zdefiniuj ograniczenie FOREIGN KEY, aby baza pilnowała spójności (integralności referencyjnej).
W tabeli "wiele" jest wiele rekordów zależnych, więc każdy z nich musi przechować informację, do którego rekordu nadrzędnego należy. Gdyby klucz obcy był w tabeli "jeden", trzeba byłoby przechowywać wiele wartości w jednym rekordzie, co łamie zasady modelu relacyjnego.
Klucz obcy w tabeli podrzędnej wskazuje identyfikator rekordu nadrzędnego, najczęściej klucz podstawowy (PRIMARY KEY) tabeli po stronie "jeden". Dzięki temu można łączyć tabele zapytaniami JOIN i zapewnić, że rekord podrzędny nie odwołuje się do nieistniejącego rekordu nadrzędnego.
Tak, w wielu systemach może wskazywać na kolumnę z ograniczeniem UNIQUE (klucz kandydujący), o ile ta kolumna jednoznacznie identyfikuje rekord. Na egzaminach najczęściej przyjmuje się jednak model: klucz obcy wskazuje klucz podstawowy tabeli nadrzędnej.
Popularne przykłady to: użytkownik–posty, klient–zamówienia, kategoria–produkty, autor–komentarze (w zależności od modelu), rola–użytkownicy. W każdym z nich tabela "wiele" zawiera klucz obcy, np. post ma id_użytkownika.
Integralność referencyjna to zasada, że wartości klucza obcego muszą wskazywać istniejące rekordy w tabeli nadrzędnej (albo być NULL, jeśli relacja jest opcjonalna). Ograniczenie FOREIGN KEY wymusza tę zasadę i zapobiega "osieroconym" rekordom.
Najczęstsze błędy to: umieszczanie klucza obcego w złej tabeli (po stronie "jeden"), mylenie klucza podstawowego z obcym, próba łączenia tabel przez dwa klucze obce "na siebie", oraz brak zrozumienia, że relacja to ograniczenie danych, a nie tylko umowa w kodzie aplikacji.
Sprawdź regułę biznesową: jeśli jeden rekord A może wystąpić w wielu rekordach B, to A jest stroną "jeden", a B stroną "wiele". Przykład: jeden klient ma wiele zamówień, więc Klienci = "jeden", Zamówienia = "wiele".
Tak. W JOIN zwykle łączysz tabelę "wiele" z tabelą "jeden" po warunku: tabela_wiele.fk = tabela_jeden.pk. Dzięki temu uzyskujesz dane nadrzędne dla każdego rekordu podrzędnego. Poprawnie zdefiniowane klucze ułatwiają też optymalizację i indeksowanie.
info

Około 58% zdających odpowiada poprawnie na to pytanie. średnie

Eksperci podkreślają: "Pozostałe propozycje mylą typ klucza lub kierunek referencji."

Źródła:

  • PostgreSQL Documentation (current): SQL Commands – CREATE TABLE, sekcja o ograniczeniach FOREIGN KEY, https://www.postgresql.org/docs/current/sql-createtable.html (dostęp: 2026-03-04)
  • MySQL 8.0 Reference Manual: Constraints – FOREIGN KEY Constraints, https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html (dostęp: 2026-03-04)
  • Microsoft Learn: Create, edit, or delete a relationship (Access) – opis relacji i kluczy, https://support.microsoft.com/office/create-edit-or-delete-a-relationship-3d5d9a12-56c5-4e2c-9a44-6d6b13eea5b0 (dostęp: 2026-03-04)

Materiały:

  • Dokumentacja SQL dla wybranego DBMS (sekcje o FOREIGN KEY i constraints)
  • Materiały o modelowaniu ERD i mapowaniu ERD na tabele relacyjne
  • Ćwiczenia: projekt bazy dla prostego sklepu lub bloga z relacjami 1..N

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego