Databáze

DVOP WBB


Bc. Matěj Cajthaml — SSPŠ

©

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

Další příkazy

Smazání řádku

Pořadí

Více pořadí

Limitování a posun

Unikátní hodnoty

Agregace

Co je to agregace?

Agregace

  • seskupení řádků do jedné či více hodnot
  • příklady: AVG, SUM, MIN, MAX, COUNT

Počet

Suma, min, max, průměr

Pojmenování

Seskupení

Seskupení s agregací

Having

Práce

Zjistěte, k čemu slouží HAVING.

Sekvence

Co je to primární klíč?

Primární klíč

  • sloupec, který je jedinečný
  • sloupec, který je neprázdný
  • sloupec, který není NULL

  • určuje, jak poznáme jedinečný řádek

Může mít tabulka více primárních klíčů?

serial

  • autoincrement
  • speciální datový typ
  • při vytvoření řádky se do sloupce vloží hodnota o jedna větší než byla předtím
  • sekvence
  • sekvence jsou sdílené v DB a mohou být použity ve více tabulkách

Indexy

  • několik typů
  • při vytváření tabulky
    • UNIQUE: sloupec musí být unikátní
    • PRIMARY KEY: sloupec je primární klíč
    • FOREIGN KEY: sloupec je cizí klíč (více později)
    • INDEX: sloupec je indexovaný

Klíč a AI

Ukázky v pg

Ukázky v pg

Je dříve uvedený kód v pořádku?

SQL Injection

  • bezpečnostní chyba
  • do parametru můžeme vložit vlastní SQL kód
  • co bychom mohli provést pomocí SQL Injection v minulém příkladu?

Řešení SQL Injection

  • nepoužívat čisté vkládání do SQL dotazu
  • použít správné metody nebo escapovat vstup
  • často taktéž tzv. prepared statements

Řešení SQL Injection

Pokročilé dotazy

Joiny

  • slouží k spojení dvou tabulek
  • pomocí podmínek
  • různé typy: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN a další

Inner join

Join s podmínkou

Vazby

Vazby, které jsme si kreslili a nebo o nich mluvili, nebyly vytvořeny uvnitř schématu.

Cizí klíče

  • vazba mezi dvěma tabulkami
  • sloupec v tabulce, který obsahuje hodnotu primárního klíče jiné tabulky
  • můžeme určit akci, která se má provést, pokud se smaže závislost

Cizí klíče

Jak v dříve uvedeném schématu DB budeme vkládat nové kočky? Co když majitel nebude existovat?

Nyní umíme vytvořit vazbu 1:N. Jak vytvoříme vazbu 1:1?

Nyní umíme vytvořit vazbu 1:N a 1:1. Jak vytvoříme vazbu M:N?

Dekompozice

  • rozkládání vazby N:M na dvě vazby
  • přidání úmělé tabulky
  • můžeme uvádět další informace
  • 1:N
  • 1:M

Dekompozice

Úprava tabulek

Příkazy SQL lze upravovat již existují tabulky. Proč bychom to dělali?

Alter

  • ALTER TABLE
  • určujeme věci, které chceme změnit

Alter

Migrace

  • nástroj pro verzování databáze
  • vytvoříme soubor s příkazy
  • jednotlivé soubory reprezentují jednotlivé migrace
  • můžeme je spouštět a vracet se zpět
  • různé nástroje a knihovny

Co se bude nacházet v souboru s migrací?

Další funkcionalitu Postgresu

Views

  • ukládáme SELECT dotaz
  • můžeme vytvořit materializovaný pohled
  • dotazujeme se na ní jako na tabulku

Views

Schémata

  • umožňují rozdělit databázi na logické části
  • poddatabáze
  • při práci s databází je nutné uvádět schéma
  • v základu public
  • SET schema 'public';
  • CREATE SCHEMA "cats_idle";

Ve většině aplikací se nepíší SQL dotazy přímo. Proč?

ORM

  • Object Relational Mapping
  • mapování objektů v daném jazyce na tabulky v databázi
  • vytvoříme si třídu, která reprezentuje tabulku
  • instance třídy reprezentuje řádek v tabulce
  • lehčí vybírání (nástavba přímo v jazyce)
  • různá komunikace

ORM

  • Doctrine
  • TypeORM
  • Prisma
  • Sequelize
  • Knex

