4 ZIS 2020-relační+DB,+dotazovací+jazyk+SQL

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 52

Volba databáze, různé

modely, dotazovací jazyk SQL


Databáze
• Co je to databáze?

Databáze – soubor dat, které slouží pro popis reálného světa.

• Dominantní je relační model


Volba databáze
• Je problém ztráta nějakého záznamu? (priorita je rychlost nebo
okamžitý stav)
Banka x Google
• Musí všichni okamžitě vidět modifikace dat?
Facebook x rezervační systém
• Může uživatel chvíli čekat?
Rezervace x hledání ve Wikipedii
• Požadavek investora
• Bezpečnost investicí – jaká je požadovaná dlouhodobá stabilita?
Volba databáze
• O čem máme nejvíce informací?
• V čem se to bude programovat?
• Jaké máme vývojáře? (co umí?)
• Kolik na to chceme dát?
(Terradata – bankomaty…)
• Je pro tuto volbu nějaký partner?
Projekt databázového systému
• Neexistuje jediné univerzální řešení vhodné pro všechny
• Příklad – projekt židlí:
• Kino – pohodlné sezení
• Čekárna u lékaře – sezení relativně pohodlné, úsporné, možnost častého
čištění
• Rychlé občerstvení – sezení na kratší dobu, židle nebo vysoké stoličky
Typy databází
• Flat-file – textový soubor - sekvenční přístup
• Fixed File
• Hierarchické
• Síťová
• Relační
• Objektové
• Deduktivní
• XML
• NoSql
Flat file
http://en.wikipedia.org/wiki/File:Database_models.jpg
Relační databáze
• Data jsou uložena v tabulkách, mezi kterými jsou definovány určité
vztahy (relace)
• U relační databáze se snažíme o optimalizaci uložení dat -
minimalizace redundancí (nadbytečnost) dat, normalizace.
• Transakční systémy - ACID
Transakce
• Transakce – sled operací, které musíme vykonat, abych dosáhli cíle a přitom databáze zůstala
konzistentní. Transakce je nedělitelná, musí proběhnout buď jako celek nebo se v případě
neúspěchu musí výsledky transakce zrušit a vrátit systém do původního stavu.
• Konzistence může být porušena např. při paralelním zpracování více SQL příkazů, které pracují nad
stejnými daty.
Vlastnosti transakce
• A C I D = Atomicity, Consistence, Isolation, Durability
• Atomicity – transakce je atomická, tj. dále nedělitelná, je chápána jako celek
• Consistence – výsledkem proběhnuvší transakce musí být data v konzistentním stavu (tzn. musí
splňovat všechny integritní a referenční omezení)
• Isolation – data a změny zpracovávané transakcí jsou do ukončení transakce pro ostatní uživatele
neviditelné
• Durability – výsledek transakce musí být trvalý (důsledkem tohoto požadavku je, aby data
změněná v důsledku potvrzené transakce byly zapsány fyzicky na disk a ne pouze v cache paměti
databázového stroje).
Relační model dat
E-R model – entitně relační model

Co je to entita?
Objekt z reálného světa. Entitu reprezentuje v databázi tabulka.

Co je to atribut entity?
Vlastnost entity, v databázi odpovídá atributu sloupec tabulky.
Vlastnosti atributů
• Musí být atomické (=dále nedělitelné)
• Na pořadí sloupců nezáleží
Normalizace
Cílem normalizace je dosažení ideální struktury dat.

Normalizace se snaží vytvořit relační model pro uložení dat, který


minimalizuje datovou redundanci při zachování datové integrity.
Normální formy db
Existují tzv. „normální formy“.
1 NF – záznam neobsahuje žádnou opakující se položku
2 NF – záznam má pouze primární klíč (PK) a neklíčové položky jsou
závislé na celém PK
3 NF – vylučuje tranzitivní (přenesené) závislosti

1st ≤ 2nd ≤ 3rd ≤ BCNF


Příklad – 1 NF
Příkladem by mohla být entita „Objednávka", která bude obsahovat
atributy „Objednávka Číslo", „Datum", „ZbožíID1", „ZbožíID2",
„ZbožíID3", „Množství1", „Množství2" a „Množství3".

Skupina atributů „ZbožíID" a „Množství" se zde třikrát opakuje, entita


tedy nevyhovuje první normální formě.
Příklad 2NF
Představme si entitu „Faktura" s atributy „FakturaČíslo",
„DatumSplatnosti", „ZbožíID“, „Množství".

