Kurs Java

SQL

Tu jesteś
Java - Mapa kariery Tu jesteś Wzorce projektowe Git 3 SQL
Relacyjne bazy danych niezmiennie od lat
są podstawą w budowie systemów
informatycznych. Na rynku istnieją
oczywiście również bazy typu NoSQL,
ale te zwykle są stosowane do
dedykowanych rozwiązań, jak na przykład
przechowywanie ogromnych ilości
danych w celu szybkiego przeszukiwania.
4 JPA - Hibernate 5 REST 6 Spring
Niezależnie od tego czy używamy Springa czy też innego rozwiązania do tworzenia systemu, dane w nim przetwarzane muszą być zapisane, by po ponownym uruchomieniu można było pracować na ich zapamiętanej wersji. Najpowszechniejszym rozwiązaniem, które daje nam taką możliwość są bazy danych. Istnieją bazy relacyjne oparte o język SQL oraz bazy no SQL, które nie zachowują relacji, a opierają się na odpowiednio przygotowanej strukturze indeksów.

W bieżącym rozdziale przedstawimy krótką zajawkę na temat relacyjnych baz danych, a także wypiszemy kilka ciekawych adresów internetowych, na podstawie których będziecie mogli budować swoją wiedzę o bazach i języku SQL.

Baza danych - Co to jest?

Baza danych to w najprostszym ujęciu zbiór odpowiednio uporządkowanych i powiązanych ze sobą danych. Dane są przechowywane w tabelach, czyli tematycznie wydzielonych "kontenerach". Tworząc prosty program lub bardziej rozbudowany system, zwykle poruszamy się w konkretnym obszarze tematycznym występującym w rzeczywistości. I tak na przykład jeśli budujemy system do zakupu biletów na wydarzenia kulturalne, mamy do zapamiętania dane opisujące zarówno samo wydarzenie (nazwa, godzina rozpoczęcia, czas trwania itp.), jak również wiele innych elementów powiązanych (kategoria wydarzenia, wykonawcy, bilety).

W celu zapisania takich danych musimy je jakoś logicznie podzielić. Stosując nazewnictwo anglojęzyczne jesteśmy w stanie wyznaczyć takie podmioty (byty) jak event, event category, ticket, participant (uczestnik) itp. W ten sposób kształtuje się nam automatycznie podział na tabele w bazie. Tworzymy zatem tabele:
  • events - tutaj będziemy przechowywać wszystkie podstawowe dane o wydarzeniach
  • events_categories - w tym miejscu zapiszemy listę możliwych kategorii, na przykład: koncert, mecz, wyścigi rajdowe, pokaz mody itp.
  • tickets - tu przechowamy podstawowe dane dotyczące biletów, np. cena, wariant itp.
  • participants - w tym miejscu zachowamy listę uczestników wydarzenia (np. wykonawców w trakcie koncertu)

Rekordy w tabelach

Tabele zawierają kolumny. Wygląda to trochę tak jak w arkuszu kalkulacyjnym. Kolumny mają swoje nagłówki, a wiersze przechowują dane w kolejnych kolumnach. Każdy taki wiersz w bazie danych nazywany jest rekordem albo krotką (z ang. tuple). Jakiego typu dane mogą znaleźć się w rekordach? Wszystko zależy od typu danych dla każdej z kolumn. Kolumny najczęściej mogą być typu numerycznego (liczby), tekstowego lub przechowującego datę czy dane binarne, na przykład obrazki czy dokumenty. Dla przykładu tabela events mogłaby zawierać kolumny:
  • id - wygenerowany identyfikator eventu
  • name - nazwa eventu
  • start_time - data i czas rozpoczęcia eventu
  • duration - czas trwania eventu (na przykład w minutach)
Wprowadzając dane 4 eventów, wprowadzimy de facto 4 wiersze, z których każdy będzie miał swają nazwę, czas rozpoczęcia oraz czas trwania. Tabela events będzie przechowywała zatem dane o 4 wydarzeniach. Dodatkowo tabela posiada kolumnę id, która przechowuje unikalny identyfikator generowany osobno dla każdego wydarzenia. Jest to tak zwany klucz główny tabeli. Najczęściej dzieje się to automatycznie podczas wstawiania rekordu do tabeli (o tym za chwilę).
Database Simulation

Relacje między tabelami

Pojedyncze tabele nie odwierciedlają w pełni mocy jaką są obdarzone relacyjne bazy danych. O ich prawdziwej sile stanowią właśnie wspomniane relacje. Zobaczmy teraz jak wygląda przykładowa relacja. Mamy tabelę events_category, która zawiera dwie kolumny:
  • id - wygenerowany identyfikator kategorii
  • name - nazwa kategorii
