Potwierdzone sprawdzone punkt po punkcie · 2026-11-04
Pomiń nawigację
Materiał edukacyjny · Informatyka Bazy danych · Moduł 09

BAZY DANYCH · INF.03

Egzamin INF.03 — pełne scenariusze

To próba generalna: dostajesz opis biblioteki i musisz przejść całą drogę — projekt, utworzenie tabel, import, raporty, zmiany danych i eksport. Zadania łączą wszystkie wcześniejsze moduły.

Od wymagań do projektu bazy

Zadanie egzaminacyjne zaczyna się od opisu sytuacji, a nie od listy tabel. Trzeba z tekstu wyłowić encje, czyli osoby, rzeczy i zdarzenia, o których chcemy przechowywać dane. Pomagają w tym trzy pytania: kto? co? kiedy? W zdaniu „uczeń wypożycza książkę i ma termin zwrotu” występują uczeń, książka i wypożyczenie z datami. To już pierwszy szkic projektu.

Kolejny krok to atrybuty. Przy każdym bycie wypisujemy informacje, które trzeba zapamiętać: uczeń ma imię, nazwisko, klasę i datę urodzenia; książka ma tytuł, kategorię, wydawnictwo i cenę; wypożyczenie ma datę wypożyczenia, termin zwrotu i status. Cechy, które powtarzają się przy wielu rekordach, wynosimy do osobnych tabel. Dzięki temu nazwa kategorii nie jest wpisywana przy każdej książce, a wychowawca przy każdym uczniu.

SHOW TABLES;
DESCRIBE wypozyczenia;
SHOW CREATE TABLE ksiazki_autorzy;

Polecenie SHOW TABLES pokazuje listę tabel, DESCRIBE — kolumny i typy, a SHOW CREATE TABLE — pełną definicję z kluczami i silnikiem. To szybki sposób sprawdzenia, czy projekt w bazie odpowiada projektowi na papierze. Jeśli w tabeli wypozyczenia widzisz kolumnę tytul, to znak, że dane książki zostały zdublowane i trzeba je przenieść do tabeli ksiazki.

Relacje opisujemy między kluczami. Jeden uczeń ma wiele wypożyczeń, ale jedno wypożyczenie należy do jednego ucznia — to relacja jeden-do-wielu. Książka może mieć wielu autorów, a autor wiele książek — to relacja wiele-do-wielu, którą rozwiązuje tabela łącząca ksiazki_autorzy. Klucz główny identyfikuje wiersz, a klucz obcy wskazuje wiersz w innej tabeli. Para ksiazka_id i autor_id w tabeli łączącej jest unikalna, żeby ten sam autor nie został dopisany do tej samej książki dwa razy.

ERD biblioteki — encje i klucze obce klasy PK id nazwa, wychowawca uczniowie PK id FK klasa_id wypozyczenia PK id, FK uczen_id FK ksiazka_id, pracownik_id ksiazki PK id FK kategoria_id autorzy PK id imie, nazwisko ksiazki_autorzy FK ksiazka_id FK autor_id wydawnictwa PK id nazwa, miasto kategorie PK id nazwa, kod 1:N 1:N N:1 1:N 1:N 1:N M:N przez tabelę łączącą Klucz główny (PK) identyfikuje wiersz, a klucz obcy (FK) wskazuje wiersz w innej tabeli.
Diagram ERD to skrót myślowy projektu. Każdy prostokąt stanie się tabelą, a strzałka — kluczem obcym. Tabela ksiazki_autorzy rozwiązuje relację wiele-do-wielu między książkami i autorami.
Fragment wymagań Element projektu Uzasadnienie
„uczeń należy do jednej klasy” uczniowie.klasa_id jako FK wiele uczniów może wskazywać tę samą klasę
„każde wypożyczenie ma datę i termin” kolumny DATE w tabeli wypozyczenia daty opisują zdarzenie, a nie osobę ani książkę
„książka może mieć wielu autorów” tabela ksiazki_autorzy relacja wiele-do-wielu wymaga tabeli łączącej
„wydawnictwo ma nazwę i miasto” osobna tabela wydawnictwa dane wydawnictwa nie powinny powtarzać się przy każdej książce

