Databázové systémy


Študent po absolvovaní predmetu ovláda princípy relačných databáz, je schopný aplikovať štandardné dátové modely, navrhovať relačné databázy a sformulovať filtračné dopyty.

Oznam

Motivácia

andscape and categorization of the high variety of existing database systems


Trend

Študent po absolvovaní predmetu ovláda princípy relačných databáz, je schopný aplikovať štandardné dátové modely, navrhovať relačné databázy a sformulovať filtračné dopyty.

Prerekvizita k predmetom

Prerekvizita k štátnej skúške

Predmety predpokladajúce základy SQL

Administrácia databáz

Študent po absolvovaní predmetu zvládne použitie náročnejších techník relačných databáz, teoretickú analýzu funkčných závislostí atribútov a je schopný pracovať s nerelačnými databázami.

Ďalšie nadväzujúce predmety

Svetové univerzity


Slovenské univerzity


České univerzity a vysoké školy

Materiál

Ukážky príkladov z prednášok a cvičení v zimnom semestri.

Portál DBS_Lab, kde budú aj domáce úlohy je implementovaný v MariaDB (mariadb.org). MariaDB vznikol ako fork (en.wikipedia.org) z MySQL (www.mysql.com), viac na MariaDB versus MySQL - Compatibility (mariadb.com).

Motivácia

MySQL je jedným z najpopulárnejších open-source RDBMS. Vďaka overenému výkonu, spoľahlivosti a jednoduchej použiteľnosti sa MySQL stal vedúcou voľbou pre webové aplikácie. Používajú ho významné webové služby ako sú Facebook, X, LinkedIn, Netflix, Airbnb, Booking.com, Uber, GitHub, YouTube a mnohé ďalšie. Ďalej sa využíva pre Content Management System (CMS) ako sú WordPress, Drupal, Joomla!, Contao, ...

Výhody MySQL
Ciele
  • Úspešne stiahnuť a nainštalovať MySQL Community Server.
  • Nainštalovať a nakonfigurovať grafický nástroj MySQL Workbench pre správu databáz.
  • Vytvoriť prvé databázové pripojenie a overiť funkčnosť servera.
  • Porozumieť základným konfiguračným nastaveniam (napr. port, root heslo).
Inštalácia
Tipy a triky
  • Heslo pre root: Pri inštalácii si dôkladne zapamätajte heslo pre používateľa root. Bude ho potrebovať pre všetky administrátorské operácie.
  • Služba MySQL: Vo Windows sa uistite, že služba MySQL je spustená (cez Správcu úloh -> Služby). Na Linuxe použite sudo systemctl status mysql.
  • Predvolený port: MySQL štandardne používa port 3306. Uistite sa, že tento port nie je obsadený inou aplikáciou.
  • Firewall: Ak máte problémy s pripojením, skontrolujte nastavenia firewallu a povoľte prichádzajúce pripojenia na porte 3306.
  • Chybové hlásenia: Prečítajte si chybové hlásenia v klientovi alebo v logoch databázy. Pomôžu vám presne identifikovať problém.
  • XAMPP/WAMP: Ak už používate XAMPP alebo WAMP, MySQL je jeho súčasťou. V takom prípade nemusíte inštalovať samostatný MySQL server, ale môžete použiť ten, ktorý je súčasťou balíka.
Dokumentácia

Ukážky príkladov z prednášok a cvičení v zimnom i v letnom semestri.
Domáce úlohy v letnom semestri.

Motivácia

Microsoft SQL Server je robustný RDBMS pre profesionálnu prácu s dátami, ktorý ponúka viac možností ako MySQL a výbornú integráciu s Microsoft nástrojmi pre náročné podnikové prostredia. Používajú ho spoločnosti ako sú Morgan Stanley, John Deere, JPMorgan Chase, Accenture, Mastercard, KPMG, Infosys, Yahoo!, Dell, Nokia a mnohé ďalšie.

Ciele
  • Úspešne stiahnuť a nainštalovať Microsoft SQL Server.
  • Nainštalovať a nakonfigurovať grafický nástroj SQL Server Management Studio (SSMS) pre správu databáz.
  • Vytvoriť prvé databázové pripojenie a overiť funkčnosť servera.
  • Porozumieť základným konfiguračným nastaveniam.
Inštalácia
Tipy a triky
  • Režim overovania: Pri inštalácii SQL Servera si vyberte "Mixed Mode Authentication", aby ste mohli používať SQL Server Authentication (napr. používateľ sa) a aj Windows Authentication. Nastavte si silné heslo pre používateľa sa.
  • Názov inštancie: Môžete zvoliť predvolenú inštanciu (MSSQLSERVER) alebo pomenovanú inštanciu (napr. SQLEXPRESS). Ak používate pomenovanú inštanciu, pri pripájaní v SSMS budete musieť zadať NAZOV_SERVERA\NAZOV_INSTANCIE.
  • Firewall: Ak máte problémy s pripojením, skontrolujte nastavenia firewallu a povoľte prichádzajúce pripojenia na porte 1433.
Dokumentácia

Motivácia

R je programovací jazyk pre štatistické výpočty a vizualizáciu dát. RStudio je integrované vývojové prostredie (IDE), ktoré výrazne zjednodušuje prácu s R. Hoci R nie je priamo databázovým systémom, je to kľúčový nástroj pre dátových analytikov a vedcov, ktorí potrebujú pristupovať k dátam z databáz, analyzovať ich a vizualizovať.

Ciele
  • Úspešne stiahnuť a nainštalovať programovací jazyk R.
  • Nainštalovať a nakonfigurovať grafický nástroj RStudio Desktop.
  • Nainštalovať základné R balíčky pre dátovú analýzu a pripojenie k databázam.
  • Vykonať jednoduchý skript na overenie funkčnosti.
Inštalácia
Tipy a triky:
  • Poradie inštalácie: Najprv vždy nainštalujte R a až potom RStudio. RStudio potrebuje funkčnú inštaláciu R, aby mohlo pracovať.
  • Balíčky: Používajte príkaz install.packages("nazov_balicka") na inštaláciu balíčkov. Bežné balíčky sú tidyverse (pre prácu s dátami), gridExtra (pre vizualizáciu grafov do mriežky), ggplot2 (pre vizualizáciu dát), RMySQL alebo RODBC (pre pripojenie a prácu s databázami).
  • Firewall/Antivírus: Niekedy môžu firewall alebo antivírusový softvér blokovať sťahovanie balíčkov. Skontrolujte nastavenia, ak máte problémy.
Tutoriál

Alternatívy

Hodnotenie

  • A: 91-100 bodov
  • B: 81-90 bodov
  • C: 71-80 bodov
  • D: 61-70 bodov
  • E: 51-60 bodov
  • FX: 0-50 bodov

Trend

DBS1a/DBS Študentov A B C D E FX
DBS1a 983 12% 11% 19% 22% 30% 6%
DBS 745 13% 10% 14% 20% 33% 10%

  • Nutnou podmienkou hodnotenia je vyplnenie (aspoň úvodných a záverečných) dotazníkov
  • Body za semester: maximálne 50 bodov
    • Previerky z prednášok: 7 bodov
      • Preverienie, či študent pochopil preberanému účivu na prednáške, utvrdenie si preberaných pojmov
      • Na začiatku cvičenia dostanete 5 otázok z predchádzajúcej prednášky, každá za 0.2 bodu
    • Praktické previerky - domáce úlohy: 10 bodov
      • Preverienie a získanie praktických zručností v prvých týždňoch semestra
      • 5 sád bodovaných domácich úloh, kde bude dokopy približne 100 domácich úloh, väčšina za 0.1 bodu
        • Počas 1. cvičenia: 1 úloha
        • Po 2. cvičení: 20 úloh
        • Po 3. cvičení: 40 úloh
        • Po 4. cvičení: 30 úloh
        • Po 5. cvičení: 9 úloh
        • Po 5. až 6. cvičení: príprava projektu a príprava na polsemestrálnu previerku
        • Niekedy po 9. cvičení: posledná extra séria - 10 úloh
        • Po preriešených domácich úlohach bude príprava na koncosemestrálnu previerku a skúšku
      • Prvých 5 týždňov semestra sa každý pondelok od 15:00 zverejní nová sada bodovaných domácich úloh ku vybraným témam na portáli DBS_Lab. Na vypracovanie danej sady úloh je určený čas nasledujúce 2 týždne do pondelka 15:00. Prvý týždeň otvorenej novej sady sa daná téma precvičí aj na cvičení a po cvičení je možnosť konzultácie k daným témam. Po ukončení sady sa od 20:00 sprístupnia aj vzorové riešenia daných úloh.
      • Študent má možnosť (narozdiel od iných previerok) opraviť a znovu odovzdať úlohu do stanoveného termínu. Hodnotí sa len posledné odovzdané a nezrušené riešenie.
    • Rekapitulujúce previerky: 7 bodov
      • Preverienie, či študent hlbšie pochopil preberanému účivu a porozumel kľúčovým konceptom a súvislostiam, utvrdenie si preberaných pojmov
      • Z každej témy dostanete v rámci domácej prípravy 10 rekapitulúcich otázok, každá za 0.1 bodu
      • Prvé týždne semestra sa každý pondelok od 15:00 zverejní nová sada otázok k vybraným témam na portáli DBS_Lab. Na vybracovanie danej sady rekapitulujúcej previerky je určený čas nasledujúce 2 týždne do pondelka 15:00. Prvý týždeň otvorenej novej sady sa daná téma precvičí aj na cvičení a po cvičení je možnosť konzultácie k daným témam. Po ukončení sady sa od 20:00 sprístupnia aj vzorové riešenia daných úloh.
      • Upozornenie: Rekapitulujúcu previerku nie je možné po jej vypracovaní opakovať!
    • Projekt: 6 bodov
      • Preverienie, či študent vie navrhnúť vhodnú databázovu štruktúru pre svoj projekt
        • študenti predmetu PAZ1c - obhajoba na cvičení PAZ1c v polovici semestra - presný termín určí cvičiaci PAZ1c
        • študenti predmetu DBS - obhajoba na prednáške DBS - presný termín určí prednášajuci DBS
        • ostatní - obhajoba mimo rozvrhu hodín v novembri - presný termín určí cvičiaci DBS1a po 6. cvičení
    • Polsemestrálna previerka: 10 bodov
      • Preverienie, či študent vie riešiť úlohy z danej oblasti zadaných od zákazníka
      • Na počítači
      • Na prelome októbra a novembra
    • Koncosemestrálna previerka: 10 bodov
      • Preverienie, či študent vie riešiť úlohy z danej oblasti zadaných od zákazníka
      • Na počítači
      • Začiatkom decembra
    • Aktivita: body navyše
  • Skúška: 50 bodov
    • Preverienie, či študent ovláda princípy relačných databáz a SQL
    • 5 - 10 úloh, každá za 5 až 10 bodov
    • Písomná na papieri, potom ústna
    • Externé zdroje sú zakázané

