
W trzecim odcinku serii „Czym jest…?” przyjrzymy się bliżej bazom danych. Czym tak właściwie są, jakie mamy typy i jak (oraz kiedy) z nich korzystać?
Uwaga! W tej serii zajmuję się opisowym przedstawieniem tematu, a celem jest zapoznanie z zagadnieniem w sposób luźny i zrozumiały dla nowicjusza. W związku z tym wiele elementów siłą rzeczy musi zostać pominiętych. Tych z was, którzy chcieliby się dowiedzieć więcej, zapraszam do źródeł na końcu artykułu.
Zaczynacie się uczyć programowania. Piszecie pierwsze mini-aplikacje w konsoli: kalkulatory czy parsery tekstu, potem trochę bawicie się z GUI. Póki co wszystko działa w obrębie kodu który napisaliście. Jak trzeba wam jakichś danych startowych to wrzucacie je w konstruktor klasy:
list.add(new User("Maciej", 27));
list.add(new User("Halina", 41));
list.add(new User("Ignacy", 63));
Potem tak samo z wyjściem. Ogólnie ten etap możemy podsumować obrazkiem:

Ale do czasu. W końcu bowiem przychodzi moment kiedy zaczynacie tworzyć większy projekt, coś własnego i osobistego, coś co zaczynacie traktować niemalże jak własne dziecko.
A jak działa dziecko, wie każdy – wkładamy papu w otwór wejściowy, jest to przetrawiane, a następnie wysrywane przez otwór wyjściowy.
Zatem: robimy aplikację, która ma przyjmować dane z zewnątrz, a następnie gdzieś zapisywać wyniki swoich przeliczeń. Jakie mamy możliwości?
Najoczywistszą i najprostszą opcją jest, rzecz jasna, odczyt/zapis tych danych z pomocą plików, np. tekstowych. Jeśli wrócimy do powyższego przykładu z użytkownikami (obiektami klasy User) to albo wszystkich wrzucamy do jednego pliku, albo jeden user = jeden plik. Będzie to działać wyśmienicie…
…w skali mikro.
Jeszcze spoko jak mamy dziesięciu userów, setkę, może nawet tysiąc. Ale wyobraźmy sobie, że jest ich kilkadziesiąt tysięcy i więcej, a każdy ma swój profil, ustawienia, obrazek, login i hasło.
Chcemy aby to było szybkie w działaniu.
Chcemy aby to było pewne i bezpieczne.
Chcemy aby to było wygodne w utrzymaniu.
Aby sprostać powyższym oczekiwaniom powstały relacyjne bazy danych działające w oparciu o SQL – Structured Query Language (ustrukturyzowany język zapytań).

SQL to specjalny język który pozwala na wyszukiwanie pożądanych danych w bazie danych, np.
SELECT id, name, age FROM users;
Takie coś wyświetli nam tabelkę z wszystkimi użytkownikami, w lewej kolumnie będzie id, w prawej wiek, a pośrodku imię.

Powyższy obrazek nieprzypadkowo pochodzi z arkusza kalkulacyjnego, bowiem relacyjne bazy danych tak właśnie się prezentują:
- mamy bazę, a w niej zestaw tabel (np. tabela „użytkownicy” i tabela „zdjęcia”) które możemy łączyć np. za pomocą zapytania: „pokaż mi wszystkie zdjęcia użytkownika: Michał”
- każda tabela ma zestaw kolumn, a każda kolumna ma typ aby od razu wiadomo było co tam będzie: to może być kolumna z ciągami znaków (tutaj nazywana „Varchar”), z liczbami rzeczywistymi („integer”) albo z datami („datetime”)
- rzędy danej tabeli to poszczególne rekordy (kolejni użytkownicy, kolejne zdjęcia itp.)
DBMS (skrót od ang. „Database Management System„) to natomiast program-zarządca konkretnej bazy danych, który czuwa nad jej bezpieczeństwem, szybkością i stabilnością oraz pozwala dokonywać zapytań z użyciem języka SQL.
Jest sporo różnych DBMS-ów, z czego najpopularniejsze to MySQL, Oracle, Postgres i MS Server od Microsoftu – tych spodziewajcie się przeglądając oferty zatrudnienia.
Różnice pomiędzy nimi są – i to nawet nie kosmetyczne. O ile podstawowa składnia SQL-a jest wszędzie taka sama, to te bardziej zaawansowane DBMS-y oferują dodatkowe słowa kluczowe i funkcje, a także dbają, aby wszystko działało najszybciej jak to możliwe.
SQL w praktyce
Na pierwszy rzut oka SQL jest nieporównywalnie łatwiejszym językiem niż. np. taka Java. Wystarczy poznać kilkanaście słówek takich jak:
- create/drop/alter
- select/update/delete/insert/from
- where/when/case
- group by/order by
- and/or/end
- min()/max()/avg()
Cyk i już po paru dniach zakuwania jesteśmy gotowi pisać własne zapytania. O ile jednak ułożenie frazy wyszukującej pieski po ich imieniu, grupującej po umaszczeniu i sortującej po wzroście nie nastręczy nikomu trudności, to już samo zrozumienie poniższej kobyły może doprowadzić do siwizny:

