Zadanie 1. Fanka

Gosia mieszka w Kucykowie i jest fanką lokalnej kobiecej drużyny piłki nożnej Galop Kucykowo. Gosia zbiera informacje o wszystkich wynikach oficjalnych meczów tej drużyny.

Informacje te zapisuje w plikach: Druzyny.txt, Sedziowie.txt, Wyniki.txt. Pierwszy rekord w każdym z plików jest nagłówkiem. Dane w każdym rekordzie oddzielone są znakiem tabulacji.

Pliki potrzebne do rozwiązania tego zadania znajdują się w załączniku:

R2lWyi4heDnoU

Przycisk do pobrania plików ZIP z treścią zadania.

Bazy danych - pliki projektu 672
Plik ZIP o rozmiarze 20.54 KB w języku polskim

Zadanie zostało opracowane przez Centralną Komisję Egzaminacyjną i pojawiło się na egzaminie maturalnym z informatyki w maju 2017 roku (poziom rozszerzony, część II). Cały arkusz można znaleźć na stronie internetowej CKE.

W pliku Druzyny.txt każdy rekord danych zawiera informacje o drużynie przeciwnej:

  • Id_druzyny – identyfikator drużyny, liczba z zakresu od 1 do 100;

  • Nazwa – nazwa drużyny, tekst o maksymalnej długości 30 znaków;

  • Miasto – miasto pochodzenia drużyny, tekst o maksymalnej długości 30 znaków.

Przykład Druzyny.txt:

Linia 1. Id podkreślnik druzyny Nazwa Miasto. Linia 2. 1 Srebrne Pumy Olsztyn. Linia 3. 13 Szybkie Mewy Bydgoszcz.

W pliku Sedziowie.txt każdy wiersz danych zawiera informacje o jednym sędzi:

  • Nr_licencji – numer licencji, tekst o długości 6 znaków;

  • Imie – imię sędziego, tekst o maksymalnej długości 20 znaków;

  • Nazwisko – nazwisko sędziego, tekst o maksymalnej długości 50 znaków.

Przykład Sedziowie.txt:

Linia 1. Nr podkreślnik licencji Imie Nazwisko. Linia 2. KJ9494 Anna Adamczyk. Linia 3. KI2449 Weronika Mazur.

W pliku Wyniki.txt każdy wiersz danych zawiera informacje o wynikach jednego meczu rozegranego przez drużynę Galop Kucykowo:

  • Data_meczu – data rozegrania meczu (w formacie rrrr‑mm‑dd);

  • Rodzaj_meczu – rodzaj meczu (T – towarzyski, L – ligowy, P – pucharowy; jeden znak);

  • Gdzie – miejsce rozegrania meczu (W – wyjazdowy, D – u siebie; jeden znak);

  • Id_druzyny – identyfikator drużyny przeciwnej, liczba z zakresu od 1 do 100;

  • Nr_licencji – numer licencji sędziego meczu, tekst o długości 6 znaków;

  • Bramki_zdobyte – bramki zdobyte przez Galop Kucykowo, liczba z zakresu od 0 do 20;

  • Bramki_stracone – bramki stracone przez Galop Kucykowo, liczba z zakresu od 0 do 20.

Przykład Wyniki.txt:

Linia 1. Data podkreślnik meczu Rodzaj podkreślnik meczu Gdzie Id podkreślnik druzyny Nr podkreślnik licencji Bramki podkreślnik zdobyte Bramki podkreślnik stracone. Linia 2. 2002 minus 01 minus 01 L W 5 DM2649 3 0. Linia 3. 2002 minus 01 minus 03 L D 60 KJ9494 0 1.

Wykorzystaj dostępne narzędzia informatyczne oraz dane zawarte w plikach druzyny.txt, sedziowie.txtwyniki.txt i wykonaj zadania. Odpowiedzi poprzedzone numerami zadań zapisz w pliku tekstowym wyniki.txt.

Rozwiązanie zadania

Przygotuj nowy plik bazy danych o nazwie: Fanka.accdb.

