Baza danych

Do odtworzenia bazy i wykonywania zapytań użyjemy lokalnego środowiska XAMPP, zawierającego serwer WWW Apache, bazę danych MariaDB oraz aplikację webową phpMyAdmin działającą w przeglądarce WWW i umożliwiającą obsługę baz danych za pomocą interfejsu graficznego.

Informacje na temat instalacji i korzystania ze środowiska XAMPP i aplikacji phpMyAdmin zamieszczone zostały w e‑materiale Definiowanie schematu bazy danych w języku SQL, etap IVP13C1S35aDefiniowanie schematu bazy danych w języku SQL, etap IV.

Załączony plik szkola2.sql pobieramy i zapisujemy w wybranym katalogu.

R1YxrFWBS4qWp

Przycisk do pobrania pliku SQL z bazą danych.

Kopia bazy szkola2.sql.
Plik SQL o rozmiarze 435.54 KB w języku polskim

Podane dalej polecenia wykonamy za pomocą aplikacji phpMyAdmin, którą uruchamiamy, wpisując w polu adresu przeglądarki internetowej localhost/phpmyadmin. Jeżeli środowisko XAMPP jest uruchomione, widzimy stronę główną, na której klikamy zakładkę SQL. W oknie Uruchom zapytanie/zapytania SQL na serwerze "localhost": wpisujemy lub wklejamy pojedyncze zapytania lub kilka zapytań kończących się znakiem średnika. Zapytania uruchamiamy kliknięciem przycisku Wykonaj (lub Go w niektórych wersjach aplikacji).

Zaczynamy od utworzenia bazy szkola2. Wykonujemy polecenia:

Linia 1. DROP DATABASE IF EXISTS szkola2 średnik. Linia 2. CREATE DATABASE szkola2 średnik.

Pierwsze polecenie usuwa bazę szkola2, jeżeli wcześniej istniała. Drugie tworzy pustą bazę o takiej samej nazwie.

Kolejną czynnością jest utworzenie tabel i dodanie do nich danych. Odpowiednie polecenia zapisane zostały w pliku szkola2.sql. Wybieramy nazwę utworzonej bazy szkola2 w panelu po lewej stronie, następnie klikamy zakładkę Import. W oknie Importowanie do bazy danych "szkola2" w sekcji Plik do importu naciskamy Przeglądaj i wskazujemy wymieniony plik. Na dole klikamy przycisk Import. Po udanym imporcie zobaczymy komunikat Import zakończony sukcesem, wykonano 49 zapytań. (szkola2.sql).

Do wykonania dotychczasowych czynności można użyć również wiersza poleceń bazy danych. Aby go uruchomić, otwieramy terminal (wiersz poleceń) i przechodzimy do katalogu, w którym zapisaliśmy plik szkola2.sql.

Następnie w systemie Linux wykonujemy polecenia:

Linia 1. prawy ukośnik opt prawy ukośnik lampp prawy ukośnik bin prawy ukośnik mysql minus u root minus p minus e cudzysłów DROP DATABASE szkola2 cudzysłów. Linia 2. prawy ukośnik opt prawy ukośnik lampp prawy ukośnik bin prawy ukośnik mysql minus u root minus p minus e cudzysłów CREATE DATABASE szkola2 cudzysłów. Linia 3. prawy ukośnik opt prawy ukośnik lampp prawy ukośnik bin prawy ukośnik mysql minus u root minus p szkola2 otwórz nawias ostrokątny szkola2 kropka sql.

W systemie Windows polecenie /opt/lampp/bin/mysql zastępujemy C:\xampp\mysql\bin\mysql, gdzie C:\xampp jest dyskiem i katalogiem, w którym zainstalowaliśmy środowisko XAMPP. W domyślnej konfiguracji nie musimy podawać hasła, wystarczy nacisnąć ENTER.

Ostatnie polecenie wczyta dane, wykonując instrukcje SQL zawarte w podanym pliku.

Jeżeli kolejne zapytania chcemy wykonywać za pomocą wiersza poleceń bazy danych, uruchamiamy tryb interaktywny, wywołując polecenie /opt/lampp/bin/mysql -u root -p w Linuksie lub C:\xampp\mysql\bin\mysql -u root -p w systemie Windows.

Żeby zapoznać się z bazą danych, wykonujemy polecenia:

Linia 1. USE szkola2 średnik. Linia 2. SHOW TABLES średnik.

Polecenie USE wskazuje bazę danych, z której chcemy korzystać. W phpMyAdmin można je pominąć, jeżeli wcześniej klikniemy nazwę bazy w lewym panelu, a następnie zakładkę SQL. Polecenie SHOW TABLES wyświetla listę tabel.

