Ciele
- Oboznámiť sa s organizáciou cvičení a podmienkami udelenia zápočtu.
- Obdržať tému zadania.
- Pripraviť si prostredie pre prácu na predmete a oboznámiť sa s prostredím DBeaver.
- Oboznámiť sa so základnými pojmami a databázovými objektami.
- Oboznámiť sa so základnými príkazmi DDL, DML, DCL.
Úvod
Na tomto cvičení budú špecifikované podmienky pre získanie zápočtu a pridelené témy pre Vaše zadania. Objasnené budú aj základné pojmy a príkazy pre prácu s databázou.
Postup
Krok 1
Oboznámte sa s podmienkami udelenia zápočtu a organizáciou cvičení.
Úloha 1.1
Pozorne si prečítajte podmienky udelenia zápočtu z informačnej stránky cvičení.
Krok 2
V tomto kroku Vám cvičiaci pridelí zadanie.
Krok 3
Na cvičeniach budete primárne vypracovávať úlohy podľa týchto materiálov. Budeme používať multiplatformový relačný systém riadenia bázy dát (DBMS) s otvoreným kódom PostgreSQL. V rámci cvičení budete pracovať vo vývojovom prostredí DBeaver, pomocou ktorého sa buď budete pripájať na diaľku k univerzitnému serveru, na ktorom máte pripravený účet a dve databázy, alebo sa budete pripájať na vlastný server.
Úloha 3.1
Nainštalujte si Oracle VM VirtualBox z tohto odkazu. Stiahnite si priložené súbory a spojazdnite virtuálny počítač. Virtuálny počítač obsahuje už nakonfigurované pripojenia do databázy a všetok softvér, používaný na tomto predmete. Beží na linuxovej distribúcii Ubuntu 20.04.1 LTS (Focal Fossa).
Heslá pre virtuálku Ubuntu sú nasledovné:
- OS
- používateľ: dbs,
- heslo: dbs
- master password (do pgAdmin4): dbs
- databáza tuke
- používateľ: student,
- heslo: student
- Grafana
- používateľ: admin,
- heslo: heslo
Poznámka
V prípade, že sa rozhodnete využívať poskytnutý virtuálny počítač, zvyšné úlohy kroku 3 vynechajte a pokračujte na krok 4. V prípade, že virtuálny počítač využívať nechcete, pokračujte nasledujúcou úlohou.
Poznámka
Ak nemáte skúsenosti s Oracle VM VirtualBox, postupujte podľa tohto návodu. Súbor Ubuntu.vdi, ktorý ste si stiahli z odkazu uvedeného vyššie vyberte v možnosti Use existing hard disk.
Úloha 3.2
Spustite DBeaver a vytvorte si pripojenie na svoj PostgreSQL používateľský účet.
Poznámka
DBeaver je obľúbený open-source databázový nástroj vývojárov a databázových administrátorov. Je dostupný zdarma, ale existuje aj jeho platená profesionálna verzia. V prípade záujmu je dostupné aj oficiálne IDE pre PostgreSQL s názvom pgAdmin, vyvíjané komunitou.
Ďalšou alternatívou je vývojové prostredie DataGrip od spoločnosti JetBrains, ktoré je možné bezplatne získať v rámci študentskej licencie. Na portáli si vytvorte účet využitím overenia pomocou univerzitnej emailovej adresy. Po overení účtu, získate bezplatnú licenciu na používanie širokej škály produktov JetBrians na výučbové účely.
Nové pripojenia si v nástroji DBeaver vytvoríte cez kontextové menu po kliknutí na ikonu + (viď nasledujúci obrázok).
V pripojení je potrebné uviesť konfiguráciu pripojenia a ľubovoľne ho pomenovať.
Vaše meno a heslo je vytvorené na základe univerzitného emailu. Získate ho tak, že z neho odstránite tuke doménu spolu so zavináčom a všetkými znakmi, ktoré nie sú alfanumerické.
Napríklad email janko.hrasko@student.tuke.sk, bude mať meno a heslo tvar "jankohrasko" (viď nasledujúci obrázok).
Poznámka
Heslo si viete zmeniť po úspešnom pripojení. Na školskom serveri máte vytvorené dve databázy. Jednu pre prácu na Vašom zadaní a jednu pre prácu na cvičeniach, na ktorú v ďalších krokoch vložíte databázu Movies nad ktorou budete riešiť úlohy v rámci cvičení. Databázy majú nasledujúce názvy:
- menopriezviskodb pre Vaše zadanie,
- menopriezvisko pre prácu v rámci cvičení.
Oproti predvoleným nastaveniam je potrebné vyplniť nasledujúce údaje:
- Host: dbs.kpi.fei.tuke.sk
- Database: menopriezviskodb resp. v druhom pripojení menopriezvisko
- Username: menopriezvisko
- Password: menopriezvisko
- Name: ľubovoľný názov, prípadne vygeneruje sa na základe ďalších údajov.
Poznámka
Heslo si viete zmeniť po úspešnom pripojení.
Úloha 3.3
Odkliknutím tlačidla Test Connection si môžete overiť správnosť zadaných údajov. V prípade úspechu si môžete pripojenie uložiť, a rovno sa naň aj pripojiť.
Upozornenie
V prípade, že sa pokúsite na svoj účet pripojiť s nesprávnym heslom 3x, účet bude automatický zablokovaný. Je potrebné kontaktovať cvičiaceho pre odblokovanie.
Tento univerzitný server, je dostupný iba v rámci univerzitnej siete. To znamená, že sa na neho je možné pripojiť na školských počítačoch a v rámci siete eduroam, prípadne zo siete študentských domovov TUKE. Pre pripojenie z iných sietí (napr. z domu, čo v aktuálnej situácií bude väčšina z vás), je potrebne si nastaviť VPN pripojenie na TUKE podľa tohto návodu.
Krok 4
V tomto bode si môžete vyskúšať svoju prvú prácu s SQL.
Úloha 4.1
Zistite ako je možné v SQL zmeniť heslo používateľa.
Poznámka
Na zmenu údajov o používateľovi slúži v SQL príkaz ALTER USER. Detaily toho, ako sa dá heslo v danom databázovom systéme zmeniť, sa líšia od rôznych implementácií. Aj keď manažment používateľov pre nás v rámci tohto predmetu nemá až takú prioritu, pokúste sa na cvičení preštudovať dokumentáciu tohto príkazu pre PostgreSQL na nasledujúcej linke a z nej odvoďte ako je možné heslo zmeniť na tomto databázovom systéme: ALTER USER.
Poznámka
Všimnite si, že pre väčšinu úloh, ktoré budete na cvičeniach potrebovať urobiť, existuje pomoc v podobe online dokumentácie. Aj keď je vzhľadom na skúšku dôležité, aby ste sa potrebné príkazy naozaj naučili, bude pre Vás veľmi užitočné naučiť sa pracovať aj s dostupnou dokumentáciou.
Vybrané príkazy napísane v DBeaver sa spúšťajú štyrmi spôsobmi a to buď:
- kombináciou klávesových skratiek Ctrl + Enter,
- pravým tlačidlom myši a zakliknutím Execute -> Execute SQL Statement v kontextovej ponuke,
- pomocou hlavného menu: SQL Editor -> Execute SQL Statement,
- kliknutím na oranžovú šípku v hlavnom paneli nástrojov.
Vykonať celý skript je možné:
- kombináciou klávesových skratiek Alt+X,
- pravým tlačidlom myši a zakliknutím Execute -> Execute SQL Script v kontextovej ponuke,
- pomocou hlavného menu: SQL Editor -> Execute SQL Script,
- kliknutím na oranžovú šípku na "hárku" v hlavnom paneli nástrojov.
Príkazy môžu byť vykonané na samostatných kartách. Pre otestovanie môžete spustiť príkaz: SELECT version();
Úloha 4.2
Zmeňte si svoje heslo.
Poznámka
Po úspešnom zmenení hesla budete odpojení z Vášho pripojenia. Aktualizujte nastavenia pripojenia.
Úloha 4.3
Otvorte si nakonfigurované pripojenie na databázu s názvom menopriezvisko. Vytvorte si novú schému, napr "movies". Pomocou SQL skriptu movies.sql (ktorý si stiahnite lokálne) ju napĺnite údajmi. Po úspešnom vykonaní skriptu Vaša databáza obsahuje 14 tabuliek (viď nasledujúci obrázok). Nad touto databázou budete pracovať v rámci cvičení. V prípade, že svojou prácou narušíte schému tejto databázy, možete ju kedykoľvek celú zmazať a znova vytvoriť prostredníctvom tohto skriptu.
Poznámka
V prípade, že využívate poskytnutý virtuálny počítač, tento skript spúštať nemusíte. Databáza Movies už je vytvorená.
Upozornenie
Databázová schéma predstavuje logickú konfiguráciu časti (alebo celej) relačnej databázy. Určuje vzájomný vzťah medzi entitami, ktoré tvoria databázu, vrátane tabuliek, pohľadov, uložených procedúr atď. Umožňuje organizáciu a ľahšiu správu dát. Taktiež môžu byť používatelia obmedzení na prácu v jednotlivých schémach, napríklad kvôli oddeleniu testovacích tabuliek a tabuliek už v "produkcii". Štandardne sa tabuľky (a ďalšie objekty) automaticky vkladajú do schémy s názvom public. Každá nová databáza obsahuje takúto schému. O schémach sa viac dočítate v PostgreSQL dokumentácii. Novú schému si v nástroji DBeaver vytvoríte pravým tlačidlom myši a kliknutím na Schemas -> Create New Schema v Databse Navigator.
Konvencie pomenovania stĺpcov a tabuliek boli prevzaté podľa odporúčaní z praxe. Tabuľky rozlišujeme na klasické t_tabuľka a číselníkové c_tabuľka. Číselníkové tabuľky obsahujú hodnoty, ktoré sa často opakujú. Napríklad v databáze Movies je vytvorená tabuľka c_city kvôli tomu, aby sa v tabuľke t_cinema neopakovali rovnaké názvy miest. Použitím takejto číselníkovej tabuľky zabezpečíme, aby hodnoty v danom stĺpci nadobúdali iba určité hodnoty, čiže nenastane prípad, že by v tabuľke t_cinema boli v jednom riadku „Košice“ a v inom riadku zase „Kosice“. Pomocou cudzieho kľúča prepojíme tabuľky c_city a t_cinema na základe určeného stĺpca. Názov stĺpca s cudzím kľúčom začína písmenom „x“, napr. stĺpec xcit_cou_id označuje, že sa jedná o cudzí kľúč z tabuľky c_city do tabuľky c_country.
Úloha 4.4
Cvičiaci Vám objasní základné databázové objekty (tabuľky, pohľady, materializované pohľady, indexy, funkcie, sekvencie, dátové typy a agregované funkcie) - ich význam a použitie.
Krok 5
Úloha 5.1
Preštudujte si základné skupiny príkazov DDL, DML, DCL, TCL.
Ako ste si na relačnom diagrame mohli všimnúť, tabuľka obsahujúca pohlavie osôb (c_sex) podieľajúcich sa na filmoch, ešte nie je vytvorená.
Úloha 5.2
Vytvorte tabuľku c_sex. Tabuľka bude obsahovať šesť stĺpcov: sex_id predstavujúci primárny kľúč typu bpchar a sex_name typu VARCHAR veľkosti 50. Oba stĺpce nastavte ako povinné. Dobrým zvykom je pridávať stručné, ale výstižné komentáre tabuľkám, rovnako ako aj stĺpcom.
V praxi sú často využívané aj tzv. administratívne stĺpce, ktoré určujú, ktorý používateľ - sex_inserted_by typu text (defaultne hodnotu nastavíme na hodnotu premennej SESSION_USER) a kedy záznam vytvoril- sex_inserted typu timestamp, s defaultnou hodnotou funkcie NOW(). Tieto dva stĺpce sú povinné. V prípade zmeny stĺpce sex_modified_by a sex_modified určujú, ktorý používateľ a kedy záznam modifikoval.
CREATE TABLE c_sex
(
sex_name VARCHAR(50) NOT NULL,
sex_inserted TIMESTAMP(0) NOT NULL DEFAULT Now(),
sex_inserted_by TEXT NOT NULL DEFAULT SESSION_USER,
sex_modified TIMESTAMP(0) NULL,
sex_modified_by TEXT NULL,
sex_id BPCHAR(1) NOT NULL,
CONSTRAINT c_sex_pk PRIMARY KEY (sex_id)
);
Poznámka
Odkaz na dokumentáciu k dátumovým a časovým dátovým typom. Zhrnutie v skratke:
- timestamp: a timestamp without timezone,
- timestampz: timestamp with a timezone.
Timestamp umožňuje uložiť dátum aj čas. Nemá však žiadne údaje o časovom pásme. To znamená, že keď zmeníte časové pásmo vášho databázového servera, hodnota časovej pečiatky (timestamp) uložená v databáze sa automaticky nezmení. Dátový typ timestamptz je časová pečiatka s časovým pásmom. Dátový typ timestamptz teda umožňuje uložiť dátum aj čas, pričom si je vedomý časového pásma.
Timestamp akceptuje voliteľnú hodnotu presnosti p, ktorá určuje počet zlomkových číslic v poli sekúnd. Povolený rozsah p je od 0 do 6.
Poznámka
Zo začiatku môže byť písanie dotazov náročné. Databázový nástroj DBeaver ponúka možnosť jednoducho si "vyklikať" požadovanú tabuľku a dopyt vygeneruje za nás. Tento vizuálny prístup môže zo začiatku pomôcť osvojiť si samostatné písanie SQL dopytov. Postup je demonštrovaný na príklade vytvorenia tabuľky c_sex.
Nová tabuľka bude vytvorená po kliknutí pravého tlačidla myši na položke Tables -> Create New Table v záložke Database Navigator. Vytvorí sa nová tabuľka s predvoleným názvom „newtable“. Prejdite na kartu Properties a tabuľku patrične premenujte.
Presuňte sa do záložky Columns. Pravým tlačidlom myši kliknutím na obrazovku vyberte možnosť Create New Column. Obdobným spôsobom vytvoríte všetky potrebné stĺpce.
Presuňte sa do záložky Constraints. Pravým tlačidlom myši kliknutím na obrazovku vyberte možnosť Create New Constraint. Nastavte stĺpec sex_id ako primárny kľúč.
Tabuľku uložte skratkou Ctrl ₊ S alebo v hlavnom menu vyberte možnosť File -> Save. Zvoľte Persist Changes. V záložke DDL si môžte prezrieť výsledný SQL dopyt.
Úloha 5.3
Do tabuľky vložte dva záznamy predstavujúce pohlavia: Female a Male. Stĺpec sex_id (primárny kľúč) nech má hodnoty podľa prvého písmena názvu pohlavia, čiže F a M.
Riešenie
INSERT INTO c_sex
(sex_name, sex_inserted, sex_inserted_by, sex_id)
VALUES('Female', now(), SESSION_USER, 'F');
INSERT INTO c_sex
(sex_name, sex_inserted, sex_inserted_by, sex_id)
VALUES('Male', now(), SESSION_USER, 'M');
Poznámka
Ak príkazy ešte neviete písať samostatne, v nástroji DBeaver si ľahko môžete vygenerovať SQL príkazy, napr aj INSERT do vybranej tabuľky. V prípade tabuľky c_sex si INSERT príkaz vygenerujeme nasledovne:
Úloha 5.4
Vytvorte cudzí kľúč z tabuľky t_person v stĺpci xper_sex_id na tabuľku c_sex na stĺpcec sex_id v tabuľke c_sex (viď relačný model). Pre lepšie pochopenie primárnych a cudzích kľúčov si odporúčame prezrieť tento tutoriál.
Riešenie
ALTER TABLE t_person ADD CONSTRAINT t_person_fk FOREIGN KEY (xper_sex_id) REFERENCES c_sex(sex_id) ON DELETE CASCADE;
Upozornenie
Po vypracovaní úloh z cvičenia prosím o vyplnenie nasledujúceho dotazníka.
Zdroje
Doplňujúce úlohy
Úloha A.1
Aj napriek tomu, že je možné na univerzitnom serveri PostgreSQL pracovať z domu, je odporúčané si nainštalovať databazový systém PostgreSQL lokálne. Na oficiálnej stránke DBMS PostgreSQL v menu Downloads si stiahnite inštalačný súbor (OS Windows) na základe Vášho operačného systému. Najpoužívanejšie Linuxové distribúcie obsahujú inštalačné balíčky pre PostgreSQL priamo vo svojich repozitároch. Tak isto je možné PostgreSQL nainštalovať aj z populárnych repozitárov pre Mac OS. Na webovej stránke pre stiahnutie tohto DBMS, je uvedený podrobný návod inštalácie z repozitárov, zároveň je možné si stiahnuť príslušné balíčky pre konkrétne Linuxové distribúcie a ako aj pre Mac OS. Vďaka lokálnej inštalácii budete môcť pracovať na zadaní v režime off-line. Zároveň nebude potrebné sa pripájať do univerzitnej siete prostredníctvom VPN. Pri inštalácii je potrebné nastaviť heslo pre používateľa "postgres", ktorý je správcom DBMS. S týmto účtom budete môcť pracovať hneď po inštalácii.
Poznámka
Po lokálnej inštalácii si môžete v DBeaver vytvoriť ďalšie pripojenie, ktoré sa bude pripájať na Váš lokálny počítač. Host v pripojení bude "localhost".
Úloha A.2
Po úspešnej lokálnej inštalácii PostgreSQL, máte k dispozícii interaktívneho klienta v príkazovom riadku resp. termináli psql. Prostredníctvom tohto klienta je možné pracovať s lokálnou inštaláciou, tak isto sa pripojiť aj k vzdialenému serveru. Preštudujte dokumentáciu klienta psql. Pripojte sa k Vášmu účtu a databáze na univerzitnom serveri a vyskúšajte spustiť SQL príkaz pre zistenie aktuálnej verzie PostgreSQL.
Poznámka
PgAdmin je dlhé roky považovaný za štandardnú open-source platformu na vývoj a správu PostgreSQL databázy. Z tohto dôvodu sa odporúča nainštalovať si ho spolu s PostgreSQL databázovým systémom. Odporúčame ho na admisnitratívne účely, vytváranie používateľov, daatbázy, schém a podobne. Nainštalovať si ho môžte aj z tohto odkazu.