Laboratorium 1.1: Wprowadzenie do baz danych i normalizacji

Zadanie 1: Instalacja środowiska i pierwsze połączenie

Cel

Celem tego zadania jest zapoznanie się z procesem instalacji lokalnego serwera deweloperskiego XAMPP oraz nawiązanie pierwszego połączenia z serwerem baz danych MariaDB (zamiennik MySQL) za pomocą wiersza poleceń.

Scenariusz

Jesteś początkującym administratorem baz danych i Twoim pierwszym zadaniem jest przygotowanie środowiska pracy. Musisz zainstalować pakiet XAMPP, który dostarcza serwer WWW Apache, serwer baz danych MariaDB oraz interpreter PHP. Po pomyślnej instalacji musisz zweryfikować, czy usługi działają poprawnie. Następnie, korzystając z wiersza poleceń, zalogujesz się na konto administratora (root) serwera MariaDB. Jest to fundamentalny krok, który pozwoli Ci na dalsze zarządzanie bazami danych, tworzenie tabel i wykonywanie zapytań. Zrozumienie tego procesu jest kluczowe dla każdego, kto chce pracować z bazami danych w środowisku deweloperskim. Uruchomienie usług i zalogowanie się do konsoli SQL potwierdzi, że Twoje środowisko jest gotowe do dalszych, bardziej zaawansowanych zadań.

Kroki do wykonania

  1. Pobierz i zainstaluj pakiet XAMPP ze strony apachefriends.org.
  2. Po instalacji uruchom Panel Kontrolny XAMPP (XAMPP Control Panel).
  3. Uruchom moduły Apache oraz MySQL, klikając przycisk "Start" przy każdym z nich. Poprawnie uruchomiona usługa zostanie podświetlona na zielono.
  4. Otwórz wiersz poleceń (CMD) w systemie Windows.
  5. Przejdź do katalogu, w którym zainstalowany jest klient MySQL w pakiecie XAMPP. Zazwyczaj jest to c:\xampp\mysql\bin.
  6. Wydaj polecenie, aby zalogować się na konto roota. Domyślnie w XAMPP hasło jest puste.

Przykłady poleceń

cd c:\xampp\mysql\bin mysql -u root

Podsumowanie

W tym zadaniu nauczyłeś się, jak zainstalować i uruchomić lokalne środowisko serwerowe XAMPP. Dowiedziałeś się również, jak korzystać z wiersza poleceń, aby połączyć się z serwerem bazy danych MariaDB. To podstawowa umiejętność, która otwiera drogę do dalszej pracy z bazami danych.

Zadanie 2: Tworzenie bazy danych i użytkownika

Cel

Nauczenie się, jak tworzyć nową bazę danych oraz dedykowanego użytkownika z ograniczonymi uprawnieniami, co jest podstawową zasadą bezpieczeństwa.

Scenariusz

Twoja firma planuje stworzyć nową aplikację do zarządzania biblioteką. Zostałeś poproszony o przygotowanie fundamentów pod ten system. Twoim zadaniem jest stworzenie nowej, pustej bazy danych o nazwie `biblioteka`. Praca na koncie `root` jest ryzykowna, dlatego musisz również utworzyć nowego użytkownika o nazwie `bibliotekarz`, który będzie miał pełne uprawnienia, ale tylko do bazy `biblioteka`. Ten użytkownik będzie wykorzystywany przez aplikację do łączenia się z bazą, co minimalizuje ryzyko uszkodzenia innych baz danych na serwerze w przypadku błędu lub ataku. Po utworzeniu użytkownika i nadaniu mu uprawnień, wylogujesz się z konta `root` i przetestujesz połączenie, logując się jako `bibliotekarz`, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.

Kroki do wykonania

  1. Będąc zalogowanym jako `root` w konsoli MariaDB, utwórz nową bazę danych.
  2. Ustaw kodowanie znaków dla bazy na `utf8mb4` z metodą porównywania `utf8mb4_polish_ci`, aby zapewnić poprawne obsługiwanie polskich znaków.
  3. Utwórz nowego użytkownika, który będzie mógł logować się tylko z lokalnego komputera (`localhost`).
  4. Nadaj temu użytkownikowi wszystkie uprawnienia do nowo utworzonej bazy danych.
  5. Zastosuj zmiany uprawnień.
  6. Wyloguj się z konta `root` i zaloguj się jako nowy użytkownik, podając hasło.

