Celem tego zadania jest praktyczne zrozumienie problemów wynikających z nieprawidłowego projektowania tabel w bazach danych. Nauczysz się, jak stworzyć tabelę, która celowo łamie zasady pierwszej postaci normalnej (1NF), aby na własne oczy zobaczyć, jakie komplikacje to powoduje. Stworzysz swoją pierwszą bazę danych i tabelę, a następnie zaimportujesz do niej dane, poznając przy tym podstawowe pojęcia takie jak klucz główny (PRIMARY KEY), AUTO_INCREMENT oraz ograniczenia NULL/NOT NULL.
Wyobraź sobie, że zostałeś poproszony o stworzenie prostej bazy danych dla małej, osiedlowej biblioteki, która do tej pory wszystkie dane przechowywała w jednym arkuszu kalkulacyjnym. Twoim zadaniem jest przeniesienie listy czytelników do bazy danych. Niestety, dane w arkuszu są w chaosie: w jednej komórce znajduje się pełen adres (ulica, numer, miasto), a w innej kilka numerów telefonów oddzielonych średnikami. Twoim pierwszym krokiem jest stworzenie tabeli czytelnicy, która będzie odzwierciedlać tę nieuporządkowaną strukturę. Zrobisz to celowo, aby zrozumieć, dlaczego takie podejście jest problematyczne. Stworzysz nową bazę danych o nazwie biblioteka, a w niej tabelę czytelnicy z kolumnami takimi jak imie_nazwisko, pelny_adres i telefony. Następnie przygotujesz plik SQL z przykładowymi danymi (INSERT-y) i nauczysz się, jak zaimportować go z wiersza poleceń. W trakcie tego procesu wprowadzimy pojęcie klucza głównego (PK), czyli unikalnego identyfikatora dla każdego wiersza. Zastanowisz się, dlaczego w tak zaprojektowanej tabeli trudno jest zdefiniować sensowny klucz główny i jakie problemy z redundancją i wyszukiwaniem danych generuje taki projekt. To ćwiczenie jest fundamentem do zrozumienia potrzeby normalizacji, którą zajmiemy się w kolejnych zadaniach.
biblioteka.
            czytelnicy, która celowo łamie zasady normalizacji.
            id_czytelnika: Będzie to nasz klucz główny. Użyjemy INT oraz AUTO_INCREMENT, aby serwer sam nadawał unikalny numer każdemu nowemu czytelnikowi.imie_nazwisko: Jedna kolumna na imię i nazwisko.pelny_adres: Jedna kolumna na cały adres (ulica, kod pocztowy, miasto).telefony: Jedna kolumna na wiele numerów telefonów, oddzielonych np. średnikiem.email: Adres e-mail.CREATE TABLE:
            PRIMARY KEY (PK): Klucz główny. To ograniczenie, które zapewnia, że wartość w tej kolumnie jest unikalna dla każdego wiersza i nie może być NULL. To jak numer PESEL dla rekordu.AUTO_INCREMENT: Powoduje, że serwer automatycznie przypisuje kolejną wartość liczbową przy dodawaniu nowego wiersza. Idealne dla kluczy głównych.NOT NULL: Wymusza, aby kolumna zawsze miała wartość.NULL: Zezwala na brak wartości w kolumnie.UNIQUE: Zapewnia, że wszystkie wartości w kolumnie są unikalne (np. nie może być dwóch takich samych adresów e-mail).czytelnicy.sql. Wklej do niego 50 poleceń INSERT, które dodadzą przykładowych czytelników. Przykładowe dane zostaną wygenerowane w osobnym pliku.id_czytelnika. Zastanów się, czy moglibyśmy użyć innej kolumny jako klucza głównego? imie_nazwisko może się powtarzać. email mógłby być, ale jest opcjonalny (NULL). Tabela bez klucza głównego jest trudna w zarządzaniu i uniemożliwia tworzenie relacji.cmd.exe. Upewnij się, że jesteś w katalogu, w którym zapisałeś plik czytelnicy.sql. Wykonaj polecenie:
            czytelnicy w bazie biblioteka.
        Poniżej znajduje się kod SQL do utworzenia bazy i tabeli. Dane do importu (50 wierszy) znajdują się w osobnym pliku czytelnicy.sql.
-- Tworzenie bazy danych z odpowiednim kodowaniem CREATE DATABASE IF NOT EXISTS biblioteka CHARACTER SET utf8mb4 COLLATE utf8mb4_polish_ci; -- Uzycie bazy USE biblioteka; -- Tworzenie celowo nieznormalizowanej tabeli czytelnikow CREATE TABLE czytelnicy ( id_czytelnika INT AUTO_INCREMENT PRIMARY KEY, imie_nazwisko VARCHAR(100) NOT NULL, pelny_adres VARCHAR(255) NULL, telefony VARCHAR(100) NULL, email VARCHAR(100) UNIQUE NULL, data_rejestracji DATE NOT NULL );
# Windows (zapisz dane w pliku czytelnicy.sql)
mysql -u root -p biblioteka < C:\path\to\your\file\czytelnicy.sql
# Linux (zapisz dane w pliku czytelnicy.sql)
mysql -u root -p biblioteka < /path/to/your/file/czytelnicy.sql
    
    
+---------------------------------------------------+
|                                                   |
|   C:\Users\Student> mysql -u root -p biblioteka < czytelnicy.sql |
|   Enter password: ****                            |
|                                                   |
|   C:\Users\Student> _                             |
|   (brak komunikatu oznacza sukces)                |
|                                                   |
|   ...                                             |
|   MariaDB [biblioteka]> SELECT COUNT(*) FROM czytelnicy; |
|   +----------+                                    |
|   | COUNT(*) |                                    |
|   +----------+                                    |
|   |       50 |                                    |
|   +----------+                                    |
|                                                   |
+---------------------------------------------------+
    
    LIKE '%Warszawa%'.telefony, zmodyfikować ją i zapisać z powrotem. To ryzykowne i niewydajne.LOAD DATA INFILE: Alternatywą dla importu z pliku .sql jest polecenie LOAD DATA INFILE, które wczytuje dane z plików tekstowych (np. CSV). Jest ono znacznie szybsze przy imporcie milionów rekordów, ale wymaga dodatkowej konfiguracji bezpieczeństwa serwera.