Ak radi používate ChatGPT (alebo iný podobný nástroj), tak Vám aj isto povie, prečo od neho radšej nekopírovať riešenia, ale radšej sa potrápiť s úlohou:
  • Ak necháš premýšľať stroj namiesto seba, sám zostaneš bez hodnoty.
  • Ten, kto sa učí myslieť, nepotrebuje kópiu. Ten, kto len kopíruje, nikdy nebude myslieť.
  • Budúcnosť patrí tým, ktorí vedia riešiť problémy - nie tým, ktorí len vedia kopírovať riešenia.
  • Skopírovaná odpoveď ťa nikam neposunie, vlastná cesta ťa naučí všetko.
  • Máš dve možnosti: byť autorom riešenia alebo len tieňom cudzieho výsledku.
  • ...
Zopakujme si radu z PAZ:
Spolupráca a vzájomná komunikácia je predpokladom k úspešnému zvládnutiu štúdia. Avšak aby ste sa vyhli obvineniu z plagiátorstva odporúčame dodržiavať tieto pravidlá známe z PAZ:
  • Pri vysvetľovaní učiva nepoužívajte ako príklady úlohy, ktoré sú z aktuálnych sád domácich zadaní, ale napr. z cvičení.
  • Ak hovoríte o riešení úlohy z aktuálnej sady zadaní, vyhnite sa použitiu kódu.
  • Ak využívate školské učebne na riešenie úloh z aktuálnych sád domácich zadaní, svoje riešenia neuchovávajte na školskom počítači a nezabudnite sa odhlásiť zo systémov.
  • Pri nejasnostiach kontaktujte cvičiaceho.

Prednáška

Informácia k prednáške


  • Čas: Štvrtok 7:05 - 8:35 (matematici do 9:20)
  • Miestnosť: SJ2P08 - Jesenná 5, 2. poschodie, poslucháreň

Databázy používané na prednáškach

Základné prednášky pre všetky študijné programy

Prednáška 1
  • DB
  • Modely
  • SQL dopyty
  • Príklady
  • WHERE
Prednáška 1

Aktualizované: 24.9.2024

Prednáška 2
  • Prvky jazyka MySQL
  • Typy a pretypovanie
  • Operátory
  • Numerické funkcie
  • Reťazcové funkcie
  • Dátumy a časové funkcie
Prednáška 2

Aktualizované: 24.9.2024

Prednáška 3
  • Tri základné typy JOIN
  • Ďalšie typy JOIN
  • NULL hodnoty a OUTER JOIN
  • Agregačné funkcie
  • GROUP BY, HAVING
Prednáška 3

Aktualizované: 1.10.2024

Prednáška 4-5-6
  • Dátové modely, schémy a inštancie, integrita dát 1
  • Návrh relačných databáz a ER diagramy
  • Vytvorenie databáz, tabuliek a integrita dát 2
Prednáška 4-5-6

Aktualizované: 15.10.2024

Prednáška 7
  • Databázy – súbory
  • Systémové príkazy o DB a tabuľkách
  • Tabuľky a storage engines
  • Kaskádovité mazanie a aktualizácia - integrita
Prednáška 7

Aktualizované: 29.10.2024

Prednáška 8
  • Typy výsledkov dopytu
  • Vnorené dopyty
  • CASE výraz
  • GROUP BY s ROLLUP
  • LIMIT
  • Extrémy a vnorené dopyty
Prednáška 8

Aktualizované: 5.11.2024

Prednáška 9
  • Trojhodnotová logika
  • Alternatívny prístup k chýbajúcim údajom
  • Kvantifikátory ALL, ANY (SOME), EXISTS a NOT
  • Množinové operácie
  • Príklady
Prednáška 9

Aktualizované: 12.11.2024

Prednáška 10
  • Dátové sklady - Data warehouse (DWH) a OLAP
  • Pivot kocka a pivot tabuľky
Prednáška 10

Aktualizované: 27.11.2024

Prednáška 11
  • Úvod do R
  • Databázové operácie a tidyverse
  • Pivot tabuľka polikliniky
  • Balík rpivotTable
  • NASA - exoplanety
Materiál k prednáške Prednáška 11

Aktualizované: 27.11.2024

Prednáška 12
Prednáška 12a: Relačná algebra
Prednáška 12a

Aktualizované: 3.12.2024

Prednáška 12b: Normalizácia relačných databáza
  • 1NF - 1. normálna forma
  • 2NF - 2. normálna forma
  • 3NF - 3. normálna forma
  • HBCNF - Heat-Boyce-Coddova normálna forma
Prednáška 12b

Aktualizované: 3.12.2024

Doplnkové prednášky pre matematikov

Uložené procedúry, funkcie
Uložené procedúry, funkcie

Aktualizované: 5.3.2025

Pohľady, CTE - WITH, rekurzia a tranzitívny uzáver
Pohľady, CTE - WITH, rekurzia a tranzitívny uzáver

Aktualizované: 14.3.2025

Transakcie, kurzory
Transakcie, kurzory

Aktualizované: 19.3.2024

Triggery a integrita
Triggery a integrita

Aktualizované: 27.3.2025

Fyzická organizácia dát, B­‑stromy a indexy
Fyzická organizácia dát, B­‑stromy a indexy

Aktualizované: 28.3.2025

Pivot tabuľky
Pivot tabuľky

Aktualizované: 19.3.2024

Funkčné závislosti
Funkčné závislosti

Aktualizované: 21.2.2025

Normalizácia relačných databáz, najnovšia normálna forma - ETNF
Normalizácia relačných databáz, najnovšia normálna forma – ETNF

Aktualizované: 26.2.2025

Ďalšie prednášky pre DBS1b

Úvod do MS SQL Server
Úvod do MS SQL Server

Aktualizované: 5.3.2024

Poradové, agregačné a analytické window funkcie
Poradové, agregačné a analytické window funkcie

Aktualizované: 6.3.2025

XML a JSON, ChatGPT
XML a JSON, ChatGPT

Aktualizované: 3.4.2025

Cvičenie

Informácia k cvičeniu

  • 1. skupina: aplikovaní informatici
    • Čas: Pondelok 17:55 - 19:25
    • Miestnosť: SA1C03 - Park Angelinum 9, 1. poschodie, počítačová učebňa
    • Študijné skupiny: 2AIb(A)
  • 2. skupina: informatici
    • Čas: Utorok 15:20 - 16:50
    • Miestnosť: SA1C0 - Park Angelinum 9, 1. poschodie, počítačová učebňa
    • Študijné skupiny: 2Ib(A)
  • 3. skupina: matematici, učitelia a verejná správa
    • Čas: Streda 15:20 - 16:50
    • Miestnosť: SA1C03 - Park Angelinum 9, 1. poschodie, počítačová učebňa
    • Študijné skupiny: 1MOm(A), 2EFMm(B), 2BASInfb(A), 2BIb(A), 2FIb(A), 2GIb(A), 2CHIb(A), 2MIb(A), 2SjInfb(A), 2ISVSb(A)
  • 4. skupina: dátoví analytici
    • Čas: Streda 17:10 - 18:40
    • Miestnosť: SA1C03 - Park Angelinum 9, 1. poschodie, počítačová učebňa
    • Študijné skupiny: 2ADUIb(A)

1. cvičenie: Úvod do databázových systémov

Motivácia

Prvý kontakt s databázovým systémom. Základné operácie nad databázou a tabuľkou.

Použitie v AiS2

Všetky dáta, ktoré vidíme v AiS2 sú uložené v databáze. Pomocou klikania a formulárov vieme modifikovať dané dáta - pridávať, mazať, aktualizovať. Napríklad vytvoriť zápis, zapisovať/odoberať si predmety, písať do fóra, prezerať si hodnotenia...

Ciele

  • Úvod do databázových systémov
  • Dátové typy
  • Vytvorenie, odstránenie, použitie databáz
  • Vytvorenie a odstránenie tabuliek
  • Vloženie dát do tabuľky
  • Výber dát z tabuľky
  • Zobrazenie databáz
  • Zobrazenie tabuliek

Kľúčové slová

  • CHAR, VARCHAR, BOOLEAN, INTEGER, DECIMAL, DATE, ...
  • CREATE DATABASE [IF NOT EXISTS] database_name
  • DROP DATABASE [IF EXISTS] database_name
  • USE database_name
  • CREATE TABLE [IF NOT EXISTS] table_name ( create_definition )
  • DROP TABLE [IF EXISTS] table_name
  • INSERT [INTO] table_name [(col_name [, col_name] ...)] VALUES ( value_list ) [, (value_list)] ...
  • SELECT * FROM table_name
  • SHOW DATABASES
  • SHOW TABLES [{FROM | IN} database_name]

Návody

Návody z www.w3schools.com
Návody z www.mysqltutorial.org
Dokumentácia z dev.mysql.com

Príklady otázok rekapitulúcej previerky

Praktické rady

  • Pomenovanie: Používajte konzistentné a zmysluplné názvy pre tabuľky a stĺpce (napr. malé písmená, podčiarkovníky pre medzery). Pre case-insensitive sa zvykne používať snake_case namiesto camelCase, ktorý poznáte z Javy.
  • Dátové typy: Vyberajte dátové typy, ktoré najlepšie zodpovedajú dátam, ktoré budete ukladať, aby ste šetrili miesto a zabezpečili validitu dát.
  • Formáty dátových typov: Pri vkladaní dát dávajte pozor na správne dátové typy a formáty (napr. dátumy, čísla).
  • Testujte postupne: Vytvárajte tabuľky po jednej a testujte ich pomocou SHOW TABLES a SELECT.