Ogólnie jednak pracując na backendzie i nie specjalizując się na bazodanowca nasze zapytania rzadko kiedy będą przekraczać rozmiarem kilka linijek, a przeważnie i tak będzie je za nas pisał Spring Data (o nim i o ORM też będzie odcinek, ale trochę później).
Tym niemniej, wiedząc, że współpraca z bazami danych jest nam prędzej czy później pisana, warto zacząć się uczyć pisać w SQL-u jeszcze w trakcie poznawania podstaw wybranego języka programowania.
A co z NoSQL?
NoSQL to skrót od Not Only SQL – tzw. nierelacyjne bazy danych. W poprzedniku mamy te relacje/zależności – tabele są ze sobą powiązane w obrębie jednego schematu, tutaj zaś możemy powiedzieć, że każdy obiekt jest tabelą samą w sobie.
Przy okazji: to nie jest wcale tak, że mamy do wyboru jedynie te dwa: SQL i NoSQL, bo rodzajów baz danych jest więcej, tylko akurat powyższe zdobyły największą popularność.
Bazy NoSQL zasługują na osobny odcinek, ale już teraz warto poznać najważniejsze różnice pomiędzy nimi, a ich relacyjnymi kuzynami:
- pozwalają na trzymanie danych w najróżniejszych formatach
- oferują lepsze skalowanie bazy pod potrzeby biznesu
- wyszukiwanie może być nawet tysiąckrotnie szybsze
Jest tego więcej, ale na chwilę obecną warto sobie to po prostu zobrazować w poniższy sposób:
Baza SQL to kobieca garderoba.
Dziewczyna wybiera się na imprezę i przypomniała sobie, że ma taką fajną sukienkę, której dawno nie nosiła. Odcień niebieski, przechodzący w turkus, koronkowe, krótkie rękawy plus aksamitny pasek. Do tego rajstopy w kolorze cielistym i wysokie, zamszowe kozaki z posrebrzanymi klamerkami.

Wszystko jest na swoim miejscu, w odpowiedniej przegrodzie w szafie, w szufladzie, czy na stojaku. Aby znaleźć to co potrzeba należy wcześniej odsunąć pozostałe ubrania i przełożyć na osobną półkę, aby się nie pomięły. A po wszystkim włożyć z powrotem na miejsce.
A to trwa.
Baza NoSQL to męska sypiania.
Facet wybiera się na imprezę: potrzebuje dżinsów (mogą być trochę brudne, byleby nie śmierdziały za bardzo), koszuli w dowolnym kolorze – zbytnio nie pomiętej i jakichś adidasków.
Gościu wchodzi do pokoju i patrzy na ten obraz nędzy i rozpaczy. Skarpetki walają się po podłodze, jedyne krzesło ugina się pod ciężarem ubrań, w rogu leżą brudy od tygodnia czekające na pranie. Szafa załadowana metodą „na sportowca” – w zależności od humoru: celnym dośrodkowaniem a’la Messi albo pięknym wsadem jak u Jordana.

Ale, ale! Myliłaby się osoba postronna myśląc, że w tym bałaganie miną wieki zanim uda się cokolwiek znaleźć! Absolutnie!
Wszystko leży na swoim miejscu.
Dokładnie tam gdzie to zostawił.
Proszę nic tutaj nie ruszać!
Chłopak podnosi z podłogi najbliższe spodnie, ale niestety nie przeszły testu zapachu więc wywala je w kąt i zamiast tego łapie szybko drugie portki – te co leżały na łóżku. Już nie wącha – nie ma co kusić losu. Chwyta z szafy swoją jedyną koszulę, która nie wygląda jak wyjęta krowie z gardła, po czym spod biurka wyjmuje pudełko z nowymi Adasiami, tylko na specjalne okazje.
Cały proces zajął dwanaście i pół sekundy.
Na koniec
SQL to dla programisty konieczność, NoSQL jest wciąż opcją i to skierowaną do kogoś kto zwykłego SQL’a już zna i ma doświadczenie w zawodzie, dlatego na początkowym etapie nauki bym się na tym nie skupiał. Tym bardziej, że znając już relacyjne bazy danych, ogarnięcie pozostałych będzie znacznie łatwiejsze.
Nauka pisania zapytań nie jest szczególnie trudna i dlatego można ją śmiało połączyć z przyswajaniem podstaw np. Javy. Bardzo ważna jest tutaj systematyczność, tak aby regularne ćwiczenia wypracowały nam obycie z SQL-em.
Od siebie mogę śmiało polecić bazodanowe zadania na LeetCode, które wyglądają np. tak:

Jedno krótkie ćwiczenie na dzień nie zrujnuje nam grafiku, za to pozwoli utworzyć pewien schemat pracy i da łatwość odnajdowania się w tym środowisku. Poza tym, wraz z nabywaniem doświadczenia zrozumiecie najważniejszą prawdę SQL-a:
Nie trudno jest szybko stworzyć działające zapytanie.
Sęk w tym aby działało szybko.
Polecane materiały do rozpoczęcia przygody z SQL-em:
Kurs SQL (Kanał o wszystkim) – YT/POL
Kurs SQL (Zaprogramuj życie) – YT/POL
Rusz głową! SQL – książka