Import danych z plików tekstowych i relacje w Microsoft Access

Rozpoczynamy od przeniesienia danych udostępnionych w zadaniu (w postaci plików tekstowych) do tabel systemu bazodanowego, nie zapominając o sprawdzeniu typów danych oraz o ustanowieniu odpowiednich kluczy podstawowychklucz podstawowykluczy podstawowychrelacjirelacjarelacji (powiązań) pomiędzy atrybutami tabel:

R1ADP1VOfaqbA
Film nawiązujący do treści: Import danych z plików tekstowych i relacje w Microsoft Access.

Import danych z plików tekstowych i relacje w LibreOffice Base

Importujemy tabelę Druzyny, otwierając plik tekstowy druzyny.txt w narzędziu LibreOffice Calc, nie zmieniając przy tym domyślnych opcji importu pliku tekstowego. Upewniamy się, że w opcjach wyboru separatora zaznaczono pole przy tabulatorze:

RYR6F2291Cfq6

Po otwarciu pliku w arkuszu kalkulacyjnym z menu Edycja wybieramy opcję Zaznacz, następnie Zaznacz obszar danych lub naciskamy kombinację klawiszy Ctrl + *. W ten sposób zaznaczymy wszystkie dane, znajdujące się w arkuszu:

R1K3w0KDiAx9e1

Pora skopiować zaznaczony obszar danych kombinacją klawiszy Ctrl + C, po czym przejść do narzędzia LibreOffice Base i upewnić się, że w oknie Baza danych aktywną zakładką jest zakładka Tabele:

R1L4Y2lH5c6Kb

Teraz możemy wkleić informacje ze schowka za pomocą kombinacji klawiszy Ctrl + V. Spowoduje to otwarcie kreatora Kopiuj tabelę. Poprawną konfigurację zatwierdzamy przyciskiem Dalej, po czym przenosimy wszystkie skopiowane kolumny do nowo utworzonej tabeli:

R15OLVjAb00k4

W trzecim kroku kreatora upewniamy się co do typu wartości każdej kolumny – w przypadku tabeli Druzyny wszystkie atrybuty są typu Tekst [ VARCHAR ].

Nie należy także zapomnieć o ustanowieniu w tabeli klucza podstawowego – klikając prawym przyciskiem myszy w atrybut Id_druzyny, zaznaczamy opcję Klucz główny:

Ry1KbSC2XnuTk

Spowodowało to dodanie małej ikonki klucza przy wskazanym atrybucie. Możemy zakończyć import tabeli, klikając przycisk Utwórz.

Analogicznie postępujemy z pozostałymi tabelami, importując dane przy użyciu narzędzia LibreOffice Calc jako pośrednika w procesie przenoszenia plików tekstowych do bazy danych. Pamiętajmy, aby zawsze w pierwszym kroku kreatora importu zaznaczona była opcja Definicje i dane. Typy danych dobieramy zgodnie z opisem kolumn w treści zadania.

Warto jeszcze zauważyć, iż tabela Wyniki nie zawiera atrybutu, który mógłby stać się kluczem głównym – w związku z tym pozwalamy kreatorowi dodać własny klucz podstawowy, np. o nazwie Id_meczu:

R1IeObPBOW0Gb

W celu stworzenia relacji pomiędzy zaimportowanymi tabelami z menu wybieramy Narzędzia | Relacje, po czym dodajemy wszystkie trzy tabele do projektu relacji.

Ustanawiamy następujące powiązania pomiędzy kluczami podstawowymi i obcymi:

R1OoRAxtdpPNT

Zadanie 1.1

  • 1.1 a: Podaj, ile towarzyskich, ile ligowych oraz ile pucharowych meczów rozegrała drużyna Galop Kucykowo z drużynami ze swego miasta.

  • 1.1 b: W którym roku drużyna Galop Kucykowo rozegrała najwięcej meczów z drużynami ze swego miasta (łącznie wszystkie rodzaje meczów)? Podaj rok i liczbę tych meczów.