V takovéto entitě je klíčem kombinace atributů „FakturaČíslo" a


„ZbožíID" (jedná se tedy o složený klíč). Atribut
„DatumSplatnosti" je ale závislý pouze na atributu „FakturaČíslo"
a ne na celém kandidátním klíči a proto taková entita není ve
druhé normální formě.
Příklad – 3NF
„ObjednávkaČíslo", „ŘádekČíslo", „ZbožíID", „Název zboží" a
„Množství".
Takováto entita není ve třetí normální formě, protože atribut
„NázevZboží" je funkčně závislý na atributu „ZbožíID", nikoliv na
kandidátním klíči, kterým je v tomto případě kombinace atributů
„ObjednávkaČíslo„ a „ŘádekČíslo„.
Entita tedy nevyhovuje 3 NF.
Denormalizace
• Ne vždy je ideální maximální normalizace – důsledná normalizace
může snižovat rychlost zpracování
• Denormalizace – agregovaná data, předpřipravené hodnoty pro
sestavy – zrychlují výstupy
Integrita
• Entitní integrita vyžadující, aby každá tabulka měla
primární klíč, který je pro každý záznam unikátní a
není NULL.
• Referenční integrita bránící pomocí cizích klíčů tomu,
že data v různých tabulkách, která by měla souviset,
nesouvisí.
• Doménová integrita zajišťující, že každá hodnota v
daném sloupci má vyžadovaný typ, případně rozsah,
např. nezáporná sudá čísla nebo písmena A, B nebo C.
Poznámka: Složité omezení může vyžadovat řešení tzv.
triggery.
Referenční integrita
• restriktivní
Nelze smazat nadřízený záznam, pokud na něj existuje odkaz z
nějakého podřízeného záznamu.
• set null
Pokud smažeme nadřízený záznam, v podřízeném záznamu se
hodnota cizího klíče nastaví na NULL.
• kaskádová
Pokud smažeme nadřízený záznam, smažou se i všechny podřízené
záznamy, které se na něho odkazují.
Úroveň databázového modelu z hlediska
abstrakce
• Konceptuální model
• Logický model
• Fyzický datový model – konkrétní db systém
Návrh databázového systému
Základní modely vedoucí k návrhu databázového systému jsou:
- Datové modelování (ERD)
- ERD (Entity Relationship Diagram) ER diagramy slouží k modelování
struktury databáze (v grafické podobě).
- Funkční modelování (DFD)
- DFD (Data Flow Diagram) Cílem DFD je modelování datových nebo řídicích
toků v systému (v grafické podobě).
- DFD diagramy popisují funkce systému.
- Časová (dynamická) analýza (STD)
- STD (State Transition Diagram) STD obsahuje sled stavů, v jakém se systém
může nacházet a za jakých podmínek může dojít ke změně stavu. Modeluje
systém z pohledu změn v čase.
Uživatelé
Typy uživatelů v databázi:
• Správce databáze (administrátor)
• Aplikační programátor
• Koncový uživatel

Komunikační prostředek pro všechny typy uživatelů - SQL


SQL - Structured Query Language
Standardní rozhraní všech typů databázových systémů

24
SQL - Structured Query Language
Pro řízení relačních databází byl vyvinut tzv. Structured
Query Language (SQL)
Standardní rozhraní všech typů databázových
systémů
Zůstává i dále trendem vývoje komunikace s
databázovými systémy
Existuje mezinárodní norma:
ISO/IEC 9075:2011
Information technology – Database languages – SQL

25
Základní vlastnosti SQL

• Vytvoření databáze a struktury relací


• Obsahuje základní komponenty:
• DDL (Data Definition Language) jazyk pro definici dat
• DML (Data Manipulation Language) jazyk pro manipulaci s daty
• DCL (Data Control Language) jazyk pro řízení dat
• Neprocedurální jazyk
• Užití: administrátor (DBA), management, vývojář aplikace, koncový
uživatel

26
SQL MS Access
• Structured Query Language
• Standardní jazyk pro správu databází v SŘBD
• Byl navržen počátkem 70.
let 20. století a používá se
dodnes.
• Píší se v něm příkazy a
SŘBD je vykonává.
• MS Access jej automaticky
generuje podle akcí
uživatele.

27
Databáze v MS Excel
pomocí MS Query
• Volby v MS Excel: Data
• Importovat externí data - Nový databázový dotaz
• Uživatel vybere tabulky a jejich sloupečky.
• Uživatel nastaví relace.
• Automaticky se vytvoří dotaz (query).
• Výsledek dotazu se uloží jako tabulka do Excelu a lze
jej dodatečně upravovat.
• http://www.exceluser.com/explore/msquery1_1.htm

