Databázové systémy 1

Rozměr: px
Začít zobrazení ze stránky:

Download "Databázové systémy 1"

Transkript

1 Databázové systémy 1

2 Obsah 1 Relační databáze, databázový server, tabulka Jazyk SQL a jeho vývoj. Příkazy DDL, DML, DCL Datové typy SQL a Oracle Příkaz Select základní syntaxe, projekce, restrikce, aliasy, setřídění výsledku, klauzule DISTINCT a DISTINCTROW Příkazy Insert, Update, Delete Hodnota NULL, operátory, výrazy, podmínky Vnitřní a vnější spojení tabulek Souhrnné a skupinové dotazy, agregační funkce Vnořené dotazy, množinové operátory Funkce jazyka SQL. Práce s datovým typem DATE Fáze návrhu databáze, E-R diagramy Normální formy, normalizace tabulek, dekompozice Vytváření tabulek, integritní omezení, primární a cizí klíče Pohledy a jejich význam, sekvence Indexy druhy indexů a jejich význam Zabezpečení a ochrana dat uživatelské účty, systémová a objektová oprávnění, role Transakce, návratové body, automatické zamykání, konzistentní čtení Přístup k databázi z vyššího programovacího jazyka. Bezpečnost a SQL injection Jazyk PL/SQL, proměnné, syntaxe bloku Řízení toku programu - podmínky, cykly, kurzory, záznamy, ošetření chyb Procedury a funkce, balíčky Triggery pro DML příkazy nad tabulkami, Triggery pro databázové a klientské události Export a import dat, práce s textovými soubory a XML dokumenty Relační algebra. Závislosti

3 1 Relační databáze, databázový server, tabulka. Relační databázový model - datové prvky jsou organizovány v tabulkách - každá tabulka reprezentuje entitu aplikace - každý řádek je instance dané entity - relace spojují řádky ve dvou tabulkách - SQL tvoří jednotné uživatelské rozhraní pro přístup a práci s daty př. kočky entita; každá kočka řádek; studenti- druhá entita, relace student jako vlastník kočky Co je to relační databáze - Sada nástrojů pro efektivní a spolehlivé ukládání dat a pro manipulaci s nimi Několik pojmů Databáze - data a nástroje zajišťující jejich ukládání a manipulaci s těmito daty Databázový server soubor programových prostředků určených pro práci s daty, včetně organizace a realizace přístupu klientů k těmto datům Báze dat (databáze) - uspořádaná množina dat ve formě záznamů, které jsou navzájem v určitém vztahu a jsou přístupné s pomocí systému řízení báze dat uživatelé databáze k ní mohou přistupovat (pracovat s ní) dvěma způsoby13: operace čtení (předchází výběr SELECT) operace zápisu (INSERT, UPDATE, DELETE) Systém řízení báze dat SŘBD programový systém umožňující vytvoření, údržbu a použití báze dat řídicí systém databáze, který sídlí mezi vlastní fyzickou vrstvou (daty) a uživatelem. Díky této vrstvě nemusí uživatel při práci s databází vědět naprosto nic o její skutečné fyzické podobě a způsobu, jakým jsou data uložena a udržována. Databázová aplikace (database application) program, který umožňuje uživatelům přístup k datům v databázi prostřednictvím formulářů pro zadávání dat, formulářů pro zadávání dotazů a sestav Funkce SŘBD Základní funkce: přenášení (načítání) dat z místa jejich uložení (např. z pevného disku) do místa jejich zpracování (operační paměť) a zpět. Podmínkou efektivnosti této procedury je strukturování dat v místě jejich uložení (např. na záznamy a položky). - definování a redefinování dat v databázi (data definition) - organizace datových souborů (vytváření a změny datových struktur) - vytváření obsahu databáze aktualizace datových souborů (vkládání dat, změny, aktualizace dat) - výběr a výstup (prezentování, zobrazování, prohlížení) dat z databáze (data display) 3

4 - tvorba vstupních formulářů (obrazovek, pohledů) a výstupních sestav - kontrola integrity dat (data integrity) - poskytuje metodu nebo metody pro definování a zajištění správnosti dat - kontrola přístupových práv (určuje, kdo a jak může přistupovat k datům) - zpravidla obsahuje i programovací jazyk pro vytváření vlastních aplikací Základní relační operace Klasické množinové operace u množinových operací (kromě kartézského součinu) se předpokládá, že obě tabulky, které do operace vstupují jako operandy, mají tyto vlastnosti: - jsou stejného stupně, tj. mají stejný počet sloupců - každý i-tý sloupec z obou tabulek je definován na stejné doméně (tj. položky jsou v obou tabulkách definovány ve stejném pořadí a jako položky stejného typu) Sjednocení: vytvoří novou tabulku, která obsahuje všechny řádky obou výchozích tabulek Průnik: vytvoří tabulku, která bude obsahovat pouze totožné řádky z obou relací Množinový rozdíl: vytvoří tabulku, ve které budou všechny řádky první vstupní tabulky kromě těch, které se vyskytují i v druhé tabulce Symetrický rozdíl: vytvoří tabulku, ve které budou všechny řádky obou tabulek s výjimkou těch, které se vyskytují v obou tabulkách Kartézský součin: vytvoří novou tabulku tak, že spojuje řádky z obou tabulek systémem každý s každým. Počet sloupců výsledné tabulky je součet počtu sloupců obou vstupních tabulek. Počet řádků je součin počtu řádků obou vstupních tabulek. Speciální relační operace Projekce - výběr sloupců tabulky vertikální podmnožina Restrikce - výběr určité věty (záznamů, řádků) z tabulky na základě stanovené podmínky horizontální podmnožina Spojení tabulek - propojení tabulek, které obsahují alespoň jednu stejnou položku (resp. mají alespoň po jedné položce založené na stejné doméně), výsledek zřetězení řádek dvou množin dat provedeného podle jednoho nebo více zadaných pravidel Příklad spojení: Seznam čtenářů knihovny a seznam měst, v nichž tito čtenáři bydlí (spojovací položkou je kód města) 4

5 Pravidla pro tabulkovou prezentaci relace (zjednodušení rozmanitostí vztahů zkoumaných teorií relací na binární relace) - každý řádek odpovídá jedné entitě relace - pořadí řádků je nevýznamné - žádné dva řádky nejsou stejné (tabulka neobsahuje duplicitní řádky) - pořadí sloupců je nevýznamné - význam každého sloupce je určen jménem atributu - žádné dva názvy sloupců (atributy) nejsou stejné - hodnoty ve sloupcích jsou atomické (skalární nelze je dále rozkládat) Relace databázové tabulky 2 Jazyk SQL a jeho vývoj. Příkazy DDL, DML, DCL. Databázový jazyk SQL výzkum v IBM ohledně možnosti využití relačních databází -> vytvoření sady příkazů -> jazyk SEQUEL (Structured English Query Language) 1979 Relational Software (dnes Oracle Corporation) Oracle Obdobně IBM SQL/DS, Progress, Informix, SyBase Přejmenování SEQUEL -> SQL (Structured Query Language) ANSI standardizace SQL86 (v roce 1986) V dalších letech se ukázalo, že SQL-86 obsahuje některé nedostatky a naopak v něm nejsou obsaženy některé důležité prvky týkající se hlavně integrity databáze - nový standard SQL92 (v roce 1992, zkráceně SQL2) Zatím nejnovějším standardem je SQL3 (SQL-99), který reaguje na potřeby nejmodernějších databází s objektovými prvky. Obecně u většiny systémů najdeme - základní implementaci dle standardů (SQL2) - rozšíření (nové funkce, ale způsobují komplikace při převodech) Jazyk SQL slouží k Definici dat (struktury a organizace dat a vztahů mezi nimi) Získávání dat Manipulaci s daty Řízení přístupu Sdílení dat 5

6 Integrita dat Úloha jazyka SQL Jazyk SQL je: Interaktivní dotazovací jazyk (pro uživatele) Databázový programovací jazyk (začlenění SQL kódu do aplikačních programů) Administrační databázový jazyk (správa databáze) Jazyk aplikací typu klient/server Jazyk pro přístup k datům na Internetu Distribuovaný databázový jazyk (provoz distribuovaných databází) Jazyk pro databázové brány (umožňuje jednomu druhu databázového systému komunikovat s jiným) Popis jazyka SQL - Standardní příkazy dělíme do skupin: - Příkazy pro definici dat DDL - Těmito příkazy se vytvářejí struktury databáze tabulky, indexy, pohledy a další objekty. Vytvořené struktury lze také upravovat, doplňovat a mazat. Tato skupina příkazů se nazývá zkráceně DDL Data Definition Language ( jazyk pro definici dat ). - CREATE vytváření nových objektů. - ALTER změny existujících objektů. - DROP odstraňování objektů. - Příkazy pro manipulaci s daty DML - příkazy pro získání dat z databáze a pro jejich úpravy se označují zkráceně DML (data Manipulation Language) - SELECT vybírá data z databáze - INSERT vkládá do databáze nová data. - UPDATE mění data v databázi (editace). - DELETE odstraňuje data (záznamy) z databáze. - EXPLAIN PLAN FOR speciální příkaz, který zobrazuje postup zpracování SQL příkazu. Pomáhá uživateli optimalizovat příkazy tak, aby byly rychlejší. - Příkazy pro řízení dat DCL - Do této skupiny patří příkazy pro nastavování přístupových práv, řízení provozu a údržby databáze transakcí. Označují se jako DCL Data Control Language ( jazyk pro ovládání dat ), - GRANT příkaz pro přidělení oprávnění uživateli k určitým objektům. - REVOKE příkaz pro odnětí práv uživateli. - ALTER USER - DROP USER - Příkazy pro řízení dat skupina příkazů pro řízení transakcí - Označují se TCC Transaction Control Commands ( jazyk pro ovládání transakcí"). - COMMIT potvrzení transakce. - ROLLBACK zrušení transakce, návrat do původního stavu. - SAVEPOINT - SET TRANSACTION - Ostatní příkazy - Do této skupiny patří příkazy pro správu databáze. Pomocí nich lze nastavovat systémové parametry (kódování znaků, způsob řazení, formáty data a času apod.). Tato skupina není standardizována a konkrétní syntaxe příkazů je závislá na databázovém systému. 3 Datové typy SQL a Oracle Standardní datové typy SQL Číselné datové typy - DECIMAL (<celé číslo1>, <celé číslo2>) Desetinné číslo s celkovým počtem <celé číslo1> číslic a s počtem <celé číslo2> za desetinnou čárkou. Stejný typ je NUMERIC. - FLOAT (<celé číslo>) 6

7 Desetinné číslo s plovoucí desetinnou tečkou. Parametr udává počet platných číslic (max. 38) - REAL (<celé číslo>) Desetinné číslo s plovoucí desetinnou tečkou. Parametr udává počet platných číslic (max. 18) - INTEGER Celé číslo v rozsahu až SMALLINT Celé číslo v rozsahu až Znakové datové typy - CHAR (<celé číslo>) Řetězec znaků pevné délky <celé číslo> znaků. Maximální délka bývá 255 znaků. - VARCHAR (<celé číslo>) Řetězec znaků proměnlivé délky, maximálně <celé číslo> znaků. Maximální délka bývá delší než u typu CHAR. Datové typy pro datum a čas - DATE Vyjádření datumu. - TIME Vyjádření času. - TIMESTAMP Struktura obsahující datum a čas. Datové typy Oracle Číselné datové typy - NUMBER (<celé číslo1>, <celé číslo2>) Desetinné číslo s celkovým počtem <celé číslo1> číslic a s počtem <celé číslo2> číslic za desetinnou čárkou. Příklady: NUMBER - číslo s pohyblivou řádovou čárkou NUMBER(9) - celé číslo s přesností na 9 číslic NUMBER(9,2) - desetinné číslo s pevnou řádovou čárkou s přesností na 9 číslic, z toho 2 za desetinnou čárkou (setiny) NUMBER(7,-2) - desetinné číslo s pevnou řádovou čárkou s přesností na počínaje 2. před desetinnou čárkou (zaokr. na stovky) 7 číslic NUMBER(4,5) - desetinné číslo s pevnou řádovou čárkou s přesností na 4 číslice počínaje 5. za desetinnou čárkou Znakové datové typy - CHAR (<celé číslo>) Řetězec znaků pevné délky <celé číslo> znaků. Maximální délka 2000 znaků, default je 1. - VARCHAR2 (<celé číslo>) Řetězec znaků proměnlivé délky, maximálně <celé číslo> znaků. Maximální délka je 4000 znaků, default je 1. - LONG Řetězec znaků proměnlivé délky, max. 2 GB. Datové typy pro kalendářní a časové hodnoty - datum a čas - datový a časový interval - Vnitřní reprezentace datumu v Oracle je číselná (rozdíl jednoho dne odpovídá 1) - Datum možno sčítat a odčítat. Oba typy se skládají z polí YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR, TIMEZONE_MINUTE - DATE 7

8 Vyjádření konkrétního datumu a času s přesností na sekundy, rozsah je od př.n.l. do TIMESTAMP (<přesnost sekund>) Struktura obsahující datum a čas s požadovanou přesností (až na miliontiny sekundy pro hodnotu parametru <přesnost sekund>=6). - TIMESTAMP WITH TIME ZONE Struktura jako TIMESTAMP doplněná o časový posun oproti UTC - INTERVAL YEAR (<rozsah roků>) TO MONTH K vyjádření delšího časového intervalu. - INTERVAL DAY (<rozsah dní>) TO SECOND (<přesnost sekund>) K vyjádření relativně kratšího časového intervalu. Datové typy pro objemná data - long object block (LOB) - BLOB - binární objekty do 4GB - CLOB textové (CHAR) objekty do 4GB - NCLOB - textové objekty v národních sadách do 4GB Aktuální datum a čas v Oracle Pro zjištění datumu a času můžeme použít několik funkcí SYSDATE vrací aktuální datum a čas jako typ date, Pozor: obvykle se zobrazuje jen datum, ale hodnota obsahuje i čas, pro plné zobrazení je třeba použít konverzní funkci např. SELECT to_char(sysdate, 'DD.MM.YYYY HH24:MI:SS') FROM dual; LOCALTIMESTAMP vrací TIMESTAMP (v lokálním časovém pásmu) SYSTIMESTAMP vrací TIMESTAMP WITH TIME ZONE (s uvedeným časovým posunem systému) CURRENT_TIMESTAMP vrací TIMESTAMP WITH TIME ZONE (dle časového posunu nastaveného pro danou session) SELECT SESSIONTIMEZONE from dual; ALTER SESSION SET TIME_ZONE = '+1:0'; Všechny hodnoty jsou odvezeny dle systémových hodin na dtb. serveru. Práce s typy datum a čas v Oracle Pro zjištění jedné hodnoty z hodnoty typu datum a čas je vhodná funkce EXTRACT. Příklad použití: SELECT EXTRACT(year FROM systimestamp) EY, EXTRACT(month FROM systimestamp) EM, EXTRACT(day FROM systimestamp) ED, EXTRACT(hour FROM systimestamp) EH, EXTRACT(minute FROM systimestamp) EM, EXTRACT(second FROM systimestamp) ES, EXTRACT(timezone_hour FROM systimestamp) TH, EXTRACT(timezone_minute FROM systimestamp) TM, EXTRACT(timezone_region FROM systimestamp) TR, EXTRACT(timezone_abbr FROM systimestamp) TA FROM dual; Posun datumu a času lze povést například takto: SELECT current_timestamp + INTERVAL '10:30' MINUTE TO SECOND FROM dual; SELECT localtimestamp + INTERVAL '1' year(1) FROM dual; 8

9 SELECT sysdate + 1/24 FROM dual; -- výsledek bude o hodinu posunut, nicméně čas není zobrazen SELECT to_char(sysdate + 1/24, 'DD.MM.YYYY HH24:MI:SS') FROM dual; -- v posledním příkladu je pro zobrazení času použita funkce to_char Funkce pro zjištění aktuálního času Next_day(datum, den_v_týdnu) - funkce vrací nové datum představující následující zadaný den v týdnu Last_day(datum) - poslední den v aktuálním měsíci Add_months(datum, n-měsíců) - posune datum o n měsíců Months_between(datum1, datum2) - počet měsíců mezi 2 daty 4 Příkaz Select základní syntaxe, projekce, restrikce, aliasy, setřídění výsledku, klauzule DISTINCT a DISTINCTROW Jak pochopit zápisy syntaxí < par > parametr, za který se dosazuje konkrétní hodnota {A B C} povinná volba jedné z uvedených možností oddělení variant [ ] nepovinná část možnost opakování označení konstant typu řetězec znaků Syntaxe příkazu SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION UNION ALL INTERSECT MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] <seznam výstupních sloupců> =[ALL DISTINCT DISTINCTROW] { * <specifikace sloupce1> [, <specifikace sloupce2> [, ]] } <specifikace sloupce> = { <název sloupce> < specifikace tabulky >. <název sloupce> < specifikace tabulky >. * výraz} [[AS] <pojmenování sloupce> ] < specifikace tabulky > = { <název tabulky> <pojmenování tabulky> <název pohledu> } [<pojmenování tabulky>] DISTINCT - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve vypisovaných sloupcích DISTINCTROW - ve výsledku nebudou duplicitní řádky, které mají stejné hodnoty ve všech sloupcích bez ohledu na to, zda jsou vypisovány ALL ve výsledku budou všechny řádky bez ohledu na duplicity, defaultní nastavení 9