Rozwiązanie w Microsoft Access

Rozwiązanie 1.1 a

Rg877UIAB2pip
Film przedstawiający rozwiązanie zadania.

Rozwiązanie 1.1 b

R1YUzAUyLRRSN
Film przedstawiający rozwiązanie zadania.

Rozwiązanie w LibreOffice Base

Aby utworzyć nową kwerendękwerendakwerendęLibreOffice Base, należy w sekcji Baza danych kliknąć w zakładkę o nazwie Kwerendy, po czym wybrać opcję Utwórz projekt kwerendy:

RAes3ENjJx0vo

Rozwiązanie 1.1a

Projekt kwerendy 1a wyznaczającej liczbę towarzyskich, ligowych oraz pucharowych meczów rozegranych przez Galop Kucykowo z drużynami ze swego miasta wygląda analogicznie jak w MS Access – rekordy grupujemy według atrybutu Rodzaj_meczu, zaś funkcja agregująca zlicza liczbę rekordów.

R164bhLYtRgyZ

Warto zwrócić uwagę, iż wartości kolumny Miasto nie chcemy pokazywać w rezultatach – dlatego nie zaznaczono pola Widoczny dla tego atrybutu. Natomiast kryterium wartości tej kolumny jest oczywiście wymagane w grupowaniu, aby zliczane były tylko wyniki meczów z drużynami z Kucykowa.

Rozwiązanie 1.1b

Projekt kwerendy 1b wyznaczającej rok, w którym drużyna Galop Kucykowo rozegrała najwięcej meczów z drużynami ze swego miasta, prezentuje się następująco:

Rraf1mx9jRhDz1

Do wyjęcia roku z kolumny Data_meczu posłużono się funkcją o łatwej do zapamiętania nazwie YEAR(). Warto też zauważyć konieczność posortowania wyników malejąco, według wyznaczonej wartości liczby meczów.

Co ciekawe, argumentem funkcji agregującej, która oblicza liczbę meczów, mógł być dowolny atrybut tabeli Wyniki – w końcu zliczamy rekordy tej tabeli, a nie wartości w którejkolwiek z kolumn. W przedstawionym rozwiązaniu zdecydowano się na atrybut Id_meczu.

Liczbę zwracanych przez zapytanie rezultatów ograniczono do jednego wiersza (patrz: czerwona ramka) – w ten sposób otrzymujemy rok z największą liczbą meczów z drużynami z Kucykowa, jako że wyniki uprzednio posortowano malejąco.

Poprawna odpowiedź 1.1a:

Liczba meczów:

  • L 113

  • P 25

  • T 6

Poprawna odpowiedź 1.1b:

  • w roku 2007

  • liczba meczów rozegranych z drużynami ze swojego miasta: 21

Schemat oceniania

3 punkty – za prawidłową odpowiedź w całym poleceniu (oba podpunkty), w tym:

  • 1 punkt – podpunkt 1a – za poprawną liczbę meczów,

  • 2 punkty – podpunkt 1b - w tym: 1 punkt za podanie prawidłowego roku oraz 1 punkt za prawidłową liczbę meczów rozegranych z drużynami ze swego miasta,

  • 0 punktów – za odpowiedź błędną albo za brak odpowiedzi.

Zadanie 1.2

Podaj listę zawierającą nazwy drużyn, z którymi drużyna Galop Kucykowo ma zerowy bilans bramkowy, tzn. łączna liczba bramek zdobytych we wszystkich meczach rozegranych z daną drużyną jest równa łącznej liczbie bramek straconych w tych meczach.

Rozwiązanie w Microsoft Access

RUfQACROE3q4G
Film nawiązujący do polecenia drugiego.

Rozwiązanie w LibreOffice Base

W kwerendzie wyznaczamy wartość nowego atrybutu wirtualnego Bilans, którego wartość powstaje jako różnica w liczbie bramek zdobytych i straconych. Poszukiwana przez nas wartość to bilans zerowy, co uwzględniono w kryterium.