Projekt warto sprawdzić normalizacją. Pierwsza postać normalna wymaga wartości atomowych — nie wolno wpisywać w jednej komórce listy autorów rozdzielonej przecinkami. Druga usuwa zależności częściowe od klucza złożonego, dlatego tabela ksiazki_autorzy nie przechowuje tytułu książki. Trzecia usuwa zależności przechodnie: miasto wydawnictwa zależy od wydawnictwa, a nie bezpośrednio od książki, więc należy do tabeli wydawnictwa. Zdenormalizowany raport można później zbudować widokiem, ale nie trzeba psuć przez to projektu tabel.

Przykłady z życia

1. Zapisy na wycieczkę. W arkuszu zapisów powtarzają się imię ucznia, klasa, nazwa wycieczki i wychowawca. Po zmianie wychowawcy trzeba poprawić wiele komórek. Podział na tabele uczniów, klas i wycieczek usuwa powtarzanie i zmniejsza ryzyko błędu.

2. Wypożyczalnia sprzętu sportowego. Uczeń wypożycza piłkę, a piłka ma numer, typ i stan. Wypożyczenie łączy ucznia, sprzęt, pracownika i daty. To ten sam schemat co biblioteka, tylko inne nazwy encji — dlatego warto uczyć się wzorca, a nie pojedynczego przykładu.

3. Sklep internetowy. Klient składa zamówienie, które zawiera wiele produktów. Jedno zamówienie ma wielu produktów, a jeden produkt może wystąpić w wielu zamówieniach. Tabela pozycji zamówienia rozwiązuje tę relację i przechowuje ilość oraz cenę z chwili zakupu.

Geografia: świat dzielimy na państwa, a państwa na miasta. Miasto należy do jednego państwa, ale państwo ma wiele miast — to relacja jeden-do-wielu. Gdyby w tabeli miast wpisać nazwę państwa w każdej komórce, literówka przy jednym mieście tworzyłaby pozornie nowe państwo.

Jak to się łączy…

W module 01 poznaliśmy encje i tabele, a w module 02 tworzyliśmy klucze w phpMyAdmin. Tutaj wracamy do projektu, ale patrzymy na niego jak na zadanie egzaminacyjne: od tekstu wymagań do ERD. W module 05 sprawdzisz projekt zapytaniami JOIN, a w kolejnych sekcjach utworzysz tabele, zaimportujesz dane i przygotujesz raport.

Matematyka: relacja to podzbiór iloczynu kartezjańskiego dwóch zbiorów. Para (uczen_id, ksiazka_id) w wypożyczeniu należy do iloczynu zbioru uczniów i zbioru książek. Klucz obcy pilnuje, żeby oba elementy pary naprawdę istniały.

Zadanie transferowe 1 — projekt wypożyczalni sprzętu

Samorząd uczniowski chce wypożyczać sprzęt sportowy: piłki, rakiety i skakanki. Każdy sprzęt ma numer, nazwę, kategorię i stan. Uczeń może wypożyczyć wiele rzeczy, a jedna rzecz może być wypożyczana wielokrotnie. Wypożyczenie ma datę, termin zwrotu i pracownika odpowiedzialnego. Zaprojektuj tabele, klucze i relacje. Wskaż, gdzie przechowasz nazwę kategorii i dlaczego nie w tabeli wypożyczeń. Opisz, jak sprawdzisz projekt zapytaniem kontrolnym.

Pokaż przykładowe rozwiązanie i kryteria