10 Příklad: SELECT * FROM dodavatele WHERE mesto = 'Praha 4'; SELECT dodavatel_id, nazev, zastoupeni FROM dodavatele WHERE dodavatel_id > 4; Řazení řádků ve výsledku SELECT SELECT <seznam výstupních sloupců> FROM <seznam tabulek> [WHERE <podmínka řádku>] [GROUP BY <seznam výrazů seskupení>] [HAVING <podmínka skupiny>] [{UNION UNION ALL INTERSECT MINUS} <příkaz SELECT>] [ORDER BY <seznam kritérií třídění>] <seznam kritérií třídění>= <kritérium třídění 1> [<kritérium třídění 2> [, ]] <kritérium třídění>= {<výraz> <specifikace sloupce> <pořadí sloupce>} } [{ ASC DESC }] Ve výsledku budou řádky seřazeny dle požadavků uvedených za klauzulí ORDER BY: ASC.. Vzestupně DESC.. Sestupně SELECT nazev FROM dodavatelewhere mesto <> 'Ostrava'ORDER BY nazev DESC; SELECT nazev, mesto FROM dodavatele WHERE mesto <> 'Ostrava' ORDER BY 2 ASC,1 DESC; SELECT mesto, zastoupeni FROM dodavatele WHERE nazev <> ' IBM' ORDER BY mesto ASC, zastoupeni DESC ; Aliasy příklad Příklad SQL> SELECT prd.oznaceni AS Vyrobek, dod.nazev Vyrobce FROM Produkty prd, Dodavatele dod WHERE dod.dodavatel_id = prd.dodavatel_id; Vyrobek Vyrobce Asus A600N Asus A2500H Asus A8JN-4P019M Lifebook S2110 Fujitsu Siemens Aliasy kdy se bez nich neobejdeme? Příklad - spojení tabulky s tou samou tabulkou Máme dánu tabulku: Lide (Id, jmeno, prijmeni, narozen, pohlaví, Id_otce, Id_matky) Zjistěte, kolik dětí má matku Boženu Malou? SELECT COUNT(*) AS pocet_deti FROM lide deti JOIN lide rodice ON deti.id_matky=rodice.id WHERE rodice.jmeno LIKE 'Božena' AND rodice.prijmeni LIKE 'Malá'; 10

11 5 Příkazy Insert, Update, Delete Syntaxe příkazu INSERT INSERT INTO <název tabulky> [(<název sloupce1> [, <název sloupce2> [, ] ]) ] {<příkaz SELECT> VALUES [(<výraz1> [, <výraz2> [, ] ]) ] } Nový (jeden) řádek přidáme do tabulky uvedením hodnot pro všechny sloupce v tabulce.více řádků najednou přidáme do tabulky pomocí vnořeného dotazu SELECT. Příklad: INSERT INTO dodavatele (dodavatel_id, nazev, zastoupeni, mesto) VALUES (1, 'Acer','Acer Czech Republic s.r.o.','praha 4'); INSERT INTO dodavatele (dodavatel_id, nazev, zastoupeni, mesto) VALUES (2, 'Asus','ASUS Czech s.r.o.','ostrava'); Syntaxe příkazu UPDATE UPDATE <název tabulky> [<pojmenování tabulky>] SET <název sloupce1> = <výraz1> [, <název sloupce2> = <výraz2> [, ] ] [WHERE <podmínka řádku>] Změna hodnot ve sloupcích u těch řádků tabulky, které splňují podmínku uvedenou za klauzulí WHERE. Pokud není klauzule WHERE uvedena, bude provedena změna u VŠECH řádků tabulky. Příklad: UPDATE dodavatele SET nazev = 'HP' WHERE nazev = 'Compaq'; Syntaxe příkazu DELETE DELETE FROM <název tabulky> [WHERE <podmínka>] Vymazání těch řádků tabulky, které splňují podmínku uvedenou za klauzulí WHERE. Pokud není klauzule WHERE uvedena, budou odstraněny VŠECHNY řádky tabulky. Příklad: DELETE FROM produkty WHERE dodavatel_id = 7 or dodavatel_id > 10; 6 Hodnota NULL, operátory, výrazy, podmínky Hodnota NULL?????? Aritmetické operátory Umožňují na základě původních hodnot vypočítat hodnoty nové. Sčítání + (unární i binární) Odčítání - (unární i binární) Násobení * Dělení / Priorita Nejprve se vyhodnocují části výrazu uzavřené v závorkách Násobení a dělení mají přednost před sčítáním a odečítáním Operátory se stejnou prioritou se vyhodnocují zleva doprava Operátor zřetězení Umožňuje spojovat hodnoty ze sloupců a znakové řetězce 11

12 Zřetězení Příklad SELECT nazev, mesto ' ' zastoupeni AS pobocka FROM dodavatele; Operátory pro porovnávání = rovnost <> nerovnost < menší než > větší než <= menší nebo rovno >= větší nebo rovno [NOT] BETWEEN x AND y [není] větší nebo rovno x a menší nebo rovno y [NOT] IN [ne] patří do množiny ANY, SOME porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =, <,>, <=, >=. Výraz je pravdivý, pokud je pravdivý alespoň pro JEDNU položku seznamu. ALL porovnání hodnoty s každou hodnotou v seznamu nebo řádkem vnořeného dotazu, musí být doplněn jedním z operátorů =, <,>, <=, >=. Výraz je pravdivý, pokud je pravdivý pro VŠECHNY položky seznamu. [NOT] EXISTS ve vnořeném dotazu je vrácen alespoň jeden řádek IS [NOT] NULL test na [ne] rovnost NULL X [NOT] LIKE y porovnání řetězce s maskou obsahující zástupné znaky _ právě jeden libovolný znak % nula nebo více libovolných znaků Příklady SELECT oznaceni FROM produkty WHERE cena BETWEEN AND SELECT Produkty.oznaceni FROM Produkty, Dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND dodavatel.nazev IN ( UMAX, Asus ) SELECT oznaceni FROM produkty WHERE cena = ANY (20000, 30000, 25000, 35000) SELECT oznaceni FROM produkty WHERE cena>= ALL (SELECT cena FROM produkty) SELECT. LIKE LIKE umožňuje využití zástupných znaků při definici podmínek za WHERE v SQL příkazech jako select, insert, update, delete. % nahrazuje libovolný řetězec libovolné délky (i nulové délky) _ nahrazuje libovolný jeden znak Příklady: SELECT * FROM dodavatele WHERE mesto LIKE '%ra%'; SELECT * FROM dodavatele WHERE mesto NOT LIKE 'Pha%'; SELECT * FROM produkty WHERE oznaceni LIKE 'TravelMate 2 0'; SELECT oznaceni FROM produkty WHERE EXISTS (SELECT * FROM dodavatele WHERE dodavatele.dodavatel_id = produkty.dodavatel_id); SELECT nazev FROM dodavatele WHERE zastoupeni IS NULL; 12

13 SELECT nazev, oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id AND oznaceni LIKE 'VAIO%'; Logické operátory AND - a zároveň (vrací ANO, pokud oba operandy jsou zároveň ANO) OR nebo (vrací ANO, pokud alespoň jeden operand je ANO) NOT - není pravda, že (vrací ANO, když následující operand je NE) Výrazy Výraz je skupina konstant, proměnných a funkcí spojených pomocí operátorů. Výsledkem je hodnota. Datový typ je odvozen z datových typů jednotlivých prvků ve výrazu. Automatická konverze datových typů (například znaky na číslo při sčítání atd.) Základními kameny výrazů jsou Názvy sloupců Textové konstanty Číselné konstanty Výsledky funkcí Hodnota NULL Uzavření do závorek Unární (+/-) a binární operátory Vnořené dotazy (SELECT.) 7 Vnitřní a vnější spojení tabulek Druhy spojení (všeobecné) spojení (join): spojení založené na libovolném typu vztahu mezi hodnotami propojovacích položek ekvivalentní spojení (equi-join): spojení založené na shodě hodnot v propojovacích položkách spojení nerovností (non-equi-join): spojení založené na nerovnosti hodnot v propojovacích položkách Příklad spojení nerovností: Seznam čtenářů knihovny a seznam měst, v nichž tito čtenáři nebydlí (spojovací položkou je kód města) vnitřní spojení (inner join, exkluzívní spojení): spojení, v němž jsou záznamy ze dvou tabulek kombinovány a přidávány k výsledkům dotazu pouze tehdy, když k záznamům z první tabulky existují odpovídající záznamy v tabulce druhé vnější spojení (outer join, inkluzívní spojení): spojení, kdy je každý odpovídající záznam ze dvou tabulek kombinován do jednoho záznamu ve výsledku dotazu. Není-li k záznamu z tabulky, která poskytuje všechny své záznamy, nalezen odpovídající záznam ve druhé tabulce, je přesto zahrnut do výsledků dotazu s prázdnými poli v místech, kde nebyl nalezen odpovídající záznam ve druhé tabulce. samospojení (self join, recursive join): spojení, v němž jsou záznamy z tabulky kombinovány s jinými záznamy z téže tabulky Spojení tabulek syntaxe SELECT 13

14 Varianta 1 vnitřní spojení <seznam tabulek> =[ < specifikace tabulky1> [, <specifikace tabulky2> [, ]] } Sloupce, přes které se realizuje spojení se uvádějí v podmínce za klíčovým slovem WHERE <podmínky spojení>. Příklady SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele, produkty WHERE dodavatele.dodavatel_id = produkty.dodavatel_id; Varianta 2 základní syntaxe pro vnitřní spojení <seznam tabulek> = < specifikace tabulky1> JOIN < specifikace tabulky2> ON < podmínky spojení> [ JOIN < specifikace tabulky3> ON < podmínky spojení> [, ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Vnitřní spojení INNER INNER JOIN, JOIN Do výsledku budou zahrnuty pouze ty řádky, pro které byla nalezena odpovídající hodnota v druhé tabulce. Vnější spojení OUTER Ve výsledku budou i ty řádky, pro které nebyly nalezeny odpovídající hodnoty v druhé tabulce. - Pravé (RIGHT JOIN).. Ve výsledku budou všechny řádky z pravé (druhé tabulky). Nebyl-li nalezen odpovídající řádek v levé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z první tabulky. - Levé (LEFT JOIN).. Ve výsledku budou všechny řádky z levé (první tabulky). Nebyl-li nalezen odpovídající řádek v pravé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích z druhé tabulky. - Úplné (FULL JOIN).. Ve výsledku budou všechny řádky z levé i pravé (první i druhé tabulky). Nebyl-li nalezen odpovídající řádek v pravé tabulce, budou ve výsledku hodnoty NULL ve všech sloupcích, pro něž nebyly nalezeny odpovídající hodnoty ve spojované tabulce. Varianta 3 obecný zápis syntaxe pro různé druhy spojení <seznam tabulek> = < specifikace tabulky1> [ { INNER { LEFT RIGHT FULL } [OUTER] }] JOIN < specifikace tabulky2> ON < podmínky spojení> [ { INNER { LEFT RIGHT FULL } [OUTER] }] JOIN < specifikace tabulky3> ON < podmínky spojení> [, ] ] ] Příklad SELECT dodavatele.nazev, produkty.oznaceni FROM dodavatele JOIN produkty ON dodavatele.dodavatel_id = produkty.dodavatel_id; Spojení tabulek Příklad - úplné vnější spojení SQL> SELECT Produkty.produkt_id, Dodavatele.Nazev FROM Produkty FULL OUTER JOIN Dodavatele ON dodavatele.dodavatel_id = produkty.dodavatel_id; Příklady využití vnějších spojení: - Zobrazení všech dodavatelů, tedy i těch, kteří nedodávají žádný výrobek - Zobrazení všech výrobků, tedy i těch, které nejsou přiřazeny žádnému dodavateli - S využitím agregačních funkcí zobrazení počtu výrobků, které dodávají jednotliví dodavatelé (s vnějším spojením se zobrazí i hodnoty 0 u těch dodavatelů, kteří žádný výrobek nedodávají, v případě vnitřního spojení ve výsledku nebudou vůbec zahnuti) 14

15 8 Souhrnné a skupinové dotazy, agregační funkce Souhrnné dotazy syntaxe SELECT Velice často nás nezajímají jednotlivé detaily uložené v konkrétních řádcích v jednotlivých tabulkách, ale několik málo souhrnných informací, které sumarizují obsah databáze, například: - Kolik zaměstnanců má společnost? - Jaké jsou tržby jednotlivých poboček společnosti? - Kolik lidí jede průměrně v jednom vlaku? - Jaká je průměrná délka života? - Jaká je průměrná mzda? - Kolik vstupenek se prodalo na jednotlivá utkání? - Jaká je nejvyšší a nejnižší vyplácená sociální dálka? - Kdo získal nejméně bodů z testu? Agregační funkce pracují nad množinou řádků, přičemž vrací právě jeden výsledek pro celou vstupní množinu dat. Tyto funkce pomocí matematických a statistických operací zpracovávají agregované hodnoty z celých sloupců (není-li uvedeno jinak v podmínce). - AVG ([DISTINCT] [ALL] výraz)aritmetický průměr - COUNT ([DISTINCT] [ALL] výraz) počet hodnot - MAX (výraz) maximum - MIN (výraz) minimum - SUM ([DISTINCT] [ALL] výraz) součet hodnot Sloupcové funkce tedy ignorují hodnoty NULL!!! 9 Vnořené dotazy, množinové operátory Vnořené dotazy Vnořené dotazy (poddotazy) se mohou vyskytovat prakticky na libovolném místě hlavního dotazu. Výsledkem vnořeného dotazu je obecně virtuálního tabulka o několika řádcích a několika sloupcích (v určitých případech pak jednosloupcová či jednořádková) nebo jen jedna jediná hodnota. a) Vnořený dotaz v klauzuli FROM nebo JOIN s výsledkem poddotazu se pracuje stejně jako při spojení s tabulkou či pohledem, výsledek poddotazu je v tomto případě vhodné označit aliasem b) Vnořený dotaz vracející jednu hodnotu v části WHERE např. výsledek agregační funkce (SUM, COUNT, MIN, MAX, AVG) se porovnává s hodnotou v určitém sloupci tabulky (nebo je vnořeným dotazem vyhledána hodnota v určitém sloupci, kdy řádek tabulky je identifikován pomocí primárního klíče) c) Použití vnořeného dotazu v části WHERE s využitím množinových operátorů IN, ANY, SOME, ALL d) Využití výsledků vnořeného dotazu pomocí operací UNION, INTERSECT, MINUS, e) Použití vnořeného dotazu v části definice výstupních sloupců dotazu, kde se prostřednictvím vnořeného dotazu doplňují hodnoty na základě ostatních hodnot v daném řádku SELECT (select c1 from t1 b where a.c1 = b.c1), c2 FROM t1 a WHERE <condition> 15

