Databáze 1

35. hodina DVOP WBB


Matěj Cajthaml — SSPŠ

©

Opakování

Co je to process manager?
Jak můžeme v JS zpozdit volání nějakého kódu?
Co v sobě uchovává commit?
Co je to middleware?
Jak funguje vrstvení aplikace?

Teorie databází

Databáze

  • (ne)perzistentní uložení nějakých dat
  • nějaká struktura a možnost rozeznání
  • databáze existuje i mimo aplikaci, může ji používat více aplikací
  • často komunikace pomocí příkazů
  • správa, ochrana, efektivnost pro data

Typy databází

  • relační
  • dokumentové
  • grafové
  • klíčové-hodnotové
  • objektové
  • a další

Typy dotazování

  • SQL — Structured Query Language
  • NoSQL — not only SQL

NoSQL označuje databáze, které nejsou relační a nejsou vždy založeny na SQL. Dotazování je často zcela jiné než u relačních databází.

Co znamená, že je databáze persistentní? Může být nepersistentní?

Existující databáze

  • Postgres — relační
  • MongoDB — dokumentové
  • Redis
  • MySQL
  • MariaDB
  • SQLite
  • a další

Požadavky DB

  • uskupení dat
  • rychlost a efektivita
  • relace mezi daty
  • správa a ochrana dat
  • dostupnost

Téma databází je velmi rozsáhlé (klidně na celý rok), ukážeme si podstatné základy jak relační postgres databáze, tak i dokumentové MongoDB databáze.

Postgres

Postgres

  • relační databáze
  • open source
  • velmi rychlá
  • velmi rozšířená

Co znamená, že je databáze relační?

Relace

  • relace mezi daty
  • různé způsoby propojení
  • povinné a nepovinné vazby

Typy relací

  • kardinality
  • 1:1 — jedna hodnota v jednom souboru je vždy v jedné hodnotě v jiném souboru
  • 1:N — jedna hodnota v jednom souboru je vždy v několika hodnotách v jiném souboru
  • N:M — několik hodnot v jednom souboru je vždy v několika hodnotách v jiném souboru

Ukázky relací

  • 1:1 — jedna osoba má právě jedno identifikační číslo
  • 1:N — jedna osoba může vlastnit několik aut
  • N:M — několik osob se může zůčastnit několika akcí

Graficky znázorňujeme jednotlivé soubory jako čtverce se jménem a jednotlivé soubory propojujeme čáry (jako relace) mezi nimi. Kardinalitu určujeme na každé stráně pomocí:

1, 1..*, 0..*

Terminologie postgresu

Tabulka

  • jedna tabulka je soubor podobných dat
  • vždy má jméno a definovou strukturu
  • strukturu definujeme pomocí sloupců

  • jednotlivá data jsou řádky

Sloupec

  • každý sloupec má jméno, datový typ a další vlastnosti
  • typ určuje, jaké data může sloupec obsahovat
  • mezi další vlastnosti patří např. NULL, UNIQUE, DEFAULT

Řádek

  • každý řádek obsahuje hodnoty pro jednotlivé sloupce definované ve struktuře tabulky

Vlastní databáze

Pro účely studia máte k dispozici postgres databázi na portálu. Nyní si ukážeme, jak se k ní připojit.

Používáme nástroj adminer, existují ale i jiné alternativy, jako např. phpmyadmin nebo pgadmin.

Příkazy

Příkazy

  • postgres používá jazyk SQL (Structured Query Language)
  • každá databáze má svůj nadřazený jazyk, který se liší od SQL
  • SQL je standardní jazyk pro práci s databázemi, různé standardy
  • SQL je case insensitive

Příkazy

  • SQL příkazy končí středníkem ;
  • SQL příkazy se dělí na:
    • DDL (Data Definition Language): příkazy slouží k definování struktury databáze
    • DML (Data Manipulation Language): příkazy slouží k manipulaci s daty
    • DQL (Data Query Language): výběr dat
    • a další

Příkazy

  • DDL příkazy
    • CREATE TABLE
    • ALTER TABLE
    • DROP TABLE
  • DML příkazy
    • INSERT
    • UPDATE
    • DELETE
  • DQL příkazy
    • SELECT

Datové typy

https://www.postgresql.org/docs/current/datatype.html

Vytvoření tabulky

Vytvoření řádky

Výběry

Výběry

  • výběr dat z tabulky dle nějakého nastavení
  • nejsložitější příkaz
  • určujeme:
    • sloupce, které chceme zobrazit
    • tabulku, ze které chceme data získat
    • podmínky, které musí být splněny
    • řazení
    • limit
    • a další!

Výběry 1

Výběry 2

Výběry 3

Výběry 4

Výběry 5

Úprava řádku

Můžeme upravovat více řádek najednou?

Postgres v Node.js

Postgres v Node.js

  • mnoho knihoven
  • knihovna pg

Připojení

Výběr

Příště: SQL injection, pokročilé dotazy (agregace, vnořené dotazy a další) a sekvence!

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/