Przydatne polecenia, kiedy chcemy sprawdzić poprawność przeprowadzanych zmian w bazie, to:

  • DESCRIBE uczniowie; – pokazuje nazwy pól, ich typy danych i ograniczenia w podanej tabeli,

  • SELECT * FROM uczniowie; – wybiera dane zapisane w podanej tabeli.

Zmiany w bazie

W tabeli przedmioty mamy dwie kolumny zawierające imiona i nazwiska nauczycieli. Nie jest to najlepsze rozwiązanie, np. gdybyśmy chcieli z nauczycielami łączyć inne informacje w bazie, np. telefony czy adresy e‑mail, lub też gdyby jeden nauczyciel uczył wielu przedmiotów.

W tabeli uczniowie mamy kolumnę klasa przechowującą powtarzające się nazwy klas. Dane nie powinny się powtarzać, ponadto zazwyczaj z klasami kojarzymy więcej informacji, np. wychowawcę lub funkcje klasowe.

Z powyższych obserwacji możemy wysnuć wniosek, że dobrze byłoby utworzyć dwie dodatkowe tabele – jedną z danymi dotyczącymi nauczycieli, drugą z danymi na temat klas.

Tabela nauczyciele

Tabelę nauczyciele z nazwiskami i imionami nauczycieli tworzymy za pomocą podzapytania wybierającego posortowane dane z tabeli przedmioty.

Linia 1. CREATE TABLE nauczyciele AS. Linia 2. SELECT naucz podkreślnik nazw przecinek naucz podkreślnik imie FROM przedmioty ORDER BY naucz podkreślnik nazw średnik.

Zbadajmy strukturę utworzonej tabeli, aby sprawdzić wykorzystane typy danych:

Linia 1. DESCRIBE nauczyciele średnik.

Teraz możemy zmienić nazwy pól:

Linia 1. ALTER TABLE nauczyciele CHANGE naucz podkreślnik nazw nazwisko VARCHAR otwórz nawias okrągły 30 zamknij nawias okrągły średnik. Linia 2. ALTER TABLE nauczyciele CHANGE naucz podkreślnik imie imie VARCHAR otwórz nawias okrągły 30 zamknij nawias okrągły średnik.

Do zmiany nazw wykorzystujemy klauzulę ALTER TABLE ... CHANGE ..., w której oprócz nowej nazwy pola podajemy jego typ danych.

Tabela z samymi nazwiskami i imionami jest bezużyteczna, nie będziemy w stanie powiązać jej z żadną inną tabelą. Aby utworzyć relacje,relacjarelacje, dodajemy do tabeli klucz głównyklucz głównyklucz główny:

Linia 1. ALTER TABLE nauczyciele. Linia 2. ADD COLUMN id podkreślnik naucz INT otwórz nawias okrągły 10 zamknij nawias okrągły UNSIGNED PRIMARY KEY AUTO podkreślnik INCREMENT średnik.

Powyższa klauzula pozwala dodawać do tabel nowe pola. Zwróćmy uwagę, że po członie ADD COLUMN podajemy nazwę pola, następnie typ danych i ewentualne ograniczenia.

RbbpcMr6LCzJx
Zmieniony schemat tabeli nauczyciele.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Kolejną czynnością jest dodanie pola klucza obcegoklucz obcyklucza obcego w tabeli przedmioty do przechowywania identyfikatorów nauczycieli.

Linia 1. ALTER TABLE przedmioty ADD COLUMN id podkreślnik naucz INT otwórz nawias okrągły 10 zamknij nawias okrągły UNSIGNED średnik. Linia 2. ALTER TABLE przedmioty. Linia 3. ADD FOREIGN KEY otwórz nawias okrągły id podkreślnik naucz zamknij nawias okrągły REFERENCES nauczyciele otwórz nawias okrągły id podkreślnik naucz zamknij nawias okrągły średnik.

Na początku należy utworzyć pole, którego typ musi odpowiadać typowi danych klucza głównego. W drugiej kolejności tworzymy klucz obcy i tym samym definiujemy relację między tabelami.

Wprowadzamy identyfikatory nauczycieli do odpowiednich rekordów z tabeli przedmioty:

Linia 1. UPDATE przedmioty. Linia 2. SET id podkreślnik naucz znak równości otwórz nawias okrągły SELECT id podkreślnik naucz FROM nauczyciele WHERE nazwisko znak równości naucz podkreślnik nazw AND imie znak równości naucz podkreślnik imie zamknij nawias okrągły średnik.

Klauzula aktualizacyjna UPDATE korzysta z podzapytania SELECT wykonywanego dla każdego rekordu z tabeli przedmioty, które wybiera identyfikator nauczyciela poprzez dopasowanie nazwiska i imienia. W tym przypadku w tabeli przedmioty nie ma dwóch nauczycieli, którzy nazywaliby się tak samo.