16 Jednořádkové jednosloupcové vnořené dotazy vrací jen jednu hodnotu Jednořádkové vícesloupcové vnořené dotazy vrací jen jeden řádek, ale více sloupců (například jeden řádek tabulky nebo výsledek souhrnného dotazu) Víceřádkové jednosloupcové vnořené dotazy vrací více řádků, ale jen jediný sloupec (například seznam všech různých hodnot v konkrétním sloupci) Vícesloupcové víceřádkové vnořené dotazy, výsledkem je tabulka s více sloupci a více řádky (obecný stav) Vnořené dotazy musí být zapsány v závorkách (..). Nejdříve se provede vnořený dotaz a teprve nad jeho výsledky se aplikuje hlavní dotaz.vnořený dotaz může být umístěn do hlavního dotazu například: za klauzuli FROM za klauzuli WHERE za klauzuli HAVING případně v dalších částech (i v části bezprostředně za SELECT) 10 Funkce jazyka SQL. Práce s datovým typem DATE Funkce Funkce jsou programové bloky, které provádějí požadované operace například s číselnými, znakovými či datovými hodnotami. Obecně můžeme FUNKCE rozdělit na: a) Jednořádkové funkce Funkce pro práci se znakovými řetězci Konverzní funkce Matematické funkce Funkce pro práci s datovými a časovými hodnotami Pokročilé funkce Funkce pro ošetření chyb Ostatní funkce b) Agregační funkce Funkce pro práci s řetězci - Upper(řet) - konverze na velká písmena - Lower(řet) - konverze na malá písmena - Initcap(řet) - převede první písmeno každého slova na velké - Lpad(řet1, délka, řet2) - doplnění řet1 zleva na požadovanou délku řet2 - Rpad(řet1, délka, řet2) - doplnění řet1 zprava na požadovanou délku řet2 - Concat(řet1, řet2) - spojení řetězců - Length(řet) - vrací délku řetězce - Substr(řet, pozice, délka) - výběr podmnožiny znaků z řet od pozice dané délky - Chr(n) - znak odpovídající danému číslu - Trim - odstraní zadané znaky zleva (případně zprava) řetězce - Ltrim(řet1 [, řet2]) - odstraní z levé části řetězce1 všechny znaky, které obsahuje řětězec2 - Rtrim(řet1 [, řet2]) - odstraní z pravé části řetězce1 všechny znaky, které obsahuje řětězec2 - Translate(řet1, řet2 [, řet3]) - nahradí všechny výskyty každého znaku z druhého parametru v řet1 odpovídajícím znakem z řet3 - Replace(řet1, řet2 [, řet3]) - nahradí všechny výskyty řet2 v řet1 řet3 Matematické funkce a) Goniometrické funkce - Sin(n), Cos(n), Tan(n), kde n je v radiánech b) Inverzní goniometrické funkce - Asin(n), Acos(n), Atan(n) 16

17 c) Hyperbolické funkce - Sinh(n), Cosh(n), Tanh(n) d) Logaritmické a exponenciální funkce - Log(základ, n), Ln(n), Exp(n) e) Funkce pro úpravu a zaokrouhlování Abs(n) absolutní hodnota, Sign(n) informuje o znaménku čísla, Round(n, [m]) zaokrouhlení na požadovaný počet desetinných míst, Trunc(n, [m]) oříznutí čísla na požadovaný počet desetinných míst, Floor(n) největší celé číslo menší nebo rovno n, Ceil(n) nejmenší celé číslo větší nebo rovno n, f) Ostatní matematické funkce Power(m, n) n-tá mocnina čísla m, Sqrt(m) druhá odmocnina čísla m, Mod(dělenec, dělitel) zbytek po dělení, Bitand(m, n) bitový součin Agregační funkce aritmetický průměr AVG ([DISTINCT] [ALL] výraz) počet hodnot COUNT ([DISTINCT] [ALL] výraz) maximum MAX (výraz) minimum MIN (výraz) součet hodnot SUM ([DISTINCT] [ALL] výraz) Konverzní funkce - Bin_To_Num(posloupnost 0 a 1 oddělená čárkami) - převod binárního čísla na číslo desítkové soustavy - To_Char(řet) - převádí řetězec do standardní znakové sady - To_Char(number [, formátovací_řetězec, nsl_par]) - převádí datový typ NUMBER na typ VARCHAR2 - To_Char(datetime [, formátovací_řetězec, nsl_par]) - převádí datové typy na typ VARCHAR2 - To_Date(řet, formátovací_řetězec [, nsl_par])- převádí textové datové typy na datový typ DATE - To_Number(řet, formátovací_řetězec [, nsl_par]) - převádí datový typ VARCHAR2 na číselný typ NUMBER nsl_par parametr určující národní formát pro zápis data a času, čísel.. Parametry formátovacího řetězce funkce TO_CHAR pro práci s datumem a časem YYYY 4-číslicový formát roku YYY, YY, Y Poslední 3, 2 nebo 1 číslice roku Q Čtvrtletí (1, 2, 3, 4) MM Měsíc (01-12; JAN = 01) MON Měsíc vyjádřený 3 znaky MONTH Měsíc celým názvem velkými písmeny RM Měsíc vyjádřený římskými číslicemi (I-XII; JAN = I) WW Týden v roce (1-53) W Týden v rámci měsíce (1-5) D Den v týdnu (1-7) DAY Den v týdnu vyjádřený slovně velkými písmeny DD Den v měsíci (1-31) DDD Den v roce (1-366) DY Den v týdnu vyjádřený pomocí zkratky názvu dne HH Hodina (1-12) HH12 Hodina vyjádřená ve 12-hodinovém formátu (1-12) HH24 Hodina vyjádřená ve 24-hodinovém formátu (0-23) MI Minuta (0-59) SS Sekunda (0-59) SSSSS Sekundy od půlnoci ( ) 17

18 Konverzní funkce TO_CHAR Příklady pro práci s datem a časem: to_char(sysdate, 'yyyy/mm/dd'); '2003/07/09' to_char(sysdate, 'Month DD, YYYY'); Říjen 16, 2006' to_char(sysdate, 'Month DD, YYYY', 'NLS_DATE_LANGUAGE=American') October 16, 2006 to_char(sysdate, 'Month DD, YYYY', 'NLS_DATE_LANGUAGE=Czech') Říjen 16, 2006 Parametry formátovacího řetězce funkce TO_CHAR pro práci s čísly 9 Symbol pro číslo se stanoveným počtem číslic (je-li číslo kratší, je doplněno mezerami a před záporným je znak mínus) 0 Číslo je na začátku nebo konci doplněné nulami $ Na začátku čísla je znak $ B Symbol zabrání vypsání čísla, pokud je jeho hodnota nula D Symbol pro určení oddělovače desetinných číslic G Symbol pro určení oddělovače tisíců L Symbol pro určení lokálního symbolu měny, Na příslušné pozici je čárka. Na příslušné pozici je tečka V číslo je zobrazené v exponenciálním formátu RN číslo je zobrazené velkými římskými číslicemi (do 3999) FM číslo je zobrazené bez úvodních mezer EEEE číslo ve vědeckém formátu Konverzní funkce TO_CHAR Příklady pro práci s čísly: to_char( , '9999.9') to_char( , '9,999.99') to_char( , '$9, ') to_char(21, '000099') '1210.7' '1,210.73' '$1, ' '000021' Funkce zaokrouhlování data a času Round(datum, zaokrouhlení) zaokrouhlení data datum původní datum zaokrouhlení YEAR na celé roky MONTH na celé měsíce DDD na celé dny DAY první den v týdnu HH na celé hodiny MI na celé minuty Trunc(datum, část) ořezání data (parametry stejné jako u Round) Extract(část FROM datum) vrací požadovanou část z data (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) 11 Fáze návrhu databáze, E-R diagramy Fáze návrhu databáze 18

19 V první fázi se prostřednictvím konzultací s uživateli a zadavateli systému formulují a shromažďují přesné požadavky na to, co vše má být v databázi uloženo. Z takto získaných informací se vytvoří konceptuální model, který je výsledkem první fáze. Konceptuální datový model popisuje data na abstraktní úrovni nezávisle na jejich fyzickém uložení. Proces tvorby konceptuálního modelu se nazývá konceptuální modelování. Jeho výsledkem je konceptuální model znázorněný jako konceptuální schéma nebo diagram, který má co nejvýstižněji zachycovat pohled člověka na danou část reálného světa. Mezi nejznámější konceptuální datové modely patří E-R model. Při tvorbě konceptuálního datového modelu je nutné zajistit formulaci úkolů a cílů úkolů. Formulace úkolu určuje, k čemu má databáze sloužit (účel). Cíle úkolu jsou tvrzení, která reprezentují obecné úkony, které uživatel může s daty v databázi provádět. Z tohoto důvodu je důležité, aby se kromě manažerů zadavatele podíleli na definování cílů úkolu i koncoví uživatelé, neboť ti budou výsledek naší práce používat. ER modelování lze metodologicky rozdělit do dvou kroků: v prvním kroku se definují nezávislé entity, vztahy a závislé entity, to se opakuje do té doby, než se dospěje k souhlasu mezi zadavateli a analytiky; v druhém kroku se formulují atributy a klíče entit klíčů může být v tomto stádiu i více. E-R diagram ER diagram byl zaveden a poprvé použit Peterem Chenem v roce Brzy došlo k jeho rozšíření a stal se obecně uznávaným standardem. Diagram obsahuje typy entit a typy vztahů. Entita představuje nezávisle existující objekt reálného světa. Vztah je vazba mezi dvěma nebo více entitami. Atribut je funkce přiřazující entitám či vztahům hodnotu, určuje vlastnost entity nebo vztahu. Příklad ER diagramu 19

20 ER diagram Chenův styl ER diagram inženýrský styl ER diagram zjednodušený styl Pojmy z relací Identifikující relace je taková, kdy cizí klíč je součástí primárního klíče závislé (dceřiné) entity, znázorňují se obvykle plnou čarou. Neidentifikující relace je taková, kdy cizí klíč je neklíčovým atributem závislé (dceřiné) entity, znázorňují se obvykle čárkovanou čarou. Závislé entity Závislé entity jsou takové, jejichž existence je závislá na jedné nebo více jiných entit (např. entita řádek faktury je závislá na entitách výrobek a faktura) Toto je důležité při fyzickém návrhu, kdy je třeba ošetřit situace, kdy má být odstraněn určitý výrobek nebo faktura. 20

21 Příklad závislé entity, identifikujících a neidentifikujících relací Entita učí je závislou entitou, obě relace k ní vedoucí jsou identifikující Kardinalita vztahu Vztah 1:1 Vztah 1:N Vztah M:N Unární vztahy - Tabulka je spojena sama se sebou - Příkladem takového stavu je model Zaměstnanec - Nadřízený (nadřízený je také jedním ze zaměstnanců a může mít dalšího nadřízeného) - V tomto případě tabulka obsahuje primární klíč i cizí klíč, který se odkazuje na tabulku samou - Uvedený příklad demonstruje obrázek níže Parcialita vztahu Parcialita vyjadřuje povinnost či nepovinnost existence ve vztahu. Vztah jednostranně parciální znamená, že například zaměstnanec musí náležet k jedné pojišťovně, pojišťovna však nemusí mít v evidenci ani jednoho zaměstnance (ale může jich mít i více). Vztah oboustranně parciální vyjadřuje, že zaměstnanec nemusí náležet k žádné (může náležet k jediné) zdravotní pojišťovně a zdravotní pojišťovna nemusí mít v evidenci ani jednoho zaměstnance. 12 Normální formy, normalizace tabulek, dekompozice Normální formy tabulek se používají pro lepší (systematické) návrhy databázových systémů pro efektivní ukládání dat a minimalizace redundancí při zachování integrity a konzistence dat. Obecně platí, že čím je tabulka ve vyšší normální formě, tím kvalitněji je tabulka navržena. Normalizace je postupná dekompozice tabulek do vhodnějšího tvaru, tak aby: - byla zachována bezztrátovost při zpětném spojení, - byly zachovány závislosti, 21

22 - bylo odstraněno opakování informací (tzv. redundance). 0.NF (nultá normální forma): Tabulka je v nulté normální formě právě tehdy, existuje-li alespoň jedno pole, které obsahuje více než jednu hodnotu. 1.NF (první normální forma): Tabulka je v první normální formě, jestliže lze do každého pole dosadit pouze jednoduchý datový typ (atributy jsou dále nedělitelné, tzv. atomické a tentýž atribut se neopakuje ve stejné tabulce). 2.NF (druhá normální forma): Tabulka je ve druhé normální formě, jestliže je v první NF a navíc platí, že existuje klíč a všechna neklíčová pole jsou funkcí celého klíče (a tedy ne jen jeho částí). 3.NF (třetí normální forma): Tabulka je ve třetí normální formě, jestliže každý neklíčový atribut není transitivně závislý na žádném klíči schématu neboli, je-li ve druhé normální formě a zároveň neexistuje jediná závislost neklíčových sloupců tabulky. BCNF (Boyce-Coddova normální forma): Tabulka je v Boyce-Coddově normální formě, jestliže pro každou netriviální závislost X-->Y platí, že X obsahuje klíč schématu R. 4.NF (čtvrtá normální forma): Tabulka je ve čtvrté normální formě, je-li ve třetí a popisuje pouze příčinnou souvislost (jeden fakt). 5.NF (pátá normální forma): Tabulka je v páté normální formě, pokud je ve čtvrté a není možné do ní přidat nový sloupec (skupinu sloupců) tak, aby se vlivem skrytých závislostí rozpadla na několik dílčích tabulek. Normální formy - BCNF BCNF (Boyce-Coddova normální forma): Tabulka je v Boyce-Coddově normální formě, jestliže pro každou netriviální závislost X-->Y platí, že X obsahuje klíč schématu R. V tabulce může existovat několik kandidátních klíčů, kandidátní klíče mohou být složené, 3.NF připouští tranzitivní závislosti mezi klíčovými atributy, kandidátní klíče se mohou překrývat. Pojem normálních forem se používá ve spojitosti s dobře navrženými tabulkami. Správně vytvořené tabulky splňují 4 základní normální formy. 0. normální forma (nultá normální forma): Tabulka je v nulté normální formě právě tehdy, existuje-li alespoň jedno pole, které obsahuje více než jednu hodnotu. 1. normální forma (1NF) První, nejjednodušší, normální forma (značíme 1NF) říká, že všechny atributy jsou atomické, tj. dále již nedělitelné (jinými slovy, hodnotou nesmí být relace). Mějme např. tabulku ADRESA, která bude mít sloupce JMÉNO, PŘÍJMENÍ a BYDLIŠTĚ. Naplnění tabulky nechť odpovídá reálnému světu: JMÉNO PŘÍJMENÍ BYDLIŠTĚ 22

