Ćwiczenie – Tworzenie struktury bazy danych SQL (INF.03)
1. Tworzenie tabeli uczniów
Cel: Uczeń potrafi utworzyć prostą tabelę z kolumnami i kluczem głównym. Opis: Stwórz tabelę uczniowie z kolumnami: id_ucznia, imie, nazwisko, klasa.
Po co to robimy?
Większość zadań INF.03 startuje od tabeli z danymi osobowymi, takimi jak uczniowie lub pracownicy.
Jeżeli tabela jest zaprojektowana dobrze (ma klucz główny i odpowiednie typy), późniejsze zapytania SELECT i JOIN są dużo prostsze.
CREATE TABLE uczniowie (
id_ucznia INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(30),
nazwisko VARCHAR(40),
klasa VARCHAR(10)
);
Jak o tym myśleć?
– id_ucznia to unikalny numer ucznia – dzięki AUTO_INCREMENT baza sama nadaje kolejne wartości.
– VARCHAR wybieramy dla tekstu, a długość (np. 30) powinna być rozsądna, ale nie przesadzona.
– Gdy później pojawi się tabela oceny lub uczniowie_przedmioty, to właśnie id_ucznia będzie tam kluczem obcym.
Typowy błąd na egzaminie:
Pomylenie CREATE TABLE z INSERT INTO, albo brak PRIMARY KEY w tabeli, mimo że opis bazy jasno wymaga unikalnego identyfikatora.
2. Ograniczenia (constraints) i walidacja danych
Cel: Uczeń stosuje ograniczenia NOT NULL, UNIQUE, CHECK i DEFAULT. Opis: Dodaj ograniczenia do tabeli, aby dane były zawsze poprawne.
Co daje constraint?
Ograniczenia wymuszają poprawność danych na poziomie bazy, a nie tylko w programie.
Dzięki temu nie zapiszesz przedmiotu bez nazwy, liczby godzin mniejszej lub równej zero, ani dziwnego typu zajęć.
CREATE TABLE przedmioty (
id_przedmiotu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(40) NOT NULL UNIQUE,
godziny INT CHECK (godziny > 0),
typ ENUM('obowiązkowy', 'dodatkowy') DEFAULT 'obowiązkowy'
);
Dlaczego tak?
– NOT NULL pilnuje, żeby nazwa nie była pusta.
– UNIQUE gwarantuje, że ten sam przedmiot nie pojawi się dwa razy pod tą samą nazwą.
– CHECK (godziny > 0) blokuje błędne wartości typu 0 lub -5.
– DEFAULT 'obowiązkowy' ustawia domyślny typ, gdy nic nie podasz.
Uwaga egzaminacyjna:
Jeżeli w treści zadania pojawia się zakres („liczba godzin większa od zera”,
„średnia od 1 do 6”), to zwykle da się za to dostać punkt za dobrze dobrane CHECK.
3. Tworzenie relacji między tabelami (FOREIGN KEY)
Cel: Uczeń tworzy relację jeden–wiele (1:N) pomiędzy tabelami. Opis: Połącz uczniów z ich klasami za pomocą klucza obcego.
Najpierw zadaj sobie pytanie:
Czy nazwa klasy (np. „1TI”, „4B”) będzie powtarzać się w wielu rekordach uczniów?
Jeśli tak, powinna trafić do osobnej tabeli, a w uczniowie zostawiasz tylko powiązanie.
CREATE TABLE klasy (
id_klasy INT AUTO_INCREMENT PRIMARY KEY,
symbol VARCHAR(10) NOT NULL,
wychowawca VARCHAR(40)
);
ALTER TABLE uczniowie
ADD COLUMN id_klasy INT,
ADD CONSTRAINT fk_uczen_klasa
FOREIGN KEY (id_klasy) REFERENCES klasy(id_klasy);
Jak to działa?
– Każda klasa ma swój numer id_klasy i symbol, np. „3TI”.
– W tabeli uczniowie dopisujemy kolumnę id_klasy i robimy z niej klucz obcy.
– Dzięki temu baza nie pozwoli przypisać ucznia do klasy, która nie istnieje w tabeli klasy.
Częsty błąd:
Pomyłka w nazwie kolumny w kluczu obcym (np. id_klasa zamiast id_klasy) powoduje błąd wykonania skryptu,
a w arkuszu INF.03 – utratę punktów za cały podpunkt.
4. Tworzenie tabeli z relacją wiele–wiele (N:M)
Cel: Uczeń potrafi tworzyć tabelę pośredniczącą w relacjach N:M. Opis: Stwórz relację pomiędzy uczniami a przedmiotami (np. zapis ucznia na przedmiot).
Kiedy mamy relację N:M?
Gdy jeden uczeń może mieć wiele przedmiotów, a jeden przedmiot może być nauczany wielu uczniom.
Same klucze obce w dwóch tabelach nie wystarczą – potrzebna jest dodatkowa tabela pośrednicząca.
Dlaczego klucz główny jest podwójny?
– PRIMARY KEY (id_ucznia, id_przedmiotu) oznacza, że ten sam uczeń nie może być dwa razy zapisany na ten sam przedmiot.
– Każdy rekord opisuje jedną parę: konkretny uczeń – konkretny przedmiot.
Uwaga egzaminacyjna:
W pytaniach testowych odpowiedź o tabeli pośredniczącej (z dwoma kluczami obcymi) jest poprawna,
natomiast „połączenie dwóch tabel samymi kluczami obcymi” opisuje tylko relację 1:N, a nie N:M.
Podpowiedź do projektu:
– uczniowie: klucz główny id_ucznia, klucz obcy do klasy.
– klasy: klucz główny id_klasy, unikalny symbol klasy.
– nauczyciele: klucz główny id_nauczyciela, dane osobowe, np. imię, nazwisko, specjalność.
– przedmioty: klucz główny id_przedmiotu, nazwa, liczba godzin, klucz obcy do nauczyciela prowadzącego.
– oceny: klucz główny (np. id_oceny) lub para (id_ucznia, id_przedmiotu, data),
plus klucze obce do ucznia i przedmiotu oraz CHECK na wartość oceny (np. 1–6).
Po wykonaniu tego ćwiczenia:
Uczeń potrafi zaprojektować kompletną strukturę relacyjnej bazy danych dla szkoły,
odwzorowując najczęstszy typ zadania projektowego spotykany w arkuszach INF.03.