DBMS (4IT218)
- Meta
- Konzultacni hodiny s externistou Pavlem Vedralem na Brumlovce do 17:00
- Cviceni na sebe navazuji
-
- cast semestru datove modelovani
- Nejist a nepit, alespon nic krome vody
- Budeme pracovat v Oracle SW
- SQL Developer nejdriv
Ctrl+F7je formatovaniShift+F4ukazuje typy sloupcu (na mac je to⌥⇧F4)
- Power Designer a Data Modeler potom
- SQL Developer nejdriv
- Prvni polovina semestru zakoncena testem
- Bez internetu
- Cile predmetu:
- Navrhovat obsah databaze
- Sprava dat a znalosti o DB systemech
- Prakticke znalosti pouziti SQL a CASE nastroju pro navrh databaze
- Literatura
-
- tyden prakticka ukazka opitmalizace s borcem s Oraclu
- Pozadavky:
- Semestralni prace
- Vybereme si tema, architektura na trech urovnich –
- Konzultace tematu se cvikarem
- Jako jeden PDF soubor v sablone z InSISu
- Vytvoreni databaze, seedujeme tabulky daty, nastavime permissions a udelame dokumentaci
- Oduvodneni referencnich integrit
- Vybereme si tema, architektura na trech urovnich –
- Test ze SELECT (20b)
- Zaverecny test (40b)
- Semetralni prace (40b) – do 15. 5. 2026
- Semestralni prace
- Kazdy ma svoji databazi
- username: xname do InSISu
- heslo: krestni jmeno bez diakritiky
- TNS service name: ora9
- Hostname:
kit-oracle.vse.cz
- Tangents:
- xname protoze puvodne mely na zacatku xname
- “Server bezi, admin lezi”
- “Indicky kod” je nezdokumentovany a necitelny, neudrzitelny
- 2026-03-31
- “Vy nechcete delat, vy chcete penize”
- “Bohuzel Jana Husa upalili pozde [takze nam do jazyka strcil diakritiku]“
Prednasky
-
IS (informacni systemy)
- Analyza a navrh business/podnikovych procesu
- Analyza a navrh business efektu
- Analyza rizik ICT a IS
- Prispusobovani standardniho softwaru
-
Zakladni pojmy
- Data
- Formalizovane a fyzicky zaznamenane znalosti, poznatky, zkusenosti, vysledky pozorovani procesu, projevu, cinnosti a prvku sveta
- Cokoliv fyzicky zaznamenane
- Informace
- Smysluplna interpretace dat
- Snizuji entropii sveta
- Databaze
- Integrovana pocitacove zpracovavana mnozina persistentnich dat
- Persistence znamena, ze data zustavaji zaznamenana i bez elektrickeho proudu
- Integrovana pocitacove zpracovavana mnozina persistentnich dat
- DBMS (SŘMS)
- Databazovy system pro vytvareni databaze, pouziti databaze (CRUD)
- Data
-
Prinosy databazoveho pristupu
- Sdileni dat
- Snizeni redundance (opakovani) dat
- Snazsi zabraneni vzniku nekonzistenci
- Treba musi existovat studijni program, na ktery se nekdo hlasi
- Udrba integrity databaze
- Zajisteni ochrany datbaaze pred havarii nebo nautorizovanym pristupem
- V minulosti se delaly kazdych par dni udrzby a casto nefungovaly
-
Model dat
- Linearni
- Sitovy
- Stromovy
- Relacni
- Vznik kolem 2. pol. 70. let
- Oracle porad lide opousti, ale porad je nejpopularnejsi
- Relacni model dat
- Zalozeny na predikatove logice 1. radu a na mnozinach (kazda tabulka je vlastne mnozina – atribut je taky mnozina)
- Tabulka ma vlastnosti:
- Nezalezi na poradi radku, sloupcu
- Kazdy slupec ma data stejneho typu
- Zadne dva radky nejsou shodne
- Kazda tabulka ma nazev
- Ma primarni klic (odliseni radku)
- Jednoznacny
- Minimalni – musi obsahovat hodnoty pro vsechny atributy PK
- Uziva se dobre jako FK (cizi klic)
- Sekundarni klic
- Mnozina radku
- Tabulka ma vlastnosti:
- Sjednoceni, prunik, rozdil, symetricky rozdil, specialni projekce (
IN), restrikce (LIMIT),JOIN(soucin tabulek, spojeni pres nejaky klic),OUTER JOINpro spojovny sloupec s NULL hodnotami – z relacni algebry - Domena
- Relacni mnozina
- Atribut relace
- Databazove jazyky
- Komunikace cloveka s DBS
- Nejcasteji rozlisovane casti:
- DDL (Data Definition Language)
- DML (Data Manipulation Language)
- DCL (Data Control Language)
- Prikazy pro:
- Definici objektu:
- CREATE TABLE, ALTER TABLE, DROP TABLE
- Manipulaci
- INSERT, SELECT
- Rizeni pristupu
- GRANT,
- Definici objektu:
- Zalozeny na predikatove logice 1. radu a na mnozinach (kazda tabulka je vlastne mnozina – atribut je taky mnozina)
- Objektove relacni
-
Prikaz
SELECT- Muze byt ve vsech castech jazyka
- SELECT cis, jm Jmeno, ciis_ved AS “Cislo vedouciho” (
,je oddelovac queried sloupcu, ∴ muzeme prejmenovat i bezAS) - Za
FROM tabulkamuzeme taky dat textovy retezec na prejmenovani tabulky
-
Prikaz
COUNT– nejlepe s parametrem, spocita pocet non-NULLhodnot v urcenem sloupci -
Prikaz
LIKE– ma wilcard%a_(_matchuje prave jeden znak), ktery se da escapenout klicovym slovemESCAPE -
GROUP BY ... HAVING–GROUP BYseskupuje,HAVINGzde filtruje pocet vracenych skupinHAVINGje super v tom, ze dokaze delat podminky pres seskupovaci funkce jakoCOUNT
-
ORDER BYurcuje poradi vracenych radku -
Joining se da delat i pres
SELECT * FROM za, odd WHERE ..., nicmene je to nahovno a nemeli bychom to delat- Jinak bud
SELECT * FROM zam JOIN odd ON slupec1 = sloupec2 - nebo
SELECT * FROM zam JOIN odd USING (sloupec) - INNER JOIN => zadne
NULLve spojovanem sloupci- Kdyz spojujeme dve tabulky
- OUTER JOIN => nevadi
NULLve spojovanem sloupci - LEFT nebo RIGHT znamana, z jaky strany pripojujeme tu dale specifikovanou relacni tabulku
- FULL OUTER JOIN neni univerzalni reseni nasich problemu
- To dela to, ze bere vsechny radky vsech joinovanych tabulek, nully z obou stran nechava nakonec
- Jinak bud
-
Kdy nepouzivat JOINy
- Vnorene dotazy
- Typicky neco jako “vypis mi oddeleni ve kterym neni zadny zamestnanec”/“zamestnance bez jakehokoliv ukolu”
- Misto joinu takovy to
NOT IN(SELECT ...)
- U
MINUSa jinych mnozinovych operaci je nutne selectovat stejne slupce
- Vnorene dotazy
-
Planovac DB optimalizuje a dela nekolik moznosti toho, jak se k vysledku muze dostat
-
INSERT
- Pridavani novych radku do tabulky
-
UPDATE
- Aktualizuj tabulku nejakou, nastav hodnotu v nejakem slupci (mozna s nejakou podminkou
WHERE)
- Aktualizuj tabulku nejakou, nastav hodnotu v nejakem slupci (mozna s nejakou podminkou
-
DELETE FROM
- S nejakym nazvem tabulky, mozna i s nejakou podminkou (jinak maze vsechny radky)
- Tangent: o zamestnancich se museji nechavat data az do jejich duchodu (hodne desitek let)
Navrh databaze (Data Definition Language)
CREATE TABLE- Vytvoreni tabulky
- Konzistence databaze
- Integrita databaze
- Entitni integrita
- Kazda tabulka ma primarni klic
- Primarni klic je mnozina atributu zajistujici jednoznacnou identifikaci radku (
UNIQUE&NOT NULL)- Take klicove slovo
PRIMARY KEY
- Take klicove slovo
- Primarni klic je mnozina atributu zajistujici jednoznacnou identifikaci radku (
- Kazda tabulka ma primarni klic
- Referencni integrita
- Odkazy pomoci primarniho klice
- Kaskadovani pri vymazu a aktualizaci
ON DELETE __:RESTRICTSET NULLCASCADE
DEFAULTnam urci nejakou vychozi hodnotu sloupce
- Entitni integrita
- Klauzule CHECK (value checking pro SQL)
- Nepouzivat
ON UPDATE(to by znamenalo, ze aktualizujem PK, coz se nedela, protoze je to nejdulezitejsi, co o objektu vime)
create table ODD (
CIS_ODD SMALLINT NOT NULL,
NAZEV VARCHAR2(40) NOT NULL,
PATRO CHAR(3) NOT NULL,
CONSTRAINT PK_ODD primary key (CIS_ODD)
)
create table ZAM (
CIS INTEGER not null,
CIS_ODD SMALLINT,
CIS_VED INTEGER,
JM VARCHAR2(40) not null,
PLAT NUMBER(10,2) not null
constraint CKC_PLAT_ZAM check (PLAT between 100 and 60000),
constraint PK_ZAM primary key (CIS),
constraint FK_ZAM_ZARAZENI_ODD foreign key (CIS_ODD) references ODD (CIS_ODD),
constraint F_ZAM_NADRIZZAM foreign key (CIS_VED) references ZAM (CIS)
);
ALTER TABLE- Zmeneni tabulky
- Muzeme treba pridat, zmenit nebo odebrat
CONSTRAINTy:DROP CONSTRAINT FK_ZAM_NADRIZ_ZAMADD CONSTRAINT FK_ZAM_NADRIZ_ZAM foreign key
DROP TABLE- Vymazani nejen radku, ale i samotne tabulky
- Typicky chci i
DROP TABLE
- Tabulky
- Kmenove (normalni relacni tabulky)
- Odvozene:
- Staticke (snapshot nejakeho stavu tabulky v case)
- Dynamicke (VIEWs)
CREATE VIEWwith check option—> pokud budu chtit delat insert nebo update do toho pohledu, musi pro nej projit vsechny podminky vSELECTu, ktery view vytvoril
MATERIALIZED VIEW- Pro ne casto-menici-se data
- Narocna (draha) na querying
- Normalni view dela vzdycky novej query, materializovane pohledy maji nejaky lifetime (s refreshem)
REFRESHFASTCOMPLETEFORCE
ON DEMAND- Muzeme rucne invalidovat stav materializovaneho pohledu
- Docasne
- Synonyma
- Existuji tabulky plne nazvu tabulek, nebo sloupcu
SELECT * FROM sys.*// to jsou systemove tabulky- Synonyma jsou pro to, abychom nemuseli opakovane prejmenovavat
- Muzou treba pomoct s tim, abychom nemuseli mit namespaced jmeno tabulky (
uzivatel.tabulka), ale jenom jmeno tabulkytabulka
- Muzou treba pomoct s tim, abychom nemuseli mit namespaced jmeno tabulky (
CREATE SEQUENCE- Objekt typu sekvence, ktery ma nejake pravidlo pro zvysovani – potom treba pri insertu muzu insertnout hodnotu SEKVENCE.NEXTVAL a iterator nam vlastne
yieldne novou hodnotu pro pouziti
- Objekt typu sekvence, ktery ma nejake pravidlo pro zvysovani – potom treba pri insertu muzu insertnout hodnotu SEKVENCE.NEXTVAL a iterator nam vlastne
- Datove typy
- Lisi se podle typu databaze
- Oracle SQL treba nema
BOOLEAN
- Oracle SQL treba nema
- Typicke:
- NUMBER
- INTEGER
- (FLOAT)
- (DECIMAL)
- (BINAR_FLOAT)
- CHAR
- Alokace predem dane delky
- VARCHAR2
- Do 40 000 znaku
- DATE
- Datetime
- Pouzivat funkci
TO_DATE, ktery dokaze parsovat datum podle predem specifikovaneho formatu - Vyhoda moznosti extrakce nejake casove jednotky (
EXTRACT YEAR FROM datum)
- Lisi se podle typu databaze
- Integritni omezeni
TRIGGER- Podle nejake udalosti muzeme udelat neco dalsiho
create trigger ODD_DEL after delete on ODD for each row update ZAM set ZAM.CIS_ODD = NULL where ZAM.CIS_ODD = :old.CIS_ODD- Daj se v nich realne delat podminky s
IF, daji se hazet errory (RAISE_APPLICATION_ERROR, kod, message)
CHECKdokaze kontrolovat data v jedne tabulce, ale ne cross-table
Rizeni pristupu (Data Control Language)
- Udelovani (granting) prav k objektum
- Bud vsem, nebo specifickym uzivatelum
- Zejmena k tabulkam a pohledum
- Syntaxe:
GRANT {all prava_treba_privileges} on {nejakej_objekt_treba_tabulka} to {public_nebo_vycet_uzivatelu} [with grant option]
with grant optionurcuje, jestli muze subjekt mnozit opravneni dal- REVOKE
- Bere zpatky prava od nejake skupiny uzivatelu
Standardizace jazyka
- Podle mistnich pedagogu je to intergalakticky jazyk
- Uz neni ani strukturovany, ani dotazovaci
- ISO, IEC, ANSI
- ==> vic klicovych slov pro totez
- SOME/MANY, prejmenovavani sloupcu pres mezeru nebo
ASapod.
RDBS
- Minimalni pozadavky
- Vsechna data jsou ulozena v tabulkach
- Pouzivame nejaky dotazovaci jazyk
- Vlastnosti
- Kazdy typ dat ma moznost byt NULL
- Fyzicka persistence je jedno, dulezita je abstrakce pro nas ve forme tabulek a pristupnosti jazykem
- Vsechna data musi byt pristupna pomoci znalosti nazvu tabulku, sloupce a primarniho klice
- Plati zde, ze metadata k datum jsou pristupna a zaroven take tabulky
- Jazyk na dotazovani musi byt dobre zdokumentovany, musi umet i vytvaret struktury dat & all that jazz
- Ruzne DBMS maji cross-compatible abstrakce, takze migrace je easy
- Pokud chceme vynucovat treba zadne NULLs, musim deklarovat pravidlo, ktere je databazi vynucovano
- Databaze nesmi mit jazyk, ktery obchazi integritni omezeni
- Zmena umisteni dat nesmi vynutit zmenu na aplikacni urovni (zadavany SQL prikaz)
Datove modelovani
- Nastroje: Sybase Power Designer, nebo Oracle Data Modeler pro logickou uroven navrhu
- Tri architektury:
- konceptualni modelovani (model reality)
- Konceptualni popis dat: obsah datove zakladny, nezavisla na implementacnim a technologickem prostredi
- Typicky se o nasi domene musime naucit dost informaci
- Priklad: v autoservisu je vztah zakazek a aut 1<>1?
- Notace se lisi, ale jsou nejake typy znacek pro ruzne vztahy a entity
- Resene problemy na teto urovni:
- Rozliseni mnozin objektu
- Pojmenovani mnozin a identifikace entit
- Rozliseni entitnich podmnozin
- Treba ruzne typy zamestnancu
- Urceni atributu entitnich mnozin
- Vyreseni synonym a homonym
- Pri tvorbe konceptualnich modelu je nutno integrovat dilci datove modely
- Priklad: kdyz zacnu chtit o zaznamenanych dodavatelich uz neco vedet, vytvarim dilci DM
- Prirozene vs umele ID – u lidi to muze byt neco co nas biometricky popisuje
- Parcialni sloupce muzou byt
NULL - Transformace do relacniho modelu:
- Sigma pravidlo c.1: kazda entitni mnozina je transformovana do jedne relacni tabulky. Identifikatory entini mnoziny ses stanou atributy…]
- Sigma pravidlo c. 2: vztah z konceptualniho modelu je v relacnim modelu vyjadren cizim klicem
- Jedna zmena v zrcadlenem svete by mela znamenat jednu zmenu do databaze (takze bychom nemeli mit oboustrane vztahy)
- technologicka uroven (technologicky model)
- Realizace systemu v nejakem technologickem prostredi
- V relacnim modelu dat podtrhavame sloupce, ktere jsou PK
- fyzicka uroven (implementacni uroven)
- Implementacni specifika dane databaze
- Typicky sem nesahame
- konceptualni modelovani (model reality)
- Modelujeme nejakou domenu
- Vztahy
- Vztah je mezi n entitnimi mnozinami (binarni pro 2, nebo potom polyarni)
- Kosoctverec je ten realny vztah – ctu to, co je bliz k nasi mnozine – treba Zamestnanec je zarazen v oddeleni, nicmene ten realny typ vztahu (jestli musi, muze, many atd.) se cte podle typu sipky za kosoctvercem
- Prerusovana sipka znaci optional relationship
- Dvojita sipka znamena, ze nalezi viceru z mnoziny 2 (podle typu sipky i 0)
- Kosoctverec je ten realny vztah – ctu to, co je bliz k nasi mnozine – treba Zamestnanec je zarazen v oddeleni, nicmene ten realny typ vztahu (jestli musi, muze, many atd.) se cte podle typu sipky za kosoctvercem
- N<>M
- n-arni vztah
- Neexistuje jako zalezitost prvni radu, relacni tabulky na to nejsou delane
- 1<>1
- 1<>N
- N<>1
- Vztah je mezi n entitnimi mnozinami (binarni pro 2, nebo potom polyarni)
Normalizace dat
- Technika datove analyzy, zabyva se vztahy na urovni datovych polozek typu zaznamu
- CIlem je:
- verny obraz modelovaneho sveta
- interni konzistence datoveho modelu
- minimalizace redundance
- maximalizace stability datovych struktur
- Prvni, druha, treti, ctvrta normalni forma (tohle neni hotovy)
- Prvni: polozka nebo skupina polozek se neopakuje
- Druha: vsechny neklicove atributy zavisi na PK
- Treti: neobsahuje tranzitivni zavislosti
- Ctvrta: muzu rozdelit slozene klice na vice kombinaci, a porad jsou unikatni (de facto rozdeluju jednu tabulku na vice)
- Pata: rozliseni a oddeleni parovych cyklickych zavislosti v PK slozenem z 3+ atributu
Fyzicky model
- Nejake performance metrics
- Jako uzivatel: latence dotazu
- Databazove zpracovani
- OLTP – online transaction processing
- Velke mnozstvi dat
- OLAP – online analytical processing
- Relativne maly pocet slozitych dotazu, ktere si nejdriv musi system predpocitat
- ROLAP je pro verzi, ktera pracuje s relacnim DBMS
- BI systemy
- OLTP – online transaction processing
- Princip ACID (vlastnosti transakce)
- Transakce je mnozina operaci, u ktere se DBMS stara, ze bud se povedou vsechny prvky mnoziny, ci zadne
- Na konci transakce je stav databaze validni
- ACID
- Atomicity
- Consistency
- Independence
- Uzivatel, co nezavrel transakci, vidi jina data, nez jiny uzivatel
- Durability
- Transakce je mnozina operaci, u ktere se DBMS stara, ze bud se povedou vsechny prvky mnoziny, ci zadne
- Od okamziku prihlaseni zacina transakce
- Konci se necim jako “END TRANSACTION” nebo “COMMIT”
- Nebo taky “CREATE”, ten zakonci transakci
ROLLBACK TRANSACTION- Funkce transakci:
- Zajisteni konzistence databaze
- Rizeni pristupu od mnoha uzivatelu
- Dostupnost se pocita na “pocet devitek” (haha)
- Typy ohrozeni databaze:
- zivelni katastrofy
- chyba systemu, vypadek proudu, chyba operatora, ztrata komunikace
- zniceni databazovych souboru
- chybna data
- nedokoncene transakce
- Nastroje na obnovu databaze
- Typicky se ukladaji data na SSD
- Zurnalove soubory (LOG)
- Vede se denik o kazde provedene operaci
- Pouzivaji se pro obnovu
- Zrcadleni disku a serveru
- Vsechno co system udela na jednom disku, udela i na druhem
- Kontrolni soubory (checkpoints)
- Synchronizace bufferu, zurnalovych datovych souboru
- Synchronizuji data z pameti na tu persistentni vrstvu dat
- Databazovy system musi pri obnove zajistit
- Obnovu databaze ze zalohy
- Analyzu zurnalovych souboru
- Dokoncene transakce budou do databaze znovu zapsany podle zaznamu v zurnalu (ROLLFORWARD)
- Nedokoncene transakce musi byt odstraneny (ROLLBACK)
- Kontrolu integrity databaze
- Oracle ma real application cluster
- Instance databaze
- Databaze nikdy neinterfacuji primo s diskem
- Problemy v transakcich ruznych uzivatelu
- Pokud nekdo modifikuje data, ktera zaroven nekdo jiny cte, muze dostat spatna data
- Prevence: system zamku
- Typy:
- vylucny zamek
- “Ja chci data aktualizovat”
- Nikdo jiny nemuze dostat pristup k datum co jsem zamknul
- sdileny zamek
- “Ja data ctu, a klidne at je cte se mnou 50 000 transakci”
- vylucny zamek
- Co se zamyka?
- V minulosti treba zamykani cele databaze
- Nekdy cela relacni tabulka
- Datovy blok / databazova stranka
- Jeden zaznam / radek
- Polozka (atribut)
- Deadlock je stav, ve kterem se navzajem zamknou dve transakce a cekaji na podminky, ktere nikdy nenastanou
- Prevence
- Detekce (treba timeouts)
- Typy:
- Existuje TPC (Transaction Processing Performance Council)
- Nejake zaruky skalovatelnosti
- Ruzne testy
- TPC - C, TPC - E, TPC - H, TPC - DS, TPC - DI
- Dalsi testy pro big data, virtualizaci, IoT, umelou inteligenci, energetickou narocnost, ceny
- Staticke indexni struktury
- Do indexni struktury se pisi klice indexu a adresa, na kterou se odkazuje index
- Dynamicke B-trees
- Kazdy uzel ma maximalne deti
- Za relativne maly pocet cteni se dostaneme k nasim datum
- Ukladame indexy prvni urovne, seskupujeme je a potom ty skupiny indexujeme znovu v druhe urovni (druha uroven napr. zaznamenava, co je nejvyssi hodnota ve skupine (tohle umoznuji ten rychly lookup))
- Jednoduse receno: mame strom, kde vetve maji intervaly hodnot svych deti.
- Fyzicke struktury na ORACLE
- Primarne jsou data v pameti a disky jsou zaloha (rozdil od ostatnich DBMS)
- Z hlediska OS
- Programove soubory
- Datovy soubor
- Zurnalovy soubor
- Ridici soubor
- ==> Bloky
- Az 32kB (default 8kB)
- ==> Extent je spojita cast bloku
- Datove struktury
- Databazove schema —> vsechny objekty pod uzivatelem
- Logicky tabulkovy prostor
- Ulozen do fyzickych datovych souboru
- Logicky tabulkovy prostor
- Databazove schema —> vsechny objekty pod uzivatelem
- Velky bottleneck kdyz musim prenaset mezi diskem a pameti
- Setrime I/O ops
- Clusterovane tabulky
- Klasicky do jednoho bloku data jedne tabulky
- Muzeme se rozhodnout dve tabulky ulozit do stejneho bloku (treba kdyz se data pouzivaji casto spolu)
- Delene tabulky
- Partitioning, kde kazdemu tabulkovemu prostoru nalezi jine fyzicke datove soubory
- Optimalizace DBMS
- Optimalizujeme HW
- Optimalizujeme koncovou aplikaci
- Charakteristika vykonnosti
- Doba odezvy
- Transakce za minutu
- Dostupnost
- Skalovatelnost
- Jak zvysit vykon?
- Clusterovane / delene tabulky
- Ujistit se, ze tabulky odpovidaji modelovanemu svetu
- Navyseni kapacit (typicky HW)
- Uprava pozadavku na DBS
- Normalizace vs denormalizace
- Normalizace je snizeni redundance
- Vhodny vyber datovych typu
- Napriklad: Je nutne pouzivat UNICODE?
- Komprese tabulek
- Pokud jsou disky bottleneck, dokazeme komprimovat pomoci CPU (mam typicky prebytek vykonu) a ukladat dat mene ==> zrychleni prenosu, zmensim prostor na disku
- Oracle: pri vsech manipulacnich operacich
- HCC (??)
- Vyvazena konfigurace a paralelizace
- Vice jader (snazime se CPU vyuzit alespon na 50 %)
- Vyuziti bloku, tabulkovych prostoru
- Vyuziti indexu
- Clustering
- Optimalizatory
- Optimalizace rizena syntaxi
- Jako uzivatel nastavim optimalizaci
- Priklad: SELECT, JOIN, JOIN udela presne to v tomhle poradi (DBMS nam veri, ze vime, co delame)
- Jako uzivatel nastavim optimalizaci
- Optimalizace zalozena na indexech a velikostech relaci
- Nechceme delat full table scan (preneseni vsech dat tabulky do pameti)
- Statisticky rizena optimalizace
- Histogram (pasma hodnot)
- Kroky optimalizace
- Kontrola syntaxe a semantiky prikazu
- Prevedeni do interni algebraicke reprezentace
- Optimalizace pouzitych operaci na zaklade obecnych pravidel pro mozne upravy posloupnosti operaci
- Priklad:
(A join B) where (restrikce B)==>(A JOIN (B where restrikce B))
- Priklad:
- Vyber vhodnych zpusoby realizace prikazu
- Treba podle indexu pokud je mam (nactu strukturu do pameti)
- V jakych blocich se nachazi hodnoty, ktere hledam?
- Nebo full table scan
- Treba podle indexu pokud je mam (nactu strukturu do pameti)
- Optimalizace rizena syntaxi
- Ruzne nastroje pro optimalizaci Oracle
- Konfigurace Oracle
- DB_BLOCK_BUFFERS
Oracle prednaska s Davidem Krchem
- Co nas zajima?
- Vykon
- Latence
- Skalovatelnost
- Propustnost
- Soutezeni o zdroje
- Jak probiha zpracovani dotazu?
- Volani z klienta na server
- Urceni exekucniho planu
- Provedeni operaci dle planu
- Nacitani dat do aplikace
- Ev. Commit
- Vykon
- Zakladni operace pro praci s daty
- Full table scan
- Index + row ID
- Index scan
- Full index scan
- Hash join
- Hashuji klic, podle ktereho JOINuju, ktery mi umoznuje na stejne misto v pomocne datove strukture ukladat zaznamy z obou seznamu (entit)
- Jak se rozhodujeme o exekucnim planu?
- Statistiky o datech
- Jake jsou hodnoty ve sloupcich, v jakem rozsahu?
- Datovy model
- Cim je obecnejsi, tim tezsi jsou pro databazi optimalizace
- Statistiky o datech
- Restrikce
- Null
- Unique
- Klice
- Cizi
- Primarni
- Sekundarni
- Meli bychom pouzivat spravne datove typy
Role v DB zpracovani, sprava dat
- Sprava dat je jedna z domen rizeni informatiky
- 60/2026 Sb. Zákon o správě dat a o řízeném přístupu k datům
- Chceme umet s daty pracovat
- Dilci cile efektivni spravy dat
- Jaka data mame?
- Zivotni cyklus dat
- Planovani
- Specifikace
- Popis atributu, vlastnosti
- Vytvareni predpokladu
- Tvorba a porizeni
- Pouziti a udrzba
- Archivace a obnova
- Skartace (purge)
- Problem s kvalitou dat
- Crisp DM
- Kvalita je “mira, do jake vlastnosti nejakeho objektu naplnuji pozadavky”. (ISO 9000:2015)
- Mnoho dimenzi kvality dat
- Aktualnost, anonymita, authoritativni zdroje, casova synchronizace, …
- Australie a Novy Zeland jsou vepredu v datove architekture statni spravy
- VSE a Matfyz pomahaji uz asi 14 let s oteviranim dat CR:
- Shrnuti: Minimální standard pro kvalitní správu dat ve veřejné správě.pdf – prej dobry i pro firmy, ktere chteji zacit
- Datové sady - Národní katalog otevřených dat (NKOD)
- Zapojena i do The European Data Portal
- 60/2026 Sb. Zákon o správě dat a o řízeném přístupu k datům
- Posouva spravu dat vyrazne dal
- Cool vec na modelovani: Archi® – Open Source ArchiMate Modelling
Cvika
Prvni cviko (2026-02-17)
- Tabulky neexistuji, jsou to relacni tabulky nebo relace
- Jsou to vztahy mezi nimi, ne relace
- Relacni tabulka ma atributy (vlastne sloupce)
- Databaze jsou magicky, potrebuji jasny nazev tabulky jenom kdyz je nazev sloupce na vic nez jedne z nich
SELECT * FROM zam WHERE titul = 'RNDR';
- “Vypište čísla oddělení, ve kterých pracují zaměstnanci.”
SELECT DISTINCT cis_odd
FROM zam
WHERE cis_odd IS NOT NULL;
-
LIKEse pouziva s%vyraz% -
Podle cvikare je
*“divoky znak” -
Spojovani tabulek je joining
- Prosty joining zobrazuje zaznamy, kde je hodnota na obou stranach
- Levy join
SELECT DISTINCT zam.cis_odd, oddel.nazev
FROM zam join oddel ON zam.cis_odd = oddel.cis_odd
WHERE zam.titul = 'ING';
/* Obdobne muzeme pouzit USING, protoze maji oba edge stejny column name */
SELECT DISTINCT cis_odd, oddel.nazev
FROM zam
JOIN oddel USING (cis_odd)
WHERE zam.titul = 'ING';
ANYje pro cokoliv, tady ho pouzivame pro preskoceni joinovani
SELECT
cis_odd,
nazev
FROM
oddel
WHERE
cis_odd = ANY (
SELECT
zam.cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
);
INkontroluje vyskyt v mnozine:
SELECT
cis_odd,
nazev
FROM
oddel
WHERE
cis_odd IN (
SELECT
zam.cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
);
- Kartezsky soucin je nebezpecny —> dokaze precist m x n radku (tabulky m, n), takze davat podminky:
- Seskupovaci funkce:
GROUP BY
SELECT
cis_odd,
COUNT(cis_odd) AS user_count
FROM
zam
WHERE
titul = 'ING'
GROUP BY
cis_odd;
- Levy join:
SELECT
oddel.cis_odd,
oddel.nazev,
z.titul
FROM
oddel
LEFT JOIN (
SELECT
titul,
cis_odd
FROM
zam
WHERE
titul LIKE 'ING'
) z ON z.cis_odd = oddel.cis_odd;
S GROUP BY a prumerem platu:
SELECT
nazev,
COUNT(os_cis) AS pocet_ing,
AVG(plat) AS prum_plat
FROM
oddel
LEFT JOIN (
SELECT
titul,
cis_odd,
plat,
os_cis
FROM
zam
WHERE
titul LIKE 'ING'
) USING ( cis_odd )
GROUP BY
cis_odd,
nazev
ORDER BY
cis_odd;
ROUND a AVG:
SELECT ROUND(AVG(plat)) FROM zam;
/* Vypište čísla a jména zaměstnanců, kteří mají plat větší, než je průměrný plat v jejich oddělení. */
SELECT
os_cis,
jmeno
FROM
zam a
WHERE
plat > (
SELECT
AVG(plat)
FROM
zam b
WHERE
b.cis_odd = a.cis_odd
);
- Da se to udelat i pres virtualni view
GROUP BYcis_odd
SELECT
os_cis,
jmeno
FROM
zam
JOIN (
SELECT
cis_odd,
AVG(plat) prumplat
FROM
zam
GROUP BY
cis_odd
) prum ON ( zam.cis_odd = prum.cis_odd )
WHERE
zam.plat > prum.prumplat;
Treti cviko (2026-03-03)
/* Vypište čísla a názvy oddělení, ve kterých pracují méně než 2 pracovníci s přiděleným úkolem. */
SELECT cis_odd, nazev FROM oddel JOIN zam USING (cis_odd) GROUP BY cis_odd, nazev HAVING COUNT(os_cis) > 2;
– tady je having jako posledni filtr po GROUP BY
/* Pro všechna oddělení vypište počty zaměstnanců a počty zaměstnanců, kteří mají přidělený úkol.*/
SELECT
o.cis_odd,
o.nazev,
COUNT(DISTINCT z.os_cis) AS pocet_zamestnancu,
COUNT(DISTINCT u.os_cis) AS pocet_zam_s_ukolem
FROM
oddel o
LEFT JOIN zam z ON z.cis_odd = o.cis_odd
LEFT JOIN ukoly u ON u.os_cis = z.os_cis
GROUP BY
o.cis_odd,
o.nazev;
Ctvrte cviko (2026-03-10)
Cviceni_04.sql- Prace s daty:
SELECT popis, os_cis, jmeno
FROM ukoly
JOIN zam USING (os_cis)
WHERE datum BETWEEN
TO_DATE('2015-09-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2015-12-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
Pate cviko (2026-03-17)
- Na test:
- Databaze je jina nez ze cvik, ale mame schema
- Projit si priklady z rozcvicek
- Projit si obsah testovaci databaze (
TEST-SQL-POPIS-A-OBSAH-TESTOVACI-DATABAZE) - Prioritizovat: kazdy priklad je za stejne bodu, takze prvni jednoduche
- Dela se v SQL developeru —> potom se to hazi do InSIS testeru
- Nedavat navic sloupce, ale je to ok mit superset pozadovanych sloupcu
- Za chybejici sloupce se strhavaji body
- Upevnit si znalost
INNERaOUTER JOINu - Repeat
- Na datove modelovani: chodit s papirem a tuzkou
Seste cviko (2026-03-24)
— test —
Sedme cviko (2026-03-31)
- Datove modelovani
- Prvni krok je zkonzultovat model realneho sveta a zjistit jak funguje
- Potom z textu muzeme vybrat podstatna jmena a slovesa (tabulky, atributy, vztahy)
- Vytvarime konceptualni schema podle notace z prednasek
- Data modeler
- Default atribut je typ Domain, ale my chceme Logical
- Typicky chceme v gridu zapnout
Right click->Show->Relationship attributes - Dve modre sipicky na “Engineer to Physical model”
- Sedive tlacitko s plechovkou
Generate DDL
Osme cviko (2026-04-14)
- Budeme delat dedicnost
- Potomci jedne nebo vice spolecnych entit
- Stredisko, ktere fakturuje zakazniky za sve sluzby
- Faktura ma pravidlo, ze kazdy radek je sluzba nebo vymena
- Mame problem, ze chceme mit polozku cislovanou od 0 ke kazde fakture, ale mame faktur vice nez 1
- Externi identifikator
- Do polozky prida dalsi pole a z PK udela slozeny PK
- Chceme v logickym schematu nastavit dedicnost
- Je to v nastaveni entity, a potom nastavujeme v general settings “super type” na nejakou jinou entitu
- pomoci Context menu —> Notation —> Box-in-Box presentation muzeme udelat hezci ukazovani dedicnosti
- Nastaveni ze strany rodice v “Subtypes”. Na cviku delame
Table for each entity- Tohle musim nastavit pred kazdym generovani Relational modelu
- Zkuste vi pristi cviceni zanest do konceptualnho modelu
Devate cviko (2026-04-21)
- Jmeno:
xname- Heslo: malym krestni jmeno
- Nezapomenout vycistit databazi
- V datovem modelovani resime nejen vztahy m:n, ale i treba m:n:o
- Druh dane<>Osoba<>Financni urad
- Soucasti vztahu datum a vyse platby
- Tohle je ass a nejde jednoduse udelat v modelerech
- Takze vztah simulujeme tabulkou
- Dalsi vztah: soukrome osoby se vyzivuji navzajem nejak
- FO muze byt zivitelem (v nejakem obdobi) nejake jine FO
Desate cviko (2026-04-28)
- Constraints v databazi
- Pres Data Modeler: jdeme double-clickneme atribut entity a potom v “Default and Constraint” nastavime nejake podminky pro sloupec
- V “Unique Identifiers” nastavuji business logiku, jako “student neni na dvou mistech ve stejnym case”, nebo “ucitel neuci dva predmety najednou”, nebo “v jedne ucebne neni vic predmetu v jednu dobu”