23 jan novák Ostravská 16, Praha petr nový Svitavská 8, Brno jan nováček Na bradlech 1147, Ostrava Pokud bychom v této tabulce chtěli vypsat všechny pracovníky, jejichž PSČ je rovno určité hodnotě, dostali bychom se do potíží, neboť bychom to nemohli zjistit přímo a jednoduše. A to proto, že atribut BYDLIŠTĚ není atomický, skládá se z několika částí: ULICE, ČÍSLO, MĚSTO a PSČ. Správný návrh tabulky, který bude respektovat 1NF bude vypadat následovně: JMÉNO PŘÍJMENÍ ULICE ČÍSLO MĚSTO PSČ jan novák Ostravská 16 Praha petr nový Svitavská 8 Brno jan nováček Na bradlech 1147 Ostrava Obecně bychom se měli snažit, aby obsahem jedné databázové položky byla právě jedna hodnota (určitého databázového typu). 2. normální forma (2NF) Tabulka splňuje 2NF, právě když splňuje 1NF a navíc každý atribut, který není primárním klíčem je na primárním klíči úplně závislý. To znamená, že se nesmí v řádku tabulky objevit položka, která by byla závislá jen na části primárního klíče. Z definice vyplývá, že problém 2NF se týká jenom tabulek, kde volíme za primární klíč více položek než jednu. Jinými slovy, pokud má tabulka jako primární klíč jenom jeden sloupec, pak 2NF je splněna triviálně. Nechť máme tabulku PRACOVNÍK, která bude vypadat následovně (atribut ČÍS_PRAC značí číslo pracoviště, kde daný pracovník pracuje, atribut NÁZEV_PRAC uvádí jméno daného pracoviště): ČÍSLO JMÉNO PŘÍJMENÍ ČÍS_PRAC NÁZEV_PRAC 1 jan novák 10 studovna 2 petr nový 15 centrála 3 jan nováček 10 studovna Jaký primární klíč zvolíme v této tabulce? Pokud zvolíme pouze ČÍSLO, je to špatně, neboť zcela určitě název pracoviště, kde zaměstnanec pracuje, není závislý na číslu pracovníka. Takže za primární klíč musíme vzít dvojici (ČÍSLO,ČIS_PRAC). Tím nám ovšem vznikl nový problém. Položky JMÉNO, PŘÍJMENÍ a NÁZEV_PRAC nejsou úplně závislé na dvojici zvoleného primární klíče. Ať tedy děláme, co děláme, nejsme schopni vybrat takový primární klíč, aby tabulka splňovala 2NF. Jak z tohoto problému ven? Obecně převedení do tabulky, která již bude splňovat 2NF, znamená rozpad na dvě a více tabulek, kde každá už bude splňovat 2NF. Takovému "rozpadu" na více tabulek se odborně říká dekompozice relačního schématu. Správně navržené tabulky splňující 2NF budou vypadat následovně (tabulka PRACOVNÍK a PRACOVIŠTĚ): ČÍSLO JMÉNO PŘÍJMENÍ ČIS_PRAC 1 jan novák 10 2 petr nový 15 3 jan nováček 10 ČÍSLO NÁZEV 10 studovna 15 centrála Dále si všimněte, že pokud tabulka nesplňuje 2NF, dochází často k redundanci. Konkrétně v původní tabulce informace, že pracoviště číslo 10 se jmenuje "studovna", byla obsažena celkem dvakrát. Redundance je jev, který obvykle nesplnění 2NF doprovází. O tom, že redundance je nežádoucí, netřeba pochybovat. Zkuste si rozmyslet, jak byste postupovali v obou příkladech, kdyby ve vaší společnosti došlo ke změně názvu pracoviště číslo 10 ze "studovna" na "klubovna". 3. normální forma (3NF) Relační tabulky splňují třetí normální formu (3NF), jestliže splňují 2NF a žádný atribut, který není primárním 23

24 klíčem, není tranzitivně závislý na žádném klíči. Nejlépe to opět vysvětlí následující příklad. Mějme tabulku PLATY, která bude vypadat takto: ČÍSLO JMÉNO PŘÍJMENÍ FUNKCE PLAT 1 jan novák technik petr nový vedoucí jan nováček správce Pomineme zatím fakt, že tato tabulka nesplňuje ani 2NF, což je základní předpoklad pro 3NF. Chci zde jen vysvětlit pojem tranzitivní závislost. Nebudeme přemýšlet, co je primární klíč, na první pohled vidíme, že konkrétně atributy JMÉNO, PŘÍJMENÍ a FUNKCE závisí na atributu ČÍSLO (ten by nejspíš byl primárním klíčem). Dále můžeme vidět, že atribut PLAT zřejmě je funkčně závislý na atributu FUNKCE a pokud vezmeme v úvahu, že ČÍSLO->FUNKCE a FUNKCE->PLAT, dostaneme díky jevu nazývanému tranzitivita, že ČÍSLO->PLAT. Postup, jak dostat tabulky do 3NF, je podobný jako v případě 2NF, tj. opět provedeme dekompozici (tabulka FUNKCE a PLATY): ČÍSLO JMÉNO PŘÍJMENÍ FUNKCE 1 jan novák technik 2 petr nový vedoucí 3 jan nováček správce FUNKCE PLAT technik vedoucí správce Z hlediska základních tří normálních forem, jsou tyto dvě tabulky již v pořádku. Z praktického hlediska je vhodnější použít nějaký číselník funkcí, abychom splnili podmínku, že primární klíč v tabulkách má být co nejkratší délky. Nejlepší zápis je tedy následující: ČÍSLO JMÉNO PŘÍJMENÍ CIS_FUN 1 jan novák petr nový jan nováček 127 ČÍSLO FUNKCE PLAT 121 technik vedoucí správce Vytváření tabulek, integritní omezení, primární a cizí klíče Kandidátní klíč jednoznačně identifikuje řádek v tabulce atribut (případně množina atributů) se nazývá kandidátním klíčem, když má tyto dvě časově nezávislé vlastnosti: - Jednoznačnost identifikace řádku - Minimalita (žádný atribut ve množině atributů není nadbytečný) každá tabulka má alespoň jeden kandidátní klíč, atribut, který je součástí kandidátního klíče se nazývá klíčový, je třeba skutečně ověřit, zda navržený kandidátní klíč bude skutečně jednoznačnou identifikací (po celou dobu životnosti dané aplikace, rostoucího počtu řádků tabulky)i některé na první pohled jednoznačně vypadající 24

25 identifikátory mohou v praxi být nejednoznačné (například číslo vlaku na železnici, existují i duplicity rodných čísel). Primární klíč (Primary key, PK) jeden z kandidátních klíčů (vybraný), zbývající kandidátní klíče se nazývají alternativní (někdy také sekundární). způsob výběru primárního klíče není v relačním modelu specifikován, nicméně je třeba přihlížet k paměťovým a časovým nárokům při práci s klíčovými atributy primární klíč je základním prostředkem adresace n-tic v relačním modelu Cizí klíč (Foreign key, FK) atribut se nazývá cizím klíčem, právě když splňuje tyto časově nezávislé vlastnosti: každá hodnota FK je buď plně zadaná nebo plně nezadaná (NULL), existuje tabulka T1 s primárním klíčem PK takovým, že každá zadaná hodnota FK je identická s hodnotou PK jediného řádku tabulky T1. Pravidlo referenční integrity: DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče, v praxi systém buď přímo podporuje cizí klíče nebo je nepodporuje a aplikace si referenční integritu musí kontrolovat sama. Integrita dat Integrita dat = fakt, že data věrně (tj. přesně a konzistentně) zobrazují reálný stav, který popisují. Základním předpokladem je kvalitně navržená datová základna, která omezí duplicity dat (ty jsou vždy vysokým rizikem pro vznik nekonzistencí). tualizace dat Důvody vzniků nekonzistencí data se stávají neaktuálními tj. nelze přidat/zrušit řádek nebo jej aktualizovat vložení nesprávných hodnot Vložená data neodpovídají realitě a tím znehodnocují celkovou informační hodnotu referenční integrita Při rušení řádku v jedné tabulce může nastat situace, kdy v jiné tabulce zůstanou informace, které se k tomuto řádku vztahují (odkazují) Zajištění integrity dat Integrita dat se zajišťuje vytvářením omezení. Omezení objekt v relační databázi, který klade určitá pravidla na vkládaná data do určitého sloupce tabulky. Integritní omezení může být definováno nad jedním nebo více sloupci.nad jedním sloupcem/sloupci může být definováno více integritních omezení. Pro každý sloupec je tedy nezbytné definovat seznam omezení která dovolí, aby mohla být zadávána data - pouze určitých typů (např. číselná) - pouze určitých délek (např. 12 znaků) - pouze určitých hodnot (výčet hodnot, interval, ) - jedinečná v rámci tabulky - odkazující na jinou tabulku - uvedená Realizace omezení 1) Volba správného datového typu sloupce řeší omezení - pouze určitých typů (např. číselná) - pouze určitých délek (např. 12 znaků) 2) Kontrola vztahů s jinou tabulkou se řeší použitím cizích klíčů (FOREIGN KEY), které se odkazují na primární sloupec v odkazované tabulce 3) Kontrola jedinečnosti UNIQUE 25

26 4) Kontrola uvedení dat NOT NULL 5) Jednoznačná identifikace řádku v tabulce pomocí primárního klíče PRIMARY KEY tj. omezení UNIQUE a NOT NULL současně 6) Kontrola vkládaných hodnot klauzulí CHECK 7) Integrita s využitím triggerů Správa omezení Realizace omezení - Při vytváření tabulky příkazem CREATE TABLE - úpravou struktury tabulky příkazem ALTER TABLE Nutno dodržet správné pořadí, tj. například před použitím cizího klíče musí být definován primární klíč v tabulce, na níž se odkazuje. Totéž platí pro příkazy DROP TABLE a podobně. Stejný typ se týká i dat nejdříve musí existovat řádek v tabulce rodičů a teprve poté je možné vložit/upravit řádek v tabulce potomků. 14 Pohledy a jejich význam, sekvence Pohledy umožní přístup jen k některým sloupcům tabulek možnost omezit přístupné řádky možnost skrýt skutečnou strukturu tabulek Pohled je předpis pro získání podmnožiny dat z jedné či více tabulek. Pohled obsahuje JEN předpis, NIKOLI data. S pohledy se pracuje obdobně jako s vlastními tabulkami. Určitá omezení souvisí například se změnou dat. a) Jednoduché pohledy - vytvořeny z dat jediné tabulky, - neobsahují řádné funkce ani skupiny, - můžeme v nich provádět i změny (nezakážeme-li to) a) Komplexní pohledy - jsou vytvořeny z dat z více databázových tabulek, - mohou obsahovat funkce nebo skupiny, - změnu dat umožňují jen ve velmi omezených případech Pohledy syntaxe CREATE [OR REPLACE] VIEW název_pohledu [alias] AS vnořený_dotaz [seznam_omezení]; Příklady omezení: WITH READ ONLY nelze vkládat, mazat ani měnit záznamy, WITH CHECK OPTION upravované či vkládané záznamy musí vyhovovat podmínce uvedené v klausuli WHERE vnořeného dotazu. DROP VIEW název_pohledu; Pohledy příklady 1 CREATE VIEW Pracovnici_pobocky AS SELECT Jmeno, Funkce, Pobocka FROM Pracovnici WITH READ ONLY ; Použití: SELECT * FROM Pracovnici_pobocky; 26

27 Pohledy - význam 1) Zjednodušení konstrukce náročných dotazů, 2) Opakované využití vytvořeného pohledu na standardní použití (minimalizace chyb, zrychlení práce, případné změny ovlivní například jen pohled), 3) Bezpečnost mohu definovat odlišná práva pro přístup k tabulce a pohledům (například omezení přístupu k citlivým informacím). Sekvence - umožňují generovat jedinečné identifikátory, například hodnoty primárního klíče tabulek, - databázová platforma Oracle používají tzv. sekvence, (v MySQL je např. volba autoincrement pro vybraný sloupec tabulky) - při použití sekvence například pro generování primárního klíče je dobré si uvědomit, zda sekvenčně zvolený klíč je správné řešení (někdy je vhodné použít již existující primární klíče např. z evidence obyvatel atd.). Syntaxe příkazu CREATE SEQUENCE CREATE SEQUENCE <název sekvence> [START WITH <číslo> ] [INCREMENT BY <číslo> ] [MAXVALUE <číslo> ] [MINVALUE <číslo> ] [CYCLE NOCYCLE ] [CACHE <číslo> NOCACHE ] START WITH počáteční hodnota generátoru, výchozí 1 INCREMENT BY interval mezi dvěma za sebou generovanými čísly, výchozí 1 CYCLE umožňuje opakované generování hodnot MAXVALUE, MINVALUE maximální a minimální hodnota CACHE kolik hodnot se generuje do zásoby, výchozí 20 Použití SEQUENCE Existují 2 pseudosloupce, které umožňují využití sekvence: <název sekvence>. NEXTVAL Vygeneruje a vrátí další hodnotu sekvence <název sekvence>. CURRVAL Vrátí aktuální hodnotu sekvence (ta musí být předtím aspoň jednou inicializována použitím <název sekvence>. NEXTVAL) 15 Indexy druhy indexů a jejich význam. Fakt: - záznamy v tabulkách ukládány neuspořádaně, nejčastěji v pořadí, v jakém byly do tabulky vkládány, Bez indexů: - záznamy hledáme od prvního záznamu postupně, dokud hledaný nenajdeme, - v průměru vždy prohledáme asi polovinu záznamů, než najdeme jeden hledaný záznam - tyto problémy řeší přidání dalšího objektu INDEXu, ten obsahuje informace o tom, kde se jaký záznam nachází (podle hodnoty v indexovaném sloupci). S indexy: - při hledání podle indexového sloupce stačí najít údaj v indexu a odtud získat ROWID (jedinečný identifikátor, který databázový server přiřadí každému záznamu v tabulce) a podle něho najít požadovaný záznam, - moderní dtb. servery obvykle používají stromovou strukturu indexů, například B - stromy, 27

28 - průchod uspořádaným stromem je v průměru výrazně kratší než sekvenční hledání v neuspořádaném poli. B strom - je vyvážený strom. Tato struktura je často používána v aplikacích, kdy není celá struktura uložena v paměti RAM, ale v nějaké sekundární paměti, jako je pevný disk (například databáze). Protože přístup do tohoto typu paměti je náročný na čas (hlavně vyhledání náhodné položky), snažíme se minimalizovat počet přístupů. B-strom řádu n je takový strom, kde všechny listy (tj.uzly které nemají žádné potomky) jsou na stejné úrovní (ve stejné hloubce). kořen má nejvýše n potomků, spodní hranice není omezena. všechny uzly kromě kořene mají maximálně n a minimálně n/2-1 potomků Pokud chceme vložit nebo smazat data (klíče) z uzlu, změní se tím počet potomků tohoto uzlu. Aby se dodržel rozsah daný řádem stromu, vnitřní uzly se v případě potřeby rozdělují či slučují. Protože počet potomků každého uzlu je omezený, není potřeba vyvažovat tento strom tak často jako jiné typy automaticky vyvažovaných stromů. Jelikož strom je málokdy zcela zaplněný, musíme počítat s tím, že může docházet k nevyužití veškeré obsazené paměti (naštěstí to většinou není překážkou). Strom je vyvažován požadavkem aby byly všechny listy na stejné úrovni. Tato hloubka pozvolna roste s tím, jak do stromu přidáváme další data, nebo klesá spolu s vymazáváním dat ze stromu. Přístup pomocí adresy ROWID - ROWID jsou fyzickými adresami dat - Obsahuje informaci o - Řádku vzhledem k souboru, - Bloku, - Řádku v bloku - Relativní číslo souboru - Hodnotu OBJECT_ID - Adresa ROWID je nejrychlejší cestou k určitému řádku, k většímu množství řádků nebude však nejrychlejší metodou Indexy Vlastnosti: - zrychlení jen tehdy, pokud potřebujeme najít několik záznamů, pokud je cílem najít více než 5% záznamů, bude obvykle rychlejší hledání bez použití indexu, - zvýšení režie při vkládání a změně dat, protože kromě zápisu do tabulky je třeba zapsat indexový údaj na přesně definované místo v indexu, - nedoporučuje se používat indexy (kromě bitmapových indexů) nad malými tabulkami nebo nad sloupci s nízkou variabilitou (např. sloupec pohlaví žena/muž), - odstraněním indexu zůstane tabulka nezměněná. - vytvoření indexu CREATE [unique] INDEX jmeno ON tabulka (sloupec) - pokud je vytvořen index, v první řadě se prohledávají pouze ty sloupce, které jsou označeny indexy - indexy zrychlují výběr ale zpomalují vkládání - projevují se až při větším počtu dat 28