Przykłady poleceń

CREATE DATABASE biblioteka CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_polish_ci'; CREATE USER 'bibliotekarz'@'localhost' IDENTIFIED BY 'TwojeSilneHaslo123!'; GRANT ALL PRIVILEGES ON biblioteka.* TO 'bibliotekarz'@'localhost'; FLUSH PRIVILEGES; EXIT; -- Logowanie jako nowy użytkownik mysql -u bibliotekarz -p

Podsumowanie

W tym ćwiczeniu utworzyłeś swoją pierwszą bazę danych oraz dedykowanego użytkownika. Nauczyłeś się nadawać uprawnienia, co jest kluczowe dla bezpieczeństwa systemów bazodanowych. Oddzielenie ról administratora (root) od użytkowników aplikacji to fundamentalna, dobra praktyka.

Zadanie 3: Tworzenie tabeli książki

Cel

Zdobycie praktycznej umiejętności tworzenia tabel w bazie danych za pomocą polecenia CREATE TABLE, definiowania kolumn, typów danych oraz klucza głównego.

Scenariusz

Mając już bazę `biblioteka`, nadszedł czas, aby zdefiniować jej strukturę. Pierwszym elementem, który musisz stworzyć, jest tabela do przechowywania informacji o książkach. Musisz zaprojektować tabelę o nazwie `ksiazki`, która będzie zawierała kluczowe informacje: unikalny identyfikator (ID), tytuł, autora, rok wydania oraz numer ISBN. Każda kolumna musi mieć odpowiedni typ danych – na przykład ID powinno być automatycznie zwiększaną liczbą całkowitą, a tytuł i autor tekstem o zmiennej długości. Klucz główny na kolumnie ID zapewni unikalność każdego rekordu. Po napisaniu i wykonaniu zapytania SQL, sprawdzisz strukturę nowo utworzonej tabeli, aby upewnić się, że wszystkie kolumny i ich właściwości zostały zdefiniowane poprawnie. To zadanie nauczy Cię, jak przekładać koncepcyjny model danych na fizyczną strukturę w bazie.

Kroki do wykonania

  1. Zaloguj się do bazy jako użytkownik `bibliotekarz`.
  2. Przejdź do kontekstu bazy `biblioteka`.
  3. Napisz i wykonaj polecenie CREATE TABLE, które stworzy tabelę `ksiazki`.
  4. Zdefiniuj następujące kolumny:
  5. Sprawdź strukturę tabeli za pomocą polecenia DESCRIBE.

Przykłady poleceń

USE biblioteka; CREATE TABLE ksiazki ( id_ksiazki INT AUTO_INCREMENT PRIMARY KEY, tytul VARCHAR(255) NOT NULL, autor VARCHAR(255) NOT NULL, rok_wydania INT, isbn VARCHAR(13) UNIQUE ); DESCRIBE ksiazki;

Schemat tabeli

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id_ksiazki  | int(11)      | NO   | PRI | NULL    | auto_increment |
| tytul       | varchar(255) | NO   |     | NULL    |                |
| autor       | varchar(255) | NO   |     | NULL    |                |
| rok_wydania | int(11)      | YES  |     | NULL    |                |
| isbn        | varchar(13)  | YES  | UNI | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
Z jakiego powodu id_ksiazki jest PRI a isbn UNI? Czy pole isbn może być unikalnym identyfikatorem książek? Z jakiego powodu?

Podsumowanie

Gratulacje! Właśnie stworzyłeś swoją pierwszą tabelę. Nauczyłeś się definiować kolumny, wybierać odpowiednie typy danych (INT, VARCHAR) oraz stosować ograniczenia (PRIMARY KEY, NOT NULL, UNIQUE). Zrozumienie tych koncepcji jest fundamentem projektowania każdej bazy danych.

Zadanie 4: Rozszerzenie schematu tabeli

Cel

Nauka modyfikacji struktury istniejącej tabeli poprzez dodanie nowej kolumny za pomocą polecenia ALTER TABLE.

Scenariusz