Úlohy

Majiteľ reštaurácie U vlka chce nalákať zákazníkov aj tým, že im bude zverejňovať denné menu na internete. Pomôžte mu splniť nasledujúce úlohy.

1. úloha

Navrhnite, vytvorte a naplňte tabuľku podľa nasledujúceho vzoru:

Dátum Číslo objednávky Gramáž Jedlo Cena Dostupnosť
25.09.2025

1

150g Kurací steak plnený syrom a suš. paradajkou, ryža, šalát (1,7) 6.00€

25.09.2025

2

350g Granatiersky pochod, kyslá uhorka (1) 5.70€

26.09.2025

1

150g Debrecínsky guľáš, kolienka (1,3) 5.80€

26.09.2025

2

300g Jablkovo- škoricové pirohy (1,3) 4.70€

27.09.2025

1

150g Hovädzí maďarský guľáš, domáca knedľa (1,7) 5.80€

27.09.2025

2

Vyprážaný hermelín, listový šalát, hranolky, dresing (1,3,7)

Riešenie
                                       
-- Jednoriadkovy komentar
# Jednoriadkovy komentar
/*
Viacriadkovy
komentar
*/

/*
SQL keywords are by default set to case insensitive that means that the keywords are allowed to be used in lower or upper case. 
The names of the tables and columns specification are set to case insensitive on the SQL database server, 
however, it can be enabled and disabled by configuring the settings in SQL.
*/

# Vytvorenie databazy
CREATE DATABASE restauracia_u_vlka;

-- Pouzitie databazy
USE restauracia_u_vlka;

/* Vytvorenie tabulky */
CREATE TABLE denne_menu
(
   datum DATE,
   cislo INTEGER, -- INT
   gramaz INT, -- INTEGER
   jedlo VARCHAR(300),
   cena DEC(5,2), -- DECIMAL(5,2)
   dostupnost BOOL -- BOOLEAN
);

# Vlozenie zaznamu do tabulky
INSERT INTO denne_menu VALUES ('2025-09-25', 1, 150, 'Kurací steak plnený syrom a suš. paradajkou, ryža, šalát (1,7)', 6, true);

-- Vlozenie viac zaznamov do tabulky
INSERT INTO denne_menu VALUES
("2025-09-25", 2, 350, 'Granatiersky pochod, kyslá uhorka (1)', 5.70, true),
('2025-09-26', 1, 150, "Debrecínsky guľáš, kolienka (1,3)", 5.80, true);

/* Vlozenie zaznamu do tabulky */
INSERT denne_menu VALUES ("2025-09-26", 2, 300, "Jablkovo- škoricové pirohy (1,3)", 4.70, false);

# Vlozenie zaznamu do tabulky
INSERT denne_menu(datum, cislo, gramaz, jedlo, cena, dostupnost) 
VALUES ('2025-09-27', 1, 150, 'Hovädzí maďarský guľáš, domáca knedľa (1,7)', 5.80, NULL);

-- Vlozenie zaznamu do tabulky
INSERT denne_menu(datum, cislo, jedlo) VALUES ('2025-09-27', 2, 'Vyprážaný hermelín, listový šalát, hranolky, dresing (1,3,7)');
                                       
                                    
2. úloha

Vyberte/zobrazte/vypíšte obsah tabuľky.

Riešenie
                                       
/* Zobrazenie zaznamov z tabulky */
SELECT * FROM denne_menu;
                                       
                                    
3. úloha

Upravte skript z 1. zadania tak, aby sa dal použiť viackrát.

Riešenie
                                       
# Zmazanie databazy ak existuje
DROP DATABASE IF EXISTS restauracia_u_vlka;
                  
# Vytvorenie databazy ak neexistuje
CREATE DATABASE IF NOT EXISTS restauracia_u_vlka;

-- Pouzitie databazy
USE restauracia_u_vlka;

/* Vytvorenie tabulky ak neexistuje */
CREATE TABLE IF NOT EXISTS denne_menu
(
   datum DATE,
   cislo INTEGER, -- INT
   gramaz INT, -- INTEGER
   jedlo VARCHAR(300),
   cena DEC(5,2), -- DECIMAL(5,2)
   dostupnost BOOL -- BOOLEAN
);

# Vlozenie zaznamu do tabulky
INSERT INTO denne_menu VALUES ('2025-09-25', 1, 150, 'Kurací steak plnený syrom a suš. paradajkou, ryža, šalát (1,7)', 6, true);

-- Vlozenie viac zaznamov do tabulky
INSERT INTO denne_menu VALUES
('2025-09-25', 2, 350, 'Granatiersky pochod, kyslá uhorka (1)', 5.70, true),
('2025-09-26', 1, 150, 'Debrecínsky guľáš, kolienka (1,3)', 5.80, true);

/* Vlozenie zaznamu do tabulky */
INSERT denne_menu VALUES ('2025-09-26', 2, 300, 'Jablkovo- škoricové pirohy (1,3)', 4.70, false);

# Vlozenie zaznamu do tabulky
INSERT denne_menu(datum, cislo, gramaz, jedlo, cena, dostupnost) 
VALUES ('2025-09-27', 1, 150, 'Hovädzí maďarský guľáš, domáca knedľa (1,7)', 5.80, NULL);

-- Vlozenie zaznamu do tabulky
INSERT denne_menu(datum, cislo, jedlo) VALUES ('2025-09-27', 2, 'Vyprážaný hermelín, listový šalát, hranolky, dresing (1,3,7)');
                                       
                                    
4. úloha

Zobrazte zoznam databáz.

Riešenie
                                       
# Zobrazenie databaz
SHOW DATABASES;
                                       
                                    
5. úloha

Zobrazte zoznam tabuliek.

Riešenie
                                       
-- Zobrazenie tabuliek z aktualnej databazy
SHOW TABLES;

-- Zobrazenie tabuliek z konkretnej databazy
SHOW TABLES FROM restauracia_u_vlka;
                                       
                                    

Zhrnutie

Na tomto cvičení sme si prešli základný úvod do databázovým systémov a predstavili hodnotenie a program na celý semester. Prakticky sme si ukázali ako sa pripojiť k DBMS pomocou klientskeho nástroja, vytvorili sme svoju prvú databázu a tabuľku, definovali jej stĺpce s vhodnými dátovými typmi, vložili prvé dáta, ktoré sme si neskôr aj zobrazili. Tieto zručnosti sú kľúčové pre základnú prácu s databázovými systémami.

2. cvičenie: Výber dát

Motivácia

Výber dát pomocou SQL umožňuje rýchlo nájsť presne tie informácie, ktoré potrebujeme v obrovskom množstve údajov.

Použitie v AiS2

Všetky dáta, ktoré vidíme v AiS2 sú uložené v databáze. Dáta môžeme filtrovať a zoradiť podľa daných podmienok.

Ciele

  • Výber dát z tabuľky
  • Pomenovanie stĺpcov
  • Zoradenie dát
  • Vertikálna a horizontálna filtrácia dát
  • Vyhľadávanie dát

Kľúčové slová

  • SELECT
  • DISTINCT
  • AS
  • ORDER BY
  • WHERE
  • +, -, *, /, %
  • =, >, <, >=, <=, <>, !=
  • IS NULL, IS NOT NULL
  • AND, OR, NOT, XOR
  • IN, NOT IN
  • BETWEEN, NOT BETWEEN
  • LIKE, NOT LIKE
  • %, _

Syntax

                                 
                                 
SELECT
   [ALL | DISTINCT | DISTINCTROW]
   select_expr [, select_expr] ...
[FROM table_references]
[WHERE where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ... ]
                                 
                              

Návody

Návody z www.w3schools.com
Návody z www.mysqltutorial.org
Dokumentácia z dev.mysql.com

Praktické rady

  • SELECT: Pri skúmaní novej tabuľky vždy začnite so SELECT * FROM table_name, aby ste videli celú jej štruktúru a obsah.
  • Testujte podmienky postupne: Pri komplexných WHERE klauzulách si najprv otestujte jednotlivé podmienky samostatne a potom ich kombinujte.
  • NULL: NULL predstavuje chýbajúci alebo neznámy údaj, ktorý sa správa špecificky a neporovnáva sa klasickými operátormi, ale operátormi IS NULL a IS NOT NULL.
  • Čitateľnosť: Používajte odsadenie a formátovanie pre lepšiu čitateľnosť zložitejších dopytov.

Databáza

Úlohy

Dostali ste za úlohu spravovať databázu osôb. Importnite si ju a zoznámte sa s jej štruktúrou.

  1. Vyberte dáta z celej tabuľky.
  2. Vyberte dáta len pre niektoré stĺpce tabuľky.
  3. Pri výbere dát pomenujte stĺpce tabuľky čitateľne pre zákazníka.
  4. Zoraďte dáta v tabuľke podľa viacerých stĺpcov.
  5. Pri výbere dát odfiltrujte duplicitné riadky.
  6. Vyberte dáta splňajúce určité podmienky.
  7. Vyberte dáta z nejakého rozsahu, z nejakého intervalu, ...
  8. Vyberte dáta začínajúce/obsahujúce/končiace na nejaké znaky, obsahujúce daný počet znakov, ...
  9. Vyberte také riadky, ktoré obsahujú neúplné dáta.
  10. ...

Zhrnutie

Na tomto cvičení sme si precvičili vertikálnu a horizontálnu (vo WHERE pomocou rôznych operátorov) filtráciu dát, zoradiť dáta (ORDER BY) a eliminovať duplicity (DISTINCT). Dôležitou súčasťou bola aj práca s NULL hodnotami, ktoré predstavujú chýbajúce alebo neznáme údaje a neporovnávaju sa klasickými operátormi, ale operátormi IS NULL a IS NOT NULL. Tieto zručností práce s dátami tvoria základ pri vyhľadávaní a analýze dát.

3. cvičenie: Regulárne výrazy, MySQL funkcie

Motivácia