Do tabeli wprowadzamy cztery rekordy: Wyścig, Koncert, Mecz siatkarski, Pokaz mody. W ten sposób otrzymamy również automatycznie wygenerowane identyfikatory (od 1 do 4).
Database Simulation
I teraz najważniejsze. Jeśli chcemy powiązać relacją dane z tabeli events z danymi z tabeli events_categories musimy wpisać do tabeli events identyfikatory kategorii, do których należą kolejne wydarzenia. Tak więc oprócz wcześniej wspomnianych kolumn dodajemy do tabeli events kolumnę z tak zwanym kluczem obcym, czyli identyfikatorem pochodzącym z innej tabeli i wskazującym na zaistnienie relacji między tymi tabelami. Innymi słowy teraz lista kolumn w tabeli events będzie wyglądała tak:
  • id - wygenerowany identyfikator eventu
  • name - nazwa eventu
  • start_time - czas rozpoczęcia eventu
  • duration - czas trwania eventu
  • events_categories_id - identyfikator kategorii pochodzący z tabeli categories_events
W ten sposób jeśli na przykład wprowadzimy rekord do tabeli events o nazwie "Polska - Francja", podamy czas rozpoczęcia, czas trwania (w tym przypadku raczej przewidywany) i zapiszemy w nowej kolumnie id równe 3, to uzyskujemy informację o tym, że event ten należy do kategorii Mecz siatkarski.
Database Simulation
W ten sposób nawiązaliśmy naszą pierwszą relację! Co więcej, możemy nawet określić, że relacja ta jest typu jeden do wiele, gdyż docelowo możemy mieć wiele wydarzeń w tabeli events wskazujących na jeden i ten sam identyfikator kategorii. Wszystkie mecze siatkarskie będą miały ustawione id kategorii równe 3.

Jakie zatem typy relacji wyróżniamy w relacyjnej bazie danych? Dokładnie trzy:
  • jeden do jeden - rekord tabeli wiąże się bezpośrednio tylko i wyłącznie z jednym rekordem innej tabeli i na odwrót
  • jeden do wiele - rekord jednej tabeli wiąże się bezpośrednio z wieloma rekordami drugiej tabeli, przy czym rekord drugiej tabeli wiąże się z tylko jednym rekordem tej pierwszej; jeśli spojrzymy na tę relację z drugiej strony możemy mówić o występowaniu relacji wiele do jednego
  • wiele do wiele - rekord jednej tabeli wiąże się bezpośrednio z wieloma rekordami drugiej tabeli oraz rekord drugiej tabeli wiąże się z wieloma rekordami tej pierwszej (wtedy łączenie następuje przez tabele łączącą)
Appa Notka. Jeśli chcesz dowiedzieć się więcej w temacie struktur bazodanowych oraz relacji, polecamy zapoznać się z następującymi linkami:
Podstawowe koncepcje relacyjnych baz danych
Trzy rodzaje relacji
Klucze w bazach danych

SQL - Structured Query Language

SQL to język zapytań umożliwiający komunikację się z bazą danych. W ten sposób możemy wykonywać zapytania typu DDL (Data Definition Language), które odpowiadają za tworzenie i modyfikowanie struktur takich jak tabele, indeksy, widoki. Najważniejszymi zapytaniami z tej grupy są CREATE, DROP, ALTER.

Po stworzeniu tabel wykonujemy zapytania typu DML (Data Manipulation Language). Zapytaniami pochodzącymi z tej grupy są: SELECT, INSERT, UPDATE i DELETE. Dzięki nim możemy wprowadzać dane do bazy, modyfikować je oraz pobierać i usuwać. Zerknijmy teraz na kilka przykładów.
  • CREATE - Tworzenie tabeli

    CREATE TABLE events (id int, name varchar(10), start_time date, duration int);
    
  • INSERT - Wpisanie wiersza do tabeli

    INSERT INTO events (1,'Madonna Show', '2019-08-01 21:00', 100);
    
  • SELECT - Pobranie wierszy z tabeli

    SELECT * FROM events;
    
SQL jest co prawda standardem ANSI/ISO, ale jednak istnieją różne wersje tego języka. Z tego powodu typy danych (na przykład date), czy też konstrukcje niektórych zapytań (na przykład ALTER) mogą się różnić w zależności od dostawcy (Oracle, MySQL, Postgres, MsSQL). Natomiast instrukcje SELECT, INSERT, UPDATE, DELETE, WHERE raczej wszędzie wyglądają tak samo.
Appa Notka. Możemy tak mnożyć kolejne przykłady, ale w internecie znajdują się już dobrze przygotowane strony, które świetnie uczą podstaw SQL-a i do tego umożliwiają ćwiczenia praktyczne. My przedstawiliśmy zajawkę, która ma nakreślić temat i zachęcić Was do dalszego rozwoju. Jeśli chodzi o wspomniane strony - polecamy:
SQL w 20 minut
SQL Tutorial
SQL w 7 dni
Mapa umiejętności programisty Java

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy:
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .