zrušení pohledu: DROP VIEW <jméno_pohledu> Vytvoření pohledu STIPENDISTE CREATE VIEW stipendiste 2 (Cindex,Jmeno_stud,Vyse_stipendia) AS 3 SELECT cind,jmeno,stip 4 FROM student 5 WHERE stip>0; SELECT * FROM stipendiste; UPDATE student SET stip=stip/2 2 WHERE cind=‘111/99‘; SELECT * FROM stipendiste; Zrušení pohledu STIPENDISTE DROP VIEW stipendiste: Používání SQL přináší tyto výhody: - snížení ceny na zaškolení pracovníků - vůrci a uživatelé aplikací mohou snadněji přecházet od jednoho databázového prostředku k jinému - přenositelnost vytvořené aplikace - aplikace vytvořená v konkrétním databázovém prostředku může být provozovaná v jiném prostředku beze změny, což umožňuje odladit danou aplikaci na PC a výsledek pak přenést na vyšší kategorii počítačů - délka života aplikace se zvyšuje - v případě nutnosti je možno přejít na jiný databázový prostředek a prodloužit tak životnost dané aplikace - společný přístup k datům v heterogenním prostředí - distribuované databáze provozované pod různým SŘDB Zjištění integrity dat - relační databázový stroj musí obsahovat mechanismy k zabezpečení báze dat pře případným úmyslným i neúmyslným poškozením a před zneužitím dat - takováto ochrana báze dat je realizována jako zajištění integrity báze dat. Při realizaci databázového systému je nutno zachytit všechna pravidla, pomocí kterých databázový stroj zajistí správnost a věrohodnost uložených dat = tzv. datovou integritu - tato pravidla vymezující nezbytnou korektnost uložených dat a rozhodující o proveditelnosti aktualizačních operací = tzv. integritní omezení (integrity constraints) Zajištění integrity dat - v klasických databázových systémech byla tato pravidla součástí databázových aplikací. Nevýhodné pro client-server architektury databázových systémů Důvody: - opakované programování integritních algoritmů = sít nadbytečně zatěžující komunikace mezi aplikací a serverem při jejich provádění Závěr: - integrita databáze musí být převážně garantována prostředky databázového server, tj. vlastní realizace pravidel garantujících Druhy integritních omezení Entitní integrita: tj. dodržení jednoznačné identifikace každého řádku dotyčné relační tabulky. Každá relační tabulka proto musí mít určen primární klíč (primary key) jako minimální množinu atributů, jejichž hodnoty společně identifikují každý řádek této tabulky - zabezpečení entitní integrity databáze znamená nepřipustit uložení žádného řádku, ve kterém je hodnota položky představující klíč či některou z jeho komponent nenaplněná nebo vzhledem k řádkům již uloženým duplicitní Realizace entitní integrity CERATE TABLE prednasejici
-9-
Christy
Databázové systémy I přednášky
2 3 4
(evcped CHAR(3) NOT NULL PRIMARY KEY, jmeno CHAR(12) datnar DATE);
INSERT INTO prednasejici VALUES(‚19e‘,‘Karel Novák‘,’25.3.1951‘); INSERT INTO prednasejici VALUES(‚23E‘,‘Josef Malík‘,’13.4.1963‘); INSERT INTO prednasejici VALUES(‚19E‘,‘Martin Kalaš‘,’13.4.1963‘); Doménová integrita Doména = množina všech přípustných hodnot určitého daného atributu (sloupce) relační tabulky - omezení doménové integrity je realizováno pravidlem definujícím tyto platné hodnoty, přičemž doména není totéž co datový typ daného atributu. K zachování takovéto doménové integrity databáze je nutné zabezpečit, aby každá hodnota obsažená v databázi byla pouze z množiny hodnot pro daný sloupec přípustných. Přípustnost hodnot atributu může být dokonce dána hodnotami jiného atributu i z jiných tabulek databáze Zajištění doménové integrity CERATE TABLE prednasejici 2 (evcped CHAR(3) NOT NULL PRIMARY KEY, 3 jmeno CHAR(12), 4 datnar DATE, 5 plat number(5) CHECK (plat BETWEEN 7000 AND 50000)); INSERT INTO prednasejici VALUES(‚19e‘,‘Karel Novák‘,’25.3.1951‘,7000); INSERT INTO prednasejici VALUES(‚19e‘,‘Josef Malík‘,’25.3.1951‘,55000); Referenční integrita - referenční integrita databáze garantuje korektnost vztahů mezi logicky souvisejícími tabulkami. Vazby mezi logicky nadřízenými a podřízenými záznamy v databázi jsou vytvářeny doplněním jednoznačné identifikace řádků logicky nadřízené tabulky do logicky podřízené tabulky pomocí tzv. cizího klíče (foreign key) - cizím klíčem v dokumentujícím příkladu je položka CPED v tabulce PREDMETY. Doplnění primárního klíče tabulky přednášejících do tabulky předmětů je realizací vztahu vyjadřujícího, který učitel garantuje jaké předměty Realizace referenční integrity CREATE TABLE predmety 2 (cpred CHAR(5), 3 nazev CHAR(15), 4 katedra CHAR(3), 5 evcped CHAR(3), 6 FOREIGN KEY (evcped) REFERENCES prednasejici(evcped)); INSERT INTO predmety VALUES (‚E1210‘,‘Expertní systémy‘ Realizace integritních omezení - deklarativní realizace - je explicitně definována („deklarováno“) jako součást databázového schématu a představuje způsob specifikace IO jako přímé součásti definice struktury databáze, tj. rozšíření příkazu definujícího struturu relační tabulky o klauzule umožňující deklaraci jednotlivých omezení - procedurální realizace - je založena na využití databázových procedur, které jsou realizovány prostřednictvím definic speciálních procedur, tzv. database triggers (spouští), které se vyvolávají („spouštějí“) při každém vkládání, aktualizaci nebo odstanění záznamu - akce nutné k udržení integrity databáze jsou v tomo 1. zakážu takovýto předmět nabízet 2. kaskádovitě dovedu změny z jedné tabulky do druhé - změny promítnu do podřízených tabulek 3. pomocí null hodnot (číslo garantujícího pedagoga budou samé nuly)
Datové modelování Coddova pravidla pro relační model 11. Pravidlo nezávislosti dat na distribuci - výsledek operací nesmí být ovlivněny konkrétním umístěním dat v distribuovaných databázích
- 10 -
Christy
Databázové systémy I přednášky
12. Pravidlo nenarušitelnosti SŘDB - žádný uživatel nesmí obcházet nebo narušovat rozhraní SŘDB Fyzická nezávislost dat - aplikace musí být izolovány od změn fyzické datové struktury, změna aplikace nesmí způsobit nutnou změnu paměového uložení struktur a opačně Logická nezávislost dat - aplikační pohled je izolován od změn ve schématu databáze (změna struktury nevynucuje změnu programu) Třístupnová architektura báze dat 3 úrovně abstrakce při pohledu na evidovaná data: - fyzická úroveň - nejnižší úroveň, popisuje jak jsou data fyzicky uloženy, pracuje s ní programátor SŘDB - konceptuální úroveň - popisuje strukturu dat DB a jejich vzájemné vztahy, tzv. schéma - modeluje reálný svět a vytváří jeho interní model pomocí logické a fyzické struktury dat, pracuje s ní tvůrce DB, správce DB - uživatelská úroveň - popisuje pro konkrétního uživatele pouze tu část DB, na kterou má pravomoc, tzv. subschéma, jejich počet = počet uživatelů Datový model - souhrn pravidel pro reprezentaci logické organizace dat v databázi Datové modelování Vícestupňová architektura DBS: - úroveň: externí schéma - popisuje datové struktury pro koncového uživatele (pohledy) = podmnožina konceptuálního schéma) - úroveň: konceptuální schéma - popisuje jednotlivé datové struktury a jejich vzájemné vazby - model - úroveň: interní schéma - vlstní popis implementace datových sturkur v implementačním prostředí Konceptuální datové modelování (Chenův E-R model): - konceptuální datový model - struktura dat obecně bez ohledu na DBS - logický datový model - konkretizuje model na daný DBS - datový model v definičním jazyku - výsledný pro rutinní zpracování Principy E-E modelování: - orientace na objekty - pracujeme s objekty RIDIC, VOZIDLO nikoliv s identifikacemi - funkcionální podstata vztahů - vztahy mezi objekty jsou definovány jako funkce, např. MA_PRIDELEN - ISA-hierarchie - pro práci s nadtypy a podtypy - hierarchický mechanismus pro konstrukci objektů Úrovně objektů v E-R modelování STUDENT
Entitní množina
STUDENT
atribut
Cislo_indexu
Jmeno Rocnik Datum_nar
ABSOLVOVAL
vztahová množina
Způsoby konstruování datového modelu - "zdola nahoru" - východiskem je univerzální rleace (U) obsahující všechny atribut řešené problémové domény, následuje specifikování funkčních závislostí mezi jednotlivými atributy. Např. U(Cislo_indexu, Jmeno, Rocnik, Datum_nar, Znamka, Katedra, Cislo_ped, Jmeno_ped, Datum_zkousky, Cislo_predmetu, Nazev_predmetu, Fakulta...) Cislo_indexu -> Jmeno, Rocnik, Datum_nar Cislo_predmetu -> Nazev_predmetu Cislo_indexu, Cislo_predmetu -> Datum_zkousky, Znamka, Cislo_pedagoga
- 11 -
Christy
Databázové systémy I přednášky
Cislo_ped -> Jmeno_ped - tento postup přímo přechází na logickou úroveň -> pouze pro vytváření modelů s max. 25 atributy - "zhora dolu" - nejprve jsou specifikovány struktury entitních množin a následně funkční závislosti mezi nimi Jenotlivé kroky modelování "shora dolů": 1. krok: Specifikace entitních množin - východiskem je verbální popis STUDENT PEDAGOG
PŘEDMĚT KATEDRA
- specifikovaným objektům (entitním množinám) se přiděli vhodné jméno 2. krok: Specifikace vztahů - důležitá kardinalita vztahu 1:1 1:N M:N Povinnost vztahu: přerušovaná spojnice - nepovinnost vztahu
ABSOLVUJE
STUDENT
PEDAGOG
GARANTUJE
PŘEDMĚT
JE_ČLENEM
KATEDRA
3. krok: přiřazení primárních klíčů Cislo_ind ABSOLVUJE
STUDENT Cislo_ped
PEDAGOG
Cislo_predmetu GARANTUJE
PŘEDMĚT Cislo_katedry
JE_ČLENEM
KATEDRA
4. krok: Transformace modelu do logické struktury - konceptuální datový model je rozpracován do logické struktury "předběžných" relací. Tyto relace ovlivněy kardinalitou vztahů:
- 12 -
Christy
Databázové systémy I přednášky
- vztah 1:1 - je-li účast obou entitních množin ve vztahu povinná, postačí pro realizaci pouze jedna relace, jinak NULL hodnoty v primárních klíčích - vztah 1:N - nejčastější, řešení minimálně 2 relacemi - vztah M:N 5. krok: Doplnění zbývajících atributů do předběžných relací Cislo_ind
Datum_zkoušky
Rocnik Jméno_studenta
Známka
ABSOLVUJE
STUDENT Cislo_ped Jméno_ped
Cislo_predmetu GARANTUJE
PEDAGOG
PŘEDMĚT Katedra
JE_ČLENEM Od
Název_predm
Cislo_katedry
Fakulta
KATEDRA
Do
6. krok: Prověření modelu z hlediska normalizace - strukturální správnost konzistence datového modelu CÍLE DATOVÉ NORMALIZACE: - umožnění reprezentace každé relace v DB - optimalizace algoritmů vyhledávání - zjednodušení aktualizace a rušení vět = postupný reverzibilní proces nahrazování dané množiny relací relacemi, které mají jednodušší strukturu Vlastnosti datové normalizace: - umožňuje ověření správnosti navrženého modelu - slouží k dekompozičnímu návrhu tabulek s minimální redundancí dat - není deterministická (více správných řešení) - lze ji kombinovat s ostatními technikami (dekompozice a syntéza) Způsoby konstruování datového modelu Chybný návrh: Evidence prospěchu Jméno žáka Datum Zkoušení J. Dvořák 10.9,15.10,29.10
Známka 1,3,3
Chybný návrh: Jméno_žáka Datum_Zk1 Známka1 .. .. Datum_Zk n Známka n J. Dvořák 10.9. 1 .. .. 29.10 3 Způsoby konstruování datového modelu - datová normalizace 1 NF
2 NF
3 NF
Přínosy datové normalizace: - zabránění vzniku duplicitní dat (redundancí) - šetří kapacitu média - zjednodušuje aktualizaci a vyhledávání dat Dekomponované relace možno opět funkčně zvolit (operace JOIN)
- 13 -
Christy
Databázové systémy I přednášky
1. NF: relace nesmí obsahovat násobná data Prospěch (Cislo_stud, Jmeno, Adresa, Datum_zkousky, Znamka) 0001A Dvořák Kolín 22 10.9.02 4 0002A Kalaš Čáslav 5 10.9.02 1 0001A Dvořák Kolín 22 17.9.02 2 0002A Kalaš Čáslav 5 21.9.02 2 0001A Dvořák Kolín 22 1.10.02 2 Po normalizaci: STUDENTI
Cislo_stud
Jmeno
Adresa
ZNÁMKY
Cislo_stud
Datum_zkousky
Známka
2. NF: Všechna neklíčová data relace musí funkčně záviset na celém primárním klíči
Cislo_stud Cpredm
Datum_zkousky
Znamka
Název_predm Pedagog
Po normalizaci: ZKOUSKY
Cislo_stud
C_predm Datum_zkousky Znamka
PREDMETY
C_predm Nazev_predm
Pedagog
Funkční závislost: Datový prvek B záznamu je funkčně závislý -> ke každé hodnotě A náleží nejvýše jedna hodnota B > A identifikuje B Spojení tabulky sama se sebeou SELECT a.jmeno, b.jmeno 2 FROM student a, student b 3 WHERE a.jmeno < b.jmeno Vnější spojení tabulek - vnější spojování tabulek se používá i pro výpis, záznamů, které nestpňují spojovací kriterium, symbolem operátora je v tomto případě (+) - operátor se umístí na tu stranu příslušné tabulky, kde mohou potencionálně chybět informace SELECT student.cind, jmeno, dat.stzkousky, znamka 2 FROM student, statnice 3 WHERE student.cind = statnice.cind (+); SELECT student.cind, jmeno FROM student 2 WHERE student.cind NOT IN 3 (SELECT statnice.cind FROM statnice); Způsoby konstruování datového modelu - datová normalizace 3. NF - všechna neklíčová data musí záviset pouze na klíčových donotách a nikoliv mezi sebou Příklad:
Cislo_pedagoga
Jméno_pedagoga Datnar Cislo_kvalifikace Nazve_kvalifikace
Pedagog
Cislo_pedagoga
Jméno_pedagoga
Kvalifikace
Cislo_kvalifikace
Nazev_kvalifikace
Datnar
- 14 -
Christy
Databázové systémy I přednášky
7. krok: přiřazení domén jednotlivým atributům - v rámci tohoto kroku je třeba stanovit charakteristiky jednotlivých atributů - tj. domén: - datový typ - délka - rozsah - přípustné hodnoty - formát (maska) - jedinečnost (primární klíč) - přípustnost "NULL" hodnoty Datový typ: CHAR a VARCHAR2 - datové typy CHAR a VARCHAR2 - znakové - mohou obsahovat data skládající se z písmen, číslic a jiných znaků CHAR (délka) - pro uložení řeězce o pevné délce, paramter délka je povinný <1;2000> VARCHAR2 (délka) - pro uložení řetězce proměnné délky, paramter délka je povinný <1;4000> Příklad: Město = Kolín 1
2
3
4
5
MĚSTO CHAR(10)
K
o
l
í
n
MĚSTO VARCHAR2(10)
K
o
l
í
n
6
7
8
9 10
8. krok: stanovení pravidel pro rušení, vkládání a modifikování dat - jde o upřesnění vazeb mezi jednotlivými atributy navrženého modelu (především podmínky) 9. krok: analýza budoucího vývoje modelu - domény - posouzení předpokládaných změn domén, primárních klíčů kardinality vztahu, integritních omezení atd. závěr: nutno koordinovat týmovou práci, vyloučit intuitivní postupy - důsledné dodržení postupu tvorby logického modelu minimalizuje výskyt nenormalizovaných relací a s tím spojených problémů 5. krok: Doplnění zbývajících atributů do předběžných relací Cislo_ind
Datum_zkoušky Rocnik Jméno_studenta Cislo-ind
Známka
ABSOLVUJE
STUDENT Cislo_ped Jméno_ped
Cislo_predmetu GARANTUJE
PEDAGOG
PŘEDMĚT Katedra
JE_ČLENEM Od
Název_predm
Do
Cislo_katedry
Fakulta
KATEDRA FAKULTA
- 15 -
Christy
Databázové systémy I přednášky
Datum_zkoušky Cislo_ind
Rocnik Jméno_studenta
Známka ABSOLVUJE
STUDENT Cislo_ped Jméno_ped
Cislo_predmetu GARANTUJE
PEDAGOG
PŘEDMĚT Katedra
JE_ČLENEM Od
Název_predm
Cislo_katedry
Fakulta
KATEDRA
Do
- přidám Cislo_ped k PŘEDMĚT Stuktury výsledných tabulek: PEDAGOG (Cislo-ped, Jméno_ped) Koncepce SŘDB Oracle - databázová technologie představuje unifikovaný soubor pojmů, prostředků a technik pro vytváření informačních systémů - hlavní nástroj SŘDB Oracle je relační db stroj - zajišťuje správu všech dat uložených v databázi - relační db stroj pracuje na počítači řízeném hostitelským OS, v rámci počítačové sítě se označuje jako hostitelský uzel Struktura databáze: - soubory s kódem programu - hostitelské db soubory - protokolační soubory - pro obnovení databáze po havárii - řídící soubory - malé binární soubory spjaté s danou databází s důležitými informacemi (např. informace o mezivýsledcích sejmutých v tzv. bodech návratu) Vnitřní členění databáze: - logickou strukturu databáze popisuje systémový katalog, tvz. slovník dat Databáze se člení na: - datový segment - segment pro dočasné objekty - indexový segment - rollback segment - pro každou probíhající transakci se v pracovní oblasti těchto segmentů vede deník transakcí Segmenty se člení na oblasti skládající se z datových bloků s následující strukturou: - záhlaví a adresář záznamů nacházející se v daném bloku - volný prostor a prostor obsazený záznamy Pohledy do slovníku dat: - běžnému uživateli nejsou k dispozici tabulky se systémovými informacemi, ale pouze pohledy na ně. K tomu lze použít standardní příkazy: Např: Výpis struktury všech objektů, které vlastní uživatel DESC USER OBJECTS Např: Výpis struktury všech objektů všech uživatelů: DESC ALL OBJECTS
- 16 -
Christy
Databázové systémy I přednášky
Např. Výpis struktury tabulky STUDENT: DESC ALL OBJECTS Datové typy ORACLE: - CHAR(n) - VARCHAR(a) - NUMBER(p,s) - DATE - (DD-MON-YY např. 10-JAN-03) - LONG - řetězec znaků proměnné délky 1-2 GB - RAW(ln) - binární data o proměnné délce týkající konkrétního záznamu tabulky - LONGRAW - shodný význam jako prodchozí, délka až 2 GB - ROWID - binární údaj (pseudosloupec je součástí tabulky) obsahuje informace o daném DB souboru, o bloku v rámci tohoto souboru a o záznamu v rámci tohoto SQL*PLUS: - prostředek pro interaktivní nebo dávkovou komunikaci koncového uživatele s db strojem ORACLE Příkaz lze zadávat: - v základním režimu - ukončovat středníkem, je ukládán do vyrovnávací paměti - tzv. příkazový buffer - řídící příkaz - pro řízení SQL*PLUS a formátování odpovědí na dotazy nejčastější: INPUT - převádí dialog do režimu vkládání skupiny řádků do bufferu - bloky PL/SQL - celý blok se ukládá do příkazového bufferu a režim vkládání se ukončuje tečkou nebo prázdným řádkem Řízení dialogu uživatele s SQL*PLUS: SET PAGESIZE 24 SET PAUSE ON - odezvy budou členěny po obrazovkách s 24 stránkami a zobrazování bude zastavovat po obrazovkách a čekat na stisk libovolné klávesy CLEAR BUFFER INPUT 1 SELECT * FROM prednasejic;i 2 RUN 1 SELECT * FROM prednasejic; SQL*PLUS: měření doby provádění příkazu TIMING START SELECT * FROM prednasejici; TIMING STOP SQL*PLUS: editace obsahu příkazového řádku LIST - vypíše obsah bufferu, přičemž aktuální řádek je předznačen hvězdičkou LIST CLEAR BUFFER - vymaže veškerý obsah příkazového bufferu CLEAR BUFFER LIST DEL - vymaže aktuální řádek LIST DEL LIST RUN CHANGE /starý/nový - v aktuálním řádku bude nalezen první výskyt "starého" zankového řetězce a nahrazen "novým" znakovým řetezcem LIST CHANGE /Praha 1/Praha 9 RUN
- 17 -
Christy
Databázové systémy I přednášky
INPUT textový řetězec - vloží za aktuální řádek nový řádek SELECT * FROM student; LIST INPUT WHERE rocnik='3' RUN / - odešle obsah příkazového bufferu ke zpracování LIST / SAVE jméno souboru - uloží obsah bufferu do textového souboru zadaného jména. pokud na disku stejnojmenný soubor již existuje, lze jej přepsat atributem REPALACE příkazu SAVE CLEAR BUFFER INPUT 1 SELECT * FROM predmety 2 SAVE vypis REPLACE START vypis SQL*PLUS: Formátování výstupů - způsob podtržení - změna tvaru podtržení pomocí požadovaného znaku lze realizovat příkazem SET UNDERLINE znak SET UNDERLINE = SELECT * FROM student; SQL*PLUS: Tvar výstupních sestav TTITLE CENTER 'Vypis studentů' BTITLE CENTER 'Určeno pro proděkany fakulty' SELECT * FROM student; - platnost příkazů TTITLE a BTITLE je nutno ukončit příkazem: TTITLE OFF nebo BTTITLE OFF. V opačném případě se jejich funkčnost přenáší do dalších akcí SQL*PLUS: Formátování sloupců SHOW parametr - příkaz pro zobrazení aktuální hodnoty systémové proměnné: SHOW BTITLE SELECT * FROM predmety; CLEAR BUFFER INPUT 1 COLUMN nazev HEADING "Název předmětu" 2 COLUMN katedra HEADING "Garantující katedra" 3 SELECT nazev, katedra FROM predmety 4 SAVE vypis1 START vpis1 SQL*PLUS: editace příkazového souboru START vypis LIST GET vypis LIST 1 CHANGE /zamestnance/pracovnika/ SAVE vypis REPLACE START vypis SQL*PLUS: formátování výstupů CLEAR BUFFER INPUT 1 COLUMN jmeno HEADING 'Jméno přednášeícího' FORMAT A20 2 COLUMN plat HEADING 'Výše platu' FORMAT 999999,99 3 TTITLE 'Výpis platů přednášejících||****************************** 4 SELECT jmeno, plat FROM prednasejici
- 18 -
Christy
Databázové systémy I přednášky
5 SAVE vypisplatu REPLACE START vypisplatu CLEAR COLUMNS; TTITLE OFF; SELECT * FROM prednasejici; SQL*PLUS: JOIN relace sama na sebe SELECT * FROM prednasejici; Příklad: Vypište všechny možné dvojice přednášejících pro možný zástup v případě absence SELECT a.jmeno AS "1. přednášejicí", b.jmeno AS "2. přednášející" 2 FROM prednasejici a, prednasejici b 3 WHERE a.jmeno>b.jemno;
SQL*PLUS: nejčastější chyby v testu 1) Vnořený příkaz: SELECT * FROM student; CHYBNĚ: SELECT jmeno,min(stip) FROM student; 1) Jméno studenta s nejnižším stipendiem SELECT jmeno,stip FROM student 1 WHERE stip=(SELECT min(stip) FROM student); PROČ: 2. 1. zjištění jména pro stip=min(stip) min(stip) 2) UPDATE UPDATE student SET stip=stip/2 1 WHERE stip>5000; CHYBNĚ: UPDATE student SET stip/2 1 WHERE stip>5000; 3) Pohled ze dvou tabulek PEDAGOG(Cped,Jmeno,Datnar,Katedra) PREDMET(Kodpred,Nazev,Cped) CREATE VIEW vypis 1 (Jmeno,Datnar,Nazev) AS 2 SELECT jmeno,datnar,nazev 3 FROM pedagog,predmet 4 WHERE predagog.cped=předmět.cped; SELECT * FROM vypis; CHYBNĚ: CREATE VIEW vypis 1 (Jmeno,Datnar,Nazev) AS 2 SELECT jmeno,datnar 3 FROM pedagog,predmet 4 WHERE pedagog.cped=předmět.cped; 4) Počty předmětů garantované jednotlivými pedagogy, kteří garantují více jak 3 předměty PEDAGOG(Cped,Jmeno,Datnar,Katedra) PREDMET(Kodpred,Nazev,Cped) SELECT cped,COUNT(*) FROM predmet 1 GROUP BY cped HAVING count(*)>3; CHYBNĚ: SELECT cped,COUNT(*) FROM predmet 1 GROUP BY cped WHERE count(*)>3; SELECT cped,COUNT(*) FROM predmet 1 GROUP BY jmeno WHERE
- 19 -
Christy
Databázové systémy I přednášky
5) Zajištění referenční integrity STUDENT(Cind,Jmeno,obor,datumvolby,koddp) DIPLPRACE(Koddp,Nazev) CREATE TABLE student 1 (cind CHAR(4) PRIMARY KEY, 2 jmeno CHAR(15), 3 obor CHAR(3), 4 datumvolby DATE, 5 koddp CHAR(3), 6 FOREIGN KEY (koddp) REFERENCES diplprace(koddp)); CHYBNĚ: CREATE TABLE student 1 (cind CHAR(4) PRIMARY KEY, 2 jmeno CHAR(15), 3 obor CHAR(3), 4 datumvolby DATE, 5 FOREIGN KEY (koddp) REFERENCES diplprace(koddp)); také chybějící primární klíč SQL*PLUS: příkazové dávky Příkazové soubory a dávkové zpracování příkazový buffer může obsahovat pouze jeden (poslední příkaz) vhodnější: příkazový soubor, lze jej založit: - v základním režimu zadat konkrétní SQL příkaz a pak uložit obsah bufferu příkazem SAVE - v základním režimu zadat příkaz INPUT (přepnutí do režimu vkládání příkazů) a ukončit vkládání lze odesláním prázdného řádku Neopomenout: - vyprázdnit buffer (CLEAR BUFFER) - překontrolovat momentální stav SET - platnost TTITLE a BTITLE ukončit - stav SHOW parametr (TTITLE OFF nebo BTITLE OFF) SQL*PLUS: návrat k uložené příkazové dávce GET vypisplatu možno editovat (CHANGE) možno startovat SQL*PLUS: parametrická dávka - sada příkazů pro opakované použití CLEAR BUFFER INPUT 1 DEFINE titul1='PŘEHLED PŘEDNÁŠEJÍCÍCH ZA JEDNOTLIVÉ KATEDRY' 2 DEFINE titul2='======================================' 3 TTITLE LEFT titul1 RIGHT 'Strana: ' SQL.PNO SKIP1 LEFT titul2 4 SET UNDERLINE * 5 COLUMN jmeno HEADING 'Jméno predasejiciho' FORMAT A20 6 COLUMN datnar HEADING 'Datum narozeni' FORMAT A15 7 COLUMN katedra HEADING 'Název katedry' FORMAT A15 8 PROMPT Zadej název požadované katedry 9 ACCEPT pozadkat CHAR 10 SELECT jmeno, datnar, katedra FROM prednasejici 11 WHERE katedra=&pozadkat 12 SAVE vypiskated REPLACE - spuštění parametrické dávky s parametrem KII START vypiskated 'KII' - spuštění parametrické dávky s parametrem KIT START vypiskated 'KIT'
- 20 -
Christy
Databázové systémy I přednášky
SQL*PLUS: CREATING REPORTS - BREAK ON BREAK ON column; BREAK ON PAGE; BREAK ON REPORT; BREAK ON ..... SKIP a; BREAK ON ..... PAGE; SQL*PLUS: CREATING REPORTS - SKIP n SELECT * FROM prednasejici; BREAK ON katedra SKIP2; SELECT * FROM prednasejici ORDER BY katedra; SQL*PLUS: CREATING REPORTS - COMPUTE BREAK ON REPORT; COMPUTE COUNT OF evcped ON REPORT; SELECT * FROM prednasejici; BREAK ON katedra SKIP2; COMPUTE SUM OF plat ON katedra; SELECT katedra,jmeno,plat FROM prednasejici ORDER BY katedra; CLEAR COMPUTE; CLEAR BREAK; SQL*PLUS: CREATING REPORTS - COL n TTITLE COL 10 'VYPIS INTERNICH PEDAGOGU' SELECT * FROM prednasejici; SQL*PLUS: CREATING REPORTS - PAGESIZE SET PAGESIZE 30 SET LINESIZE 30 INPUT 1 SET UNDERLINE = 2 CLEAR COMPUTE 3 CLEAR COLUMN 4 CLEAR BREAK 5 TTITLE COL 5 'VÝPIS PŘEDNÁŠEJÍCÍCH ZA JEDNOTLIVÉ KATEDRY' SKIP1 COL 5 '*************' 6 COLUMN jmeno HEADING 'Jméno přednášejícího' FORMAT A21 7 COLUMN datnar HEADING 'Datum narození' FORMAT A14 8 COLUMN plat HEADING 'Výše platu' 9 COLUMN katedra HEADING 'Katedra' FORMAT A7 10 BREAK ON katedra SKIP 2 11 COMPUTE AVG OF plat ON katedra 12 SELECT katedra,jmeno,datnar,plat 13 FROM prednasejici 14 ORDER BY katedra 15 SAVE vypis REPLACE SQL*PLUS: CREATING REPORTS - BREAK ON start vypis
Uplatnění substitučních parametrů - výpis studentů na podkladě obsluhou zadaného jména a adresy: INPUT 2 SELECT * FROM student 3 WHERE jmeno='&1' AND adresa='&2' 4 SAVE TEST
- 21 -
Christy
Databázové systémy I přednášky
SET VERIFY OFF START TEST Novák Praha 1 "Spoolování" výsledku do textového souboru Spool TEMP Clear Columns Clear Breaks Clear Computers Column CIND Heading 'CISLO INDEXU' format A14 Column JMENO Heading 'BYDLISTE' format A20 Break On ADRESA Skip 1 On Report Compute COUNT of CIND ON ADRESA Compute COUNT of CIND On Report Set PageSize 30 Set LineSize 50 Ttitle Left 'INFORMACE O STUDENTECH' right 'Strana: ' Format 99 SQL.PNO Skip 2 Btitle CENTER 'Urceno pouze pro studijní oddeleni' Select CIND,JMENO,ADRESA From STUDENT Order By ADRESA Spool Out - program bude uložen pod názvem TEST.SQL a lze jej odstartovat příkazem START TEST. Požadovaný výpis studentů lze nalézt (tisknout a prohlížet libovolným editorem) v souboru TEMP.LST. Tisk hodnoty sloupce v záhlaví VÝPISU TTITLE LEFT 'Bydliste: ' Bydl SKIP 2; BREAK ON adresa SKIP PAGE; SELECT adresa,jmeno,cind FROM student ORDER BY adresa; COLUMN adresa NEW_VALUE Bydl; - Bydl představuje paměťovou proměnnou naplňovanou hodnotami z položky ADRESA příkazem COLUMN ADRESA NEW_VALUE Bydl; - výpis bude stránkovat podle položky ADRESA, přičemž v záhlaví výpisu se objeví konkrétní hodnota této položky Výpočet dílších a celkových agregací Příkazy: BREAK ON adresa; COMPUTE COUNT OF cind ON adresa; SELECT adresa,jmeno,cind FROM student ORDER BY adresa; - za každou skupinu studentů se stejnou adresou se zobrazí počet studentů se shodným bydlištěm. Platnost příkazu COMPUTE zrušíte odesláním příkazu: CLEAR COMPUTES; Počet studentů za celý soubor: BREAK ON REPORT; COMPUTE COUNT OF cind ON REPORT; SELECT adresa,jmeno,cind FROM student ORDER BY adresa; Výhody používání SQL - snížení ceny na zaškolení pracovníků - tvůrci a uživatelé aplikací mohou snadněji přecházet od jednoho SŘDB k jinému - přenositelnost vytvořené aplikace - aplikace vytvořená v konkrétním SŘDB může být provozovaná v jiném prostředku beze změny - vhodné odladit danou aplikaci na personálním počítači a výsledek pak přenést na jinou kategorii počítačů - délka života aplikace se zvyšuje - v případě nutnosti je možno přejít na jiný databázový prostředek a prodloužit tak životnost dané aplikace - společný přístup k datům v heterogenním prostředí - distribuované databáze provozované pod různým SŘDB Nedostatky - nevýhody SQL - normalizací ANSI dodržují jen někteří producenti - problematická konstrukce výrazu SELECT FROM WHERE projekce (selekce (kartézský součin) relace1 ... relacen)je nevhodná, lépe: selekce (projekce(relace) - nelze definovat vlastní funkce - problematická existence WHERE a HAVING
- 22 -
Christy
Databázové systémy I přednášky
SELECT * FROM student 2 WHERE stipendium>2000; SELECT rocnik,COUNT(*) FROM student 2 GROUP BY rocnik HAVING rocnik<'3'; - SQL slouží pro komunikaci se SŘDB, neobsahuje prostředky běžného programování - nelogická duplicita konstruktů: CREATE TABLE prednasejici 2 (evcped CHAR(3) NOT NULL PRIMARY KEY, 3 jmeno CHAR(12), 4 datnar DATE, 5 plat number(5) CHECK (plat BETWEEN 7000 AND 50000)); CREAT TABLE predmety 2 (cpred CHAR(5), 3 nazev CHAR(15), 4 katedra CHAR(3); 5 evcped CHAR(3); 6 FOREIGN KEY (evcped) ... Dotazovací jazyky - SQL Systémové informace - informace o struktuře databáze (definované tabulky, pohledy, indexy atd.) jsou uloženy stejným způsobem jako vlastní data, tj. ve formě tabulky. Takovéto uložení je výhodné, protože informace o databázi je možno běžně vybírat pomocí příkazu SELECT... Příklad: výpis jména objektu, vlastníka a typu objektu SELECT tname,creator,tablety FROM catalog; Oprávnění přístupu k datům - nejlépe řešit na základě identifikace uživatele, kterého postupně povyšujeme v jeho pravomocích - autor tabulky má automaticky všechna oprávnění pro všechny operace s ní GRANT {ALL|<seznam-oprávnění>} ON <jméno-tabulky> TO {PUBLIC |<seznam-uživatelů>} dílčí oprávnění: SELECT - povoluje pouze čtení dat z tabulky INSERT - povoluje vkládání dat do tabulky UPDATE - povoluje oprava dat v tabulce DELETE - povoluje rušení dat z tabulky ALL - povoluje veškerá oprávnění Příklad: GRANT SELECT, UPDATE ON student TO referent1; - zpětné odnětí přidělených práv - příkaz REVOKE REVOKE {ALL|<seznam-oprávnění>} ON <jméno-tabulky> FROM {PUBLIC|<seznam-uživatelů>} Příklad: REVOKE UPDATE ON student TO refernt1; - přidělování oprávnění uživatelským skupinám - tzv. role - nutno vytvořit katalog rolí a jim přidělit potřebná oprávnění Příklad: - založení role PRODEKAN se všemi právy pro tabulku STUDENT a přidělit ji Prof.Prokešovi CREATE ROLE prodekan; GRANT ALL ON student TO prodekan; GRANT prodekan TO Prokes; Transakční zpracování - transakční zpracování zajišťuje konzistence dat v existujících tabulkách Možnosti: Příkazy ROLLBACK COMMIT SAVEPOINT COMMIT - Potvrzení platnosti transakce COMMIT
- 23 -
Christy
Databázové systémy I přednášky
ROLLBACK - příkaz odvolávající všechny nepotvrzené změny, přičemž odvolat transakci může pouze ten uživatel, který operaci provedl SELECT * FROM exemplar; UPDATE exemplar SET cena=cena*0.5; SELECT * FROM exemplar; ROLLBACK; SELECT * FROM exemplar; - příkaz ROLLBACK je možno použít i pro případ omylem vymazaného záznamu Příklad: - vymaže v tabulce REZERV záznam s číslem čtenáře J60 a následně toto zrušení příkazu odvolejte SELECT * FROM rezerv; DELETE FROM rezerv WHERE c_ct='J60'; SELECT * FROM rezerv; ROLLBACK; SELECT * FROM rezerv; Vytvoření návratových bodů - předchozí varianty popisují způsob odvolání všech nepotvrzených změn od posledního příkazu COMMIT nebo od posledního regulérního ukončení konzolové aplikace - v případě neregulérního ukončení se provede automatický ROLLBACK. Tento příkaz však odvlává všechny doposud nepotvrzené změny vykonané uživatleme Alternativa: - pomocí píkazu SAVEPOINT vytvořit body návratu pro případné odvolání transakce k určitému bodu SAVEPOINT vyrazeni; DELETE FROM ctenar WHERE c_ct='H32'; UPDATE ctenar SET dat_nar='07.07.77' WHERE c_ct='H31'; SELECT * FROM ctenar; ROLLBACK TO vyrazeni; SELECT * FROM ctenar;
PHP a databáze: PHP - meziplatformní skriptovací jazyk, doplněk HTML zpracovávaný na straně serveru - instrukce PHP načítá a provádí server, nikdy se nedostanou až k prohlížeči. Server WWW nahrazuje kód jazyka PHP obsahem, který generuje - skript v PHP = textový soubor s příponou .php nebo .html - kód PHP je od kódu HTML oddělen speciální znaky - server určí způsob jeho interpretace prohlížeči - pro označení začátku se používá kombinace znaků: PHP srovnání s HTML a JavaScript: - jazyku HTML chybí akce a dynamika - důvod vzniku JavaScript - JavaScript pracuje na straně prohlížeče a proto nemůže měnit data nebo pracovat s databázemi - vznik PHP Princip PHP: PHP - programovací jazyk vstuvek, které se dají vkládat do obyčejných HTML souborů. Symbolicky zapsáno: html zdroj, pokračování html zdroje - soubory s takovými vsuvkami se pojmenovávají příponou *.php. Při požadavku na PHP stránku server prochází soubor, vsuvky programově vyhodnoscuje a klientovi odesílá už čisté HTML - na výstup dorazí: html zdroj, výsledek PHP vsuvky porkačování thml zdroje Syntaxe jazyka PHP: 1. V názvech proměnných se rozlišují velká a malá písmena 2. Jednotlivé příkazy se ukončují středníkem 3. Komentář // komentář 4. Názvy proměnných začínají symbolem dolaru ($) 5. Proměnné jsou beztypové, mohou obsahovat hodnoty libovolného typu. Jazyk proměnnou nedeklaruje automaticky, když se do ní poprvé vkládá hodnota. Př. $vozidlo="auto";
- 24 -
Christy
Databázové systémy I přednášky
Datové typy v PHP: - celá čísla ($počet=16;) - reálná čísla ($cislo=0.25;) - řetězce ($jmeno="Jan";) - pole ($pol[0]="auto";) ($pol[1]="kolo";) - objekty - složený datový typ obsahující libovolný počet proměnných a funkcí Echo - zobrazení údaje v prohlížeči Např. echo "vítáme tě návštěvníku"; PHP a databáze MySQL: " while ($row=mysql_fetch_array($result)) echo "
Jan | Klouček |
Jiří | Kostelka |
Josef | Machek |