29 Syntaxe příkazu CREATE INDEX Vytvoří index nad uvedeným sloupcem definované tabulky. CREATE [BITMAP] INDEX <název indexu> ON <název tabulky> (<název sloupce>) BITMAP vytvoří bitmapový index - vhodné řešení pro sloupce s nízkou variabilitou. Lze si to představit tak, že každé hodnotě ve sloupci odpovídá jeden bit kódu,tj. pro pohlaví jsou nutné 2 bity (muž, žena), pro rodinný stav 4 bity (svobodný, ženatý, rozvedený, vdovec). Příklad: CREATE INDEX ix_jmeno ON ucitele(jmeno); CREATE BITMAP INDEX ix_pohlavi ON ucitele(pohlavi); Syntaxe příkazu DROP INDEX Odstraní index, ale nikoli data v tabulce. DROP INDEX <název indexu> Příklad: DROP INDEX ix_jmeno; INDEXY a principy přístupových cest Přístupové cesty jsou metodami, jejichž prostřednictvím může databáze Oracle získat data z tabulek. Přístupové cesty: - Úplné prohledávání - Indexové přístupy (mnoho typů) - Přímý přístup pomocí algoritmu hash nebo adresy ROWID Bez indexů: - záznamy v tabulkách ukládány neuspořádaně, nejčastěji v pořadí, v jakém byly do tabulky vkládány - záznamy hledáme od prvního záznamu postupně, dokud hledaný nenajdeme - v průměru vždy prohledáme asi polovinu záznamů - tyto problémy řeší přidání dalšího objektu INDEXu, ten obsahuje informace o tom, kde se jaký záznam nachází. S indexy: - při hledání podle indexového sloupce stačí najít údaj v indexu a odtud získat rowid (jedinečný identifikátor, který databázový server přiřadí každému záznamu v tabulce) a podle něho najít požadovaný záznam - moderní dtb. servery obvykle používají stromovou strukturu indexů, například B- stromy - průchod uspořádaným stromem je v průměru výrazně kratší než sekvenční hledání v neuspořádaném poli. Vlastnosti: - zrychlení jen tehdy, pokud potřebujeme najít několik záznamů, pokud je cílem najít více než 5% záznamů, bude obvykle rychlejší hledání bez použití indexu - zvýšení režie při vkládání a změně dat, protože kromě zápisu do tabulky je třeba zapsat indexový údaj na přesně definované místo v indexu - nedoporučuje se používat indexy (kromě bitmapových indexů) nad malými tabulkami nebo nad sloupci s nízkou variabilitou (např. sloupec pohlaví žena/muž) - odstraněním indexu zůstane tabulka nezměněná. 29

30 16 Zabezpečení a ochrana dat uživatelské účty, systémová a objektová oprávnění, role Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: Důvěrnost (secrecy) - informace by neměly být přístupné neautorizovaným uživatelům. Integrita (integrity) - modifikovat data může jen autorizovaný uživatel. Dostupnost (availability) - autorizovaným uživatelům by nemělo být bráněno v přístupu. bezpečnostní politika - kdo co může s jakými daty dělat bezpečnostní mechanismy - zajištění bezpečnostní politiky Bezpečnostní mechanismy Pohledy umožní přístup jen k některým sloupcům tabulek možnost omezit přístupné řádky možnost skrýt skutečnou strukturu tabulek Přístup k databázi Pro přístup do databáze je nutné, aby uživatel měl v databázi zaregistrováno uživatelské jméno a odpovídající heslo. Tuto registraci provádí správce databáze při registraci nového uživatele příkazem CREATE USER. CREATE USER <user_name> IDENTIFIED BY <new_password> Příklad CREATE USER jnovak IDENTIFIED BY w25sqx Příkaz vytvořil v databázi uživatele s názvem JNOVAK, který bude mít heslo "w25sqx". Při vytvoření uživatele je možno zároveň přidělit default tablespace a temporary tablespace neboli implicitní a dočasný tabulkový prostor. CREATE USER <user_name> IDENTIFIED BY <new_password> DEFAULT TABLESPACE <def_tablespace> TEMPORARY TABLESPACE <temp_tablespace> Příklad CREATE USER jnovak IDENTIFIED BY w25sqx DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; Příklad ukazuje vytvoření uživatele a přidělení tabulkových prostorů. Pokud tabulkové prostory nejsou určeny nastaví se implicitní hodnoty. Uživatel si může změnit heslo uvedeným příkazem. Stejně tak to za něj může provést administrátor. ALTER USER <user_name> IDENTIFIED BY <new_password>; Příklad ALTER USER jnovak IDENTIFIED BY sdf45t; Systémová přístupová práva poskytují možnost operace na úrovni schématu uživatele nebo na úrovni celé databáze. GRANT CREATE SESSION, CREATE TABLE TO jnovak; Příkazem GRANT byla uživateli JNOVAK přidělena práva přístupu k databázi a vytváření tabulek. REVOKE CREATE TABLE FROM jnovak; Příkazem REVOKE bylo stejnému uživateli odebráno právo vytvářet tabulky. Uživatel musí mít minimálně právo CREATE SESSION, aby se mohl přihlásit do databáze. 30

31 GRANT CREATE PROCEDURE TO jnovak WITH ADMIN OPTION; Pokud bylo uživateli přiděleno právo např. CREATE PROCEDURE příkazem s klauzulí WITH ADMIN OPTION, získává uživatel zároveň právo přidělovat právo CREATE PROCEDURE i jiným uživatelům. SELECT * FROM user_sys_privs; Informace ze systémového katalogu o systémových právech přidělených uživateli. CREATE PROCEDURE CREATE SEQUENCE CREATE SESSION CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE TYPE CREATE USER CREATE VIEW Přístupová práva k objektům - poskytují uživateli možnost provádět databázové operace s určitými objekty jiného uživatele. Tyto práva může poskytovat správce nebo vlastník objektu. GRANT SELECT, INSERT, UPDATE, DELETE ON cisla TO jnovak; Uživatel, který vlastní tabulku CISLA přidělil právo dotazu, vkládání, aktualizace a rušení záznamů nad touto tabulkou uživateli JNOVAK. SELECT * FROM pholy.cisla; Uživatel s přidělenými právy pro dotaz nad tabulkou CISLA vlastníka(tedy schématu) PHOLY provedl dotaz v této tabulce. SELECT * FROM user_tab_privs; SELECT * FROM user_tab_privs_made; SELECT * FROM user_tab_privs_recd; Informace ze systémového katalogu o všech, přidělených a přijatých objektových právech. Objektová práva Tabulky, pohledy: ALTER DELETE INDEX INSERT UPDATE SELECT REFERENCES Procedury, funkce: EXECUTE DEBUG Vytváření rolí Pro zjednodušení správy přístupových práv je možno použít prostředek nazvaný role. Role je množina souvisejících práv, které může správce přidělit najednou uživatelům databáze a ostatním rolím. Pro vývoj aplikace jsou programátorovi nejčastěji přiděleny role CONNECT a RESOURCE. GRANT CONNECT TO jnovak; GRANT RESOURCE TO jnovak; Přidělení rolí CONNECT a RESOURCE uživateli jnovak. SELECT * FROM user_role_privs; 31

32 Vytvoření a přidělení rolí CREATE ROLE sklad; Příklad vytvoření role. Pro tento příkaz je nutno mít právo CREATE ROLE, které může přidělit správce. GRANT SELECT, INSERT, UPDATE, DELETE ON prijem TO sklad; GRANT SELECT, INSERT, UPDATE, DELETE ON vydej TO sklad; Přidělení přístupových práv na tabulky PRIJEM a VYDEJ roli SKLAD. GRANT sklad TO uživ1, uživ2, uživ3...; Přidělení role SKLAD uživatelům. SET ROLE sklad; Aktivování role SKLAD a zrušení ostatních přístupových práv. Tento příkaz je možno použít např. při spuštění aplikace. TO PUBLIC GRANT SELECT ON knihy TO public; Přidělení přístupových práv na čtení tabulky knihy všem uživatelům. 17 Transakce, návratové body, automatické zamykání, konzistentní čtení Transakce je logická část, která obsahuje jeden nebo více příkazů SQL. Transakce je atomickou jednotkou. Transakce je ukončena buď: - jejím dokončením (COMMIT) - vrácením zpět/odvoláním transakce (ROLLBACK bez uvedení názvu SAVEPOINTU) - Uživatel ukončí spojení se serverem Oracle (transakce je potvrzena automaticky) - Spojení uživatele se serverem se ukončí abnormálně transakce se odroluje zpět - explicitně, když je proveden příkaz DDL (CREATE, DROP, RENAME, ALTER), ukončí se předchozí, v samostatné transakci se provede příkaz DDL Transakce buď proběhne jako celek nebo se jako celek odvolá. Cíl: zajištění konzistence dat v databázových tabulkách a nedělitelnost provedených změn, tj. princip VŠE NEBO NIC. Příklady: - není možné připustit provedení úpravy mzdy (inflační navýšení) jen u části zaměstnanců (než bylo požadováno), (při vrácení transakce se mzda nikomu nenavýší) - není možné strhnout platbu z účtu plátce a nezaúčtovat ji na účet příjemce (z důvodů např. zrušení účtu příjemce, nesprávného účtu čísla příjemce, selhání techniky atd.). (tj. při odvolání se peníze nestrhnou ani z účtu plátce) Příklad bankovní transakce Při zpracování transakce mohou nastat problémy: Nedostatek finančních prostředků na účtu odesílatele Nesprávné číslo účtu (odesílatele nebo příjemce) Jiné omezení na účtu (exekuce) HW problém Špatně sestavený SQL dotaz Transakce - potvrzení Potvrzení transakce (committing) znamená, že změny provedené transakcí se stávají trvalými. 32

33 Explicitní potvrzení příkazem COMMIT Implicitní potvrzení po normálním ukončení nějaké aplikace nebo provedením DDL operace Jakékoli příkazy DDL (např. create table či alter index) způsobí tedy ukončení aktivní transakce a implicitní vytvoření nové transakce. Změny provedené příkazy obsaženými v transakci jsou viditelné pro ostatní uživatele až od okamžiku potvrzení transakce. Transakce - vytvoření Transakce je inicializována implicitně. Pokud je po dokončení transakce příkazem COMMIT následně vložen, aktualizován či odstraněn alespoň jeden řádek, je tím implicitně vytvořena nová transakce. Po zahájení transakce je jí přiřazen dostupný undo tablespace, kam se ukládají změny pro možnost provedení rollbacku. Undo informace obsahují staré hodnoty dat, které byly SQL příkazem v rámci transakce změněny. Statement-Level Rollback Pokud během provádění SQL příkazu nastane nějaká chyba, všechny změny provedené příkazem jsou odrolovány zpět. Toto se nazývá Statement-Level Rollback (rollback na úrovni příkazu). Příklady takových chyb: - Pokus o vložení řádku s duplicitní hodnotou primárního klíče - Narušení referenční integrity - Deadlock (pokus o současnou změnu shodných dat dvěma transakcemi) Syntaktická chyba při parsingu neumožní spustit provádění příkazu, proto se nejedná o Statement-Level Rollback. Chyba při provádění příkazu nezpůsobí změny provedené předchozími příkazy v rámci dané transakce. Použití návratových bodů: SAVEPOINT <bod návratu> - slouží pro označení místa (například po provedení některých operací), kam bychom se v případě potřeby mohli navrátit, slouží pro rozdělení velké transakce na menší části ROLLBACK TO <bod návratu> odvolání transakce, návrat do bodu návratu 18 Přístup k databázi z vyššího programovacího jazyka. Bezpečnost a SQL injection SQL dotazy SQL je jazyk pro komunikaci s relačním databázemi. Existuje několik variant/verzí jazyka SQL - společnou vlastností všech verzí SQL je textová komunikace s databází. Typickou jednotkou jazyka je dotaz, což je soubor příkazů pro databázi, která na dotaz odpoví množinou výsledků. Příkazy SQL mohou modifikovat strukturu databáze (Data Definition Language nebo jen DDL) nebo mohou manipulovat s obsahem databáze (Data Manipulation Language nebo jen DML) SQL injection V historii českého Internetu najdete řadu hacknutých webů díky bezpečnostní chybě v angličtině označované jako SQL injection - jde o souhrnné označení pro nepříjemné bezpečnostní chyby, které umožní vsouvat do SQL kódu (odtud SQL injection) internetové aplikace vlastní informace - pochopitelně takové informace, které umožní změnit smysl původních SQL příkazů. SQL injection napadnutelné weby najdete na internetu neustále. Řada tvůrců aplikací nevěnuje základní pozornost těm nejobyčejnějším návykům a vypouští na veřejnost aplikace, které neměly nikdy opustit privátní síť. Webové aplikace se málokdy podrobí testům na použitelnost, natož aby proběhl alespoň základní bezpečnostní audit. 33

34 SQL injection potenciální rizika Možná rizika SQL injection lze vyjádřit například takto: získání přístupu k datům, ke kterým přístup mít nemáte (tedy i citlivým, důvěrným, ) možnost změny dat, která měla být určena jen pro čtení možnost vstoupit do administračních částí internetové aplikace možnost vyvolat příkazy SQL serveru, které umožní ovládnout stroj na kterém SQL server běží možnost smazat nějaké tabulky nebo celou databázi SQL injection ochrana SQL injection je riziková všude tam, kde autoři internetové aplikace zapomněli na základní bezpečnostní pravidlo - veškeré vstupy do aplikace je nutné kontrolovat na povolené hodnoty/typy. A je u plně jedno jestli jde o PHP/mySQL či ASP/MS-SQL Potenciálně rizikové části internetové aplikace jsou všechna místa, kde něco vstupuje zvenčí. Formuláře (POST/GET) Parametry URI HTTP/XML/SOAP komunikace (nezapomenout na Cookies) "Importy" souborů A k formulářům je vhodné dodat ještě jedno malé varování - řada webových aplikací používá "hidden" (skryté) prvky. Tvůrci aplikace mají falešný pocit bezpečí, že tenhle prvek "není" vidět a ani "není" editovatelný. Přitom stačí příslušnou stránku uložit jako HTML, libovolně si jí upravit a pak používat. Jak se vyhnout SQL injection? Existuje nespočet návodů jak se SQL Injection vyhnout - pomocí Google a zadání "SQL Injection" jich najdete řadu - budete si tak moci i vybrat zda potřebujete návod pro Microsoft SQL, MySQL či pro "něco" jiného. Principy jsou obdobné : Textové vstupy prohnat náhradou ['] za [''] (neboli dvojici apostrofů). Jde o nejjednodušší způsob, který znemožní použít ['] pro "ukončení" vytvářeného SQL dotazu. Textové vstupy prohnat odpovídající RegExp() transformací, která v něm ponechá pouze znaky, které v něm mají být. Tímto způsobem je pochopitelně více než vhodné ošetřovat i vstupy, které se stanou později výstupy - vyhnete se tak nebezpečí jinému, jménem XSS. Netextové vstupy prohnat odpovídající typovou konverzí - tj. například pokud?id=xxx má být integer, tak použít odpovídající konverzí funkci - třeba int() Vstupy s pevně daným malým výčtem opravdu testovat na to, zda danému výčtu odpovídají. Příkladem může být testování na True/False, On/Off. Uvedeným způsobem se vyhnete SQL Injection v okamžiku, kdy nechcete použít nějakou jinou metodu tvorby SQL dotazů a zůstáváte u "operativní" klasiky sestavování SQL dotazů (způsobem naznačeným výše). Pokud to není nutné (a popravdě, ono to ani není příliš vhodné), tak se můžete vydat dalšími cestami, které úplně stejně zabrání SQL Injection. Co více dělat proti SQL injection? více než vhodné je, aby účet pod kterým přistupuje internetová aplikace do SQL serveru by zcela určitě neměl být účet systémového administrátora a měl by mít pouze nezbytná práva! v úplně ideálním případě by měly existovat pouze uložené procedury a příslušný účet by měl mít práva pouze pro jejich spouštění - tím se dá odstranit i případné nebezpečí z "podvrhnutých" lahůdek jako "truncate table" či "delete * from" (popravdě i možnost vytvářet nové tabulky může být nebezpečná, stačí je vytvářet tak dlouho a tak velké až...). Aplikace by neměla zobrazovat detailní informace o vyskytnuvší se chybě. Webová aplikace často nemá potlačeno zobrazování detailních chyb a je tak možné vidět i části SQL kódu - což útočníkovi umožní snadno se rozhodovat, jak SQL injection použít. Co nehrozí (v MySQL ve spojení s PHP) PHP nepovoluje vykonávání několika SQL dotazů v jednom volání funkce mysql_query(), takže tím odpadá 34

35 problém s řetězcem typu '; truncate tabulka; - provádí se vše, co se nachází před prvním středníkem mimo hodnoty sloupců. V MySQL neexistuje nic, co by mohlo zavolat externí aplikaci, jako je tomu například u Microsoftí alternativy MSSQL, takže odpadá spousta dalších potenciálně nebezpečných dotazů. Jak ošetřit vstupní formuláře a a z nich získaná data Kontrola - použitím regulárních výrazů - využitím konverzních funkcí - nahrazení rizikových znaků - kontrola na výčet hodnot - omezení délky vstupního pole formuláře - použití funkcí pro nahrazená nebezpečných znaků v textu 19 Jazyk PL/SQL, proměnné, syntaxe bloku - Hlavním omezením jazyka SQL je, že se jedná o neprocedurální jazyk - V praxi to znamená, že se příkazy jazyka SQL provádějí sekvenčně bez možnosti klasických programátorských konstrukcí (cykly, podmínky, procedury, funkce, případně objektové programování) - Říkáme CO, nikoli JAK - Proto většina databázových platforem nabízí rozšíření umožňující naprogramovat i ty nejsložitější algoritmy pro práci s daty - PL/SQL (Transaction Procesing Language) - Umožňuje deklarovat konstanty, proměnné, kurzory - Nabízí podporu dynamických deklarací - Podpora transakčního zpracování - Chybové stavy procesu je možné ošetřit pomocí výjimek - Podpora modularity (vkládání modulů i do sebe) - Podporuje dědičnost Struktura jazyka PL/SQL 35

36 20 Řízení toku programu - podmínky, cykly, kurzory, záznamy, ošetření chyb Zápis podmínky IF podmínka1 THEN posloupnost_příkazů1 ELSIF podmínka2 THEN posloupnost_příkazů2 ELSE posloupnost_příkazů3 END IF; Řízení toku programu Příkaz CASE pro vícenásobné větvení programu CASE WHEN podmínka1 THEN posloupnost_příkazů1; WHEN podmínka2 THEN posloupnost_příkazů2;.. WHEN podmínkan THEN posloupnost_příkazůn; [ ELSE posloupnost_příkazůn+1; ] END CASE; Podmínka může být i například v_promenna BETWEEN 1 AND 5 Řízení toku programu - cykly Jednoduchý cyklus LOOP LOOP posloupnost_příkazů IF podmínka THEN.. ukončuje se příkazem EXIT END IF; END LOOP; nebo LOOP posloupnost_příkazů EXIT WHEN podmínka; END LOOP; Cyklus FOR s čítačem FOR počítadlo IN [REVERSE] Nejnižší_hodnota.. Nejvyšší_hodnota LOOP posloupnost_příkazů1 END LOOP; Cyklus WHILE s podmínkou na začátku WHILE podmínka LOOP posloupnost_příkazů END LOOP; Kurzory Privátní pracovní oblasti, které jsou databázovým serverem vytvořeny pro každý příkaz SQL - Implicitní kurzory jsou vytvářeny automaticky databázovým serverem, není nutné je otevírat, zavírat, 36

37 deklarovat nebo z něj načítat data, - Explicitní deklarované programátorem Základní kroky pro práci s explicitními kurzory - Deklarace kurzoru - Otevření kurzoru - Výběr dat prostřednictvím kurzoru - Uzavření kurzoru Explicitní kurzory - syntaxe - Deklarace kurzoru CURSOR <název kurzoru> IS <příkaz SELECT>; - Otevření kurzoru OPEN <název kurzoru>; - Výběr dat prostřednictvím kurzoru (opakovat v cyklu) FETCH <název kurzoru> INTO <seznam proměnných>; - Uzavření kurzoru CLOSE <název kurzoru>; Explicitní kurzory testování stavu Pro testování stavu kurzoru jsou k dispozici atributy %ROWCOUNT Zjištění pořadového čísla aktuálního záznamu (pokud nebyl vybrán žádný, je hodnota 0) %FOUND Pokud poslední příkaz FETCH načetl nějaký záznam, má atribut hodnotu TRUE Používá se pro zjišťování konce cyklu %NOTFOUND Používá se pro zjišťování konce cyklu %ISOPEN Pokud je kurzor otevřen, má hodnotu TRUE Použití: <název kurzoru>%rowcount Práce s explicitními kurzory Příklad s využitím explicitního kurzoru DECLARE v_jmeno ucitel.jmeno%type; v_id ucitel.id%type; CURSOR k1 IS SELECT jmeno, Id FROM ucitel; BEGIN END; OPEN k1; LOOP FETCH k1 INTO v_jmeno, v_id; EXIT WHEN k1%notfound; DBMS_OUTPUT.PUT_LINE('Jméno ' v_jmeno ', Id ' v_id); END LOOP; CLOSE k1; Záznamy Struktura typu záznam zapouzdřuje více položek i rozdílných datových typů. Deklarace záznamu DECLARE TYPE <název proměnné typu záznam> IS RECORD 37

38 ( <název atributu> <datový typ> [, <název atributu> <datový typ> ] ); Příklad DECLARE TYPE rec_ucitel IS RECORD ( jmeno ucitel.jmeno%type; Id ucitel.id%type; ); Nebo po zjednodušení jen DECLARE rec_ucitel ucitel%rowtype; Práce s kurzory a záznamy S využitím záznamů můžeme s kurzory pracovat mnohem efektivněji Cyklus FOR s explicitním kurzorem (kurzor v tomto případě nemusíme ani otevírat ani zavírat, dokonce ani cyklicky vybírat data pomocí příkazu FETCH, všechny tyto úkony za nás provede server standardně) Příklad DECLARE rec_ucitel ucitel%rowtype; CURSOR k1 IS SELECT jmeno, Id FROM ucitel; BEGIN FOR rec_ucitel IN k1 LOOP DBMS_OUTPUT.PUT_LINE('Jméno ' rec_ucitel.jmeno ', Id ' rec_ucitel.id); END LOOP; END; Práce s implicitními kurzory a) Příkaz SELECT INTO FROM musí vrátit alespoň jeden a nejvýše jeden řádek, počet sloupců musí odpovídat počtu proměnných uvedených za klauzulí INTO včetně použitelnosti datových typů. b) Následující příklad ukazuje využití implicitního kurzoru pro sady výsledků s omezeným počtem řádků (řekněme méně než 100) For x in (select from where ) Loop Process End loop; BEGIN FOR x IN (SELECT jmeno, Id FROM trpaslici) loop DBMS_OUTPUT.PUT_LINE('Jméno ' x.jmeno ', Id ' x.id); END LOOP; END; Kurzory s parametry Kurzor můžeme rozšířit o parametry, které budou dosazeny do dotazu až během otevření kurzoru Deklarace explicitního kurzoru s parametrem CURSOR <název kurzoru> [(<název parametru> <datový typ>, )] IS <příkaz SELECT>; Příklad DECLARE 38

39 rec_ucitel ucitel%rowtype; CURSOR k1 (v_jmeno VARCHAR2) IS SELECT jmeno, Id FROM ucitel WHERE jmeno LIKE (v_jmeno '%'); BEGIN FOR rec_ucitel IN k1 ( Za ) LOOP DBMS_OUTPUT.PUT_LINE('Jméno ' rec_ucitel.jmeno ', Id ' rec_ucitel.id); END LOOP; END; FOR rec_ucitel IN k1 ( Sm ) LOOP DBMS_OUTPUT.PUT_LINE('Jméno ' rec_ucitel.jmeno ', Id ' rec_ucitel.id); END LOOP; Ošetření chyb V zásadě se mohou v PL/SQL vyskytnout 2 druhy chyb: Syntaktické projeví se ještě v procesu kompilace (upozorní nás na ně překladač) Logické projeví se až za běhu programu Nejčastěji se vyskytují následující výjimky: DUP_VAL_ON_INDEX - výskyt duplicitní hodnoty ve sloupci, který připouští jen jedinečné hodnoty INVALID_NUMBER - neplatné číslo nebo data nemohou být převedena na číslo NO_DATA_FOUND - nebyly nalezeny žádné záznamy TOO_MANY_ROWS - dotaz vrátil více než jeden záznam VALUE_ERROR - problém s matematickou funkcí ZERO_DIVIDE - dělení nulou Všeobecná syntaxe pro zpracování výjimek: EXCEPTION WHEN <název výjimky> THEN <příkazy>; [WHEN <název výjimky> THEN <příkazy>; ] OTHERS THEN <příkazy>; END; Výjimku můžeme navodit nebo simulovat příkazem RAISE <název výjimky>; například RAISE NO_DATA_FOUND; Aktuální kód chyby vrací systémová funkce SQLCODE a její textový popis systémová funkce SQLERRM, takže při zpracování výjimky máme k dispozici tyto údaje. Příklad DECLARE v_vysledek NUMBER(9,2); BEGIN v_vysledek := 5/0; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(' Chyba '); DBMS_OUTPUT.PUT_LINE('Kód chyby:' SQLCODE); 39

40 END; DBMS_OUTPUT.PUT_LINE('Popis chyby:' SQLERRM); Definování vlastních výjimek Máme možnost definovat i vlastní výjimky. Pro vlastní výjimky je SQLCODE rovno 1 a SQLERRM vrací Text User-Defined Exception Syntaxe DECLARE <název výjimky> EXCEPTION; BEGIN <příkazy>; RAISE <název výjimky>; EXCEPTION WHEN <název výjimky> THEN <příkazy>; END; Příklad definice vlastní výjimky pro kontrolu počtu trpaslíků. DECLARE PRILIS_MNOHO_TRPASLIKU EXCEPTION; v_pocet_trpasliku NUMBER; BEGIN select count(*) INTO v_pocet_trpasliku FROM trpaslici; IF v_pocet_trpasliku > 7 THEN RAISE PRILIS_MNOHO_TRPASLIKU; END IF; EXCEPTION WHEN PRILIS_MNOHO_TRPASLIKU THEN DBMS_OUTPUT.PUT_LINE('Trpaslíků může být maximálně sedm'); END; 21 Procedury a funkce, balíčky Procedury Procedura je posloupnost příkazů, které se provedou v okamžiku spuštění procedury. Na základě vstupních parametrů jsou vráceny výsledky v podobě výstupních parametrů. Syntaxe CREATE [OR REPLACE] PROCEDURE <název procedury> [(<seznam parametrů>)] AS Funkce Příklad definice procedury CREATE [OR REPLACE] PROCEDURE zvyseni_mzdy (procento IN NUMBER) AS BEGIN UPDATE pracovnici SET mzda = mzda * (1+procento/100); END; Příklad spuštění procedury EXECUTE zvyseni_mzdy(6); nebo EXEC zvyseni_mzdy(6); nebo BEGIN zvyseni_mzdy(6); END; Funkce na rozdíl od procedur dokáží vrátit nějakou hodnotu, která je ve většině případů vypočítána v těle funkce. Syntaxe CREATE [OR REPLACE] FUNCTION <název funkce> [(<seznam parametrů>)] RETURN <datový typ výsledku> 40

41 Příklad CREATE [OR REPLACE] FUNCTION pocet_smen (Id_trp IN NUMBER) RETURN NUMBER AS v_pocet NUMBER; BEGIN SELECT count(*) INTO v_pocet FROM tezby WHERE Id_trpaslika=Id_trp AND skutecnost>0; RETURN v_pocet ; END; Použití funkce SELECT Jmeno, pocet_smen(id) Pocet_smen FROM trpaslici; Používání balíčků Výhody balíčků - Zvětšují obor názvů může být použit stejný název procedury v různých balíčcích - V jednom balíčku může být mnoho procedur, ale v datovém slovníku bude existovat pouze jeden objekt balíček, namísto jednoho objektu slovníku pro každou proceduru nebo funkci bez použití balíčků - Podporují zapouzdření, části kódu (podřízené rutiny), které nemají využití mimo balíček, jsou ukryty v balíčku a mimo něj nejsou viditelné a jsem jediným, kdo je může zobrazit - Podporují proměnné uchovávané po celou dobu relace - můžete mít proměnné, které si udrží své hodnoty mezi jednotlivými voláními v databázi - Podporují spouštěcí kód tj. úsek kódu, který se provede při prvním odkazu na balíček v relaci, tj. umožňuje automatické provedení složitého inicializačního kódu - Umožňují seskupení souvisejících funkcí Balíčky Balíček má 2 části - specifikaci balíčku (interface k aplikacím) - tělo balíčku Ve specifikaci jsou deklarovány typy, proměnné, konstanty, výjimky, kurzory a podprogramy pro použití. Tělo úplně definuje kurzory a subprogramy implementační detaily a privátní deklarace, které jsou neviditelné z aplikace. Je možné změnit tělo balíčku bez změny specifikace a tím vlastně neovlivnit vazbu na další aplikace. Programy volající balíček nemusí být rekompilovány při změně těla balíčku (tzv. balíčky přerušují řetězec závislostí). Struktura balíčků Balíčky - syntaxe CREATE PACKAGE name AS -- specification (visible part) -- public type and item declarations 41

42 -- subprogram specifications END [name]; CREATE PACKAGE BODY name AS -- body (hidden part) -- private type and item declarations -- subprogram bodies [BEGIN -- initialization statements] END [name]; Veřejné a privátní elementy balíčků Balíčky - odkazování Referencing Package Contents package_name.type_name package_name.item_name package_name.subprogram_name 22 Triggery pro DML příkazy nad tabulkami, Triggery pro databázové a klientské události Triggery Trigger je uložená procedura, která se spouští za přesně definovaných událostí. Můžeme tedy říci, že trigger je množina příkazů, které se automaticky provedou v případě předem definované operace (INSERT, DELETE, UPDATE) s daty (a to buď před či po vlastní operaci). Použití: - kontrola zadaných dat, - zajištění referenční integrity. Procedury, triggery, funkce jsou uložené přímo v databázi spolu s dalšími databázovými strukturami jako jsou tabulky, pohledy, sekvence, indexy, To znamená, že do databáze se umísťují nejenom data, ale i aplikační logika pro jejich zpracování.to umožňuje jednodušší distribuci, přispívá ke spolehlivosti. Procedury jsou uloženy v databázi v předkompilované podobě. 42

43 Použití: - kontrola zadaných dat - zajištění komplexní referenční integrity v databázi - automatické generování odvozené hodnoty hodnot sloupců - zamezení invalidním transakcím - zajištění komplexní bezpečnostní autorizace - implementace business pravidel - zajištění logování událostí - poskytování auditů - zajištění synchronní replikace tabulek - generování statistik přístupu k tabulkám - modifikace dat v tabulce, když DML příkaz používá pohled - publikace informací o událostech a příkazech do jiných aplikací Zajištění integrity Triggery by se měly využít pouze v případě, kdy: není možné použít následujících integritních omezení: - NOT NULL, UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK - DELETE CASCADE - DELETE SET NULL tabulky nejsou v jedné databázi atd. Triggery DML Syntaxe CREATE [OR REPLACE] TRIGGER <název triggeru> { BEFORE AFTER } [INSTEAD OF] { INSERT UPDATE DELETE } ON <název tabulky> [FOR EACH ROW [WHEN <podmínka provedení triggeru> ]] BEGIN výkonná sekce. END; Musíme určit: - akci, která trigger aktivuje, - kdy se trigger aktivuje - před či po, - zda se trigger spouští pro každý zpracovávaný řádek FOR EACH ROW nebo jen jednou, - případně, zda trigger nahrazuje operaci, která jej spustila INSTEAD OF (pouze pro pohledy) - více spouštěcích příkazů lze oddělit klazulí OR (např. INSERT OR DELETE) 43

