Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava Databázové systémy Databázové jazyky Jaroslav Pokorný FI BVŠP Bratislava
Databázové jazyky jazyky pro manipulaci dat (JMD) aktualizační příkazy INSERT, DELETE, UPDATE dotazovací jazyky (relační algebra, SELECT v SQL) jazyky pro definici dat (JDD) příkaz CREATE TABLE a další v SQL J. Pokorný
Databázový dotaz Praktická definice databázového dotazu (Databázový) dotaz typu (S T) je vyčíslitelná funkce q, která pro každou databázi S* poskytne odpověď q(S*) typu T. omezení: hodnoty v q(S*) jsou z S*, odpověď nezávisí na reprezentaci dat v DB prvky DB se chápou jako neinterpretované objekty Dotazovací jazyk nad S je množina výrazů na konečnou abecedou + významová funkce přiřazující každému výrazu dotaz. J. Pokorný
Vyjadřovací síla Vyjadřovací síla dotazovacího jazyka J nad S je množina všech dotazů M(J), které lze pomocí J vyjádřit. J1 < J2 právě když M(J1) M(J2) J1 J2 právě když M(J1) = M(J2) Dotazovací jazyk, kterým lze vyjádřit všechny databázové dotazy se nazývá úplný. J. Pokorný
Dotaz v relační algebře Př.: postup po krocích – uložení mezivýsledků KINO(Název_k, Adresa), FILM(Jméno_f, Herec, Rok) MÁ_NA_PROGRAMU(Název_k, Jméno_f, Datum) 1. krok (selekce) R1:= MÁ_NA_PROGRAMU(Název_k = ‘Mír’) J. Pokorný
Dotaz v relační algebře 2. krok (projekce) R2 := R1[jméno_f, Datum] 3. krok (spojení) R3 := FILM * R2 J. Pokorný
Dotaz v relační algebře 4: krok (projekce) R4:= R3[Herec] bez mezivýsledků: (MÁ_NA_PROGRAMU(název_k=‘Mír’)[jméno_f, Datum] * FILM) [Herec] česky: "Nalezni herce, kteří hrají ve filmech v kinu Mír". J. Pokorný
Za relačním modelem prázdná hodnota NULL, pravdivostní hodnota UNKNOWN (levé, pravé, plné) vnější spojení Motivace pro NULL: seznam filmů v jednotlivých kinech, avšak i v těch, kde se zrovna nic nekoná (dotaz KINO * MÁ_NA_PROGRAMU problém neřeší) J. Pokorný
Za relačním modelem J. Pokorný
Za relačním modelem levé vnější spojení R *L S = (R * S) (R’ (NULL,...,NULL)), kde R’ R – (R * S)[A] Důsledky: (R *LS)[A] R, pravé vnější spojení R *R S = (R * S) ((NULL,...,NULL) S’) úplné vnější spojení R *F S = (R *L S) (R *R S) J. Pokorný
Úvod do jazyka SQL Jazyk SQL vznikl z jazyka SEQUEL (Structured English Query Language) vyvíjeného ve firmě IBM (publ. v r. 1974) V r. 1986 standardizován SQL Další standardy: SQL92, SQL:1999, SQL:2003, Pz.: každý následující je nadmnožinou předchozího J. Pokorný
Přehled SQL92 jazyk pro definici dat, interaktivní jazyk pro manipulaci dat, jazyk pro manipulaci dat v hostitelské verzi, možnost definice pohledů, možnost definice IO, systémový katalog možnost definice přístupových práv, jazyk modulů, řízení transakcí. J. Pokorný 2
Schéma příkladu VÝPŮJČKY(Č_KOPIE, Č_ZAK, ROD_Č, CENA, DATUM_V) {údaje o výpůjčkách kopií - číslo zakázky, zákazník, cena, datum navrácení} KINA(NÁZEV_K, ADRESA, JMÉNO_V) {údaje o kinech a jejich vedoucích} FILMY(JMÉNO_F, REŽISÉR) {údaje o filmech a jejich režisérech} PŘEDSTAVENÍ(NÁZEV_K, JMÉNO_F, DATUM) {údaje o kinech hrajících filmy} ZÁKAZNÍCI(ROD_Č, Č_ZAK, JMÉNO, ADRESA) {údaje o zákazníkovi} ZAMĚSTNANCI(OSOBNÍ_Č, ADRESA, JMÉNO, PLAT) {údaje o zaměstnancích půjčovny} KOPIE(Č_KOPIE JMÉNO_F) {kopie filmů} REZERVACE(JMÉNO_F, ROD_Č ) {rezervace filmů zákazníky} J. Pokorný 3
Definice dat v SQL CREATE TABLE Dále: odvozené tabulky ( É pohledy). CREATE TABLE VÝPŮJČKY (č_kopie CHAR(3) NOT NULL, č_zak CHARACTER(6) NOT NULL, cena DECIMAL(5,2), rod_č CHARACTER(10) NOT NULL, datum_v DATE); J. Pokorný
Definice dat v SQL IO sloupce NOT NULL sloupec nesmí obsahovat hodnotu NULL, DEFAULT určení implicitní hodnoty sloupce , UNIQUE všechny hodnoty ve sloupci musí být unikátní, NULL hodnota nevadí, PRIMARY KEY sloupec je primárním klíčem tabulky, FOREIGN KEY sloupec je cizím klíče definující referenční integritu s jinou tabulkou CHECK logický výraz definuje přídavné IO IO tabulky (např. složený primární klíč), pojmenování IO J. Pokorný
Definice dat v SQL ALTER TABLE DROP TABLE CREATE SCHEMA CREATE TABLE jméno-tabulky (seznam_prvků_tabulky) seznam_prvků_tabulky ::= prvek_tabulky[,prvek_tabulky]... prvek_tabulky ::= definice_sloupce | definice_IO_tabulky ALTER TABLE ADD sloupec, DROP sloupec, ALTER sloupec, ADD CONSTRAINT a DROP CONTRAINT Př.: ALTER TABLE KINA ADD počet_míst INT DROP TABLE CREATE SCHEMA obsahuje definice základních tabulek, pohledů, domén, integritních omezení, uživatelská práva J. Pokorný
Definice dat v SQL DROP SCHEMA Lze: RESTRICT, CASCADE Df.: Databáze v SQL je kolekce tabulek a pohledů. Může být definována jedním nebo více schématy. schéma 2 schéma 1 J. Pokorný
Typy dat v SQL numerické (přesné a aproximativní), znakové řetězce, bitové řetězce, temporální data, časové intervaly. Dále: NULL (je prvkem každého datového typu) TRUE, FALSE, UNKNOWN Konverze: automatické, explicitní (funkce CAST) J. Pokorný
Typy dat v SQL přesné numerické typy INTEGER (celé), SMALLINT („menší“ implementace než INTEGER), NUMERIC, DECIMAL. DECIMAL(p,q), p cifer, desetinná čárka q cifer zprava. NUMERIC (podobné DECIMAL) s přesností implementačně definovanou, p musí být menší nebo rovno této přesnosti. J. Pokorný
Typy dat v SQL aproximativní numerické typy FLOAT (reálné, parametrizované event. p) REAL (reálné, s pevnou přesností danou implementací) DOUBLE PRECISION (reálné, s pevnou přesností danou implementací, ale větší než REAL) znakové řetězce CHARACTER(n) (délka n, zprava mezery) CHARACTER VARYING(n) (max.délka n) J. Pokorný
Příklad . . . CREATE TABLE KINA . . . CREATE TABLE PŘEDSTAVENÍ (Nazev_k Char_Varying(20) NOT NULL, Jmeno_f Char_Varying(20) NOT NULL, Datum Date NOT NULL, PRIMARY KEY (Nazev_k, Jmeno_f), FOREIGN KEY (Nazev_k) REFERENCES KINA, FOREIGN KEY (Jmeno_f) REFERENCES FILMY); Pz.: Tabulka v SQL nemusí mít primární klíč! J. Pokorný
Indexy v SQL nadrelační rys, podpora přístupových cest k datům v dotazu index obyčejný a typu cluster Pozor: rozdíl od 2 indexů na Jméno a Adresa CREATE INDEX Idx_zak_jm_adr ON ZÁKAZNÍCI (Jméno, Adresa) J. Pokorný
Klastrovaný vs. neklastrovaný index (Indexový soubor) klastrovaný neklastrovaný seznamy ukazatelů seznamy ukazatelů řádky relace (relace) řádky relace J. Pokorný