Na koniec możemy usunąć pola naucz_nazwnaucz_imie z tabeli przedmioty za pomocą klauzuli ALTER TABLE nazwa_tabeli DROP COLUMN nazwa_pola:

Linia 1. ALTER TABLE przedmioty DROP COLUMN naucz podkreślnik nazw średnik. Linia 2. ALTER TABLE przedmioty DROP COLUMN naucz podkreślnik imie średnik.
R10KoHRkXS96Y
Zmieniony schemat tabeli przedmioty.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Wszystkie omówione powyżej zapytania tworzące i modyfikujące tabelę nauczyciele możemy wykonać za jednym razem:

R1Am2JmVXpu2B
Zapytania tworzące i modyfikujące tabelę nauczyciele w aplikacji phpMyAdmin.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Tabela klasy

W tabeli przechowującej informacje o klasach zapiszemy nazwy klas i identyfikatory wychowawców. Kolejność czynności będzie podobna, jak podczas tworzenia poprzedniej tabeli. Zaczynamy od utworzenia tabeli z niepowtarzającymi się nazwami klas. Wykorzystujemy podzapytanie SELECT DISTINCT:

Linia 1. CREATE TABLE klasy AS SELECT DISTINCT klasa FROM uczniowie ORDER BY klasa średnik.

Następnie sprawdzamy typy danych i zmieniamy nazwę pola:

Linia 1. DESCRIBE klasy średnik. Linia 2. ALTER TABLE klasy CHANGE klasa nazwa CHAR otwórz nawias okrągły 2 zamknij nawias okrągły średnik.

Klasom trzeba przypisać unikalne identyfikatory, czyli należy utworzyć klucz główny.

Ćwiczenie 1

Wzorując się na tabeli nauczyciele, utwórz klucz główny id_klasy w tabeli klasy.

Kolejną czynnością jest utworzenie pól na dodatkowe dane. Przyjmijmy, że są to identyfikator wychowawcy i rocznik klasy. Odpowiednie instrukcje prezentują się następująco:

Linia 1. ALTER TABLE klasy. Linia 2. ADD COLUMN id podkreślnik naucz INT otwórz nawias okrągły 10 zamknij nawias okrągły UNSIGNED przecinek. Linia 3. ADD COLUMN rok CHAR otwórz nawias okrągły 9 zamknij nawias okrągły średnik.

Pozostaje utworzenie relacji między tabelami klasynauczyciele.

Ćwiczenie 2

Wykorzystując wcześniej omówiony przykład, utwórz w tabeli klasy klucz obcy w kolumnie id_naucz odnoszący się do identyfikatora nauczyciela w tabeli nauczyciele.

R19FsdBNIRCTK
Zmieniony schemat tabeli klasy.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Skoro mamy tabelę klasy, możemy zaktualizować dane w tabeli uczniowie.

Ćwiczenie 3

W tabeli uczniowie utwórz pole id_klasy odpowiadające typowi danych klucza głównego tabeli klasy. Nadaj utworzonemu polu ograniczenie klucza obcego. Przy użyciu klauzuli UPDATE przypisz każdemu uczniowi odpowiedni identyfikator klasy. Usuń kolumnę klasa z tabeli uczniowie.

R1SvDOQdzOqzK
Zmieniony schemat tabeli uczniowie.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Wszystkie omówione zapytania tworzące i modyfikujące tabelę klasy:

RWyq2twLSCCBr
Zapytania tworzące i modyfikujące tabelę klasyuczniowie w aplikacji phpMyAdmin.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Słownik

klucz główny
klucz główny

(ang. primary key) pole tabeli, w którym wartości liczbowe lub znakowe nie mogą się powtarzać; wykorzystywane do jednoznacznej identyfikacji rekordu (np. w omawianej tu bazie identyfikator ucznia z pola id_ucz)

klucz obcy
klucz obcy

(ang. foreign key) pole tabeli, które tworzy relację (związek) z inną tabelą, czyli przechowuje wartości klucza głównego z innej tabeli; typ danych klucza obcego musi być taki sam jak typ danych klucza głównego

relacja
relacja

tu: zależność między tabelami; wyróżniamy następujące typy relacji:

  • jeden do jednego (np. w omawianej tu bazie każdego przedmiotu uczy jeden nauczyciel);

  • jeden do wielu (np. jeden uczeń ma wiele ocen);

  • wiele do wielu (np. w przypadku, gdy jeden nauczyciel uczy kilku przedmiotów, a jeden przedmiot może być nauczany przez wielu nauczycieli);

w teorii baz danych relacja oznacza zbiór krotek, czyli tabelę