28
Základní příkazy SQL

• DDL – Data Definition Language


• CREATE TABLE, ALTER TABLE, DROP TABLE
• totéž pro VIEW
• CREATE INDEX, DROP INDEX
• DML – Data Manipulation Language
• SELECT
• INSERT
• UPDATE
• DELETE
• DCL – Data Control Language
• SET TRANSACTION
• GRANT, REVOKE

29
Syntaxe jazyka

• Velmi jednoduchá pravidla syntaxe


• Každý příkaz musí začínat na nové řádce.
• Příkaz SQL rozlišuje rezervovaná slova a uživatelem definovaná slova (názvy
objektů).
• Rezervovaná slova nesmí být dělená do dvou řádků.
• Příkaz SQL bývá dost často ukončen, a to středníkem „;“
• SQL není case sensitive, jen hodnoty textového argumentu musí být napsány
přesně.

30
Definice objektů - SQL

K definici objektů je určen příkaz jazyka DDL CREATE (TABLE, INDEX, …)

CREATE TABLE <jméno tabulky> (<jméno sloupce><typ> (<délka>)


[<jméno sloupce><typ> (<délka>)]...);

Výpis tabulky:
DESC <jméno tabulky>;
Poznámka: V prostředí MS Access nebudeme příkazy jazyka DDL používat

31
Definice tabulky – SQL - ukázka

CREATE TABLE Zákazník (


kod_zak CHAR(6) NOT NULL,
jmeno VARCHAR (20),
prijmení VARCHAR (20));
CREATE TABLE Objednávka (
kod_obj CHAR(6) NOT NULL,
kod_zak CHAR(6) NOT NULL);

32
33
Datové typy
• Textové
CHAR(n), VARCHAR(n)
• Číselné
SMALLINT, LONGINT, INTEGER
FLOAT, REAL, DECIMAL(m,n)
• Datové
DATE, TIME, DATETIME, TIMESTAMP
• Speciální (obrázky, soubory, …)
• Postupně dochází k rozšiřování datových typů především z hlediska multimediálních dat

34
Návrhové zobrazení MS Access

35
Návrhové zobrazení MS Access

36
DML - Data Manipulation Language

• vložení záznamu
INSERT INTO
• změna dat v záznamu
UPDATE
• výběr záznamů
SELECT
• zrušení záznamu
DELETE

37
Naplňování tabulek daty

Po vytvoření definic tabulek, jsou tyto prázdné (bez dat) a je třeba do tabulek data
vložit.
Příkazy :
INSERT INTO - umožní vložit do jmenované tabulky a potřebných položek data.

Příklady :
INSERT INTO zákazník VALUES („123456“,“Jan“,“Novák“);

INSERT INTO objednávka (kod_obj, kod_zak) VALUE („545467“, „123456“);

38
Příkaz SELECT

SELECT [ DISTINCT | ALL ] { * | [ sloupcový_výraz [AS nový_název] ] [ , …] }