Po wstępnym utworzeniu tabeli `ksiazki` okazało się, że brakuje w niej bardzo ważnej informacji – nazwy wydawnictwa. Twoim zadaniem jest rozszerzenie schematu tabeli bez utraty istniejących danych (chociaż na tym etapie tabela jest jeszcze pusta). Musisz dodać nową kolumnę o nazwie `wydawnictwo`, która będzie przechowywać tekst o maksymalnej długości 150 znaków. Ta operacja jest bardzo częsta w cyklu życia aplikacji, gdy pojawiają się nowe wymagania biznesowe. Po wykonaniu modyfikacji, ponownie sprawdzisz strukturę tabeli, aby potwierdzić, że nowa kolumna została pomyślnie dodana i jest gotowa na przyjmowanie danych.

Kroki do wykonania

  1. Upewnij się, że jesteś w kontekście bazy `biblioteka`.
  2. Napisz i wykonaj polecenie ALTER TABLE, aby dodać kolumnę `wydawnictwo`.
  3. Nowa kolumna powinna mieć typ `VARCHAR(150)`.
  4. Sprawdź ponownie strukturę tabeli `ksiazki` poleceniem DESCRIBE, aby zobaczyć zmiany.

Przykłady poleceń

ALTER TABLE ksiazki ADD COLUMN wydawnictwo VARCHAR(150); DESCRIBE ksiazki;

Nowy schemat tabeli

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id_ksiazki  | int(11)      | NO   | PRI | NULL    | auto_increment |
| tytul       | varchar(255) | NO   |     | NULL    |                |
| autor       | varchar(255) | NO   |     | NULL    |                |
| rok_wydania | int(11)      | YES  |     | NULL    |                |
| isbn        | varchar(13)  | YES  | UNI | NULL    |                |
| wydawnictwo | varchar(150) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

Podsumowanie

W tym zadaniu nauczyłeś się, jak modyfikować istniejącą tabelę za pomocą ALTER TABLE. To potężne narzędzie pozwala na ewolucję schematu bazy danych wraz ze zmieniającymi się potrzebami aplikacji, bez konieczności usuwania i ponownego tworzenia tabel.

Zadanie 5: Import danych z zewnętrznych plików

Cel

Nauczenie się dwóch popularnych metod importowania dużej ilości danych do tabeli: z pliku CSV oraz z pliku SQL.

Scenariusz

Ręczne wstawianie każdej książki do bazy danych jest nieefektywne, zwłaszcza przy setkach lub tysiącach pozycji. Biblioteka otrzymała od dostawców dwa pliki z listą książek do dodania. Pierwszy plik to `ksiazki_import.csv`, a drugi to `ksiazki_import.sql`. Twoje zadanie jest podzielone na dwie części. Najpierw zaimportujesz dane z pliku CSV, używając polecenia `LOAD DATA INFILE`. Musisz zwrócić uwagę na poprawną ścieżkę do pliku oraz na strukturę samego pliku (separator pól, cudzysłowy). W drugiej części zadania zaimportujesz dane z pliku `.sql`, który zawiera gotowe polecenia `INSERT`. Zrobisz to za pomocą polecenia `SOURCE` bezpośrednio w konsoli MariaDB. Te dwie metody są niezbędne w pracy każdego administratora, który często musi migrować dane między systemami.

