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

Słowa kluczowe: ALTER TABLE w SQL AUTO_INCREMENT w MySQL CREATE TABLE w SQL Indeks w SQL Klucz główny w SQL

Jaki warunek musi spełniać kolumna, na której w MySQL (silnik InnoDB) definiuje się klucz obcy?

A. musi mieć typ danych zgodny z typem kolumny, do której się odwołuje.
Dobrze. Klucz obcy porównuje wartości z kolumną nadrzędną, więc typy muszą być zgodne, łącznie z rozmiarem i znakiem.
B. nie może przyjmować wartości NULL.
Źle. NULL w kluczu obcym jest dozwolone i oznacza brak powiązania, chyba że dodano NOT NULL.
C. musi mieć taką samą nazwę jak kolumna w tabeli nadrzędnej.
Źle. Nazwy mogą się różnić. Powiązanie wyznacza REFERENCES, a nie zgodność nazw kolumn.
D. musi zawierać wartości unikalne.
Źle. Unikalna musi być kolumna wskazywana. Wartości klucza obcego powtarzają się w relacji jeden do wielu.

Klucz obcy porównuje wartości z kolumną w tabeli nadrzędnej, dlatego obie kolumny muszą mieć zgodne typy danych. Jeśli klasy.id ma typ INT UNSIGNED, to uczniowie.klasa_id też musi być INT UNSIGNED. Przy niezgodności, np. INT i VARCHAR, MySQL odrzuci utworzenie klucza obcego błędem.

Na egzaminie praktycznym taki błąd zdarza się często przy imporcie tabel z różnych źródeł. Wymagania InnoDB dla liczb całkowitych są ścisłe: zgodny rozmiar i znak, więc INT i BIGINT albo INT i INT UNSIGNED nie zostaną połączone. Kolumna wskazywana musi mieć indeks, zwykle jest kluczem głównym. Kolumna klucza obcego dostaje indeks automatycznie.

Każda błędna odpowiedź przenosi na klucz obcy cechę klucza głównego albo nakłada niepotrzebne ograniczenie. Unikalność dotyczy kolumny wskazywanej, a nie wskazującej. W tabeli uczniowie ta sama wartość klasa_id powtarza się u wszystkich uczniów jednej klasy i na tym polega relacja jeden do wielu.

Wartość NULL w kluczu obcym jest dozwolona, chyba że projektant doda NOT NULL. Oznacza wtedy brak powiązania, np. pracownika jeszcze bez przypisanego działu. Integralność referencyjna sprawdza tylko wartości różne od NULL.

Nazwy kolumn mogą się różnić, i zwykle tak jest: klasa_id w tabeli uczniowie wskazuje na id w tabeli klasy. Połączenie wyznacza zapis FOREIGN KEY (klasa_id) REFERENCES klasy (id), a nie zgodność nazw.

Jeśli MySQL zgłasza błąd 150 albo „Foreign key constraint is incorrectly formed”, najpierw porównaj typy obu kolumn, łącznie z UNSIGNED.

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.