Jednak w zapytaniu nie chodzi o bilans pojedynczego spotkania, lecz o bilans wszystkich meczów z daną drużyną. Stąd rekordy zgrupowano według nazw poszczególnych zespołów oraz zsumowano bilanse wszystkich rozegranych z nimi spotkań:

R48W69ybVIVrl

Poprawna odpowiedź:

  • Nocne Pumy

  • Zwinne Mewy

Schemat oceniania

  • 2 punkty – za prawidłową odpowiedź,

  • 1 punkt – za podanie poprawnych dwóch ID_druzyny (84 i 48),

  • 0 punktów – za odpowiedź błędną lub brak odpowiedzi.

Zadanie 1.3

Podaj liczby meczów wyjazdowych – wygranych, przegranych i zremisowanych – drużyny Galop Kucykowo.

Rozwiązanie w Microsoft Access

R8WANPZTmFFqq
Film przedstawiający rozwiązanie zadania.

Rozwiązanie w LibreOffice Base

Instrukcję IIf znaną z MS Access możemy zastąpić w LibreOffice Base funkcją CASEWHEN():

RxFvFiSIS1vYE1

Zawartość wpisana w czerwoną ramkę jest analogiczna do rozwiązania przedstawionego dla programu MS Access:

Linia 1. CASEWHEN otwórz nawias okrągły cudzysłów Bramki podkreślnik zdobyte cudzysłów minus cudzysłów Bramki podkreślnik stracone cudzysłów zamknij nawias ostrokątny 0 przecinek apostrof Wygrana apostrof przecinek CASEWHEN otwórz nawias okrągły cudzysłów Bramki podkreślnik zdobyte cudzysłów minus cudzysłów Bramki podkreślnik stracone cudzysłów otwórz nawias ostrokątny 0 przecinek apostrof Przegrana apostrof przecinek apostrof Remis apostrof zamknij nawias okrągły zamknij nawias okrągły.

Jest to zagnieżdżona instrukcja, która realizuje logikę trzech możliwych scenariuszy – w zależności od wartości bilansu bramkowego, wartością nowego atrybutu Rezultat meczu będzie słowo: Wygrana, Przegrana lub Remis.

Dysponując takimi trzema wartościami jednoznacznie definiującymi wynik spotkania, łatwo już dokonać grupowania ze zliczeniem liczby rekordów pasujących do każdej z tych trzech kategorii.

Poprawna odpowiedź:

  • przegrana: 452

  • remis: 170

  • wygrana: 579

Schemat oceniania

  • 3 punkty – za prawidłową odpowiedź, po jednym punkcie za każdy rekord,

  • 2 punkty – za odpowiedź uzyskaną bez zastosowania filtra na mecze wyjazdowe (Przegrana: 910, Remis: 352, Wygrana: 1185),

  • 0 punktów – za inną błędną odpowiedź albo za brak odpowiedzi.

Słownik

klucz podstawowy
klucz podstawowy

zwany też kluczem głównym (ang. primary key) to jedno lub więcej pól (atrybutów), których wartość jednoznacznie identyfikuje każdy rekord w tabeli; taka cecha klucza nazywana jest unikatowością (unikalnością); klucz podstawowy służy do powiązania rekordów w jednej tabeli z rekordami z innej tabeli

kwerenda
kwerenda

(inaczej: zapytanie) czynność polegająca na zbieraniu lub poszukiwaniu informacji w bazach danych; kwerendy mogą mieć na celu wyłącznie pobranie danych, jak i ich usuwanie, dodawanie czy modyfikację

relacja
relacja

powiązanie logiczne występujące między dwoma tabelami realizowane za pomocą kluczy albo specjalnej tabeli (tabela łącząca); w oryginalnej nomenklaturze, którą wprowadził E. F. Codd, relacja oznaczała podzbiór iloczynu kartezjańskiego, czyli tabelę; współcześnie używamy tego terminu raczej w odniesieniu do powiązań logicznych pomiędzy tabelami, niż do samych tabel