Podstawy
4 godz. 8 min · Bazy Danych · Full-stack i Programowanie
Pierwszy rozdział wprowadza w historię powstania języka. Wspomnimy o standardach, wykorzystywanych wersjach i podzbiorach SQL’a. Zaraz potem wskoczymy w pierwsze poważne operacje, które pozwolą na pełny cykl tworzenia, zasilania bazy danych i wyciągnięcia z niej wybranych informacji. Rozwikłamy też tajemniczy akronim - CRUD.
Skoro potrafimy już tworzyć bazę i tabele, w które możemy wstawić nowe wiersze, dowiemy się więcej o bardzo ważnej funkcji bazy danych: weryfikacji danych. Zostaną zaprezentowane mechanizmy i techniki, które pomogą utrzymać spójność danych.
W kolejnych lekcjach znajduje się opis serca SQL’a, czyli polecenia wybierającego dane i możliwości i opcji z nim związanych. Od przekształcenia bazy danych w prosty kalkulator, aż do warunków filtrowania wybieranych danych (klauzulą WHERE), sortowania ich (klauzulą ORDER BY), czy ograniczania dużych zestawów wynikowych - w tym wsparcia do paginacji.
SQL jest językiem obsługi relacyjnych baz danych. Dlatego najwyższy czas, aby wspomnieć o relacjach i tym w jaki sposób rozszerzają one możliwości wyszukiwania danych oraz pozwalają zobrazować powiązania między danymi w bazie. Dowiesz się o różnych rodzajach połączeń między tabelami i jak te połączenia (zwane JOIN’ami) pozwalają wybrać to, czego potrzebujesz.
Kolejny rozdział dotyczy grupowania danych (wykorzystując klauzulę GROUP BY) i związanych z tym nowymi możliwościami. Dowiesz się tutaj też w jaki sposób agregować pogrupowane dane i jak takie zagregowane dane filtrować.
Przekonasz się, w jaki sposób można zapamiętywać trudne lub często wykonywane zapytania, wykorzystując do tego widoki (VIEWS) i jak można poprawić wydajność pobierania z nich danych. Przykładowo zastosujemy widoki zmaterializowane (MATERIALISED VIEWS). W tym rozdziale przećwiczysz też możliwość zapisywania danych przez widoki.
Z baz danych korzysta zwykle wielu użytkowników. Aby operacje, które wykonują na wspólnej bazie nie spowodowały nieoczekiwanych konsekwencji, wykorzystuje się mechanizm transakcji. W tym rozdziale wytłumaczymy Ci w jaki sposób użytkownicy mogą modyfikować równolegle te same dane. Tutaj też dowiesz się o poziomach izolacji transakcji i jak używać ich w różnych sytuacjach bazodanowych.
Przy pracy z większą ilością danych, bardzo szybko doświadczysz spowolnienia wykonywania zapytań. O tym jak je przyspieszyć dowiesz się właśnie w tym rozdziale. Zwiększanie wydajności zapytań jest tematem rozległym i zaawansowanym. Tutaj będziesz miał szansę poznać podstawy, w tym - po co są i jak używać indeksów, w jaki sposób analizować jak zapytania są wykonywane i jakie jeszcze są metody wydajniejszego odczytywania danych.
Kurs jest dla osób początkujących, rozpoczynających przygodę z bazami danych. Nie wymaga się znajomości SQL'a ani zaawansowanej wiedzy dotyczącej baz danych. Warto wiedzieć co to są relacyjne bazy danych. Dobrze mieć dostęp do ulubionego silnika bazy danych, ale nie jest to wymagane.
skoro już mamy utworzoną bazę możemy pomyśleć o tabelach w których
będą zapisywane dane zaczniemy spokojnie od jednej tabeli
ale za to podstawowej gdyż będzie to tabela przechowująca dane
bohaterów do potencjalnej gry przygodowej nowo
utworzona baza nie zawiera nic prócz jednego schematu public
jak nazwa sugeruje jest to schemat dostępny dla wszystkich którzy
mają dostęp do bazy to zapewne zaświeca ci pytanie ale
co to są schematy otóż schematy po angielsku schemas
są swego rodzaju kontenerami można je traktować trochę jak
katalogi na dysku pozwalają one na logiczne grupowanie elementów
bazy danych takich jak na przykład tabele widoki czy procedury
składowane o których będę mówił więcej później ułatwiają
też przepisywanie uprawnień dostępu dla użytkownika do wybranych zestawów
elementów bazy danych w naszym schemacie jak
widać nic nie ma są tylko zaznaczone miejsca na różne elementy o
których będziemy jeszcze mówić na razie zajmiemy się tabelami
otworzę sobie okno które pozwoli mi wykonywać
polecenia zapytania do bazy tu jeszcze dwa słowa na temat okna
w którym będziemy wydawać polecenia bazie jest tu informacja jaki
użytkownik jest jaki użytkownik jest podłączony do jakiej bazy używając
którego z połączeń jest to nazwane połączenie server
connection tutaj to nasze pozwolimy sobie też schować część
opcji które nie będą nam potrzebne żeby nas nie rozpraszały
tutaj nową tabelę tworzymy zapytaniem ddl create table
oczywiście musimy ją jakoś nazwać jeśli
chodzi o konwencje nazewnicze tabel są dwie jedna
która nazywa tabelę zgodnie z
encją które ona reprezentuje czyli na przykład bohater jak damy encję bohatera
a druga która odnosi się do tabeli jako
zbioru encji więc są to bohaterowie ja
preferuję tą drugą opcję ze względu na to że jest to zbiór bohaterów
więc tabela która przechowuje ten zbiór nazywa się po prostu bohaterowie
i takiej konwencji będę się trzymał to
co jest najważniejsze tak naprawdę to żeby być konsystentnym w
nazewnictwie w całej bazie tudzież w całym projekcie
jeżeli już się podjęło decyzję o jednej konwencji
to ważne jest żeby się jej trzymać do końca tu w nawiasach
powinny znaleźć się definicję kolumn które będą odpowiadały atrybutom
encji bohatera zanim jednak to się stanie zrobię tutaj małą przerwę
na eksperymentowanie rym zupełnie przypadkowo bez definicji
kolumn nie jest to może bardzo użyteczne zapytanie ale
kapitalnie sprawdzi się do ilustracji pewnej ogólnej zasady czy też
dobrej praktyki podczas poznawania nowych języków programowania warto
po poznaniu nowej cechy języka polecenia czy słowa kluczowego poświęcić chwilę
na poeksperymentowanie pomyśleć co ja mogę z tym zrobić albo w
jaki sposób użyć na przykład tak jak teraz dlatego mam do ciebie pytanie
jak myślisz co się stanie jeśli uruchomimy to zapytanie w
tej postaci którą widzisz najlepszym sposobem na odpowiedzenie
sobie na to pytanie jest uruchomienie go okazuje
się że jeśli nie podamy żadnych kolumn tabele będzie można stworzyć mimo
tego zobaczmy że na liście tabel pojawiła się nasza
tabela ale nie ma żadnych kolumn jeśli
przewidywałeś że nastąpi błąd to też się nie myliłeś
gdyż w wielu systemach baz danych takie polecenie by
skutkowało błędem dlatego właśnie sprawdzanie i eksperymentowanie
jest tak ważne nie zawsze nasze założenia się sprawdzają a nie wszystko
można znaleźć w dokumentacji tak jak na przykład opisu zapytania
create table z pustą listą kolumn no cóż taka pusta tabela
do niczego nam się nie przyda więc usuńmy ją po prostu na razie później
stworzymy już ją poprawnie ze wszystkimi kolumnami usuwanie
tabel to nic innego jak zapytanie drop table z
nazwą tejże tabeli usunęliśmy
jak odświeżymy to zniknęły wszystko jest zgodnie z oczekiwaniami
no to teraz jesteśmy gotowi na to żeby już podejść na
poważnie do tworzenia tabeli i zdefiniować
w niej wszystkie możliwe kolumny tworzymy
kilka kolumn takich które będą przyjmowały charakterystykę
takiego bohatera muszą się na pewno jakoś nazywać każda
z kolumn musi mieć określony swój typ więcej
o typach danych będę mówił w następnym rozdziale teraz
tylko szybko przypiszemy typy które najlepiej pasują do danych kolumn
varchar czyli typ przechowujący
ciągi znaków tak samo na nazwisko
płeć która będzie jednoelementowym
znakiem rasę zakładamy że
jest to fantastyczna gra którą będziemy robić i można się spodziewać przeróżnych
ras typu elfy krasnoludy i tym podobne będzie
to po prostu ciąg znaków także określający daną rasę a
także trochę parametrów typu siła liczbą
całkowitą przedstawione czyli typ integer i mądrość
która będzie cechowała postacie
które będą posługiwały się na przykład czarami super ważne
parametry atrybuty czyli zdrowie i mana też
całkowita wartość spróbujemy stworzyć zapytanie i
mamy błąd dlatego że kolumna oddziela się
nie średnikami tylko przecinkami tutaj rozpędziłem
się troszkę po ostatnich zapytaniach i
w ten sposób sukcesem udało
nam się stworzyć tabelę proszę
bardzo jest wszystkie nasze kolumny tutaj są widoczne wszystko pięknie
brakuje tutaj tylko jednej rzeczy kolumny która będzie
nam unikalnie identyfikowała wiersz w naszej tabeli
możemy sobie wyobrazić taką sytuację że mamy dwóch bohaterów braci
bliźniaków którzy tak samo się nazywają i mają takie same statystyki w
jaki sposób byśmy mogli ich odróżnić na razie nie byłoby
takiej możliwości i dlatego właśnie należy dodać kolumnę która będzie
unikalnie identyfikowała takiego bohatera standardowo taką kolumną jest kolumna
identyfikatora więc nazywa się ją odpowiednio w tym przypadku będzie
to hero id ponieważ chcemy dodać nową kolumnę to musimy użyć
zapytania ddl alter table bo będziemy modyfikować
tabelę tabelę heroes i add column to
jest nasza akcja którą chcemy wykonać na tej tabeli dajemy kolumnę hero
id jest ona typu integer dlatego że przechowuje po prostu
kolejne liczby całkowite które identyfikują takiego bohatera ciach
jest to dane możemy sobie to odświeżyć naszą listę kolumn i jest
hero id na końcu gratulacje dla spostrzegawczych
kolumna gender miała trzymać jednoliterowy skrót natomiast
została zadeklarowana jako jednoelementowa tablica dlatego
że można trzymać w kolumnach także dane w postaci
tablicy wtedy używa się nawiasów kwadratowych do wyspecyfikowania
wielkości tej tablicy poprawmy w takim razie ten błąd wykorzystując
polecenie ddl alter table i polecenie
alter column zmieniamy kolumnę gender i modyfikujemy
jej typ tak na jednoelementowy
znak tutaj już poprawnie użyte są nawiasy zwykłe i
już kolumna ma poprawny typ danych możemy sprawdzić
sobie we właściwościach tutaj w tym narzędziu że w definicji
jest typ character a nie tablica
a na koniec już tradycyjnie zadanie do przepracowania twoim
zadaniem będzie dodanie kolumny do tabeli heroes która
będzie przechowywała datę urodzin pomyśl jaki typ najlepiej by
pasował do takiej kolumny jako zadanie dodatkowe chciałbym
żebyś zmodyfikował tak kolumnę health żeby dodać
do niej wartość domyślną to znaczy jeżeli będziemy tworzyć nową postać i
nie podamy wartości zdrowia żeby zawsze ona tworzyła się z
wartością 200 to zadanie jest trochę trudniejsze dlatego że musisz sam znaleźć
w jaki sposób używając polecenia alter table alter
column dodać wartość domyślną do kolumny rozwiązania
tym razem nie ma w tej lekcji daję ci czas na przepracowanie tych
zadań i na początku następnej lekcji spojrzymy na przykładowe rozwiązania
do tych dwóch zadań do zobaczenia na następnej lekcji
Tworzenie tabeli bohaterów i jej modyfikacja · 2 min
-- Tworzenie pustej tabeli
CREATE TABLE heroes ();
-- Usuwanie tabeli
DROP TABLE heroes;
-- Tworzenie normalnej tabeli z kolumnami
CREATE TABLE heroes (
first_name varchar,
last_name varchar,
gender char[1],
race varchar,
strength int,
wisdom int,
health int,
mana int
);
-- Dodanie kolumny identyfikatora wiersza
ALTER TABLE heroes ADD COLUMN hero_id int;
-- Poprawa kolumny gender -> zmiana typu z jednoelementowej listy na pojedynczy znak
ALTER TABLE heroes ALTER COLUMN gender TYPE char(1);