Przykład: tworzę tabele sprzet (id, nazwa, kategoria_id, stan), kategorie_sprzetu (id, nazwa), uczniowie (id, imie, nazwisko, klasa_id) oraz wypozyczenia_sprzetu (id, uczen_id, sprzet_id, pracownik_id, data_wypozyczenia, termin_zwrotu). Kategoria jest słownikiem, więc jej nazwa występuje tylko w tabeli kategorii, a sprzęt wskazuje ją przez kategoria_id. Uczeń i sprzęt są kluczami obcymi w wypożyczeniu. Projekt sprawdzam zapytaniem JOIN, które pokazuje wypożyczenie razem z nazwą sprzętu i nazwiskiem ucznia; jeśli wynik ma puste kolumny, prawdopodobnie brakuje klucza obcego lub danych.

Kryteria: (1) encje — uczeń, sprzęt, kategoria, wypożyczenie i pracownik są osobnymi tabelami; (2) klucze — każda tabela ma klucz główny, a wypożyczenie dwa klucze obce do ucznia i sprzętu; (3) normalizacja — nazwa kategorii nie powtarza się w tabeli sprzętu ani wypożyczeń; (4) weryfikacja — uczeń proponuje konkretne zapytanie kontrolne i wyjaśnia, co sprawdza.

1. Uczeń może wypożyczyć wiele książek, a ta sama książka może być wypożyczana wielokrotnie. Jak opisać relację między uczniami i książkami w projekcie bazy?
1. Uczeń może wypożyczyć wiele książek, a ta sama książka może być wypożyczana wielokrotnie. Jak opisać relację między uczniami i książkami w projekcie bazy?
2. Która kolumna w tabeli wypozyczenia wskazuje ucznia, który wypożyczył książkę?
2. Która kolumna w tabeli wypozyczenia wskazuje ucznia, który wypożyczył książkę?
3. Po co w schemacie biblioteki istnieje tabela ksiazki_autorzy?
3. Po co w schemacie biblioteki istnieje tabela ksiazki_autorzy?

Tworzenie tabel, import i eksport

Projekt na papierze trzeba zamienić na konkretne polecenia. Zaczynamy od tabel nadrzędnych, bo klucz obcy wymaga, żeby tabela, do której wskazuje, już istniała. W schemacie biblioteki najpierw powstają klasy, kategorie, wydawnictwa i autorzy, potem uczniowie i ksiazki, a na końcu wypozyczenia, rezerwacje, opinie i ksiazki_autorzy. Ta kolejność wynika z zależności, a nie z kolejności alfabetycznej.