44 BEGIN :new.uppername := UPPER(:new.Ename); END; Triggery poznámky k použití Přílišné využití triggerů může způsobit nepřehlednost aplikace (jejich přehlížení) Nepoužívejte rekursivní triggery Pozor při použití kaskádních triggerů Nepoužívejte triggery tam, kde si můžete pomoci například omezeními (CHECK na vkládané hodnoty). Nedělejte kód triggerů delší než 32KB. Pokud by měl být delší, použijte procedur a funkcí. Není možné použít příkazy COMMIT, ROLLBACK nebo SAVEPOINT v těle triggeru. Protože DDL příkazy způsobují implicitní COMMIT, nemohou být také proto použity v triggerech, s výjimkou příkazů CREATE, ALTER, DROP TABLE a ALTER...COMPILE pro systémové triggery. 23 Export a import dat, práce s textovými soubory a XML dokumenty Import a export dat Import a export dat používáme zejména pro výměnu dat s jinými aplikacemi. Mezi často používané formáty patří: 1. SQL - textové soubory s jednotlivými SQL příkazy (skripty) 2. Textové soubory, např. - s oddělovači sloupců a řádků (např. CSV Comma-separated values) - s pevnou šířkou sloupců 3. XML soubory 4. Soubory tabulkových procesorů (např. Excel XLS) SQL developer nabízí export dat do souborů Export dat z SQL Developeru Můžeme exportovat: data z tabulky, výsledky dotazu nebo výstup reportu buď do souboru nebo do schránky Windows. Při exportu je možné definovat omezující podmínky či vybrat sloupce Formát INSERT (SQL), tabulka Trpaslici -- INSERTING into TRPASLICI Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (1,'Stistko',110,1980); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (2,'Kychal',115,1983); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (3,'Profa',120,1999); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (4,'Rypal',112,2001); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (5,'Brucoun',109,1976); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (6,'Stydlin',117,1984); Insert into TRPASLICI (ID,JMENO,VYSKA,NAROZEN) values (7,'Smudla',108,1993); Formát TEXT, tabulka Trpaslici "ID" "JMENO" "VYSKA" "NAROZEN" "1" "Stistko" "110" "1980" 44

45 "2" "Kychal" "115" "1983" "3" "Profa" "120" "1999" "4" "Rypal" "112" "2001" "5" "Brucoun "109" "1976" "6" "Stydlin" "117" "1984" "7" "Smudla" "108" "1993" Formát CSV, tabulka Trpaslici "ID","JMENO","VYSKA","NAROZEN" "1","Stistko","110","1980" "2","Kychal","115","1983" "3","Profa","120","1999" "4","Rypal","112","2001" "5","Brucoun","109","1976" "6","Stydlin","117","1984" "7","Smudla","108","1993" Formát XML, tabulka Trpaslici <?xml version='1.0' encoding='null'?> <results> <row> <ID><![CDATA[1]]></ID> <JMENO><![CDATA[Stistko]]></JMENO> <VYSKA><![CDATA[110]]></VYSKA> <NAROZEN><![CDATA[1980]]></NAROZEN> </row> <row> <ID><![CDATA[2]]></ID> <JMENO><![CDATA[Kychal]]></JMENO> <VYSKA><![CDATA[115]]></VYSKA> <NAROZEN><![CDATA[1983]]></NAROZEN> </row> </results> Formát XLS, tabulka Trpaslici Formát LOADER, tabulka Trpaslici LOAD DATA INFILE * Truncate INTO TABLE "TRPASLICI" FIELDS TERMINATED BY ',' TRAILING NULLCOLS (ID, JMENO, VYSKA, NAROZEN) begindata "1","Stistko","110","1980" "2","Kychal","115","1983" 45

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc. 1 Kurz Databáze Zpracování dat Doc. Ing. Radim Farana, CSc. Obsah Druhy dotazů, tvorba dotazu, prostředí QBE (Query by Example). Realizace základních relačních operací selekce, projekce a spojení. Agregace

Více

Databázové systémy I

Databázové systémy I Databázové systémy I Přednáška č. 8 Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky jiri.zechmeister@upce.cz Skupinové a souhrnné dotazy opakování Obsah Pohledy syntaxe použití význam Vnořené

Více

1. Relační databázový model

1. Relační databázový model 1. Relační databázový model Poprvé představen 1969 (Dr. Edgar F. Codd) IBM Založeno na Teorii množin Predikátové logice prvního řádu Umožňuje vysoký stupeň nezávislosti dat základ pro zvládnutí sémantiky

Více

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE 2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE Studijní cíl Tento blok je věnován základní syntaxi příkazu SELECT, pojmům projekce a restrikce. Stručně zde budou představeny příkazy

Více

Databázové a informační systémy

Databázové a informační systémy Databázové a informační systémy 1. Teorie normálních forem Pojem normálních forem se používá ve spojitosti s dobře navrženými tabulkami. Správně vytvořené tabulky splňují 4 základní normální formy, které

Více

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR): Mezi příkazy pro manipulaci s daty (DML) patří : 1. SELECT 2. ALTER 3. DELETE 4. REVOKE Jaké vlastnosti má identifikující relace: 1. Je relace, která se využívá pouze v případě modelovaní odvozených entit

Více

6. blok část B Vnořené dotazy

6. blok část B Vnořené dotazy 6. blok část B Vnořené dotazy Studijní cíl Tento blok je věnován práci s vnořenými dotazy. Popisuje rozdíl mezi korelovanými a nekorelovanými vnořenými dotazy a zobrazuje jejich použití. Doba nutná k nastudování

Více

Databázové systémy. Cvičení 6: SQL

Databázové systémy. Cvičení 6: SQL Databázové systémy Cvičení 6: SQL Co je SQL? SQL = Structured Query Language SQL je standardním (ANSI, ISO) textovým počítačovým jazykem SQL umožňuje jednoduchým způsobem přistupovat k datům v databázi

Více

Databázové systémy trocha teorie

Databázové systémy trocha teorie Databázové systémy trocha teorie Základní pojmy Historie vývoje zpracování dat: 50. Léta vše v programu nevýhody poměrně jasné Aplikace1 alg.1 Aplikace2 alg.2 typy1 data1 typy2 data2 vytvoření systémů

Více

Databáze SQL SELECT. David Hoksza http://siret.cz/hoksza

Databáze SQL SELECT. David Hoksza http://siret.cz/hoksza Databáze SQL SELECT David Hoksza http://siret.cz/hoksza Osnova Úvod do SQL Základní dotazování v SQL Cvičení základní dotazování v SQL Structured Query Language (SQL) SQL napodobuje jednoduché anglické

Více

Databáze I. Přednáška 4

Databáze I. Přednáška 4 Databáze I Přednáška 4 Definice dat v SQL Definice tabulek CREATE TABLE jméno_tab (jm_atributu typ [integr. omez.], jm_atributu typ [integr. omez.], ); integritní omezení lze dodefinovat později Definice

Více

Databázové systémy. Doc.Ing.Miloš Koch,CSc. koch@fbm.vutbr.cz

Databázové systémy. Doc.Ing.Miloš Koch,CSc. koch@fbm.vutbr.cz Databázové systémy Doc.Ing.Miloš Koch,CSc. koch@fbm.vutbr.cz Vývoj databázových systémů Ukládání dat Aktualizace dat Vyhledávání dat Třídění dat Výpočty a agregace 60.-70. léta Program Komunikace Výpočty

Více

KIV/ZIS cvičení 5. Tomáš Potužák

KIV/ZIS cvičení 5. Tomáš Potužák KIV/ZIS cvičení 5 Tomáš Potužák Úvod do SQL (1) SQL (Structured Query Language) je standardizovaný strukturovaný dotazovací jazyk pro práci s databází Veškeré operace v databázi se dají provádět pomocí

Více

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek 5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené

Více

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška Databázové systémy Datová integrita + základy relační algebry 4.přednáška Datová integrita Datová integrita = popisuje pravidla, pomocí nichž hotový db. systém zajistí, že skutečná fyzická data v něm uložená

Více

RELAČNÍ DATABÁZOVÉ SYSTÉMY

RELAČNÍ DATABÁZOVÉ SYSTÉMY RELAČNÍ DATABÁZOVÉ SYSTÉMY VÝPIS KONTROLNÍCH OTÁZEK S ODPOVĚDMI: Základní pojmy databázové technologie: 1. Uveďte základní aspekty pro vymezení jednotlivých přístupů ke zpracování hromadných dat: Pro vymezení

Více

Databázové systémy Cvičení 5.2

Databázové systémy Cvičení 5.2 Databázové systémy Cvičení 5.2 SQL jako jazyk pro definici dat Detaily zápisu integritních omezení tabulek Integritní omezení tabulek kromě integritních omezení sloupců lze zadat integritní omezení jako

Více

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev Úvod do databází Modelování v řízení Ing. Petr Kalčev Co je databáze? Množina záznamů a souborů, které jsou organizovány za určitým účelem. Jaké má mít přínosy? Rychlost Spolehlivost Přesnost Bezpečnost

Více

Databáze I. 5. přednáška. Helena Palovská

Databáze I. 5. přednáška. Helena Palovská Databáze I 5. přednáška Helena Palovská palovska@vse.cz SQL jazyk definice dat - - DDL (data definition language) Základní databáze, schemata, tabulky, indexy, constraints, views DATA Databáze/schéma

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 8 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Entita Entitní typ

Více

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL 4 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, datové typy, klauzule SELECT, WHERE, a ORDER BY. Doporučená

Více

8.2 Používání a tvorba databází

8.2 Používání a tvorba databází 8.2 Používání a tvorba databází Slide 1 8.2.1 Základní pojmy z oblasti relačních databází Slide 2 Databáze ~ Evidence lidí peněz věcí... výběry, výpisy, početní úkony Slide 3 Pojmy tabulka, pole, záznam

Více

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal Databázové systémy - SQL * definice dat * aktualizace * pohledy Tomáš Skopal Osnova přednášky definice dat definice (schémat) tabulek a integritních omezení CREATE TABLE změna definice schématu ALTER TABLE

Více

Jazyk SQL databáze SQLite. připravil ing. petr polách

Jazyk SQL databáze SQLite. připravil ing. petr polách Jazyk SQL databáze SQLite připravil ing. petr polách SQL - úvod Structured Query Language (strukturovaný dotazovací jazyk 70. léta min. století) Standardizovaný dotazovací jazyk používaný pro práci s daty

Více

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23 Stručný obsah 1. Stručný úvod do relačních databází 13 2. Platforma 10g 23 3. Instalace, první přihlášení, start a zastavení databázového serveru 33 4. Nástroje pro administraci a práci s daty 69 5. Úvod

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování 4 fáze vytváření

Více

Obsah přednášky. Databázové systémy. Normalizace relací. Normalizace relací. Normalizace relací. Normalizace relací

Obsah přednášky. Databázové systémy. Normalizace relací. Normalizace relací. Normalizace relací. Normalizace relací Obsah přednášky Databázové systémy Logický model databáze normalizace relací normální formy tabulek 0NF, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF, DNF denormalizace zápis tabulek relační algebra klasické operace

Více

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče. Primární a cizí klíč Kandidát primárního klíče (KPK) Je taková množina atributů, která splňuje podmínky: Unikátnosti Minimálnosti (neredukovatelnosti) Primární klíč (Primary Key - PK) Je právě jedna množina

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Database Research Group Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz

Více

2. blok část A Jazyk SQL, datové typy

2. blok část A Jazyk SQL, datové typy 2. blok část A Jazyk SQL, datové typy Studijní cíl Tento blok je věnován jazyku SQL, jeho vývoji, standardizaci a problémy s přenositelností. Dále je zde uveden přehled datových typů dle standardu SQL

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Daniel Klimeš Autor, Název akce 1 About me Daniel Klimeš Vzdělání: Obecná biologie PGS: onkologie Specializace: klinické databáze Databáze ORACLE klimes@iba.muni.cz Kotlářská 2,

Více

Hierarchický databázový model

Hierarchický databázový model 12. Základy relačních databází Když před desítkami let doktor E. F. Codd zavedl pojem relační databáze, pohlíželo se na tabulky jako na relace, se kterými se daly provádět různé operace. Z matematického

Více

Databázové systémy Cvičení 5.3

Databázové systémy Cvičení 5.3 Databázové systémy Cvičení 5.3 SQL jako jazyk pro manipulaci s daty SQL jako jazyk pro manipulaci s daty Aktualizace dat v SQL úprava záznamů v relacích (tabulkách) vložení záznamu INSERT INTO oprava záznamu

Více

6. blok část C Množinové operátory

6. blok část C Množinové operátory 6. blok část C Množinové operátory Studijní cíl Tento blok je věnován problematice množinových operátorů a práce s množinovými operátory v jazyce SQL. Čtenáři se seznámí s operátory, UNION, a INTERSECT.

Více

Jazyk PL/SQL Úvod, blok

Jazyk PL/SQL Úvod, blok Jazyk PL/SQL Úvod, blok 1 Bc. Tomáš Romanovský Procedural Language for Structured Query Language Součást systému Oracle, rozšíření SQL o procedurální rysy Prostředky pro vytváření a spouštění programových

Více

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL) SQL strukturovaný dotazovací jazyk Structured Query Language (SQL) SQL - historie 1974-75 - IBM - 1.prototyp - SEQUEL od 1979 - do praxe - ORACLE (1979) IBM - SQL/DS (1981), DB/2 (1983) postupně přijímán

Více

Databáze. Logický model DB. David Hoksza

Databáze. Logický model DB. David Hoksza Databáze Logický model DB David Hoksza http://siret.cz/hoksza Osnova Relační model dat Převod konceptuálního schématu do logického Funkční závislosti Normalizace schématu Cvičení převod do relačního modelu

Více

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná ZKOUŠKOVÉ TESTY Leden 2010 souhrn Červené dobře (nejspíš), modré možná Pomocí kterého databázového objektu je implementován ATRIBUT z konceptuálního modelu? sloupec referenční omezení index tabulka Omezení

Více

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů. Modely datové Existují různé úrovně pohledu na data. Nejvyšší úroveň je úroveň, která zachycuje pouze vztahy a struktury dat samotných. Konceptuální model - E-R model. Další úrovní je logická úroveň Databázové

Více

J. Zendulka: Databázové systémy 4 Relační model dat 1

J. Zendulka: Databázové systémy 4 Relační model dat 1 4. Relační model dat 4.1. Relační struktura dat... 3 4.2. Integritní pravidla v relačním modelu... 9 4.2.1. Primární klíč... 9 4.2.2. Cizí klíč... 11 4.2.3. Relační schéma databáze... 13 4.3. Relační algebra...

Více

Informační systémy ve zdravotnictví. 6. cvičení

Informační systémy ve zdravotnictví. 6. cvičení Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Informační systémy ve zdravotnictví 6. cvičení Ing. Petr Lukáš petr.lukas@nativa.cz Ostrava, 2014 Opakování Relace

Více

5. Formalizace návrhu databáze

5. Formalizace návrhu databáze 5. Formalizace návrhu databáze 5.1. Úvod do teorie závislostí... 2 5.1.1. Funkční závislost... 2 5.1.2. Vícehodnotová závislost (multizávislost)... 7 5.1.3. Závislosti na spojení... 9 5.2. Využití teorie

Více

Relační datový model. Integritní omezení. Normální formy Návrh IS. funkční závislosti multizávislosti inkluzní závislosti

Relační datový model. Integritní omezení. Normální formy Návrh IS. funkční závislosti multizávislosti inkluzní závislosti Relační datový model Integritní omezení funkční závislosti multizávislosti inkluzní závislosti Normální formy Návrh IS Funkční závislosti funkční závislost elementární redundantní redukovaná částečná pokrytí

Více

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky Otázka 20 A7B36DBS Zadání... 1 Slovníček pojmů... 1 Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky... 1 Zadání Relační DB struktury sloužící k optimalizaci

Více

Text úlohy. Systémový katalog (DICTIONARY):

Text úlohy. Systémový katalog (DICTIONARY): Úloha 1 Částečně správně Bodů 050 / 100 Systémový katalog (DICTIONARY): a Se skládá z tablek a pohledů uložených v tabulkovém SYSTEM b Všechny tabulky vlastní uživatel SYS c Se skládá z tablek a pohledů

Více

DUM 12 téma: Příkazy pro tvorbu databáze

DUM 12 téma: Příkazy pro tvorbu databáze DUM 12 téma: Příkazy pro tvorbu databáze ze sady: 3 tematický okruh sady: III. Databáze ze šablony: 7 Kancelářský software určeno pro: 4. ročník vzdělávací obor: 18-20-M/01 Informační technologie vzdělávací

Více

Úvod do databázových systémů

