Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

CREATE TABLE ksiazka ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, tytul VARCHAR(200), autor SMALLINT UNSIGNED NOT NULL, CONSTRAINT `dane`...

CREATE TABLE ksiazka (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
 tytul VARCHAR(200),
 autor SMALLINT UNSIGNED NOT NULL,
 CONSTRAINT `dane` FOREIGN KEY (autor) REFERENCES autorzy(id)
);
Pole autor w tabeli ksiazka jest
A. polem typu napisowego zawierającym dane o autorze.
B. kluczem głównym tabeli ksiazka.
C. polem wykorzystanym przy relacji z tabelą dane.
D. kluczem obcym związanym z tabelą autorzy.

Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).

W podanym poleceniu CREATE TABLE kolumna autor w tabeli ksiazka jest kluczem obcym, bo występuje w definicji FOREIGN KEY (autor) REFERENCES autorzy(id). Oznacza to, że każda wartość wpisana do ksiazka.autor powinna wskazywać istniejący rekord w tabeli autorzy, dokładniej w jej kolumnie id. To jest klasyczny mechanizm relacji jeden-do-wielu: jeden autor może mieć wiele książek, a jedna książka przechowuje identyfikator autora. Moim zdaniem to jedna z najważniejszych rzeczy w projektowaniu baz, bo bez kluczy obcych łatwo zrobić bałagan, np. wpisać książkę z autorem, którego w tabeli autorzy w ogóle nie ma. Nazwa dane nie oznacza tu tabeli, tylko nazwę ograniczenia CONSTRAINT. Dobra praktyka branżowa to nadawanie takim ograniczeniom czytelnych nazw, np. fk_ksiazka_autor, oraz dbanie o zgodność typów: skoro autor jest SMALLINT UNSIGNED, to autorzy.id też powinno mieć zgodny typ i być kluczem głównym albo przynajmniej unikalnym indeksem. Dzięki temu baza pilnuje spójności referencyjnej, a aplikacja ma mniej rzeczy do ręcznego kontrolowania.
Warto tu spokojnie odczytać składnię SQL, bo większość pomyłek bierze się z pomieszania nazw kolumn, tabel i ograniczeń. Kolumna autor nie jest polem wykorzystanym przy relacji z tabelą dane, ponieważ dane to tylko nazwa ograniczenia nadana po słowie CONSTRAINT. Taka nazwa pomaga później identyfikować klucz obcy, na przykład przy usuwaniu albo modyfikowaniu ograniczenia, ale nie tworzy żadnej osobnej tabeli. Relacja jest wskazana dopiero przez fragment REFERENCES autorzy(id), czyli odwołanie prowadzi do tabeli autorzy i jej kolumny id. Autor nie jest też polem napisowym z danymi autora. Typ SMALLINT UNSIGNED oznacza liczbę całkowitą bez znaku, zwykle przechowującą identyfikator, a nie imię i nazwisko. Tekstowy tytuł książki jest zapisany jako VARCHAR(200), więc różnica typów jest dość wyraźna. Nie należy też traktować kolumny autor jako klucza głównego tabeli ksiazka, bo PRIMARY KEY znajduje się przy kolumnie id. Klucz główny identyfikuje rekord książki, natomiast autor tylko wskazuje rekord w innej tabeli. Z mojego doświadczenia najczęstszy błąd polega na tym, że ktoś widzi nazwę autor i myśli o opisie autora, a w relacyjnej bazie danych często przechowujemy właśnie identyfikatory powiązanych rekordów. Takie podejście jest normalne i zgodne z zasadami normalizacji, bo dane autora zapisujemy raz w tabeli autorzy, a w tabeli ksiazka trzymamy tylko odwołanie.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.