Regulárne výrazy a MySQL funkcie nám umožňujú efektívne filtrovať, upravovať a analyzovať dáta priamo v databáze, čím sa výrazne zvyšuje presnosť a flexibilita pri práci s údajmi.

V letnom semestri si ukážeme ako vytvoriť vlastné procedúry, funkcie a spúšťače.

Použitie v AiS2

Emaily, telefónne čísla, webové adresy, rodné čísla, predpisy platieb uvedené v správnom formáte/vzore. Zobrazenie dátumov v slovenskom formáte, celých mien aj s titulmi, výpočet váženého študijného priemeru...

Ciele

  • Vyhľadávanie pomocou regulárnych výrazov
  • MySQL funkcie

Kľúčové slová

Vyhľadávanie pomocou regulárnych výrazov
  • NOT REGEXP
  • REGEXP
  • RLIKE
  • REGEXP_INSTR()
  • REGEXP_REPLACE()
  • REGEXP_SUBSTR()
  • REGEXP_LIKE() - podpora len v MySQL, MariaDB nepodporuje
MySQL funkcie
  • CONCAT, REPLACE, UPPER, ...
  • PI, RAND, SQRT, ...
  • CURDATE, MONTHNAME, DATEDIFF, ...
  • CASE, CAST, COALESCE, ...

Návody

Vyhľadávanie pomocou regulárnych výrazov
MySQL funkcie

Tipy a triky

                                 
-- zobrazenie hodnoty systemovej premennej lc_time_names
SELECT @@lc_time_names;
-- en_US
-- sk_SK

-- nastavenie sk_SK
SET lc_time_names = 'sk_SK';
-- sk_SK 
-- en_US
                                 
                              

Databáza

Úlohy

Dostali ste za úlohu spravovať databázu osôb. Importnite si ju a zoznámte sa s jej štruktúrou.

1. úloha

Skúste napísať regulárny výraz, ktorý vyhodnotí, či email bol napísaný v správnom formáte.

Riešenie
                                       
# Vrati 1 ak email je v spravnom formate, inak vrati 0.
SELECT 'lukas.mino@upjs.sk' REGEXP '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$';

-- alebo
SELECT 'lukas.mino@upjs.sk' RLIKE '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$';

-- alebo
SELECT REGEXP_LIKE('lukas.mino@upjs.sk', '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');

-- Vrati 0
SELECT 'lukas,mino@upjs.sk' REGEXP '^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$';
                                       
                                    
2. úloha

Skúste na príklade ukázať rozdiel medzi funkciami NOW a SYSDATE.

Riešenie
                                       
SELECT NOW(); #vrati cas spustenia dopytu

SELECT SYSDATE(); #vrati cas kedy bola zavolana funkcia

-- Pozn.: CURRENT_TIMESTAMP a NOW vratia cas zaciatku vykonavania dopytu. Naproti tomu SYSDATE vrati aktualny cas. Vid. priklady:

-- Cas oboch volani NOW je rovnaky.
SELECT NOW(), SLEEP(2), NOW();

-- Cas druheho volania SYSDATE je posunuty o dve sekundy.
SELECT SYSDATE(), SLEEP(2), SYSDATE();
                                       
                                    
3. úloha

Zobrazte dnešný deň v týždni po slovensky.

Riešenie
                                       
-- Den v tyzdni


-- zobrazenie systemovej premennej lc_time_names
SELECT @@lc_time_names;
-- en_US

-- nastavenie po slovensky
SET lc_time_names = 'sk_SK'; 
SELECT DAYNAME(CURRENT_DATE()) slov;

-- nastavenie po anglicky
SET lc_time_names = 'en_US'; 
SELECT DAYNAME(CURRENT_DATE()) ang;

-- alebo

SELECT 
   CASE WEEKDAY(CURRENT_DATE()) -- 0 = Monday
   WHEN 0 THEN 'Pondelok'
   WHEN 1 THEN 'Utorok'
   WHEN 2 THEN 'Streda'
   WHEN 3 THEN 'Stvrtok'
   WHEN 4 THEN 'Piatok'
   WHEN 5 THEN 'Sobota'
   WHEN 6 THEN 'Nedela'
   ELSE 'Nezname'
   END 'Deň v týždni'
FROM osoba;

-- alebo

SELECT 
CASE 
   WHEN DAYOFWEEK(CURRENT_DATE()) = 1 THEN 'Nedela' -- 1 = Sunday
   WHEN DAYOFWEEK(CURRENT_DATE()) = 2 THEN 'Pondelok'
   WHEN DAYOFWEEK(CURRENT_DATE()) = 3 THEN 'Utorok'
   WHEN DAYOFWEEK(CURRENT_DATE()) = 4 THEN 'Streda'
   WHEN DAYOFWEEK(CURRENT_DATE()) = 5 THEN 'Stvrtok'
   WHEN DAYOFWEEK(CURRENT_DATE()) = 6 THEN 'Piatok'
   WHEN DAYOFWEEK(CURRENT_DATE()) = 7 THEN 'Sobota'
   ELSE 'Nezname'
   END 'Deň v týždni'
FROM osoba;
                                       
                                    

Zhrnutie

Na tomto cvičení sme si precvičili prácu s regulárnymi výrazmi v SQL, ktoré nám umožnili vyhľadávať a filtrovať údaje podľa komplexnejších textových vzorov. Taktiež sme využili rôzne funkcie na spracovanie a transformáciu dát ako sú funkcie na prácu s reťazcami, číslami a dátumami. Okrem toho sme sa oboznámili aj s inými špecifickými funkciami, ako sú systémové (napr. informácie o verzii databázy, používateľoch, rôznych nastaveniach a stave systému), podmienené (CASE, IF) a rôzne iné. Cieľom bolo ukázať, ako možno priamo v databáze efektívne analyzovať a pripravovať dáta bez nutnosti ďalšieho spracovania v externých nástrojoch.

4. cvičenie: Spojenie tabuliek, agregácie

Motivácia

Pre získanie ucelených informácií je často potrebné spájať dáta z viacerých tabuliek. Spojenie tabuliek nám umožňuje získať ucelený pohľad na prepojené dáta z viacerých zdrojov, čo je nevyhnutné pre komplexnejšie analýzy. Agregačné funkcie nám pomáhajú rýchlo zhrnúť a vyhodnotiť veľké množstvo údajov, napríklad spočítať počet záznamov, priemer či celkový súčet.

V letnom semestri si ukážeme ako analyzovať a optimalizovať dopyty pomocou relačnej algebry a indexov. Na pokročilejšiu a efektívnejšiu analýzu dát si ukážeme prácu s WINDOW funkciami a kontingenčnými (PIVOT) tabuľkami.

Použitie v AiS2

Vačšina zobrazených dát hlavne v tabuľkách vznikajú spojením desiatok tabuliek. Štatistické dáta vznikajú pomocou agregačných funkcií, napríklad počty študentov zapísaných na jednotlivé cvičenia, počet odučených hodín, počet prihlásených a prijatých uchádzačov z jednotlivých krajín v daných rokoch, trend úspešnosti študentov na jednotlivých predmetoch za posledné roky, miera obsadenosti internátov jednotlivých fakúlt, zoradenie študentov podľa váženého študijného priemeru pre jednotlivé odbory alebo fakulty, zobrazenie posledného udeleného hodnotenia pri opakovaných skúškach, ...

Ciele

  • Spojenie tabuliek
  • Agregácie

Kľúčové slová

Spojenie tabuliek
  • CROSS JOIN
  • [INNER] JOIN
  • LEFT [OUTER] JOIN
  • RIGHT [OUTER] JOIN
  • FULL [OUTER] JOIN - MySQL nepodporuje
Ďalšie spôsoby spojenia tabuliek
  • STRAIGHT_JOIN - ako INNER JOIN, ale vynúti poradie tabuliek
  • NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN - join podľa rovnakých názvov stĺpcov
  • SELF JOIN - join tej istej tabuľky na seba
  • SEMI JOIN - vracia riadky z A, ak existuje zhoda v B (bez duplikácie) - MySQL nepodporuje, ale napr. MS SQL Server áno
  • ANTI JOIN - vracia riadky z A, ktoré nemajú zhodu v B (napr. NOT EXISTS) - MySQL nepodporuje, ale napr. MS SQL Server áno
  • LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)] JOIN - MySQL nepodporuje, ale napr. MS SQL Server áno
  • Parallel Join - join rozdelený medzi viacero vlákien - MySQL nepodporuje, ale napr. MS SQL Server áno
  • Materialized Join - jedna strana joinu je v dočasnej tabuľke
  • ...
Agregácie
  • Agregačné funkcie - MIN, MAX, COUNT, SUM, AVG, ...
  • Zoskupenie - GROUP BY
  • Zoskupenie a pridanie medzisúčtov a celkových súčtov - GROUP BY ... WITH ROLLUP
  • Filtrovanie po agregácii - HAVING
Syntax
                                 
                                 
SELECT
   [ALL | DISTINCT | DISTINCTROW]
   select_expr [, select_expr] ...