Kroki do wykonania - Część 1: Import z CSV

  1. Umieść plik `ksiazki_import.csv` w łatwo dostępnej lokalizacji, np. `C:\temp\`.
  2. Zaloguj się do konsoli MariaDB jako `bibliotekarz` i przejdź do bazy `biblioteka`.
  3. Wykonaj polecenie `LOAD DATA INFILE`, podając ścieżkę do pliku. Pamiętaj o użyciu ukośników `/` w ścieżce.
  4. Określ separator pól (przecinek) oraz znak, w którym zamknięte są wartości tekstowe (cudzysłów).
  5. Zmapuj kolumny z pliku CSV na odpowiednie kolumny w tabeli `ksiazki`.
  6. Sprawdź, czy dane zostały zaimportowane, wykonując `SELECT * FROM ksiazki;`.

Przykłady poleceń - Część 1

LOAD DATA INFILE 'C:/temp/ksiazki_import.csv' INTO TABLE ksiazki FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (tytul, autor, rok_wydania, isbn, wydawnictwo);

Uwaga: W zależności od konfiguracji serwera MariaDB, może być konieczna zmiana ustawienia secure_file_priv lub umieszczenie pliku w specjalnym katalogu. W XAMPP często jest to C:/xampp/mysql/data/.

Kroki do wykonania - Część 2: Import z SQL

  1. Umieść plik `ksiazki_import.sql` w tej samej lokalizacji co poprzednio (`C:\temp\`).
  2. Będąc w konsoli MariaDB, użyj polecenia `SOURCE`, aby wykonać skrypt z pliku.
  3. Sprawdź ponownie zawartość tabeli. Powinna ona teraz zawierać łącznie 50 książek.

Przykłady poleceń - Część 2

SOURCE C:/temp/ksiazki_import.sql; SELECT COUNT(*) FROM ksiazki; -- Powinno zwrócić 50

Podsumowanie

Opanowałeś dwie kluczowe techniki importu danych. Polecenie LOAD DATA INFILE jest niezwykle wydajne przy dużych plikach tekstowych (CSV, TSV), podczas gdy SOURCE idealnie nadaje się do odtwarzania baz danych z kopii zapasowych lub wgrywania danych przygotowanych jako skrypty SQL.

Zadanie 6: Zaawansowane wyszukiwanie danych

Cel

Rozwinięcie umiejętności wyszukiwania danych o bardziej złożone warunki, użycie operatorów LIKE, AND, OR oraz sortowanie wyników.

Scenariusz

Twoja baza książek jest już całkiem spora. Teraz musisz odpowiedzieć na bardziej szczegółowe pytania od użytkowników biblioteki. Pierwsze zapytanie dotyczy znalezienia wszystkich książek, których tytuł zaczyna się na literę "P". Drugie to prośba o listę wszystkich książek Andrzeja Sapkowskiego wydanych po 1995 roku. Trzecie zapytanie ma znaleźć wszystkie książki wydane przez "Greg" lub "superNOWA". Na koniec, masz przygotować listę wszystkich książek posortowaną od najnowszej do najstarszej. Te zadania wymagają użycia zaawansowanych operatorów w klauzuli `WHERE` oraz opanowania sortowania, co pozwoli Ci na tworzenie precyzyjnych i użytecznych raportów.

Kroki do wykonania

  1. Napisz zapytanie `SELECT`, które znajdzie wszystkie książki, których tytuł zaczyna się na "P". Użyj operatora `LIKE` i znaku wieloznaczności `%`.
  2. Napisz zapytanie, które znajdzie książki autora 'Andrzej Sapkowski' wydane po roku 1995. Użyj operatora `AND` do połączenia warunków.
  3. Napisz zapytanie, które znajdzie książki wydane przez 'Greg' lub 'superNOWA'. Użyj operatora `IN` dla zwięzłości.
  4. Napisz zapytanie, które wyświetli wszystkie książki posortowane malejąco według roku wydania. Użyj `ORDER BY ... DESC`.

Przykłady poleceń

-- Wyszukiwanie po tytule SELECT * FROM ksiazki WHERE tytul LIKE 'P%'; -- Łączenie warunków (AND) SELECT * FROM ksiazki WHERE autor = 'Andrzej Sapkowski' AND rok_wydania > 1995; -- Użycie operatora IN SELECT * FROM ksiazki WHERE wydawnictwo IN ('Greg', 'superNOWA'); -- Sortowanie malejące SELECT * FROM ksiazki ORDER BY rok_wydania DESC; -- Wyszukiwanie książek z lat 90-tych (1990-1999) SELECT tytul, autor, rok_wydania FROM ksiazki WHERE rok_wydania BETWEEN 1990 AND 1999; -- Zliczanie książek danego autora SELECT COUNT(*) AS liczba_ksiazek FROM ksiazki WHERE autor = 'Stanisław Lem'; -- Wyszukiwanie książek zawierających w tytule słowo 'Ogród' SELECT * FROM ksiazki WHERE tytul LIKE '%Ogród%'; -- Wyświetlanie unikalnych autorów z bazy SELECT DISTINCT autor FROM ksiazki ORDER BY autor; -- Wyświetlanie 5 najstarszych książek w bazie SELECT * FROM ksiazki ORDER BY rok_wydania ASC LIMIT 5;

Podsumowanie

W tym zadaniu poznałeś zaawansowane techniki filtrowania i sortowania danych. Operator LIKE pozwala na elastyczne wyszukiwanie wzorców tekstowych, AND i IN umożliwiają tworzenie złożonych warunków logicznych, a klauzula ORDER BY daje pełną kontrolę nad kolejnością prezentacji wyników.