Úvod do databázových systémů Úvod do databázových systémů Databáze je dnes velmi často skloňovaným slovem. Co se pod tímto termínem skrývá si vysvětlíme na několika následujících stranách a cvičeních. Databáze se využívají k ukládání

Více

Kapitola 4: SQL. Základní struktura

Kapitola 4: SQL. Základní struktura - 4.1 - Kapitola 4: SQL Základní struktura Množinové operace Souhrnné funkce Nulové hodnoty Vnořené poddotazy (Nested sub-queries) Odvozené relace Pohledy Modifikace databáze Spojené relace Jazyk definice

Více

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux B0M33BDT Technologie pro velká data Supercvičení SQL, Python, Linux Sergej Stamenov, Jan Hučín 18. 10. 2017 Osnova cvičení Linux SQL Python 2 SQL pro uživatele aneb co potřebuje znát a umět bigdatový uživatel:

Více

Operátory ROLLUP a CUBE

Operátory ROLLUP a CUBE Operátory ROLLUP a CUBE Dotazovací jazyky, 2009 Marek Polák Martin Chytil Osnova přednášky o Analýza dat o Agregační funkce o GROUP BY a jeho problémy o Speciální hodnotový typ ALL o Operátor CUBE o Operátor

Více

12. blok Pokročilé konstrukce SQL dotazů - část II

12. blok Pokročilé konstrukce SQL dotazů - část II 12. blok Pokročilé konstrukce SQL dotazů - část II Studijní cíl Tento blok je věnován pokročilým konstrukcím SQL dotazů, které umožní psát efektivní kód. Pozornost je věnována vytváření pohledů v rámci

Více

Databáze I. Přednáška 6

Databáze I. Přednáška 6 Databáze I Přednáška 6 SQL aritmetika v dotazech SQL lze přímo uvádět aritmetické výrazy násobení, dělení, sčítání, odčítání příklad z minulé přednášky: zdvojnásobení platu všem zaměstnancům UPDATE ZAMESTNANEC

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 5 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování K čemu se používají

Více

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Návrh a tvorba WWW stránek 1/14. PHP a databáze Návrh a tvorba WWW stránek 1/14 PHP a databáze nejčastěji MySQL součástí balíčků PHP navíc podporuje standard ODBC PHP nemá žádné šablony pro práci s databází princip práce s databází je stále stejný opakované

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky XMW4 / IW4 Pokročilé SELECT dotazy Štefan Pataky TOP, OFFSET-FETCH Konverze datových typů Logické funkce Práce s řetězci Poddotazy a množinové dotazy SQL Windowing Agenda TOP TOP omezení počtu vrácených

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Lekce 2 Daniel Klimeš Autor, Název akce 1 CREATE TABLE Vytvoření tabulky (ORACLE) DDL příkazem v grafickém prostředí CREATE TABLE jmeno ( text VARCHAR2(200), cislo NUMBER(9,1),

Více

Střední průmyslová škola Zlín

Střední průmyslová škola Zlín VY_32_INOVACE_33_01 Škola Název projektu, reg. č. Vzdělávací oblast Vzdělávací obor Tematický okruh Téma Tematická oblast Název Autor Vytvořeno, pro obor, ročník Anotace Přínos/cílové kompetence Střední

Více

Primární klíč, cizí klíč, referenční integrita, pravidla normalizace, relace

Primární klíč, cizí klíč, referenční integrita, pravidla normalizace, relace Téma 2.2 Primární klíč, cizí klíč, referenční integrita, pravidla normalizace, relace Obecný postup: Každá tabulka databáze by měla obsahovat pole (případně sadu polí), které jednoznačně identifikuje každý

Více

Obsah přednášky. Databázové systémy RDBMS. Fáze návrhu RDBMS. Coddových 12 pravidel. Coddových 12 pravidel

Obsah přednášky. Databázové systémy RDBMS. Fáze návrhu RDBMS. Coddových 12 pravidel. Coddových 12 pravidel Obsah přednášky Databázové systémy Konceptuální model databáze Codd a návrh relační databáze fáze návrhu pojem konceptuální model základní pojmy entity, relace, atributy, IO kardinalita, 2 historie: RDBMS

Více

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Základy informatiky. 08 Databázové systémy. Daniela Szturcová Základy informatiky 08 Databázové systémy Daniela Szturcová Problém zpracování dat Důvodem je potřeba zpracovat velké množství dat - evidovat údaje o nějaké skutečnosti. o skupině lidí (zaměstnanců, studentů,

Více

Databázové systémy Cvičení 5

Databázové systémy Cvičení 5 Databázové systémy Cvičení 5 Dotazy v jazyce SQL SQL jako jazyk pro manipulaci s daty Aktualizace dat v SQL úprava záznamů v relacích (tabulkách) vložení záznamu INSERT INTO oprava záznamu UPDATE vymazání

Více

Kurz Databáze. Obsah. Návrh databáze E-R model. Datová analýza, tabulky a vazby. Doc. Ing. Radim Farana, CSc.

Kurz Databáze. Obsah. Návrh databáze E-R model. Datová analýza, tabulky a vazby. Doc. Ing. Radim Farana, CSc. Kurz Databáze Datová analýza, tabulky a vazby Doc. Ing. Radim Farana, CSc. Obsah Návrh databáze, E-R model, normalizace. Datové typy, formáty a rozsahy dat. Vytváření tabulek, polí, konvence pojmenování.

Více

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS 7. Integrita a bezpečnost dat v DBS 7.1. Implementace integritních omezení... 2 7.1.1. Databázové triggery... 5 7.2. Zajištění bezpečnosti dat... 12 7.2.1. Bezpečnostní mechanismy poskytované SŘBD... 13

Více

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS 7. Integrita a bezpečnost dat v DBS 7.1. Implementace integritních omezení... 2 7.1.1. Databázové triggery... 5 7.2. Zajištění bezpečnosti dat... 12 7.2.1. Bezpečnostní mechanismy poskytované SŘBD... 13

Více

Inovace tohoto kurzu byla spolufinancována z Evropského sociálního fondu a státního rozpočtu České republiky.

Inovace tohoto kurzu byla spolufinancována z Evropského sociálního fondu a státního rozpočtu České republiky. Inovace tohoto kurzu byla spolufinancována z Evropského sociálního fondu a státního rozpočtu České republiky. Projekt ESF OP VK reg.č. CZ.1.07/2.2.00/28.0209 Elektronické opory a e-learning pro obory výpočtového

Více

Databázové systémy a SQL

Databázové systémy a SQL Databázové systémy a SQL Lekce 2 Daniel Klimeš Autor, Název akce 1 Operátory a funkce +,- Sčítání, odečítání *,/ Násobení, dělení =, , >=,

Více

4. Relační model dat. J. Zendulka: Databázové systémy 4 Relační model dat 1

4. Relační model dat. J. Zendulka: Databázové systémy 4 Relační model dat 1 4. Relační model dat 4.1. Relační struktura dat... 3 4.2. Integritní pravidla v relačním modelu... 9 4.2.1. Primární klíč... 9 4.2.2. Cizí klíč... 11 4.2.3. Relační schéma databáze... 13 4.3. Relační algebra...

Více

Informační systémy ve zdravotnictví. 10. cvičení

Informační systémy ve zdravotnictví. 10. cvičení Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Informační systémy ve zdravotnictví 10. cvičení Ing. Petr Lukáš petr.lukas@nativa.cz Ostrava, 2014 Opakování K čemu

Více

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi.

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi. Databáze Základní pojmy Pojem databáze označuje obecně souhrn informací, údajů, dat o nějakých objektech. Úkolem databáze je hlídat dodržení všech omezení a dále poskytovat data při operacích. Objekty

Více

5. Formalizace návrhu databáze

5. Formalizace návrhu databáze 5. Formalizace návrhu databáze 5.1. Úvod do teorie závislostí... 2 5.1.1. Funkční závislost... 2 5.1.2. Vícehodnotová závislost (multizávislost)... 7 5.1.3. Závislosti na spojení... 9 5.2. Využití teorie

Více

UNIVERZITA PALACKÉHO V OLOMOUCI

UNIVERZITA PALACKÉHO V OLOMOUCI UNIVERZITA PALACKÉHO V OLOMOUCI PEDAGOGICKÁ FAKULTA Bakalářská práce 2014 Lenka Koutná UNIVERZITA PALACKÉHO V OLOMOUCI PEDAGOGICKÁ FAKULTA Katedra technické a informační výchovy Bakalářská práce Lenka

Více

VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ

VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ Úvod do problematiky VYTVÁŘENÍ DATABÁZÍ, VKLÁDÁNÍ ÚDAJŮ Databáze je uspořádaná množina velkého množství informací (dat). Příkladem databáze je překladový slovník, seznam PSČ nebo telefonní seznam. Databáze

Více

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava Šablona 32 VY_32_INOVACE_038.ICT.34 Tvorba webových stránek SQL stručné minimum OA a JŠ Jihlava, VY_32_INOVACE_038.ICT.34 Číslo

Více

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph) Marketingová komunikace Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph) 2. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Minulé soustředění úvod

Více

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph) Marketingová komunikace Kombinované studium Skupina N9KMK3PH (vm3aph) 2. a 3. soustředění Mgr. Pavel Vávra 9103@mail.vsfs.cz http://vavra.webzdarma.cz/home/index.htm Co nás čeká: 2. soustředění 16.1.2009

Více

Databáze I. 1. přednáška. Helena Palovská

Databáze I. 1. přednáška. Helena Palovská Databáze I 1. přednáška Helena Palovská palovska@vse.cz Co je databáze Mnoho dat Organizovaných používá se model uspořádání Řízený přístup k datům přijímá požadavky v jazyce modelu umožňuje sdílení dat

Více

Databázové systémy úvod

Databázové systémy úvod Databázové systémy úvod Michal Valenta Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze c Michal Valenta, 2016 BI-DBS, LS 2015/16 https://edux.fit.cvut.cz/courses/bi-dbs/

Více

Jiří Mašek BIVŠ V Pra r ha 20 2 08

Jiří Mašek BIVŠ V Pra r ha 20 2 08 Jiří Mašek BIVŠ Praha 2008 Procesvývoje IS Unifiedprocess(UP) Iterace vývoje Rysy CASE nástrojů Podpora metodických přístupů modelování Integrační mechanismy propojení modelů Podpora etap vývoje Generování

Více

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK listopad 2009 souhrn v1 Červené dobře (nejspíš), modré možná Oracle Internet Directory OID: Databáze nemůže z OID přebírat seznam uživatelů *Databáze může získat z OID seznam

Více

6. SQL složitější dotazy, QBE

6. SQL složitější dotazy, QBE 6. SQL složitější dotazy, QBE Příklady : Veškeré příklady budou dotazy nad databází KONTAKTY nebo KNIHOVNA nebo FIRMA Databáze KONTAKTY OSOBA (Id_osoba, Příjmení, Jméno, Narození, Město, Ulice, PSČ) EMAIL

Více

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou MySQL Typy tabulek Storage Engines MyISAM defaultní, neumí transakce, umí fulltext InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) MEMORY (HEAP) v paměti; neumí transakce ARCHIVE velké množství

Více

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307 Stručný obsah část I Přehled jazyka SQL Kapitola 1: Úvod 27 Kapitola 2: Stručný úvod do jazyka SQL 37 Kapitola 3: Jazyk SQL z širšího pohledu 45 Kapitola 4: Relační databáze 69 Část II Získávání dat Kapitola

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Použití databází na Webu

Použití databází na Webu 4IZ228 tvorba webových stránek a aplikací Jirka Kosek Poslední modifikace: $Date: 2010/11/18 11:33:52 $ Obsah Co nás čeká... 3 Architektura webových databázových aplikací... 4 K čemu se používají databázové

Více

37. Indexování a optimalizace dotazů v relačních databázích, datové struktury, jejich výhody a nevýhody

37. Indexování a optimalizace dotazů v relačních databázích, datové struktury, jejich výhody a nevýhody 37. Indexování a optimalizace dotazů v relačních databázích, datové struktury, jejich výhody a nevýhody Využití databázových indexů Databázové indexy slouží ke zrychlení přístupu k datům a měly by se používat

Více

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů Kritéria hodnocení praktické maturitní zkoušky z databázových systémů Otázka č. 1 Datový model 1. Správně navržený ERD model dle zadání max. 40 bodů teoretické znalosti konceptuálního modelování správné

Více

Databáze II. 1. přednáška. Helena Palovská palovska@vse.cz

Databáze II. 1. přednáška. Helena Palovská palovska@vse.cz Databáze II 1. přednáška Helena Palovská palovska@vse.cz Program přednášky Úvod Třívrstvá architektura a O-R mapování Zabezpečení dat Role a přístupová práva Úvod Co je databáze Mnoho dat Organizovaných

Více

5. POČÍTAČOVÉ CVIČENÍ

5. POČÍTAČOVÉ CVIČENÍ 5. POČÍTAČOVÉ CVIČENÍ Databáze Databázi si můžeme představit jako místo, kam se ukládají všechny potřebné údaje. Přístup k údajům uloženým v databázi obstarává program, kterému se říká Systém Řízení Báze

Více

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant Základy informatiky 06 Databázové systémy Kačmařík/Szturcová/Děrgel/Rapant Problém zpracování dat důvodem je potřeba zpracovat velké množství dat, evidovat údaje o nějaké skutečnosti: o skupině lidí (zaměstnanců,

Více

Relační databáze. V dnešní době existuje řada komerčních DBMS, nejznámější jsou:

Relační databáze. V dnešní době existuje řada komerčních DBMS, nejznámější jsou: Relační databáze Pojem databáze, druhy databází Databází se myslí uložiště dat. V době začátků využívání databází byly tyto členěny hlavně hierarchicky, případně síťově (rozšíření hierarchického modelu).

Více

Kapitola 6: Omezení integrity. Omezení domény

Kapitola 6: Omezení integrity. Omezení domény - 6.1 - Omezení domény Referenční integrita Aserce Spouštěče (Triggers) Funkční závislosti Kapitola 6: Omezení integrity Omezení domény Omezení integrity zabraňují poškození databáze; zajišťují, že autorizované

Více

5. blok Souhrnné a skupinové dotazy

5. blok Souhrnné a skupinové dotazy 5. blok Souhrnné a skupinové dotazy Studijní cíl Tento blok je věnován základům při vytváření souhrnných a skupinových dotazů s využitím agregačních funkcí SUM(), AVG(), MIN(), MAX() a COUNT() a klauzulí

Více

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ GIS jako obraz reálného světa Reálný svět je pozorován pozorovatelem. Ten vytváří na základě

Více

Tabulkový procesor. Základní rysy

Tabulkový procesor. Základní rysy Tabulkový procesor Tabulkový procesor je počítačový program zpracovávající data uložená v buňkách tabulky. Program umožňuje použití vzorců pro práci s daty a zobrazuje výsledné hodnoty podle vstupních

Více

Informační systémy 2008/2009. Radim Farana. Obsah. Obsah předmětu. Požadavky kreditového systému. Relační datový model, Architektury databází

Informační systémy 2008/2009. Radim Farana. Obsah. Obsah předmětu. Požadavky kreditového systému. Relační datový model, Architektury databází 1 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Požadavky kreditového systému. Relační datový model, relace, atributy,

Více

Úvod do databázových systémů. Lekce 1

Úvod do databázových systémů. Lekce 1 Úvod do databázových systémů Lekce 1 Sylabus Základní pojmy DBS Životní cyklus DB, normalizace dat Modelování DBS, ER diagram Logická úroveň modelu, relační model Relační algebra a relační kalkul Funkční

Více

SQL - trigger, Databázové modelování

SQL - trigger, Databázové modelování 6. přednáška z předmětu Datové struktury a databáze (DSD) Ústav nových technologií a aplikované informatiky Fakulta mechatroniky, informatiky a mezioborových studií Technická univerzita v Liberci jan.lisal@tul.cz

Více

Úvod do databázových systémů

Úvod do databázových systémů Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 4 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Klauzule příkazu

Více

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Autor: Číslo: Anotace: Inovace a zkvalitnění výuky prostřednictvím ICT Databáze Základní seznámení s MySQL

Více