Způsoby uchování dat

  • active record
  • data mapper

Jaké data a v jakém formátě by se data měla v DB uchovávat?

Co je to atomizace?

Nezmíněné SQL funkcionality

  • triggers
  • procedury
  • funkce
  • kurzory
  • transakce

Správný návrh databáze

Práce

Navrhněme si databázi!

Union

  • spojení dvou výsledků dotazů do jednoho
  • výsledkem je sjednocení obou výsledků

Intersect

  • spojení dvou výsledků dotazů do jednoho
  • výsledkem je průnik obou výsledků

Except

  • spojení dvou výsledků dotazů do jednoho
  • výsledkem je rozdíl obou výsledků

Mongo

Mongo

  • dokumentová databáze
  • záznamy jsou JSON objekty
  • používá BSON — binární JSON
  • primárně nemá schémata — data nemají pevný tvar

Jak se líší JSON od BSON?

Terminologie

  • databáze
  • dokument
  • index
  • schéma
  • kolekce

Co myslíte, že jsou výhody mongo databáze?

Co myslíte, že jsou nevýhody mongo databáze?

Komunikace s mongem

Komunikace s mongem

  • příkazová řádka, shell
  • různé příkazy
  • podobné JS volání

Ukázka komunikace

Není na minulé ukázce něco zvláštního?

Komunikace v knihovnách

  • posílat příkazy není vhodné
  • různé zaobalení, posílají se objekty
  • např. data, vyhledávání, ...

Velká výhoda Mongo jsou replikace a sharding. Co to znamená?

Atlas

Práce

Vytvořte si účet na atlasu a vytvořte si databázi.

Mongo v Node.js

Driver

  • oficiální driver
  • jednoduché volání příkazů

Driver

Příkazy

  • findOne
  • find
  • insertOne
  • insertMany
  • updateOne
  • updateMany
  • deleteOne
  • deleteMany
  • countDocuments
  • distinct

Funkce na výběru

  • sort
  • limit
  • skip
  • project

ORM Mongoose

ORM Mongoose

  • objektové mapování
  • dokumenty jsou objekty
  • používá schémata vynuceně

ORM Mongoose

Funkcionality

  • obj.save
  • obj.remove
  • .find
  • .findOne
  • .updateOne
  • ...

Jaké jsou výhody a nevýhody mongoose a driveru?

Jaká z databází je lepší? Jakou použijete pro další projekt?

Agregace

Agregace

  • rozděleno do stages
  • každý stage zpracuje vstup a vytvoří výstup
  • výstup se použije jako vstup pro další stage
  • výstup posledního stage je výsledek agregace

Typy agregací

  • match — filtrování
  • group — seskupení
  • sort — řazení

Group stage

  • seskupuje dokumenty podle zadaných kritérií
  • výsledkem je pole objektů
  • každý objekt obsahuje hodnoty agregovaných polí:
    • _id — hodnota agregovaného pole
    • count — počet dokumentů
    • sum — součet hodnot
    • avg — průměr hodnot
    • min — nejmenší hodnota
    • ...

Ukázka

Mohou se jednotlivé stage opakovat? Kolik stage může v jedné agregaci být?

Map-Reduce

Práce

Zjistěte, co je to Map-Reduce a jak se používá.

Další

  • lookup
  • merge

Sledování

Sledování

  • umožňuje sledovat změny v kolekci
  • zpracovává změny v reálném čase

Ukázka

K čemu se hodí sledování?

Propojení dokumentů

Jak uvnitř MongoDB můžeme vytvořit relaci? A co propojení?

Propojení dokumentů

  • vlastnosti dokumentu mohou obsahovat ObjectId jiného dokumentu
  • každý dokument v MongoDB má vlastnost _id datového typu ObjectId
  • co když se jiný dokument, na který je vázán, smaže?

BigData

BigData

  • označení pro velké množství dat
  • buzz word
  • v podstatě každé odvětví, které pracuje s daty:
    • zdravotnictví
    • bankovnictví
    • výroba
    • ...

Kde se berou data?

V jakém formátu data mohou být?

Jak velké množství dat ukládat?

Co je to vertikální a horizontální škálování?

Patří sharding a replikace do bigdata?

Používané technologie

  • Hadoop
  • Spark
  • ElasticSearch
  • ...

Děkuji za pozornost!

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