FROM název_tabulky [alias] [ , … ]
[ WHERE podmínka ]
[GROUP BY seznam_sloupců ] [ HAVING podmínka ]
[ORDER BY seznam_sloupců

Sloupcový výraz - název sloupce nebo výraz

39
Dotazy - SQL

• Návrhového zobrazení - není standardním prostředím databázových


systémů
• MS Access – menu – volba Dotazy
• Příkazy SQL – jednoduchá syntaxe

Poznámka: MS Access – menu Zobrazit – volby


Návrhové zobrazení,
SQL,
Datový list (výsledek dotazu)

40
ER diagram - Knihovna

E-R diagram KNIHOVNA


Č-ČTENÁŘE
ČTENÁŘ JMÉNO
1 ADRESA

MÁ_VYPŮJČENO MÁ_ZÁZNAM

DAT_ZPĚT N MÁ_KOPIE N DAT_REZ

EXEMPLÁŘ KNIHA
N 1

ISBN INV-Č DAT_NAK CENA ZEMĚ_VYD ISBN AUTOR TITUL

41
Získání celé tabulky
SELECT Isbn, Inv_č, D_nákupu, Cena, Země_vydání
FROM Exemplář;

SELECT * FROM Exemplář;

42
Projekce

SELECT Země_vydání FROM Exemplář;

SELECT DISTINCT Země_vydání FROM Exemplář;

43
Vypočítaná položka

SELECT Isbn, Inv_č, D_nákupu, Cena, Cena/1.05 AS bez_DPH, Země_vydání


FROM Exemplář;

44
Selekce (restrikce)

SELECT * FROM Exemplář WHERE Země_vydání = ‘GB‘;

= , != nebo <>, < , <= , > , >= , AND, OR , NOT

SELECT * FROM Exemplář


WHERE Země_vydání = ‘GB‘ OR Země_vydání = ‘USA‘;

výčet hodnot
SELECT * FROM Exemplář
WHERE Země_vydání IN (‘GB‘ , ‘USA‘ );
interval
SELECT * FROM Exemplář
WHERE Cena BETWEEN 300 AND 900;

45
Výběr podle vzoru

SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘G%‘;

SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘G_‘;

SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘U_ _‘ ;

SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘%A‘ ;

SELECT * FROM Exemplář WHERE Země_vydání LIKE ‘%A%‘;

SELECT * FROM Exemplář WHERE Země_vydání NOT LIKE ‘G%‘;

46
Test prázdné hodnoty

SELECT * FROM Exemplář WHERE Země_vydání IS NULL;

SELECT * FROM Exemplář WHERE Země_vydání IS NOT NULL;

47
Řazení

SELECT * FROM Exemplář


ORDER BY Cena;

SELECT * FROM Exemplář ORDER BY Cena Desc;

SELECT * FROM Exemplář ORDER BY Země_vydání, Cena

48
Agregované funkce
COUNT počet hodnot ve sloupci (počet řádků)
SUM součet hodnot ve sloupci
AVG průměr hodnot z daného sloupce
MIN minimální hodnota
MAX maximální hodnota

SELECT COUNT(*) AS z_GB FROM Exemplář


WHERE Země_vydání = ‘GB’

SELECT COUNT( DISTINCT Země_vydání) AS různých_zemí


FROM Exemplář

SELECT SUM(Cena) AS za_kolik_z_GB FROM Exemplář


WHERE Země_vydání = ‘GB’

49
Agregační funkce

Vestavěné (BUILT-IN) agregační funkce

COUNT( sloupec ) Počet řádků vyhovujících podmínce WHERE. Protože výsledek


COUNT(*) nezávisí na jménu sloupce uvedeného v argumentu, lze místo
sloupce uvést znak *.
COUNT( DISTINCT sloupec ) Počet různých hodnot uvedeného sloupce
vyskytujících se ve všech řádcích vyhovujících
podmínce WHERE.
SUM( sloupec ) Součet hodnot ve sloupci přes všechny řádky vyhovující
podmínce WHERE.
Sloupec musí být některého numericko typu.
AVG( sloupec ) Průměr hodnot ve sloupci přes všechny řádky splňující
WHERE.
Sloupec musí být některého numerického typu.
MAX( sloupec ) Největší hodnota ve sloupci přes všechny řádky splňující
WHERE. U numerických číselně, u stringu podle abecedy, ...
MIN( sloupec ) Nejmenší hodnota ve sloupci přes všechny řádky splňující
WHERE. U numerických číselně, u stringu podle abecedy, ...

50
Vnořený select
Najdi čísla čtenářů, kteří bydlí v Plzni a mají vypůjčenou nějakou knihu.

SELECT Č_čt FROM Čtenář


WHERE adresa LIKE ’%Plzeň%’
AND Č_čt IN (SELECT Č_čt FROM Výpůjčka);

Najdi jména čtenářů, kteří mají rezervovanou knihu Babička.

SELECT Jméno FROM Čtenář


WHERE Č_čt IN (SELECT Č_čt FROM Rezervace
WHERE ISBN = (SELECT ISBN FROM KNIHA
WHERE Titul = ’Babička’));

Poznámka: máme zaručeno, že existuje právě jeden záznam Babičky s ISBN

51
Grupování
SELECT COUNT(Inv_č), SUM(Cena) AS celkem, Země_vydání
FROM Exemplář
GROUP BY Země_vydání
ORDER BY Země_vydání

počet Celkem Země_vydání počet Celkem Země_vydání

3 1950 GB 3 1950 GB
2 1562 USA 2 1562 USA

SELECT COUNT(Inv_č), SUM(Cena) AS celkem, Země_vydání


FROM Exemplář
GROUP BY Země_vydání HAVING COUNT(Inv_č) > 2
ORDER BY Země_vydání

52

You might also like