CREATE TABLE ksiazki_archiwum (
  id INT UNSIGNED NOT NULL,
  tytul VARCHAR(150) NOT NULL,
  rok_wydania YEAR NOT NULL,
  cena DECIMAL(6,2) NOT NULL,
  data_archiwizacji DATE NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO ksiazki_archiwum
  (id, tytul, rok_wydania, cena, data_archiwizacji)
SELECT id, tytul, rok_wydania, cena, '2026-11-04' AS data_archiwizacji
FROM ksiazki
WHERE rok_wydania < 1950;

W definicji tabeli każda kolumna ma typ i ograniczenia. INT UNSIGNED pasuje do identyfikatorów, VARCHAR(150) do tytułu, YEAR do roku, a DECIMAL(6,2) do ceny. Klucz główny zapewnia unikalność, a NOT NULL blokuje brak wartości. Tabela archiwalna nie ma klucza obcego do uczniów ani książek, bo ma przetrwać nawet po usunięciu oryginalnych rekordów. To świadoma decyzja projektowa: archiwum przechowuje kopię historii, a nie żywe powiązania.

-- Import z pliku CSV w phpMyAdmin:
-- 1. Wybierz tabelę i zakładkę Import.
-- 2. Wskaż plik CSV w kodowaniu UTF-8.
-- 3. Ustaw separator zgodny z plikiem (np. średnik).
-- 4. Zaznacz, że pierwszy wiersz zawiera nazwy kolumn.
-- 5. Sprawdź podgląd i kliknij Wykonaj.

SELECT COUNT(*) AS zaimportowane FROM ksiazki_archiwum;

Import CSV wymaga zgodności formatu. Data musi mieć postać RRRR-MM-DD, a cena kropkę dziesiętną, jeśli kolumna jest typu DECIMAL. Separator w pliku musi być taki sam jak ustawiony w imporcie — w polskim Excelu często jest to średnik, a nie przecinek. Pierwszy wiersz z nazwami kolumn warto zachować, ale trzeba powiedzieć phpMyAdmin, że go pomija. Po imporcie sprawdzamy liczbę wierszy i kilka rekordów, a nie tylko komunikat o sukcesie.

Eksport może obejmować całą bazę albo wybrane tabele. Format SQL zachowuje strukturę i dane, więc nadaje się do odtworzenia bazy. Format CSV jest wygodny do arkusza, ale nie przenosi kluczy ani typów. Przed eksportem warto zatrzymać zmiany w aplikacji, żeby plik nie zawierał połowy transakcji. Po eksporcie testowo zaimportuj go do innej bazy — to jedyny sposób, żeby sprawdzić, czy plik jest kompletny.

-- Wiersz poleceń Windows, nie edytor SQL:
-- mysqldump -u root -p --single-transaction --result-file=biblioteka.sql biblioteka_szkolna

-- Sprawdzenie po imporcie:
SHOW TABLES;
SELECT COUNT(*) AS ksiazki FROM ksiazki;
SELECT COUNT(*) AS wypozyczenia FROM wypozyczenia;
Od pliku do raportu — każdy krok ma kontrolę 1. Plik CSV UTF-8, separator, daty nagłówki kolumn 2. Walidacja typ, długość, klucze duplikaty i puste pola 3. Tabela CREATE + INSERT klucze i indeksy 4. Raport / eksport SELECT, widok, plik SQL weryfikacja liczby wierszy Błąd na etapie 1 lub 2 zatrzymuje import. Lepiej poprawić plik niż „naprawiać” dane po fakcie. Po imporcie zawsze sprawdź COUNT(*), wybrane wiersze i klucze obce.
Import nie kończy się w chwili kliknięcia „Wykonaj”. Obejmuje przygotowanie pliku, walidację, zapis do tabeli i kontrolę wyniku.
Objaw Prawdopodobna przyczyna Co poprawić
błąd 1062 — duplikat powtórzony klucz główny lub unikalny ISBN usunąć duplikat z pliku lub użyć nowego numeru
błąd 1452 — klucz obcy brakuje wiersza nadrzędnego, np. kategorii najpierw zaimportować tabelę nadrzędną
błąd 1292 — zła data data w formacie dziennym zamiast RRRR-MM-DD przekonwertować kolumnę przed importem
błąd 1366 — zła wartość cena z przecinkiem dziesiętnym lub tekst w kolumnie liczby zamienić przecinek na kropkę i usunąć jednostki
za mało wierszy pominięty pierwszy wiersz lub zły separator sprawdzić podgląd i ustawienia importu

Przykłady z życia

1. Przenoszenie kontaktów. Eksportujesz kontakty z telefonu do pliku CSV, a potem importujesz je na nowy telefon. Jeśli plik ma inny separator albo brakuje kolumny z numerem, import się nie uda. Kopia w formacie SQL byłaby tu bezużyteczna, bo telefon nie zna języka MySQL.

2. Inwentaryzacja biblioteki. Bibliotekarka dostaje od księgowej arkusz z nowymi książkami. Najpierw sprawdza, czy każdy tytuł ma kategorię i wydawnictwo, potem importuje dane do tabeli ksiazki. Dopiero na końcu liczy, czy liczba wierszy zgadza się z liczbą pozycji na fakturze.

3. Cennik w sklepie. Po zmianie cennika eksportuje się tabelę do CSV i wysyła do działu marketingu. Jeśli w pliku zostaną stare ceny, klienci zobaczą nieaktualną ofertę. Eksport jest więc nie tylko kopią, ale też publikacją danych — trzeba wiedzieć, dokąd trafia.

Informatyka: w zawodzie technika informatyka import danych to typowy etap migracji systemu. Administrator najpierw uruchamia go na kopii bazy, porównuje liczbę rekordów i dopiero potem powtarza operację na wersji produkcyjnej.

Historia: archiwum dokumentów przechowuje kopie nawet wtedy, gdy oryginały już nie istnieją. Tabela ksiazki_archiwum działa podobnie: nie jest już powiązana z żywą tabelą książek, ale pozwala odtworzyć stan katalogu z konkretnego dnia.

Jak to się łączy…

W module 02 tworzyliśmy pierwsze tabele i importowaliśmy całą bazę. Tutaj robimy to w scenariuszu egzaminacyjnym: od projektu przez CREATE TABLE po import wybranych danych. W module 07 przećwiczysz transakcje przy takich operacjach, a w module 08 zabezpieczysz kopię i dostęp do niej.

Język polski: nagłówek kolumny powinien być krótki i jednoznaczny. „Data” bez kontekstu może oznaczać datę wypożyczenia, zwrotu albo archiwizacji. W imporcie nie da się poprawić znaczenia po fakcie — trzeba ustalić je przed zapisaniem pliku.

4. W jakiej kolejności należy tworzyć tabele połączone kluczami obcymi?
4. W jakiej kolejności należy tworzyć tabele połączone kluczami obcymi?
5. Co należy sprawdzić w pliku CSV przed importem do bazy?
5. Co należy sprawdzić w pliku CSV przed importem do bazy?
6. Co najlepiej potwierdza, że import danych zakończył się poprawnie?
6. Co najlepiej potwierdza, że import danych zakończył się poprawnie?

Raport, DML i checklista egzaminacyjna

Zadanie INF.03 zwykle łączy kilka umiejętności: trzeba zaprojektować bazę, utworzyć tabele, zaimportować dane, napisać raport i wykonać zmianę danych. Największym wrogiem jest pośpiech. Zacznij od przeczytania całego polecenia i wypisania czasowników: „utwórz”, „zaimportuj”, „wyświetl”, „zaktualizuj”, „wyeksportuj”. Dopiero potem otwieraj phpMyAdmin. Każdy punkt ma osobny dowód do sprawdzenia, więc warto pracować w kolejności, która pozwala wrócić do wcześniejszego etapu bez paniki.

Raport najczęściej wymaga połączenia kilku tabel i agregacji. Przykład poniżej pokazuje liczbę wypożyczeń oraz sumę i średnią kar w każdej klasie. Grupowanie odbywa się po identyfikatorze i nazwie klasy, bo nazwa może się powtórzyć w kolejnych latach. Warunek HAVING ogranicza wynik do klas z co najmniej dziesięcioma wypożyczeniami, a sortowanie ustawia klasy z największą sumą kar na początku.

SELECT k.nazwa AS klasa,
       COUNT(w.id) AS wypozyczenia,
       SUM(w.kara) AS suma_kar,
       ROUND(AVG(w.kara), 2) AS srednia_kara
FROM klasy k
JOIN uczniowie u ON u.klasa_id = k.id
JOIN wypozyczenia w ON w.uczen_id = u.id
GROUP BY k.id, k.nazwa
HAVING COUNT(w.id) >= 10
ORDER BY suma_kar DESC, klasa;

Druga część zadania często dotyczy zmiany danych. Wtedy liczy się nie tylko poprawny SQL, ale też kolejność i bezpieczeństwo. Najpierw sprawdzasz zasięg zapytaniem SELECT, potem wykonujesz UPDATE w transakcji, a na końcu weryfikujesz wynik. Jeśli zadanie mówi „zmień tylko przeterminowane wypożyczenia”, warunek musi zawierać status i datę, a nie sam identyfikator przypadkowego rekordu. Po COMMIT nie ma już prostego cofnięcia — zostaje kopia lub ręczne poprawki.

START TRANSACTION;

UPDATE wypozyczenia
SET status = 'zwrocone',
    data_zwrotu = '2026-10-01',
    kara = DATEDIFF('2026-10-01', termin_zwrotu) * 0.50
WHERE id IN (36, 37, 38);

-- Kontrola przed zatwierdzeniem:
SELECT id, status, data_zwrotu, kara
FROM wypozyczenia
WHERE id IN (36, 37, 38);

COMMIT;

Po każdej większej operacji wykonaj krótką kontrolę. SELECT COUNT(*) pokazuje, ile wierszy jest w tabeli, GROUP BY status — czy nie zostały dziwne stany, a SHOW CREATE TABLE — czy klucze i typy są takie jak w projekcie. Na egzaminie nie masz zwykle czasu na pełny audyt, ale trzy szybkie zapytania potrafią uratować całe zadanie. Lepiej zauważyć brakujący klucz obcy przed eksportem niż po oddaniu pracy.

SELECT status, COUNT(*) AS ile
FROM wypozyczenia
GROUP BY status;

SELECT COUNT(*) AS liczba_kar
FROM wypozyczenia
WHERE kara > 0;

SHOW CREATE TABLE wypozyczenia;

Eksport końcowy to nie tylko „zapisz plik”. Sprawdź, czy wybierasz właściwą bazę, czy eksport obejmuje strukturę i dane oraz czy plik nie zawiera przypadkowych tabel testowych. Jeśli zadanie wymaga pliku CSV, nie dodawaj do niego komentarzy ani dodatkowych nagłówków. Nazwij plik zgodnie z poleceniem i zapisz go w miejscu, które łatwo wskażesz nauczycielowi. Po eksporcie możesz wykonać testowy import do pustej bazy — to najlepszy dowód, że plik jest poprawny.

Kolejność pracy nad zadaniem 1. Analiza wymagania i dane 2. Tabele CREATE i klucze 3. Import CSV lub SQL 4. Raport i DML SELECT, UPDATE 5. Eksport plik i weryfikacja Nie przechodź do kolejnego etapu, dopóki nie sprawdzisz wyniku poprzedniego. Kontrola po każdym kroku kosztuje minutę, a ratuje całe zadanie.
Pięć etapów zadania egzaminacyjnego. Każdy kończy się krótką kontrolą, zanim przejdziesz dalej.
Krok Co zrobić Kontrola
1 przeczytaj polecenie i wypisz czasowniki czy rozumiesz każde polecenie
2 naszkicuj ERD i ustal klucze czy relacje wiele-do-wielu mają tabelę łączącą
3 utwórz bazę i tabele od nadrzędnych do podrzędnych SHOW CREATE TABLE
4 zaimportuj dane i sprawdź liczbę wierszy COUNT(*) i wybrane rekordy
5 napisz raport z aliasami i sortowaniem czy kolumny mają wymagane nazwy
6 wykonaj DML w transakcji liczba zmienionych wierszy i SELECT po zmianie
7 sprawdź stany po DML GROUP BY status
8 wykonaj eksport końcowy właściwa baza, struktura i dane
9 zapisz plik pod wymaganą nazwą testowy import lub podgląd pliku

Przykłady z życia

1. Egzamin praktyczny. Zdający dostaje opis biblioteki i listę poleceń. Najpierw czyta całość, potem tworzy tabele, importuje dane i dopiero na końcu pisze raport. Osoba, która zaczyna od raportu bez tabel, traci czas na poprawianie nazw kolumn.

2. Raport dla dyrektora. Dyrektor chce wiedzieć, które klasy mają najwięcej wypożyczeń i kar. Raport musi mieć czytelne nagłówki i posortowane wyniki. Surowa tabela z 45 wierszami nie odpowiada na pytanie, dopóki nie zostanie zgrupowana.

3. Poprawka po błędzie. Po aktualizacji okazuje się, że zmieniono o jeden wiersz za dużo. Jeśli operacja była w transakcji, wystarczy ROLLBACK przed COMMIT. Jeśli nie, trzeba odtworzyć dane z kopii i jeszcze raz przeliczyć warunek. Dlatego transakcja jest tańsza niż odwaga.

Matematyka: raport z sumą i średnią trzeba sprawdzić bilansem: suma wartości w grupach powinna równać się sumie dla całej tabeli, jeśli żadna grupa nie została pominięta. To prosta kontrola, która wykrywa błąd JOIN lub zbyt wąski warunek.

Jak to się łączy…

W module 04 uczyliśmy się grupować, w module 05 łączyć tabele, a w module 07 bezpiecznie zmieniać dane. Tutaj składamy te umiejętności w jeden scenariusz. W module 08 przypomnisz sobie funkcje, uprawnienia i kopie zapasowe, które są potrzebne na końcu zadania.

Język polski: polecenie egzaminacyjne jest tekstem użytkowym. Słowa „tylko”, „każdy”, „co najmniej” i „posortuj” zmieniają wynik. Warto podkreślić je przed pisaniem SQL, bo jeden pominięty warunek potrafi przekreślić poprawną składniowo odpowiedź.

Zadanie transferowe 2 — import z trzema błędami

Otrzymujesz plik CSV z 30 książkami. W trakcie kontroli zauważasz trzy problemy: jeden ISBN powtarza się drugi raz, jedna data wydania ma format 15.09.2026, a jedna książka ma kategorię 99, której nie ma w tabeli kategorie. Opisz kolejność działań od otwarcia pliku do eksportu końcowego. Wskaż, w którym momencie poprawisz każdy błąd, jak sprawdzisz, że import się udał, i dlaczego nie należy najpierw importować, a potem „jakoś naprawiać” dane.

Pokaż przykładowe rozwiązanie i kryteria

Przykład: najpierw otwieram plik w edytorze tekstu lub arkuszu i sprawdzam nagłówki, separator oraz kodowanie. Duplikat ISBN poprawiam, nadając nowy numer lub usuwając powtórzony wiersz. Datę zamieniam na 2026-09-15, a kategorię 99 zamieniam na istniejący identyfikator lub dopisuję brakującą kategorię do słownika przed importem. Importuję do tabeli ksiazki, sprawdzam COUNT(*) i kilka wierszy, a następnie wykonuję raport i eksport. Importowanie błędnych danych od razu jest złe, bo baza odrzuci część wierszy albo zapisze je w niespójnym stanie, a poprawianie po fakcie wymaga dodatkowych zapytań i zwiększa ryzyko pomyłki.

Kryteria: (1) diagnoza — uczeń nazywa wszystkie trzy błędy i ich skutki; (2) kolejność — poprawia dane przed importem, a nie po nim; (3) spójność — dba o klucz obcy kategorii i unikalność ISBN; (4) weryfikacja — po imporcie sprawdza liczbę wierszy, wybrane rekordy i gotowość pliku do eksportu.

7. Od czego najlepiej zacząć praktyczne zadanie egzaminacyjne z baz danych?
7. Od czego najlepiej zacząć praktyczne zadanie egzaminacyjne z baz danych?
8. Raport ma pokazać tylko klasy z co najmniej dziesięcioma wypożyczeniami. Gdzie umieścić ten warunek?
8. Raport ma pokazać tylko klasy z co najmniej dziesięcioma wypożyczeniami. Gdzie umieścić ten warunek?
9. Co należy zrobić bezpośrednio przed eksportem końcowym bazy?
9. Co należy zrobić bezpośrednio przed eksportem końcowym bazy?

Ćwiczenia SQL

Zadania do samodzielnego wykonania w edytorze SQL.