[FROM 
   table_name [[AS] alias]
      [ {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_name [[AS] alias] {ON search_condition | USING (join_column_list)}
         | {LEFT|RIGHT} [OUTER] JOIN table_name [[AS] alias] {ON search_condition | USING (join_column_list)}
         | NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_name [[AS] alias]
      ] 
      ...
]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
[HAVING having_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ... ]
                                 
                              

Návody

Spojenie tabuliek
Agregácie

Praktické rady

  • Vizuálna pomôcka: Pred písaním JOIN si predstavte, ako sa tabuľky prekrývajú.
  • Začnite s INNER JOIN: Je to najčastejšie používaný typ a pomôže vám najprv pochopiť vzťahy medzi dátami.
  • Alias: Pre tabuľky používajte krátke aliasy (napr. P pre Pacienti, L pre Lekari, N pre Navstevy) pre jednoduchšiu a čitateľnejšiu syntax.

Tipy a triky

                                 
-- zobrazenie hodnoty systemovej premennej sql_mode
SELECT @@sql_mode;
-- ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

-- zobrazenie hodnoty systemovej premennej session.sql_mode
SELECT @@session.sql_mode;
-- ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

-- nastavenie ONLY_FULL_GROUP_BY
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';
-- alebo
SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY';
-- alebo
SET SESSION sql_mode = sys.list_add(@@session.sql_mode, 'ONLY_FULL_GROUP_BY');

-- zrusenie ONLY_FULL_GROUP_BY
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
                                 
                              

Databáza

Úlohy

Po úspešnom absolvovaní predchádzajúcich týždoch Vás presunuli na medicínsky projekt. Dostali ste za úlohu spravovať databázu polikliniky. Importnite si ju a zoznámte sa s jej štruktúrou.

1. úloha

Importnite si databázu Mnoziny2 a zoznámte sa s jej štruktúrou. Zobrazte výsledky spojenia dvoch tabuliek T1 a T1 cez stĺpec x pomocou CROSS JOIN, INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN.

                                       
USE mnoziny2;

-- CROSS JOIN
SELECT * FROM T1 CROSS JOIN T2;
-- alebo
SELECT * FROM T1, T2;

-- CROSS JOIN spojením tabuliek cez stĺpec x
SELECT * FROM T1 CROSS JOIN T2 WHERE T2.x = T1.x;
-- alebo
SELECT * FROM T1, T2 WHERE T2.x = T1.x;
-- NEEFEKTIVNE, radsej pouzit INNER JOIN

-- INNER JOIN
SELECT * FROM T1 INNER JOIN T2 ON T2.x = T1.x;
-- alebo
SELECT * FROM T1 JOIN T2 ON b.x = T1.x;
-- alebo
SELECT * FROM T1 JOIN T2 USING(x);

-- LEFT OUTER JOIN
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.x = T1.x;
-- alebo
SELECT * FROM T1 LEFT JOIN b ON T2.x = T1.x;
-- alebo
SELECT * FROM T1 LEFT OUTER JOIN T2 USING(x);
-- alebo
SELECT * FROM T1 LEFT JOIN T2 USING(x);

-- RIGHT OUTER JOIN
SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T2.x = T1.x;
-- alebo
SELECT * FROM T1 RIGHT JOIN T2 ON T2.x = T1.x;
-- alebo
SELECT * FROM T1 RIGHT OUTER JOIN T2 USING(x);
-- alebo
SELECT * FROM T1 RIGHT JOIN T2 USING(x);
                                       
                                    
2. úloha

Importnite si databázu Mnoziny2 a zoznámte sa s jej štruktúrou. Zobrazte výsledky spojenia dvoch tabuliek a a b cez stĺpec x pomocou FULL OUTER JOIN.

                                       
USE mnoziny2;

-- FULL OUTER JOIN MySQL zatial nepodporuje
SELECT * FROM T1 FULL OUTER JOIN T2 WHERE T2.x = T1.x;

-- Simulacia spojenia cez FULL OUTER JOIN
SELECT * FROM T1 LEFT OUTER JOIN T2 ON T2.x = T1.x
UNION
SELECT * FROM T1 RIGHT JOIN T2 ON T2.x = T1.x; 
                                       
                                    

V ďalšich zadaniach budete pracovať s databázou poliklinika.

3. úloha

Zobrazte meno pacienta, ktorý ma najväčší mesačný príjem.

                                    
-- Meno pacienta, ktory ma najvacsi mesacny prijem
SELECT 
krstne 
FROM pacienti
WHERE mesPrijem = (SELECT MAX(mesPrijem) FROM pacienti);
                                    
                                 
4. úloha

Zobrazte mininimálny, maximálny, počet, sumu a priemerný poplatok pacientov u jednotlivých lekárov.

                                    
-- Informacie o poplatkoch pacientov u lekarov
SELECT 
   idP Pacient, 
   idL Lekar, 
   MIN(poplatok) 'Minimálny poplatok',
   MAX(poplatok) 'Maximálny poplatok',
   COUNT(poplatok) 'Počet poplatkov',
   SUM(poplatok) 'Suma poplatkov',
   AVG(poplatok) 'Priemer poplatkov',
FROM navstevy
GROUP BY idP, idL
ORDER By idP, idL;

-- alebo
SELECT 
   idP Pacient, 
   idL Lekar, 
   MIN(poplatok) 'Minimálny poplatok',
   MAX(poplatok) 'Maximálny poplatok',
   COUNT(poplatok) 'Počet poplatkov',
   SUM(poplatok) 'Suma poplatkov',
   AVG(poplatok) 'Priemer poplatkov',
FROM navstevy
GROUP BY idL, idP
ORDER By idP, idL;
                                    
                                 
5. úloha

Zobrazte mininimálny, maximálny, počet, sumu a priemerný poplatok pacientov u jednotlivých lekárov. Zobrazte meno pacienta a meno lekára.

                                    
-- Informacie o poplatkoch pacientov u lekarov s menami pacientov a lekarov
SELECT 
   P.krstne Pacient,
   L.krstne Lekar, 
   MIN(poplatok) 'Minimálny poplatok',
   MAX(poplatok) 'Maximálny poplatok',
   COUNT(poplatok) 'Počet poplatkov',
   SUM(poplatok) 'Suma poplatkov',
   AVG(poplatok) 'Priemer poplatkov',
FROM navstevy N
   JOIN pacienti P ON P.idP = N.idP
   JOIN lekari L ON L.idL = N.idL
GROUP BY N.idP, P.krstne, N.idL, L.krstne -- co ak sa dvaja pacienti/lekari volaju rovnako?
ORDER By N.idP, N.idL;
                                    
                                 
6. úloha

Zobrazte id pacientov, ktorí mali viac ako 1 návštevu. Uveďte id pacienta a počet návštev. Výsledok zoraďte podľa najväčšieho počtu návštev a potom podľa id pacientov.

                                    
   -- id pacientov a pocet navstev, ktori mali viac ako 1 navstevu
   SELECT 
      idP,
      COUNT(idN) 'Počet návštev'
   FROM navstevy
   GROUP BY idP
   HAVING COUNT(idN) > 1
   ORDER BY 2 DESC, idP ASC;
   
   -- alebo
   
   SELECT 
      idP,
      COUNT(*) 'Počet návštev'
   FROM navstevy
   GROUP BY idP
   HAVING COUNT(*) > 1
   ORDER BY COUNT(*) DESC, 1;
                                    
                                 
7. úloha

Zistite koľko zarobili jednotliví lekári. Vo výsledku chceme vidieť aj koľko zarobili dokopy.

                                       
SELECT 
   CASE WHEN l.krstne IS NULL THEN 'Spolu' ELSE  l.krstne END krstne,
   SUM(n.poplatok) as prijem 
FROM navstevy n
JOIN lekari l ON l.idL = n.idL
GROUP BY l.krstne 
WITH ROLLUP;
                                       
                                    

Zhrnutie

Na tomto cvičení sme sa naučili spájať tabuľky a rozlišovať rôzne typy spájania, napr. INNER JOIN pre získanie dát, ktoré majú zhodu (v klauzule ON) v oboch tabuľkách, LEFT OUTER JOIN pre zachovanie všetkých dát z ľavej tabuľky, RIGHT OUTER JOIN pre zachovanie všetkých dát z pravej tabuľky, FULL OUTER JOIN pre zachovanie všetkých dát z oboch tabuliek, ... Taktiež sme sa naučili sumarizovať dáta pomocou agregačných funkcií, pochopili sme význam klauzuly GROUP BY pre zoskupovanie dát a použitie klauzuly HAVING na filtrovanie zoskupených dát.

Takto dokážeme získavať komplexne informácie z viacerých súvisiacich tabuliek, získavať štatistické prehľady a analyzovať dáta.

5. cvičenie: Návrh databázovej štruktúry

Motivácia

Vhodný návrh databázovej štruktúry je základom pre rýchlu, spoľahlivú a prehľadnú prácu s údajmi, vďaka čomu sa dáta ľahko spravujú, rozširujú a analyzujú.

V letnom semestri si ukážeme pomocou normálnych foriem proces eliminovania duplicitných údajov, ktorý vedie k zlepšeniu integrity dát.

Použitie v AiS2

Aktuálne databáza AiS2 obsahuje 2478 používateľských tabuliek. Preto je vhodná databázová štruktúra veľmi dôležitá - zaručuje prehľadnosť a zrozumiteľnosť, integritu a konzistenciu dát, eliminuje duplicity, optimalizuje výkonnosť a škálovateľnosť, zlepšuje údržbu a rošíriteľnosť, uľahčuje auditovanie a logovanie prístupu k citlivým dátam, taktiež umožňuje jednoduchšie používať ORM nástroje, ETL procesy, zálohovanie či monitorovanie výkonnosti.

Ciele

  • Návrh databázovej štruktúry

Návody

Tipy a triky

  • Vytvorenie nového modelu:
    File -> New Model -> Add Diagram
  • Reverzné inžinierstvo z existujúcej databázy:
    Database -> Reverse Engineer
  • UML označenie vzťahu:
    Model -> Relationship Notation -> UML
  • Export SQL skriptu:
    File -> Export -> Forward Engineer SQL CREATE Script
  • Export ERD do PDF/PNG/SVG:
    File -> Export

Úloha

Dostali ste za úlohu navrhnúť databázovú štruktúru na sprevádzkovanie eshopu.

Úloha

Navrhnite vhodnú databázovú štruktúru na sprevádzkovanie eshopu.

Zhrnutie

Na tomto cvičení sme sa snažili vhodne návrhnúť databázovú štruktúru a oboznámili sme sa s princípmi modelovania dát a dôležitosťou správne navrhnutých tabuliek pre efektívne a spoľahlivé spracovanie údajov. Precvičili sme si identifikáciu entít a ich vzťahov, tvorbu ER diagramov a transformáciu modelu do relačnej podoby. Správny návrh databázovej štruktúry je kľúčový preto, lebo ovplyvňuje nielen výkon a rýchlosť spracovania dát, ale aj spoľahlivosť, konzistenciu a jednoduchosť budúcej údržby systému. Umožňuje zároveň ľahšie rozširovanie a integráciu databázy pri meniacich sa požiadavkách, čím šetrí čas aj náklady v praxi.

6. cvičenie: Opakovanie

Ciele

  • Opakovanie
    • Výber dát
    • Regulárne výrazy
    • MySQL funkcie
    • Spojenie tabuliek
    • Agregácie
    • Návrh databázovej štruktúry

7. cvičenie: Polsemestrálna previerka

Ciele

  • Polsemestrálna previerka
    • Výber dát
    • Regulárne výrazy
    • MySQL funkcie
    • Spojenie tabuliek
    • Agregácie
    • Návrh databázovej štruktúry

8. cvičenie: Modifikácia dát a metadát, integritné obmedzenia

Motivácia

Modifikácia dát a metadát nám umožňuje udržiavať databázu aktuálnu a prispôsobovať ju meniacim sa požiadavkám bez nutnosti jej úplného prebudovania. Integritné obmedzenia zabezpečujú konzistenciu dát, čím chránia databázu pred chybami a nekorektnými údajmi.

V letnom semestri budeme vytvárať spúšťače (TRIGGER), ktoré zautomatizujú reakcie na zmeny v databáze, vďaka čomu môžeme zabezpečiť konzistenciu dát, zaznamenávať dôležité udalosti alebo vykonávať kontroly dát bez manuálneho zásahu.

Použitie v AiS2

Napríklad zapísaním študenta na predmet musíme cez integritné obmedzenia zabezpečiť:

  • že študent existuje (cudzí kľúč)
  • že predmet existuje (cudzí kľúč)
  • že ešte nie je zapísaný na tento predmet v danom akademickom roku (UNIQUE na trojicu student-predmet-rok)
  • že študent má aktívne štúdium (validácia spúšťačom (TRIGGER))
  • že študent môže opakovať daný predmet maximálne dvakrát (validácia spúšťačom (TRIGGER))
  • že študent má splnené prerekvizity (validácia spúšťačom (TRIGGER))
  • že študent neprekročil maximálny počet kreditov (validácia spúšťačom (TRIGGER))
  • že predmet patrí do jeho študijného plánu (validácia spúšťačom (TRIGGER))
  • časovú pečiatku zapísania predmetu (DEFAULT alebo cez zapísanie pečiatky cez spúšťač (TRIGGER))
  • že akademický rok má tvar 2000/2001 a môže byť len v rámci dátumu zápisu (CHECK, poprípade validácia spúšťačom (TRIGGER))
  • že zmazaním predmetu sa odstráni len predmet a jeho zápisy a nie aj študent (nastavenie čo sa má stať pri mazaní/aktualizácii)
  • alebo že zmazaním predmetu sa predmet len zneplatní a fyzicky sa nezmaže (cez spúšťač (TRIGGER) nastavíme, že nenastane DELETE ale len sa zaktualizuje údaj v predmete)
  • ...

Ciele

  • Pridanie, aktualizácia, zmazanie dát
  • Modifikácia metadát tabuľky
  • Integritné obmedzenia
    • NOT NULL
    • DEFAULT
    • CHECK
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY

Kľúčové slová

  • INSERT, INSERT INTO SELECT, UPDATE, DELETE
  • ALTER TABLE
  • ADD | ALTER | DROP | CHANGE | MODIFY | RENAME COLUMN
  • ADD | ALTER | DROP [CONSTRAINT [symbol]] PRIMARY KEY | UNIQUE | FOREIGN KEY | CHECK
  • ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
  • ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

Návody

Praktické rady

  • Poradie vytvárania tabuliek: Vytvárajte tabuľky v takom poradí, aby tabuľky s cudzími kľúčmi odkazovali na už existujúce primárne kľúče.
  • Dátové typy: Pri vkladaní a aktualizácii dát dávajte pozor na správne dátové typy a formáty (napr. dátumy, čísla).
  • Vždy používajte WHERE s UPDATE a DELETE: Ak zabudnete na klauzulu WHERE, zmeníte alebo vymažete VŠETKY dáta v tabuľke, čo môže mať katastrofálne následky.
  • Testujte na malých dátach: Pred vykonaním rozsiahlych zmien si ich najprv otestujte na malej vzorke dát alebo v testovacom prostredí.

Tipy a triky

                                 
-- vypnutie safe modu, aby sa dalo aktualizovat/mazat podla lubovolnej podmienky
SET SQL_SAFE_UPDATES = 0;

-- zapnutie safe modu, aby sa dalo aktualizovat/mazat len podla kluca
SET SQL_SAFE_UPDATES = 1;

                              

Databáza

Vyriešené príklady z cvičenia

Zhrnutie

Integritné obmedzenia sú mechanizmy, ktoré zabezpečujú správnosť, konzistenciu a logickú platnosť údajov v databáze. Na cvičení sme si zdôraznili ich úlohu pri ochrane databázy pred chybnými alebo nekonzistentnými dátami, napríklad prostredníctvom PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, DEFAULT či CHECK podmienok. Správne definované integritné obmedzenia výrazne zjednodušujú správu databázy, zvyšujú jej spoľahlivosť a minimalizujú potrebu dodatočných kontrol na aplikačnej úrovni. Okrem toho sme si prakticky vyskúšali aj modifikáciu metadát existujúcej databázy, napríklad úpravou štruktúry tabuliek alebo dopĺňanie nových obmedzení, pričom sme si overili, ako tieto zmeny vplývajú na konzistenciu dát. Ďalej sme sa naučili ako kopírovať dáta z jednej tabuľky do druhej a ako dáta nielen vkladať, ale aj aktualizovať a mazať. Pri aktualizácii a mazaní dát sme pochopili dôležitosť klauzuly WHERE, čo je nevyhnutné pre zachovanie integrity dát v databáze.

9. cvičenie: Množinové operácie, vnorené dopyty

Motivácia

Množinové operácie nám umožňujú efektívne porovnávať a kombinovať výsledky viacerých dopytov, čo zjednodušuje prácu s podobnými alebo rozdielnymi dátami. Vnorené dopyty zasa dávajú možnosť riešiť zložitejšie problémy krok po kroku, pričom výsledok jedného dopytu slúži ako vstup pre ďalší, čo výrazne rozširuje možnosti analýzy údajov.

V letnom semestri predstavíme WINDOW funkcie, ktoré síce nie sú úplnou náhradou za vnorené dopyty, ale v mnohých analytických úlohách môžu dané dopyty zjednodušiť a zrýchliť.

Použitie v AiS2

  • Zobrazenie všetkých absolvovaných a aktuálne zapísaných predmetov
  • Zobrazenie (povinných) predmetov, ktoré si študent zatiaľ nezapísal
  • Zobrazenie ešte neabsovovaných a zapísaných predmetov študenta
  • Zobrazenie študentov, ktorí majú neabsovované predmety
  • Zobrazenie študentov, ktorí ešte nemajú zapísané/absolvované všetky povinné predmety
  • Zobrazenie všetkých rozvrhovaných rôznych akcií v jednej tabuľke (rozvrhy predmetov, skúšok, zápočtov, konzultácií, informatikovíc, prijímacích skúšok, štátnych skúšok, ... zobrazené pre danú miestnosť pre dané obdobie v jednej tabuľke)
  • ...

Ciele

  • Množinové operácie
    • UNION
    • INTERSECT
    • EXCEPT
  • Vnorené dopyty
    • Výsledok
      • nič
      • skalárna hodnota
      • zoznam
      • tabuľka
    • Umiestnenie
      • v SELECT zozname
      • vo FROM klauzule
      • vo WHERE klauzule
    • Operátory
      • porovnávacie operátory
      • IN, NOT IN
      • ANY, SOME
      • ALL
      • EXISTS, NOT EXISTS
    • Korelované/Nekorelované

Kľúčové slová

Množinové operácie
  • UNION
  • INTERSECT
  • EXCEPT
Vnorené dopyty
  • =, >, <, >=, <=, <>, !=
  • IN, NOT IN
  • ANY, SOME
  • ALL
  • EXISTS, NOT EXISTS

Návody

Zjednotenie
Prienik
Rozdiel

Databáza

Úlohy

1. úloha

Importnite si databázu množiny a zoznámte sa s jej štruktúrou. Zobrazte výsledky zjednotenia tabuliek a a b.

                                       
USE mnoziny;

-- Zjednotenie bez opakovania
SELECT x, y FROM a 
UNION -- Zjednotenie bez opakovania
SELECT x, y FROM b;
                                       
                                    
2. úloha

Zobrazte výsledky zjednotenia tabuliek a a b tak, aby sa riadky mohli opakovať.

                                       
USE mnoziny;

-- Zjednotenie s opakovanim
SELECT x, y FROM a 
UNION ALL -- Zjednotenie s opakovanim
SELECT x, y FROM b;
                                       
                                    
3. úloha

Zobrazte výsledky prieniku tabuliek a a b.

                                       
USE mnoziny;

-- Prienik

-- Prienik pomocou INTERSECT (od verzie 8.0.31)
SELECT x, y FROM a 
INTERSECT 
SELECT x, y FROM b;

-- Prienik pomocou INTERSECT (od verzie 8.0.31)
TABLE a INTERSECT TABLE b;

-- Prienik pomocou IN
SELECT x, y 
FROM a 
WHERE (x, y) IN (SELECT x, y FROM b);

-- Prienik pomocou ANY
SELECT x, y 
FROM a 
WHERE (x, y) = ANY (SELECT x, y FROM b);

-- Prienik pomocou SOME
SELECT x, y 
FROM a 
WHERE (x, y) = SOME (SELECT x, y FROM b);

-- Prienik pomocou EXISTS
SELECT x, y 
FROM a 
WHERE EXISTS (SELECT * FROM b WHERE b.x = a.x AND b.y = a.y);

-- Prienik pomocou INNER JOIN
SELECT a.x, a.y 
FROM a
JOIN b ON b.x = a.x AND b.y = a.y;

-- Prienik pomocou INNER JOIN
SELECT DISTINCT a.x AS x, a.y AS y 
FROM a 
INNER JOIN b USING (x,y);

-- Prienik pomocou NATURAL JOIN
SELECT x, y 
FROM a
NATURAL JOIN b;
                                       
                                    
4. úloha

Zobrazte výsledky rozdielu tabuliek a a b.

                                       
USE mnoziny;

-- Rozdiel

-- Rozdiel pomocou EXCEPT (od verzie 8.0.31)
SELECT x, y FROM a 
EXCEPT 
SELECT x, y FROM b;

-- Rozdiel pomocou EXCEPT (od verzie 8.0.31)
TABLE a EXCEPT TABLE b;

-- Rozdiel pomocou NOT IN
SELECT x, y 
FROM a 
WHERE (x, y) NOT IN (SELECT x, y FROM b);

-- Rozdiel pomocou ALL
SELECT x, y 
FROM a 
WHERE (x, y) <> ALL (SELECT x, y FROM b);

-- Rozdiel pomocou NOT EXISTS
SELECT x, y 
FROM a 
WHERE NOT EXISTS (SELECT * FROM b WHERE b.x = a.x AND b.y = a.y);

-- Rozdiel pomocou LEFT OUTER JOIN
SELECT a.x, a.y 
FROM a
LEFT OUTER JOIN b ON b.x = a.x AND b.y = a.y
WHERE b.x IS NULL;

-- Rozdiel pomocou LEFT OUTER JOIN
SELECT DISTINCT a.x AS x, a.y AS y 
FROM a 
LEFT OUTER JOIN b USING (x,y) 
WHERE b.x IS NULL;
                                       
                                    
5. úloha

Z databázy Poliklinika zobrazte všetky mená pacientov a lekárov. Mená sa môžu opakovať. Výsledok zoraďte lexikograficky.

                                       
USE poliklinika;

SELECT krstne FROM pacienti
UNION ALL
SELECT krstne FROM lekari
ORDER BY krstne;
                                       
                                    
6. úloha

Zobrazte všetky mená pacientov a lekárov tak, aby sa mená neopakovali. Výsledok zoraďte lexikograficky.

                                       
SELECT krstne FROM pacienti
UNION
SELECT krstne FROM lekari
ORDER BY krstne;
                                       
                                    
7. úloha

Zobrazte rovnaké mená pacientov a lekárov. Výsledok zoraďte lexikograficky.

                                       
-- Prienik

-- Prienik pomocou INTERSECT (od verzie 8.0.31)
SELECT krstne FROM pacienti 
INTERSECT 
SELECT krstne FROM lekari
ORDER BY krstne;

-- Prienik pomocou IN
SELECT krstne 
FROM pacienti 
WHERE krstne IN (SELECT krstne FROM lekari)
ORDER BY krstne;

-- Prienik pomocou ANY
SELECT krstne
FROM pacienti 
WHERE krstne = ANY (SELECT krstne FROM lekari)
ORDER BY krstne;

-- Prienik pomocou SOME
SELECT krstne 
FROM pacienti 
WHERE krstne = SOME (SELECT krstne FROM lekari)
ORDER BY krstne;

-- Prienik pomocou EXISTS
SELECT krstne
FROM pacienti 
WHERE EXISTS (SELECT krstne FROM lekari WHERE lekari.krstne = pacienti.krstne)
ORDER BY krstne;

-- Prienik pomocou CROSS JOIN
SELECT p.krstne
FROM pacienti p, lekari l
WHERE p.krstne = l.krstne

-- Prienik pomocou CROSS JOIN
SELECT p.krstne
FROM pacienti p CROSS JOIN lekari l
WHERE p.krstne = l.krstne

-- Prienik pomocou JOIN
SELECT p.krstne
FROM pacienti p JOIN lekari l ON p.krstne = l.krstne
                                       
                                    
8. úloha

Zobrazte len mená lekárov, ktorých mená neobsahujú mená pacientov. Výsledok zoraďte lexikograficky.

                                       
-- Rozdiel

-- Rozdiel pomocou EXCEPT (od verzie 8.0.31)
SELECT krstne FROM lekari 
EXCEPT 
SELECT krstne FROM pacienti
ORDER BY krstne;

-- Rozdiel pomocou NOT IN
SELECT krstne 
FROM lekari 
WHERE krstne NOT IN (SELECT krstne FROM pacienti)
ORDER BY krstne;

-- Rozdiel pomocou ALL
SELECT krstne
FROM lekari 
WHERE krstne <> ALL (SELECT krstne FROM pacienti)
ORDER BY krstne;

-- Rozdiel pomocou NOT EXISTS
SELECT krstne
FROM lekari 
WHERE NOT EXISTS (SELECT krstne FROM pacienti WHERE pacienti.krstne = lekari.krstne)
ORDER BY krstne;

-- Rozdiel pomocou LEFT OUTER JOIN
SELECT p.krstne
FROM pacienti p 
LEFT OUTER JOIN lekari l ON p.krstne = l.krstne
WHERE l.idL IS NULL;
                                       
                                    
9. úloha

Pridajte stĺpec poradie k pacientom, kde tento stĺpec bude reprezentovať lexikografické poradie krstných mien v abecede.

                                       
SELECT 
   (SELECT COUNT(*) + 1 from pacienti x WHERE x.krstne < p.krstne) poradie, 
   p.* 
FROM pacienti p;
                                       
                                    
10. úloha

Zobrazte rôzne krstné pacientov, ktorí navštívili daného lekára viac ako raz.

                                       
SELECT DISTINCT p.krstne FROM
(
   SELECT idP, idL, COUNT(*) pocet 
   FROM navstevy
   GROUP BY idP, idL
) AS T -- alias stlpca je potrebny
JOIN pacienti p ON p.idP = T.idP
WHERE T.pocet > 1;
                                       
                                    
11. úloha

Nájdite údaje o pacientoch, ktorí májú druhý najmenší mesačný príjem.

                                       
-- Pomocou MIN
SELECT 
   p.*
FROM 
   pacienti p
WHERE
p.mesPrijem = 
(
   SELECT 
      MIN(p2.mesPrijem) 
   FROM 
      pacienti p2
   WHERE
      p2.mesPrijem > 
      (
         SELECT 
            MIN(p1.mesPrijem)
         FROM
            pacienti p1
         WHERE 
            p1.mesPrijem IS NOT NULL
      )
);

-- Pomocou ALL
SELECT 
   T.* 
FROM 
(
   SELECT p3.* FROM pacienti p3
   WHERE p3.mesPrijem >
   (
      SELECT p2.mesPrijem FROM Pacienti p2
      WHERE p2.mesPrijem <= ALL
      ( 
         SELECT p1.mesPrijem FROM Pacienti p1 
         WHERE p1.mesPrijem IS NOT NULL
      )
   )
) T
WHERE 
T.mesPrijem <= ALL
(
   SELECT p3.mesPrijem FROM Pacienti p3 -- 7
   WHERE p3.mesPrijem >
   (
      SELECT p2.mesPrijem FROM Pacienti p2 -- 1
      WHERE p2.mesPrijem <= ALL
      ( 
         SELECT p1.mesPrijem FROM Pacienti p1 -- 8
         WHERE p1.mesPrijem IS NOT NULL
      )
   )
);
                                       
                                    

Zhrnutie

Na tomto cvičení sme si precvičili kombinovanie a porovnávanie dát z viacerých tabuliek pomocou operácií ako UNION, INTERSECT a EXCEPT. Zároveň sme si osvojili princípy vnorených dopytov, ktoré umožňujú efektívne získavať údaje na základe výsledkov iných dopytov. Taktiež sme pochopili, ako tieto techniky umožňujú riešiť komplexnejšie analytické úlohy priamo v databáze a tak zvyšovať flexibilitu a presnosť pri práci s dátami. Tieto techniky sú nevyhnutné pre riešenie zložitejších analytických úloh.

10. cvičenie

Motivácia

V zimnom semestri sme sa naučili navrhovať relačné databázové štruktrúry a pracovať s relačnými databázami pomocou SQL.

V letnom semestri použijeme aj vlastné a pokročilejšie techniky v relačných databázach, budeme vedieť analyzovať a optimalizovať dopyty, eliminovať duplicitné údaje a zlepšiť integritu dát. Okrem relačných modelov ukážeme aj prácu s inými modelmi v prostredí SQL. Taktiež budeme vedieť pracovať aj s nerelačnými databázami.

Použitie v AiS2

Vedieť iba základy SQL vo vývoji AiS2 nestačí. Bežne prichádzajú požiadavky, kde je potrebné použiť aj pokročilejšie techniky ako vlastné procedúry, funkcie, TRIGGER, WINDOW funkcie, VIEW, CTE, CURSOR, .... eliminovať duplicity a optimalizovať dopyty.

Prečo vedieť aj niečo navyše?

  • Silná pozícia na trhu práce - okrem základov budete vedieť navrhovať aj vlastné štruktúry, robiť reporty a optimalizácie
  • Lepšie porozumenie komplexným systémom - budete vedieť nielen čo, ale aj prečo a ako funguje
  • Pokročilé výstupy a analýzy - budete mať vplyv v rozhodovaní a v dátovej analýze
  • Automatizácia a optimalizácia procesov - znižujete náklady, zvyšujete efektivitu
  • Pripravenosť na vedenie alebo správu systému - kariérny rast - pozícia dátového architekta, dátového/databázového špecialistu, správcu IS alebo vedúceho tímu

Ciele

  • Ďalšie možnosti MySQL
  • Opakovanie

Kľúčové slová

  • SHOW, INFORMATION_SCHEMA
  • ROLLUP, CUBE
  • TEMPORARY TABLE
  • TRUNCATE TABLE
  • GENERATED ALWAYS
  • INSERT IGNORE INTO
  • REPLACE [INTO]
  • CHARACTER SET, COLLATION, COLLATE
  • MyISAM, InnoDB, MERGE, MEMORY (HEAP), ARCHIVE, CSV, FEDERATED

Ďalšie možnosti MySQL

Tipy a triky

Trendy

!!! SQL Injection !!!

MySQL Export/Import CSV

SHOW vs. INFORMATION_SCHEMA

Integrácia MySQL s rôznymi programovacími jazykmi

Ďalšie možnosti - letný semester - ÚINF/DBS1b/15 Databázové systémy

  • Teoretické základy databáz
  • Úvod do Microsoft SQL Server
    • Deklarácia premenných - DECLARE, SET
    • Podmienky - IF, CASE
    • Cykly - LOOP, WHILE, REPEAT, LEAVE
    • Procedúry - PROCEDURE
    • Funkcie - FUNCTION
    • Spracovanie chýb a výnimiek
    • Spúšťače - TRIGGER
    • Pohľady - VIEW
    • Common Table Expression (CTE) - WITH
    • Rekurzia
    • Indexy - INDEX
    • Transakcie - TRANSACTION, COMMIT, ROLLBACK
    • Kurzory - CURSOR
    • Kontingenčné tabuľky - PIVOT
    • WINDOW funkcie
    • XML
    • JSON
    • a iné
  • Úvod do NoSQL a MongoDB

Ďalšie predmety nadväzujúce na predmet ÚINF/DBS1b/15 Databázové systémy

11. cvičenie: Koncosemestrálna previerka

Ciele

  • Koncosemestrálna previerka
    • Pridanie, aktualizácia, zmazanie dát
    • Modifikácia metadát tabuľky
    • Integritné obmedzenia
    • Množinové operácie
    • Vnorené dopyty

12. cvičenie: MySQL v R

Motivácia

Integrácia MySQL s prostredím R umožňuje efektívne kombinovať výkonnosť relačných databáz s pokročilými štatistickými a vizualizačnými nástrojmi dostupnými v R.

Ciele

  • MySQL v R

R

Tutoriál

Návody

Databáza

Vyriešené príklady z cvičenia

Zhrnutie

Na tomto cvičení sme si osvojili spôsoby ako sa pripojiť k databáze MySQL priamo z prostredia R, načítať a filtrovať dáta nieln pomocou SQL dopytov, ale aj pomocou nástroja R a následne ich analyzovať a vizualizovať pomocou štatistických a grafických nástrojov R. Precvičili sme si integráciu databázových operácií s analytickými funkcionalitami R, čím sme získali skúsenosti s efektívnym spracovaním, transformáciou a reprezentáciou dát.

13. cvičenie: Relačná algebra, normalizácia relačných databáz

Motivácia

Relačná algebra predstavuje formálny jazyk operácií nad relačnými dátami, ktorý slúži ako teoretický základ pre optimalizáciu dopytov a pochopenie interného spracovania údajov v databázových systémoch. Normalizácia predstavuje proces k návrhu databázových štruktúr, ktorého cieľom je eliminácia nadbytočnosti (redundantnosti), zabezpečenie integritných pravidiel a zlepšenie konzistencie dát.

Viac sa týmto témam budeme venovať v letnom semestri.

Ciele

  • Relačná algebra
  • Normalizácia relačných databáz

Materiál na študovanie

Relačná algebra
Relačná algebra - online nástroje
Normalizácia databáz

14. cvičenie: Opakovanie, vyhodnotenie semestra, príprava na skúšku, konzultácie

Ciele

  • Opakovanie
  • Vyhodnotenie semestra
  • Príprava na skúšku
  • Konzultácie

Príprava na skúšku

  • Preverienie, či študent ovláda princípy relačných databáz a SQL
  • 5 - 10 úloh, každá za 5 až 10 bodov
  • Písomná na papieri, potom ústna
  • Externé zdroje sú zakázané

Projekt

Študenti predmetu ÚINF/PAZ1c/17 Programovanie, algoritmy, zložitosť

Informácie o projekte dostanete na predmete PAZ1c, viac informácií nájdete na paz1c.ics.upjs.sk:
Zástupca (-ovia) tímu predstavia databázový a triedový návrh svojho projektu učiteľovi. Ideálne je použitie UML a ER diagramov. Očakáva sa aj zoznam okien s predpokladanou funkcionalitou. Predstavenie návrhu projektu slúži ako skorá spätná väzba, aby sa predišlo návrhovým chybám, príliš jednoduchým, alebo naopak príliš komplikovaným návrhom, ktoré by mohli predstavovať riziko vytvorenia slabo ohodnoteného projektu. Pri predstavovaní návrhu bude prítomný aj cvičiaci predmetu Databázové systémy a za návrh môže udeľovať body pre jeho predmet.

Študenti predmetu ÚINF/DBS/15 Databázové systémy pre matematikov

Informácie o projekte dostanete na prednáške DBS.

Študenti, ktorí sa NEzúčastnili obhajob návrhov projektov z predmetu PAZ1c alebo na prednáške predmetu DBS

Obhajoba návrhu projektu bude prebiehať mimo rozvrhu hodín.

Riešenie projektu pozostáva z nasledujúcich úloh:

  • Načrtnite entitno relačný diagram vašej databázy, kde navrhnete databázu s aspoň 4 entitnými tabuľkami, ktoré budú vhodne prepojené cudzími kľúčmi priamo, alebo pomocou prepájacích tabuliek. Pod pojmom entitná tabuľka budeme rozumieť tabuľku, ktorá má primárny kľúč a aspoň jeden stĺpec, ktorý nie je súčasťou primárneho kľúča.
  • Tabuľky naplnite vhodnými ilustračnými dátami (t.j. riadkami).
  • Vymyslite aspoň 5 (zložitejších) vhodných dopytov tak, aby ste použili
    • filter a usporiadanie dát
    • regulárne výrazy
    • funkcie
    • agregácie a agregačné funkcie
    • prepojenie aspoň dvoch rôznych tabuliek
    • prepojenie minimálne troch rôznych tabuliek
    • ...
  • ...
  • Ďalšie úlohy budú dopĺňané priebežne.

Časté chyby

  • Zbytočne nekomplikujte daný projekt vecami, ktoré nie sú pre daný projekt podstatné (napr. evidovanie dátumu spotreby jednotlivých potravín pri receptoch).
  • Ujasnite si čo od daného projektu očakávate (napr. či pri otázke je jedna alebo viac správnych odpovedí, ako sa bude daný test hodnotiť, či sa môže zadávať aj slovná odpoveď).
  • Prejdite si práva a správanie jednotlivých používateľov (napr. z pohľadu admina, skladníka, lekárnika).
  • Zamyslite sa, či ten istý používateľ môže mať viacero pozícií (napr. predávajúci i kupujúci zároveň; astronóm, vedec, vynálezca, fotograf, vojenský letec, brigádny generál ozbrojených síl, organizátor, diplomat, politik a štátnik zároveň). Ako sa má vtedy daná aplikácia správať?
  • Snažte sa o znovupoužiteľnosť daného projektu (napr. aby sa štruktúra volebného programu dala použiť aj pre nasledujúce volebné obdobie, možnosť evidovania histórie).
  • Namiesto evidovania dvoch hodnôt môžete použiť aj dátový typ BOOLEAN (napr. is_active, is_woman).
  • Ak používateľ môže písať dlhší text, použite dátový typ TEXT namiesto VARCHAR(2000).
  • Dobre si premyslite použitie vzťahov 1:1 a M:N, či nie je lepšie zlúčiť 2 tabuľky, resp. použiť radšej vzťah 1:N.
  • V ERD umiestnite tabuľky tak, aby sa vám čiary s väzbami nepretínali.
  • Nebojte sa používať dátumy, sú vhodné pri hľadaní v histórii.
  • Vyvarujte sa duplicitným dátam. Ak sú si tabuľky podobné, napr. dodávateľ/odberateľ, tak radšej nech "dedia" z jednej spoločnej tabuľky a do daných tabuliek len doevidujete čo má jedna tabuľka iné/naviac oproti inej.
  • ...
  • Popýtajte sa starších kolegov, kde najčastejšie robili chyby a čomu sa vyvarovať.

Štátna skúška

Uveďte základné pojmy v oblasti databázových systémov (DBS). Ako prebieha vytvorenie databázového systému, návrh dátových a programových štruktúr potrebných na zabezpečenie základných funkcií DBS? Ako prebieha zabezpečenie konzistencie dát? Ako je možné databázové štruktúry modelovať?

Popíšte algoritmický problém usporiadania, základné algoritmy a ich zložitosť. Aké je dolné ohraničenie zložitosti algoritmov usporiadania porovnávaním? Uveďte príklad na algoritmus usporiadania, ktorý neporovnáva prvky. Aká je podpora triedenia v databázových systémoch a na úrovni jazyka SQL? (Nápoveda: Indexy)

Zásobníkové automaty akceptujú istú triedu formálnych jazykov v Chomského hierarchii. Definujte zásobníkový automat. Uveďte príklad jazyka patriaceho do tejto triedy. Uveďte, ako by ste dokázali, že tento jazyk patrí do tejto triedy. Ako by ste zásobník implementovali vo vhodnom programovacom jazyku? Podporujú databázové systémy prácu so zásobníkmi? (Nápoveda: Štandardné relačné DBMS nemajú priamu podporu zásobníkov, ale LIFO správanie sa dá simulovať pomocou tabuliek a napr. časových značiek. )

Definujte strom ako štruktúru. V akých situáciách ste sa stretli s využitím stromových štruktúr (resp. s uložením údajov v strome)? (Nápoveda: B-stromy). Ako sa v týchto situáciách využívajú stromy? Existuje nejaká súvislosť medzi aritmetickými výrazmi a stromovými štruktúrami? Ako by ste vyjadrili gramatiku aritmetického výrazu?

...

DBS_Lab

Váš domáci labák z databázových systémov

Portál DBS_Lab je online prostredie, kde budete získavať a prezerať si svoje bodové hodnotenia z previerok a domácich úloh. Umožňuje Vám pracovať priamo s databázou a získavať okamžitú spätnú väzbu na Vaše riešenia.

Všetky výsledky Vašich previerok a odovzdaných úloh sú automaticky zaznamenávané a dostupné vo Vašom profile. Nezabudnite, že pravidelné odovzdávanie domácich úloh na portáli DBS_Lab je kľúčové pre úspešné absolvovanie predmetu.

Prejsť na portál DBS_Lab

V prípade problémov kontaktujte emailom cvičiaceho.

Spätná väzba

Vaša spätná väzba je pre nás dôležitá! Pomôžte nám zlepšiť výučbu.

Vyplňte dotazník online

Trvá to len pár minút a pomôže nám prispôsobiť výučbu Vašim potrebám.

Kontakt

Prednášajúci a skúšajúci
Cvičiaci