75
PODATKOVNE BAZE Priporočena literatura: [1] Raghu Ramakrishnan, Johannes Gehrke (2003). Database Management Systems, Third Edition, McGraw-Hill [2] Thomas M. Connolly, Carolyn E. Begg (2005). Database Systems, A Practical Approach to Design, Implementation and Management, Fourth Edition, Addison-Wesley [3] Ramez Elmasri, Shamkant B. Navathe (2003). Fundamentals of Database Systems, Fourth Edition, Addison-Wesley [4] Tomaž Mohorič (2002). Podatkovne baze 1, Založba Bi-TIM. [5] Peter Rob, Carlos Coronel (2005). Database Systems: Design, Implementation and Management, Sixth Edition, Addison Wesley. Uvod v podatkovne baze Osnove Splošno o podatkovnih bazah Zgodovina shranjevanja podatkov Datotečni sistem in SUPB Opisovanje in shranjevanje podatkov v PB Poizvedovanje v PB Obvladovanje transakcij Zgradba SUPB Splošno o podatkovnih bazah (PB) Stanje danes: Organizacije odvisne od zmožnosti pridobivanja natančnih in pravočasnih podatkov... Podatki predstavljajo konkurenčno prednost. Brez zmožnosti za upravljanje z velikimi količinami podatkov in zmožnosti za hitro iskanje ustreznih podatkov postanejo podatki breme za organizacijo. Paradoks: zaradi preveč informacij potrebujemo še več informacij Potrebujemo ustrezne mehanizme za upravljanje s podatki in učinkovito iskanje po njih Æ podatkovne baze. Definicija: Podatkovna baza je mehanizirana, večuporabniška, formalno definirana in centralno nadzorovana zbirka podatkov (glej [4,15]). Sistemi za upravljanje s PB Sistem za upravljanje s podatkovno bazo – SUPB je programska oprema za obvladovanje velikih količin podatkov. Alternativa – shranjevanje v aplikaciji lastni obliki; problemi: neprenosljivost idr. 1

PODATKOVNE BAZE-zapiski

Embed Size (px)

DESCRIPTION

Zapiski pri predmetu OPB (bolonija 2010/11) / FRI-UNI

Citation preview

Page 1: PODATKOVNE BAZE-zapiski

PODATKOVNE BAZE

Priporočena literatura: – [1] Raghu Ramakrishnan, Johannes Gehrke (2003). Database Management

Systems, Third Edition, McGraw-Hill – [2] Thomas M. Connolly, Carolyn E. Begg (2005). Database Systems, A Practical

Approach to Design, Implementation and Management, Fourth Edition, Addison-Wesley

– [3] Ramez Elmasri, Shamkant B. Navathe (2003). Fundamentals of Database Systems, Fourth Edition, Addison-Wesley

– [4] Tomaž Mohorič (2002). Podatkovne baze 1, Založba Bi-TIM. – [5] Peter Rob, Carlos Coronel (2005). Database Systems: Design, Implementation

and Management, Sixth Edition, Addison Wesley. Uvod v podatkovne baze Osnove

Splošno o podatkovnih bazah Zgodovina shranjevanja podatkov Datotečni sistem in SUPB Opisovanje in shranjevanje podatkov v PB Poizvedovanje v PB Obvladovanje transakcij Zgradba SUPB

Splošno o podatkovnih bazah (PB) Stanje danes:

–Organizacije odvisne od zmožnosti pridobivanja natančnih in pravočasnih podatkov... –Podatki predstavljajo konkurenčno prednost. –Brez zmožnosti za upravljanje z velikimi količinami podatkov in zmožnosti za hitro iskanje ustreznih podatkov postanejo podatki breme za organizacijo. –Paradoks: zaradi preveč informacij potrebujemo še več informacij –Potrebujemo ustrezne mehanizme za upravljanje s podatki in učinkovito iskanje po njih podatkovne baze. Definicija: Podatkovna baza je mehanizirana, večuporabniška, formalno definirana in centralno

nadzorovana zbirka podatkov (glej [4,15]). Sistemi za upravljanje s PB Sistem za upravljanje s podatkovno bazo – SUPB je programska oprema za obvladovanje velikih

količin podatkov. Alternativa – shranjevanje v aplikaciji lastni obliki; problemi: neprenosljivost idr.

1

Page 2: PODATKOVNE BAZE-zapiski

Obstaja veliko vrst SUPB. Omejili se bomo predvsem na relacijske ter omenili objektne. Primeri SUPB: Oracle, Sybase, DB2, MS SQL, Ingres, Postgres, MySQL, ObjectStore, Jasmine,

Objectivity/DB, Versant Object Database,... Zgodovina shranjevanja podatkov Zgodnja 60’: Charles Bachman iz General Electric-a razvije prvi splošno-namenski SUPB

(Integrated Data Store). –Predstavlja osnovo za mrežni podatkovni model, ki je predlagan za standard na konferenci za jezike podatkovnih sistemov (CODASYL). –Za mrežni podatkovni model Bachman prejme Turingovo nagrado (ACM Turing Award - na področju računalniških znanosti ekvivalent Nobelove nagrade) –Ima velik vpliv na razvoj SUPB-jev v 60’ letih. – Pozna 60’: IBM razvije Information Management System (IMS), ki se ponekod uporablja še

danes. –Predstavlja osnovo za hierarhični podatkovni model. –American Airlines in IBM razvijeta sistem SABRE za rezervacije letalskih kart – sistem omogoča več uporabnikom dostop do skupnih podatkov preko mreže. –Zanimivost: isti SABRE še danes uporablja spletna potovalna agencija Travelocity. 70’ leta: Edgar Codd predlaga relacijski podatkovni model (IBM).

–Razvije se mnogo relacijskih SUPB. –Podatkovne baze postanejo akademsko področje. Razvije se izjemno močna teoretična podlaga. –Codd dobi Turingovo nagrado za svoje delo. –Relacijske Podatkovne baze postanejo standard za upravljanje s podatki v organizacijskih sistemih. 80’ leta: Relacijski model si še utrdi položaj kot SUPB.

–Razvije se SQL poizvedovalni jezik (IMB-ov projekt System R) –SQL postane standardni jezik za izvajanje poizvedb v relacijski PB. –SQL je bil standardiziran v poznih 80’ – SQL-92. –Standard prevzamejo American National Standard Institute (ANSI) in International Standards Organization (ISO). –Skrb za sočasen dostop do podatkov prevzame SUPB. Programerji programirajo, kot bi do podatkov dostopali samo oni. James Grey dobi za dosežke na tem področju Turingovo nagrado. Pozna 80’ in 90’: veliko napredka na področju PB.

–Veliko raziskav se opravi na področju poizvedovalnih jezikov in bogatejših (razširjenih) podatkovnih modelov. –Velik poudarek na kompleksnih analizah podatkov iz vseh področij organizacijskih sistemov. –Veliko proizvajalcev SUPB-jev (IBM – DB2, Oracle 8, Informix UDS) razširi svoje sisteme s podporo novim podatkovnim tipom: slike, tekst in s podporo kompleksnejšim poizvedbam. –Pojavijo se podatkovna skladišča, ki združujejo podatke iz več PB in omogočajo izvajanje specializiranih analiz (iskanje zakonitosti v podatkih). –Pojavijo se ERP (enterprise resource planning) in MRP (management resource planning) paketi

2

Page 3: PODATKOVNE BAZE-zapiski

Podpirajo skupne funkcije v poslovnih sistemih (npr. skladiščno poslovanje, planiranje človeških virov, finančne analize,...). Predstavljajo obsežno aplikacijsko plast nad skupno PB. Primeri: Baan, Oracle, PeopleSoft, SAP in Siebel.

Naslednja stopnja: vstop SUPB v svet Interneta

–Prva generacija spletnih mest shranjuje podatke v datotekah OS (operacijski sistem). Uporaba PB za shranjevanje podatkov, ki so dostopni preko Interneta, postaja vsakdanja. Poizvedbe se generira preko spletnih form, odgovore pa se nazaj posreduje v obliki jezika HTML,

za lažji prikaz v spletnem brskalniku. –Vsi proizvajalci dodajajo svojim SUPB-jem možnosti za čim lažjo uporabo v spletu. – Najnovejša področja:

–Multimedijske PB, –PB za interaktivni video, –Digitalne knjižnice, –Odločitveni sistemi, vrtanje po podatkih, odkrivanje zakonitosti –Raziskovalni projekti: Human Genome Project GEOSS - The Global Earth Observation

System of Systems (GEOSS) ...

Datotečni sistemi in SUPB... Omejitve datotečnih sistemov:

–Ločevanje in izolacija podatkov Vsaka aplikacija obvladuje svoje podatke V okviru ene aplikacije lahko dostopamo le do podatkov te aplikacije (ne vemo za razpoložljive

podatke v drugih aplikacijah) –Podvajanje podatkov Podvajanje vnosa – iste podatke vnašamo večkrat in na več mest Odvečna poraba prostora na disku ter potencialna možnost za neskladnost Isti podatki podani v različnih oblikah

–Podatkovna odvisnost Struktura podatkov je definirana v aplikaciji; sprememba v strukturi podatkov zahteva

spremembo v aplikaciji –Neskladnost med oblikami datotek Aplikacije, napisane v različnih programskih jezikih, ne morejo enostavno dostopati do datotek

drugih sistemov Zaradi težav oziroma neučinkovitosti shranjevanja podatkov neposredno v datoteke, se pojavijo

Sistemi za upravljanje s podatkovnimi bazami – SUPB. Definicija: SUPB je skupek programske opreme, ki omogoča kreiranje, vzdrževanje in nadzor

nad dostopom do podatkov v PB.

3

Page 4: PODATKOVNE BAZE-zapiski

SUPB uporablja različne mehanizme za upravljanje s podatki: –Kreiranje podatkovnih struktur je omogočeno z jezikom DDL - Data Definition Language. Omogoča definiranje podatkovnih struktur in tipov ter omejitev Vse specifikacije so shranjene v PB (podatkovni slovar, sistemski katalog). Kreiranje tabele

pomeni poseg v sistemski katalog. –Vzdrževanje podatkov (Create, Insert, Update, Delete) izvajamo z uporabo jezika DML - Data Manipulation Language. –Za izvajanje povpraševanja obstajajo povpraševalni jeziki (query language) .SUPB zagotavlja nadzor nad dostopom do podatkov: –Varnost: dostop do podatkov v skladu z avtorizacijo –Skladnost: zagotavlja skladnost podatkov –Sočasni dostop: zagotavlja in nadzira sočasni dostop –Obnova: zagotavlja mehanizme za obnovo podatkov Uporaba SUPB prinaša naslednje prednosti:

–Podatkovna neodvisnost: Programi so neodvisni od predstavitve podatkov in načina shranjevanja podatkov. SUPB zagotavlja abstrakcijo podatkov in ločuje programe od podrobnosti predstavitve podatkov. –Učinkovit dostop do podatkov: SUPB zagotavlja tehnike za učinkovito hranjenje in dostop do podatkov. –Varnost in integriteta podatkov: Če se do podatkov dostopa preko SUPB, se lahko uporabi omejitve, ki zagotavljajo skladnost podatkov. –Administracija podatkov: Če so podatki shranjeni centralno, je upravljanje s podatki lažje. –Sočasen dostop do podatkov in obnavljanje PB: SUPB razporeja sočasne dostope tako, da izgleda, kot da do podatkov dostopa en uporabnik. –Skrajša čas razvoja programov: SUPB podpira številne mehanizme za dostop do podatkov. Zaključek: SUPB prinaša veliko prednosti v primerjavi s hranjenjem podatkov neposredno v

datotekah. Obstajajo (redke) izjeme, ko uporaba SUPB ni primerna. Npr.:

–Za specializirane aplikacije (npr.: v realnem času) klasični SUPB niso primerni. Za te aplikacije se raje izdela namensko kodo za rokovanje s podatki. –Če SUPB ne podpira dela s podatki na način, ki ga zahteva program. Komponente SUPB

–Strojna oprema –Programska oprema –Podatki –Postopki –Ljudje –Strojna oprema: Podatkovni strežnik Pomembna parametra za strežnik: hitri pomnilnik in diskovni prostor Ostala strojna oprema

–Programska oprema: SUPB, operacijski sistem, omrežna programska oprema

4

Page 5: PODATKOVNE BAZE-zapiski

Različna sistemska oprema (razvojna orodja, orodja za dostop do podatkov) Specializirane aplikacije

–Postopki Načini prijave Uporaba posameznih orodij Zagon in zaustavitev podatkovne baze Izdelava varnostnih kopij Obvladovanje nesreč/okvar

–Ljudje, njihove vloge Skrbnik podatkov Skrbnik Podatkovne baze (DBA – Database Administrator) Analitik, načrtovalec PB Razvijalci aplikacij Končni uporabniki (izkušeni, neizkušeni)

Opisovanje in shranjevanje podatkov v PB Model, s katerim opišemo, kaj bi želeli hraniti ter kakšne povezave obstajajo med elementi, ki jih

želimo hraniti, se imenuje podatkovni model. Podatkovni model je način, kako na visoki ravni abstrakcije opišemo podatke, ki jih želimo

hraniti ter skrijemo nepomembne podrobnosti. Podatkovni model odraža uporabnikovo percepcijo realnega sveta. V resnici izraža uporabnikovo

predstavo, kako naj bodo podatki shranjeni. Podatkovni model

Logični podatkovni modeli Logični podatkovni model je jezik, ki ga razume ciljni SUPB. Poznamo več vrst logičnih modelov:

5

Page 6: PODATKOVNE BAZE-zapiski

–Relacijski podatkovni model Relacijski SUPB: DB2, Informix, Oracle, Sybase, MS Access,...

–Hierarhični podatkovni model (glej [4,181]). Hierarhični SUPB: IBM-ov IMS

–Mrežni podatkovni model (glej [4,159]). Mrežni SUPB: IDS in IDMS

–Objektni podatkovni model Objektni SUPB: Objectstore, Versant,...

–Objektno-relacijski podatkovni model: Hibridni SUPB: IBM, Informix, ObjectStore, Oracle, Versant,…

Tri-nivojska predstavitev podatkov...

Podatki so v PB opisani na treh ravneh:

–Zunanja shema –Konceptualna ali logična shema –Fizična shema Tri-nivojska predstavitev podatkov... Konceptualna ali logična shema

–Konceptualna shema opisuje podatke z vidika podatkovnega modela, ki ga PB uporablja. Npr.: Podatki o entitetah (profesor, študent, predavalnica,...) Podatki o povezavah (predava, posluša,...).

6

Page 7: PODATKOVNE BAZE-zapiski

–Proces izdelave konceptualne sheme se imenuje konceptualno ter logično načrtovanje. Tri-nivojska predstavitev podatkov... Fizična shema:

–Fizična shema podaja podrobnosti o shranjevanju podatkov kako so podatki iz konceptualne sheme dejansko shranjene na sekundarnem pomnilniku: trdi disk, magnetni trakovi,... –Odločiti se je potrebno, kakšno datotečno organizacijo bomo uporabili za shranjevanje podatkov in kreirati indeksne datoteke. Proces izdelave fizične sheme se imenuje načrtovanje fizične PB. Zunanja shema:

–Tudi zunanje sheme uporabljajo koncepte podatkovnega modela (gradnike konceptualne sheme). –Zunanja shema se uporablja za dostop do podatkov, ki je prilagojen določenemu uporabniku ali skupini uporabnikov. –Vsaka zunanja shema sestoji iz enega ali več pogledov (view) in entitet iz konceptualne sheme. –Pogled je logična tabela, ki ne obstaja v fizični podatkovni bazi. –Izdelava zunanjih shem se izvaja v sodelovanju z uporabniki – zajemanje uporabniških zahtev. Podatkovna neodvisnost... Zelo pomembna lastnost SUPB je, da omogoča podatkovno neodvisnost - programi so neodvisni

od načina shranjevanja in strukturiranja podatkov v PB. Podatkovno neodvisnost dosežemo z uporabo tri-nivojske abstrakcije podatkov:

–Če se spremeni konceptualna shema, lahko zunanjo shemo priredimo tako, da pogledi ostanejo nespremenjeni logična podatkovna neodvisnost. –Podobno konceptualna shema ločuje uporabnike od sprememb, ki se naredijo na fizični PB fizična podatkovna neodvisnost. . Konceptualna shema skrije podrobnosti o tem, kako so podatki dejansko shranjeni na disku, o strukturi datotek in o indeksih. Dokler ostaja konceptualna shema nespremenjena, spremembe na fizičnem nivoju ne vplivajo na

programe, ki podatke uporabljajo. Lahko pa spremembe vplivajo na učinkovitost.

Poizvedovanje v PB Enostavnost pridobivanja informacij iz PB je ključna prednost SUPB za uporabnike. Relacijske PB omogočajo uporabnikom postavljati enostavna vprašanja (poizvedbe), s katerimi

pridobivajo podatke/informacije. Poizvedbe se podaja v jeziku, ki je prirejen za opisovanje poizvedb – poizvedovalni jezik. Relacijski model podpira zelo močne poizvedovalne jezike Ena pomembnih nalog SUPB je optimizacija poizvedb, tako da se te čim hitreje izvedejo.

.Učinkovitost poizvedb je močno odvisna od načina, kako so podatki shranjeni v fizični obliki ter indeksirani. SUPB omogoča uporabnikom izvajati poizvedbe ter kreirati in posodabljati vrednosti s pomočjo

DML - Data Manipulation Language skupine ukazov iz jezika SQL. DML skupina podpira ukaze za vstavljanje, brisanje in posodabljanje zapisov v tabelah.

7

Page 8: PODATKOVNE BAZE-zapiski

Upravljanje s transakcijami Transakcija predstavlja skupek ažuriranj, ki jih izvede transakcijski program. Z vidika SUPB predstavlja transakcija osnovno enoto spremembe transakcija se mora izvesti

cela ali nič. Dve pomembni nalogi SUPB pri izvajanju transakcij:

–Zagotavljanje sočasnosti pri izvajanju transakcij in –Obnavljanje PB po transakcijskih in sistemskih nesrečah (razveljavljanje, ponavljanje transakcij...). Tipična zgradba SUPB

Funkcije posameznih enot SUPB:

–Stroj za evaluacijo poizvedb (Query Evaluation Engine) Sintaktični analizator (Parser): Sintaktično analizira poizvedbo, ki jo SUPB-ju posreduje

aplikacija. Optimizator (Optimizer): Na podlagi informacij o tem, kako so podatki shranjeni, izdela

učinkovit plan za izvajanje poizvedbe. Plan izvajanja predstavlja načrt za izvedbo poizvedbe in je ponavadi predstavljen kot drevo relacijskih operatorjev. Evaluator operatorjev (Operator Evaluator): Na osnovi plana izvajanja analizira poizvedbo. Izvajalec plana (Plan Executor): Izvede poizvedbo po navodilih plana poizvedbe. Funkcije posameznih enot SUPB (nadaljevanje):

–Datoteke in metode dostopa (Files and Access Methods): enota, ki omogoča delo z datotekami.

8

Page 9: PODATKOVNE BAZE-zapiski

–Upravljalec medpomnilnika (Buffer Manager): Prenaša strani iz diska v pomnilnik glede na bralne potrebe. –Upravljalec prostora na disku (Disk Space Manager): Najnižji nivo SUPB je zadolžen za upravljanje z diskom. Vse operacije višjih plasti se tukaj prevedejo v nizko-nivojske ukaze za delo z diskom. –Enota za nadzor sočasnosti (Concurrency Control): Upravljalec transakcij (Transaction Manager): Zagotavlja zaseganje podatkov z uporabo

določenih protokolov in skrbi za razporejanje izvajanja transakcij. Upravljalec zaklepanja (Lock Manager): Vzdržuje informacije o zahtevanih in odobrenih

zaseženih podatkov. –Upravljalec obnove podatkov (Recovery Manager): Vzdržuje dnevnik in skrbi za obnavljanje sistema v zadnje skladno stanje pred nesrečo. Shramba in indeksiranje podatkov

Diski in diskovna polja Upravljanje z diskom in pomnilnikom Organizacija datotek in indeksiranje Indeksi na osnovi drevesne strukture Hash-indeks

Komponente SUPB za delo s podatki Podatki iz PB se hranijo na diskih (in trakovih). Upravljalec prostora na disku (Disk Space Manager):

–enota, ki upravlja s prostorom na disku, –ukaze v zvezi z zaseganjem in sproščanjem prostora na disku prejema od upravljavca z datotekami. Upravljalec z datotekami (File Manager):

–zasega in sprošča prostor na disku v enotah – straneh. –je odgovoren za upravljanje strani znotraj datoteke in za urejanje zapisov znotraj strani. –Velikost strani je eden od parametrov SUPB. Tipično od 4KB od 8 KB. Upravljalec medpomnilnika (Buffer manager):

–skrbi za prenos določene strani iz diska v področje v glavnem pomnilniku - medpomnilnik (buffer pool). –stran, kjer je zapis, poišče upravljalec z datotekami. Prenos v medpomnilnik izvede upravljalec medpomnilnika. Hierarhija pomnilnika

9

Page 10: PODATKOVNE BAZE-zapiski

Drugi razlogi za shranjevanje podatkov na sekundarnem in terciarnem pomnilniku:

–32 bitni naslovni prostor omogoča naslavljanje samo 232 = 4Gb podatkov ... –podatki morajo biti obstojni (primarni pomnilnik se prazni…) Stanje glede kapacitete in cene pomnilnikov se hitro spreminja. Najzanesljivejši viri informacij so

spletne strani proizvajalcev, preizkuševalcev, trgovin... Magnetni disk

10

Page 11: PODATKOVNE BAZE-zapiski

Nekaj lastnosti:

–Magnetni disk omogoča neposreden dostop do želene lokacije na disku. –Podatki na disku so shranjeni v enotah, imenovanih bloki. –Blok predstavlja zaporedje bajtov in je najmanjša enota, ki se jo lahko bere iz ali piše na disk. –Bloki so organizirani v koncentrične kroge, imenovane sledi. –Sledi se nahajajo na eni ali obeh straneh magnetne plošče. –Vsaka sled je razdeljena na odseke ali sektorje. Sektor je določen z diskom in ga ni mogoče spreminjati. –Velikost bloka se določi pri formatiranju diska. Njegova velikost je mnogokratnik velikosti sektorja. –Disk ima lahko več glav, ki se premikajo istočasno. –Disk je z računalnikom povezan preko krmilnika. Krmilnik izvaja ukaze za branje in pisanje na disk in zagotavlja pravilnost izvajanja ukazov. –Pri zapisovanju in branju sektorjev se računa kontrolka (checksum) –Tipična velikost plošč: 3.5 inčev. Čas, potreben za dostop do želene lokacije (povprečni dostopni čas):

–iskalni čas (premik glave na ustrezno sled) –rotacijska zakasnitev (čakalni čas, da se ustrezen blok na sledi zavrti do glave). Povprečno znaša polovico časa rotacije in je manjši od iskalnega časa. –čas prenosa (dejanski prenos bloka – branje ali pisanje). Primerjava:

–Dostopni čas RAM-a ≈ 10ns

11

Page 12: PODATKOVNE BAZE-zapiski

–Dostopni čas diska ≈ 10ms. Magnetni disk Organizacija podatkov na disku je pomembna – vpliva na učinkovitost SUPB:

–podatki se morajo pred uporabo prenesti v glavni pomnilnik, –najmanjša enota podatkov, ki se bere ali piše na disk, je blok. –Čas za pisanje ali branje podatkov je odvisen od položaja podatkov na disku: dostopni čas=iskalni čas + rotacijska zakasnitev + čas prenosa. –Čas, ki ga SUPB porabi za prenos podatkov, je navadno večji kot čas, potreben za obdelavo določenega podatka. –Podatke je potrebno ustrezno razporediti po disku!!!. Polje diskov Disk predstavlja potencialno ozko grlo za učinkovitost SUPB in vpliva na zanesljivost delovanja

sistema. Učinkovitost CPU raste hitreje kot učinkovitost diskov:

–CPU: 50% na leto –Diski: 10% na leto Diski vsebujejo mehanske elemente verjetnost za napake večja kot pri notranjem pomnilniku. Odpoved diska lahko pomeni katastrofo. Možna rešitev: polje diskov (disk array).

Polje diskov Polje diskov je povezava več diskov, organiziranih tako, da

–povečajo učinkovitost in –izboljšajo zanesljivost. Učinkovitost povečamo s porazdelitvijo podatkov (data striping):

–podatke se porazdeli po več diskih Zanesljivost povečamo z redundanco podatkov:

–Zapisuje se dodatne (redundantne) podatke ali pa se podatke podvaja. V primeru napake omogoča obnovo podatkov. RAID Diskovna polja, ki implementirajo porazdelitev in podvajanje podatkov imenujejo “Redundant

Arrays of Independent Disks” – RAID. Poznamo več vrst RAID. Razlikujejo se po kompromisu med učinkovitostjo in zanesljivostjo.

RAID s porazdelitvijo podatkov:

–Uporabniku se kaže kot zelo velik disk. –Podatki se razdelijo na enake enote (striping units), ki se zapišejo na več diskov. Vsaka enota na en disk. –Enote se po diskih distribuirajo po “round robin” algoritmu: če polje vključuje D diskov, se enota i zapiše na “i mod D” disk. Primer:

12

Page 13: PODATKOVNE BAZE-zapiski

–RAID z D diski v polju. –RAID enota = 1 bit. -Vsakih D zaporednih bitov se porazdeli na D diskov. –Vsaka I/O operacija vključuje vseh D diskov. –Najmanjša enota prenosa je 1 blok vsaka I/O operacija prenese vsaj D blokov. –Ker lahko beremo na vseh diskih paralelno, je pohitritev prenosa podatkov v primerjavi z enim diskom D-kratna. –Dostopni čas se v primerjavi z enim diskom ne spremeni. -Sledi: v primerjavi z enim diskom ne pridobimo bistveno. Primer:

–RAID z D diski v polju. –RAID enota = 1 blok. –Vsakih D zaporednih blokov se porazdeli na D diskov. –I/O operacija velikosti 1 blok vključuje le 1 disk. –Pri več zaporednih I/O operacijah dolžine 1 blok in pri pravilno porazdeljenih blokih lahko operacije izvajamo paralelno. –Sledi: V primerjavi z enim diskom zmanjšamo povprečni dostopni čas I/O operacije. Če I/O operacija vključuje več zaporednih blokov, jo lahko procesiramo paralelno na več diskih.

RAID – redundanca podatkov… Z več diski se poveča učinkovitost sistema za shranjevanje, vendar zmanjša njegova zanesljivost. Primer:

–MTTF (mean-time-to-failure) enega diska ≈ 50.000 ur (5,7 let). Pri 100 diskih v polju znaša MTTF 50.000/100 ≈ 500ur (21 dni). Zanesljivost diskovnega polja povečamo z redundanco podatkov. Redundantnost lahko močno poveča MTTF.

.Pri odločitvi za redundanco podatkov je potrebno določiti: –Kje bodo shranjeni redundantni podatki: na manjšem številu diskov ali bodo porazdeljeni po vseh diskih? –Kako določiti redundantne podatke: večina diskovnih polj shranjuje podatke o pariteti (paritetna shema uporablja dodaten –

redundanten disk za obnovo po nesrečah) Če dodamo prejšnjemu polju 100-ih diskov 10 diskov z redundantnimi podatki, naraste MTTF

na več kot 250 let!!! Velik MTTF pomeni manjšo verjetnost za napako.

Kako deluje paritetni bit?

Stopnje redundance… V RAID sistemu je diskovno polje razdeljeno na več kontrolnih skupin (reliability groups). Te se

sestojijo iz: –množice podatkovnih diskov in

13

Page 14: PODATKOVNE BAZE-zapiski

–množice kontrolnih diskov. Število kontrolnih diskov je odvisno od stopnje redundance.

Primer za obravnavo stopenj redundance:

–Količina podatkov za 4 diske –Ena sama kontrolna skupina RAID 0: porazdeljen, brez redundance (Nonredundant)

–Uporablja porazdeljevanje podatkov za povečanje pasovne širine. –Ne vzdržuje nobene redundantne informacije. –PROBLEM: MTTF pada linearno s številom diskov v polju. –PREDNOSTI: najvišja učinkovitost ni potrebno vzdrževati nobenih redundantnih podatkov. –Izraba prostora znaša 100% prostora na disku. V našem primeru rabimo za svoje podatke 4 diske. RAID 1: zrcaljen (Mirrored)

–Najdražja rešitev za polje diskov vzdržujeta se dve kopiji podatkov na dveh diskih. –Vsako pisanje bloka na disk vključuje pisanje na dva diska. –Pisanje se ne izvede hkrati, ampak eno za drugo (zaradi primera nesreče med pisanjem). –Branje lahko vključuje paralelno branje dveh različnih blokov iz dveh diskov. Branje se lahko dodeli na disk, ki ima najmanjši dostopni čas. –Izraba prostora znaša 50%. V našem primeru potrebujemo 8 diskov (4 + 4). RAID 0+1: porazdeljen in zrcaljen

–Imenovan tudi RAID 01. –Kombinira nivoja RAID 0 in RAID 1. RAID 1+0: zrcaljen in porazdeljen

–Imenovan tudi RAID 10. –Kombinira nivoja RAID 1 in RAID 0. Druge stopnje redundance:

–Level 2: Error-Correction Codes –Level 3: Bit-Interleaved Parity –Level 4: Block-Interleaved Parity –Level 5: Block-Interleaved Distributed Parity –Level 6: P+Q Redundancy Upravljanje z diskom in pomnilnikom Za upravljanje z diskom skrbi najnižji nivo v SUPB arhitekturi – upravljalec z diskom (Disk

Space Manager). Lastnosti:

–Podpira koncept “strani”;

14

Page 15: PODATKOVNE BAZE-zapiski

–Izvaja ukaze za dodeljevanje in sproščanje prostora na disku ter branje in pisanje strani. –Velikost strani je enaka velikosti bloka na disku. Strani se shranjujejo kot bloki. Branje ali pisanje strani se lahko izvede v okviru ene I/O operacije. –Skrije podrobnosti strojne opreme (in OS); ostalim komponentam SUPB omogoči, da vidijo podatke kot zbirko strani. Upravljalec z diskom vzdržuje stanje zasedenih in prostih blokov na disku.

Obstajata dva načina:

–Vzdrževanje seznama prostih blokov (kazalec na prvi blok seznama se shrani na znano lokacijo na disku), –Vzdrževanje bitne mape (za vsak blok je v bitni mapi bit, ki označuje, ali je blok zaseden ali ne), Uporaba datotečnega sistema za upravljanje s prostorom:

–Upravljalec z diskom lahko uporablja datoteke operacijskega sistema celotna PB se nahaja v eni ali več datotekah. –V tem primeru je zadolžen za upravljanje prostora v teh datotekah. –Veliko PB ne uporablja datotečnega sistema, ampak svoj lastni sistem za upravljanje z diskom (popolnoma svoj ali pa razširja funkcionalnost datotečnega sistema OS). Razlogi: PRAKTIČNI: bazo lahko uporabimo na več platformah, TEHNIČNI: pri 32 bitnem naslavljanju se pojavi omejitev v velikosti datoteke.

Upravljalec medpomnilnika

15

Page 16: PODATKOVNE BAZE-zapiski

Upravljalec medpomnilnika je programska plast, ki skrbi za prenašanje ustreznih strani v

pomnilnik. –upravlja z razpoložljivim pomnilnikom (buffer pool). –višjim plastem SUPB-ja zagotavlja strani, ki jih te rabijo za svoje delo. –V medpomnilnik prenese tisto stran, ki jo višja plast zahteva. –Višja plast SUPB-ja upravljalca medpomnilnika obvešča o straneh, ki se sprostijo oziroma se jim spremeni vsebina. –Obstajajo različne strategije, ki določijo, katere strani se v medpomnilniku zamenjajo. Za vsak okvir v medpomnilniku se hranita dve spremenljivki:

–pin_count: kolikokrat je bila stran v okvirju zahtevana, vendar ne sproščena (število trenutnih uporabnikov strani). –dirty: logična vrednost, ki označuje, ali je bila stran spremenjena ali ne. Začetno stanje okvirja:

–pin_count = 0 –dirty = off

16

Page 17: PODATKOVNE BAZE-zapiski

. Ko se pojavi zahteva po določeni strani, upravljalec z medpomnilnikom izvede naslednje: –če se stran nahaja v kakšnem od okvirjev, vrne pomnilniški naslov okvirja in poveča pin_count za 1, –sicer izvede naslednje: izbere okvir za zamenjavo (z uporabo strategije za zamenjavo) in poveča pin_count. če je dirty bit okvirja, ki bo zamenjan, postavljen na “on”, se stran prepiše na disk. stran se prenese iz diska v okvir, ki je določen za zamenjavo.

Dodatna pravila:

–Če se zahtevana stran ne nahaja v medpomnilniku in če so vsi okvirji zasedeni, se za zamenjavo izbere okvir, katerega pin_count=0. V primeru več takih okvirjev se izmed njih izbere okvir po določeni strategiji. –Če v medpomnilniku ni nobene strani, ki bi imela pin_count=0 in hkrati iskane strani ni v medpomnilniku, potem upravljalec medpomnilnika čaka, da se kakšna stran sprosti. –V praksi to pomeni, da je transakcija, ki zahteva tako stran, lahko razveljavljena. Nevarnost: če neko stran zahteva več neodvisnih transakcij, lahko pride do konfliktnih

sprememb... Reševanje z zaklepanjem:

–Obstaja protokol zaklepanja, za katerega skrbijo višje ravni SUPB (posebej upravljalec transakcij).

17

Page 18: PODATKOVNE BAZE-zapiski

–Vsaka transakcija lahko pridobi deljeno (shared) ali ekskluzivno zaklepanje preden lahko stran bere ali spreminja. Ekskluzivno zaklepanje iste strani ne sme biti odobreno dvem transakcijam istočasno! Strategija zamenjave strani v medpomnilniku močno vpliva na učinkovitost SUPB.

. Obstajajo različne strategije, ki so primerne za različne situacije. Nekatere strategije:

–LRU – least recently used Vrsta kazalcev na okvirje s pin_count = 0 Ko stran postane kandidat za zamenjavo (pin_count = 0), okvir strani dodamo na konec vrste Za zamenjavo izberemo stran iz okvirja, na katerega kaže prvi kazalec v vrsti

–Clock replacement Različica LRU z manjšo časovno kompleksnostjo Okvirji so navidez organizirani v cikel (kot številke na uri) Vsak okvir ima dva podatka: reference_bit in pin_count. Reference_bit se postavi na ON, ko pin_count postane 0. Za zamenjavo najprej preverimo stran, na katero trenutno kaže posebna spremenljivka. Če okvir ne izberemo za zamenjavo, se kazalec pomakne naprej. To traja, dokler ne najdemo

okvirja za zamenjavo. Izbira okvirja:

–Če pin_count > 0 okvir ne izberemo –Če reference_bit = ON okvirja ne izberemo, reference_bit postavimo na OFF. –Če pin_count = 0 AND reference_bit = OFF okvir izberemo! .Primerjava z upravljanjem navideznega pomnilnika OS: –obstaja podobnost med navideznim pomnilnikom operacijskega sistema in upravljanjem s pomnilnikom pri SUPB. –Cilj obeh: zagotoviti dostop do več podatkov, kot jih lahko spravimo v pomnilnik. Strani iz diska se prenašajo v pomnilnik po potrebi, nadomeščajo strani, ki se jih v pomnilniku ne rabi več. Zakaj ne uporabimo navideznega pomnilnika v OS?

–SUPB lahko bolj natančno predvidi zaporedje (vzorce dostopanja) kot tipičen OS. –SUPB rabi več nadzora nad stranmi, ki se zapisujejo na disk, kot ga omogoča tipičen OS. –Najpomembneje: upravljalec medpomnilnika uporablja strategijo vnaprejšnjega branja (prefetching), ki na osnovi predvidevanja naslednjih zahtev v naprej prenese strani v pomnilnik. Organizacija datotek in indeksiranje Osnovni koncepti… Podatkovna baza je na sekundarnem pomnilniku organizirana v eno ali več datotek (file) Vsaka datoteka zajema enega ali več zapisov (record).

18

Page 19: PODATKOVNE BAZE-zapiski

Zapis sestavljajo polja (field). Zapisi običajno označujejo entitete, polja pa njihove atribute.

Uporabnik zahteva zapis “A10” od SUPB:

–SUPB naredi preslikavo logičnega zapisa v fizični; –Poišče fizični zapis in ga prepiše v primarni pomnilnik oziroma v medpomnilnik;

Med fizičnim in logičnim zapisom ne velja vedno preslikava 1:1

–Fizični zapis je enota prenosa med diskom in primarnim pomnilnikom. –Lahko zajema tudi več logičnih zapisov. Podobno je lahko tudi večji logični zapis zapisan čez več fizičnih zapisov. Fizični zapis ustreza konceptu, ki smo ga obravnavali kot stran.

Datotečna organizacija… Datotečna organizacija pove, kako so podatki v datoteki fizično urejeni v zapise in strani na

sekundarnem pomnilniku. Osnovne vrste datotečnih organizacij:

–Kopica ali neurejena datoteka: zapisi so na disku shranjeni v nedefiniranem vrstnem redu. –Zaporedno urejena datoteka: zapisi so urejeni po vrednosti določenega polja. –Razpršena datoteka: zapisi so razpršeni z uporabo hash funkcije. Za delo z zapisi v datotekah obstajajo različne tehnike ali metode dostopa (access methods). Metode dostopa določajo korake, ki jih je potrebno izvesti za zapis ali iskanje nekega zapisa v

datoteki. Metode dostopa so odvisne od datotečne organizacije.

Neurejene datoteke… Imenujemo tudi kopica (heap). Najenostavnejša datotečna organizacija:

–Zapisi so shranjeni v istem vrstnem redu, kot so bili dodani –Nov zapis dodan na zadnjo stran datoteke –Če ni dovolj prostora, se doda nova stran Dobra lastnost:

–Zelo učinkovito dodajanje zapisov Uporabljamo za masovni vnos.

19

Page 20: PODATKOVNE BAZE-zapiski

–Ni potrebno računati, na katero stran bomo zapis vstavili. Neurejene datoteke Slabosti:

–Neučinkovitost iskanja. Uporabiti moramo linearno iskanje (zapisi so neurejeni) –Neizkoriščenost prostora: pri brisanju zapisa moramo najti stran z zapisom, zbrisati zapis ter stran shrani nazaj na disk. Spraznjen prostor na strani ostane neizkoriščen. Neurejene datoteke je potrebno občasno reorganizirati! Urejene datoteke… Zapisi v datotekah so lahko urejeni po enem ali več poljih urejena ali zaporedna datoteka. Za iskanje po poljih, po katerih je datoteka urejena, uporabimo binarno iskanje. Primer:

SELECT * FROM artikel WHERE sifra = ‘BX1’ Urejene datoteke… Prednosti:

–Učinkovitost iskanja Problem

–Dodajanje in brisanje zapisov potrebno vzdrževati vrstni red –Če želimo nek zapis dodati, moramo poiskati stran, kamor bi zapis sodil glede na vrstni red. Če stran vsebuje dovolj praznega prostora, jo preuredimo in zapišemo nazaj na disk, sicer moramo nekaj zapisov premakniti na naslednjo stran itd. Dodajanje zapisa na začetek velike datoteke je posebej problematično. Možna rešitev: uporaba dodatne neurejene datoteke (overflow ali transakction file):

–Nov zapis je dodan v neurejeno datoteko –Neurejena datoteka se periodično prepiše v urejeno –Pri iskanju zapisa se najprej pogleda urejena datoteka. Če zapisa ne najdemo, se linearno pregleda še neurejena. Razpršene datoteke… V razpršenih ali hash datotekah so zapisi razpršeni v skladu s hash funkcijo. Hash funkcija za vsak zapis izračuna naslov strani (naslov bloka na disku), kamor zapis sodi

glede na vrednost določenega polja (hash polje). fhash(P) = naslov strani; P = vrednost hash polja. Iskanje zapisa na strani se izvede v primarnem pomnilniku. Za večino zapisov moramo prebrati

le eno stran. Za hash funkcijo izberemo operacijo, ki zagotavlja enakomerno porazdeljenost zapisov po

datoteki. Najpopularnejša hash funkcija je ostanek pri deljenju (MOD) z določenim številom (n)

20

Page 21: PODATKOVNE BAZE-zapiski

Primer:

–Vrednost polja, ki nastopa kot argument hash funkcije je 132 –n = 24 –132/24 = 5, ostanek je 12 zapis se zapiše na 12 stran. Problem razpršenih datotek:

–Zaloga vrednosti hash polja navadno večja od števila naslovov, ki jih lahko vrne hash funkcija. –Vsak naslov ustreza določeni strani (bucket), ki ima mesta za več zapisov. –Znotraj strani so zapisi urejeni po vrsti, kot so bili vstavljeni. –Ko hash funkcija za nek zapis vrne naslov strani, ki je polna, pride do kolizije. Za reševanje problemov z istim naslovnim prostorom so na voljo različne tehnike

–Odprto naslavljanje (open addressing) –Nepovezane dodatne strani (unchained overflow) –Povezane dodatne strani (chained overflow) –Večkratno razprševanje (multiple hashing) Odprto naslavljanje

–Zapisovanje: če pride do kolizije, poiščemo prvo stran, ki ima še kakšno prosto mesto. Ko pridemo do zadnje strani, gremo na začetek. –Iskanje: enako kot pri zapisovanju. S to razliko, da če naletimo na prazno mesto preden na iskani zapis, privzamemo, da zapisa ni v datoteki. Primer:

–dodajamo zapis SL41 –Hash funkcija MOD 3 –SL41 je razvrščen za stran 2 –Ker stran 2 nima praznih mest, iščemo prvo stran s še prosim mestom. Rezultat: stran 1. Nepovezane dodatne strani:

–Namesto iskanja prostega mesta za primere kolizije vzdržujemo seznam dodatnih strani –Rešitev na videz ne ponuja bistvenih izboljšav –V resnici daje boljše rezultate število kolizij je manjše (z odprtim naslavljanjem rešimo le trenutno kolizijo. Obenem odpremo možnosti za nove kolizije.) Povezane dodatne strani:

–Podobno kot nepovezane dodatne strani, le da so v tem primeru dodatne strani povezane z osnovnimi –Vsaka stran ima dodatno polje, ki pove, ali je prišlo pri tej strani do kolizije ali ne. V polju je naslov dodatnega polja, kamor so razvrščeni zapisi, pri katerih pride do kolizije. Vrednost 0 pomeni, da kolizije ni bilo. Večkratna razpršitev:

–Eden od načinov reševanja kolizij je večkratno razprševanje.

21

Page 22: PODATKOVNE BAZE-zapiski

–Če pride do kolizije, se uporabi drugačna hash funkcija, ki vrača drugačen naslov. –Dodatna hash funkcija je navadno takšna, da razvršča v dodati prostor. Razprševanje v splošnem

–Prinaša dobre rezultate pri iskanju (ob uporabi ene izmed tehnik reševanja kolizij). –Spreminjanje zapisov je tudi enostavno, razen v primerih, ko spremenimo hash polje. – Dinamične razpršene datoteke… Obravnavane hash tehnike so vse statične:

–ko zapisu določimo naslov, se ta ne spremeni, če se ne spremeni vrednost hash polja . Problem:

–Datoteka postane premajhna in zato vzamemo večjo. Določiti moramo novo hash funkcijo in vse zapise iz stare datoteke premestiti (z uporabo novega razprševanja) v novo datoteko. Alternativa:

–Uporaba dinamičnih razpršenih datotek: datoteko dinamično spreminjamo (večamo) po potrebi. –Obstajajo številne tehnike realizacije dinamičnih razpršenih datotek. Dinamične razpršene datoteke… Razširljivo razprševanje (extendible hashing)

–Strani kreiramo po potrebi. V začetku gredo zapisi v prvo stran. –Ko je stran polna, jo razdelimo glede na prvih i bitov, kjer velja 0 ≤ i < b –Izbranih i bitov določa naslov oziroma ofset v naslovni tabeli strani oziroma imeniku (BAT - Bucket Address Table). Vrednost i se spreminja z velikostjo datoteke –V glavi imenika je zapisana trenutna vrednost i (globina) skupaj z 2i kazalci. –Vsaka stran ima tudi lokalno globino, ki pove, pri katerem i dobimo naslov te strani. Omejitve tehnike razprševanja Učinkovitost razpršenih datotek za iskanje je odvisna od hash polja.

Uporaba razpršenih datotek ni primerna za:

–Iskanje po vzorcu –Iskanje po nizu vrednosti –Iskanje po polju, ki ni hash polje Indeksi in indeksiranje… Indeks je podatkovna struktura, ki SUPB-ju omogoča hitrejše lociranje zapisov v datoteki.

Analogija z indeksom knjige

–Indeks knjige vsebuje ključne besede (urejene po abecedi) ter za vsako pove, na kateri strani ali straneh se ključna beseda pojavlja. –Indeks omogoča, da nam ni potrebno prelistati cele knjige, ko želimo najti določeno vsebino. Terminologija:

–Podatkovna datoteka: datoteka s podatki (imenujemo tudi osnovna datoteka)

22

Page 23: PODATKOVNE BAZE-zapiski

–Indeksna datoteka: datoteka z indeksom. Indeks sestavlja iskalni ključ ter kazalec na zapis v podatkovni datoteki. –Iskalni ključ: sestavljen iz vrednosti polj, po katerih je datoteka indeksirana. Imenujemo tudi indeksno polje. Indeksi gruče (clustered index)

–Z indeksom gruče označujemo indekse, ki temeljijo na poljih, po katerih je obenem urejena tudi podatkovna datoteka.

Primarni in sekundarni indeksi

–Primarni indeks (Primary index): indeks po poljih, ki vsebujejo primarni ključ. Vsak iskalni ključ kaže natanko na en zapis v podatkovni datoteki. Datoteka je po ključu urejena. –Sekundarni indeks (Secondary key): vsak indeks, ki ne temelji na poljih, ki bi vsebovala primarni ključ. Vsaka datoteka ima lahko:

–primarni indeks ali indeks gruče ter -več sekundarnih indeksov! Redki in gosti indeksi:

–Redki indeks (sparse index): indeksna datoteka vsebuje kazalce, ki kažejo le na določene zapise v podatkovni datoteki. Navadno vsebuje po en zapis za vsako stran v podatkovni datoteki; –Gosti indeks (dense index): indeksna datoteka vsebuje kazalce na vse zapise v podatkovni datoteki. Indeksi s sestavljenim iskalnim ključem (composite key ali concatenated key):

–Indeksi po več kot enem polju –Uporabljamo za kombinacije polj, po katerih pogosto iščemo Drevesno indeksiranje… Drevesno indeksiranje učinkovito pri:

–intervalnem iskanju ter –dodajanju in brisanju (za razliko od urejenih datotek). Iskanje po enakosti boljše pri hash indeksiranju.

23

Page 24: PODATKOVNE BAZE-zapiski

Pogledali bomo dve indeksni strukturi, ki temeljita na drevesni organizaciji: –ISAM (Indexed Sequential Access Method): –B+ drevesna struktura ISAM:

–statičen indeks, –učinkovit v primerih, ko se podatkovna datoteka ne spreminja pogosto, –ni učinkovit pri datotekah, ki se hitro povečujejo ali krčijo. B+ drevo:

–dinamična struktura; se zelo dobro prilagaja spremembam v podatkovni datoteki, –najbolj uporabljana vrsta indeksa; omogoča hitro iskanje zapisov, intervalno iskanje in se učinkovito prilagaja spremembam v podatkovni datoteki. ISAM… Primer:

–Imamo datoteko oseb, urejeno po polju “starost”. –Če želimo najti vse osebe starejše od 30 let, moramo najprej najti prvo (s pomočjo binarnega iskanja), ki je starejša od 30 in od te naprej prebrati preostale zapise datoteke. Možnost za pohitritev iskanja:

–Izdelamo dodatno datoteko, s po enim zapisom za vsako stran v podatkovni datoteki in jo uredimo po polju “starost”. –Vsak zapis v dodatni datoteki vsebuje par <ključ prvega zapisa na strani, kazalec na zapis> –Vsak ključ v indeksni datoteki predstavlja mejnik vsebine, na katero kažeta levi in desni kazalec

vsaka stran v indeksu vsebuje en kazalec več, kot je ključev. –Binarno iskanje se izvede nad indeksno datoteko, ki je manjša od osnovne datoteke => hitrejše iskanje. Velikost indeksne datoteke poraja idejo o ISAM indeksu:

–Zakaj ne bi ponovili koraka in zgradili še eno dodatno datoteko, ki bi imela za vsako indeksno stran en zapis, tako da bi velikost končnega indeksa znašala samo eno stran? ISAM indeks sestavljajo dve vrsti strani:

–listi: strani s podatki (in dodatne strani - overflow) in –vozlišča: nepodatkovne strani. Nekatere ISAM strukture temeljijo na skrbno oblikovanih straneh, ki ustrezajo fizični

organizaciji datotek na sekundarnem mediju (IBM). ISAM je v celoti statična struktura (z izjemo dodatnih strani) Gradnja ISAM indeksa:

–Ko se indeksna datoteka kreira, so vse strani v listih urejene zaporedno in po iskalnem ključu. –Vstavljanje novih podatkov lahko zahteva kreiranje dodatnih strani (če je stran, kamor podatek sodi, polna). ISAM podpira operacije iskanje, brisanje in vstavljanje. Iskanje:

24

Page 25: PODATKOVNE BAZE-zapiski

–Začnemo v korenu –Če vrednost, ki jo iščemo manjša ali enaka ključu korena, sledimo levemu kazalcu, sicer desnemu. –Ponavljamo, dokler ne pridemo do listov drevesa. Če podatka, ki ga iščemo, ni v listu, iščemo v dodatnih straneh. Dodajanje

–Stran v listih, kamor zapis sodi, poiščemo enako kot pri iskanju –Zapis dodamo na prvo prosto mesto Brisanje:

–Zapis, ki ga brišemo, poiščemo enako kot pri iskanju Če je zapis na dodatni strani in gre za zadnji zapis na strani, stran zbrišemo. Če je zapis na primarni strani in gre za zadnji zapis na strani, pustimo stran prazno. Služi kot

mesto za kasnejšo rabo. –Lahko se zgodi, da se iskalni ključ, ki nastopa v indeksnem delu, ne pojavi v listih. Primer izračuna stroškov iskanja zapisa v ISAM strukturi:

–Število I/O operacij = logFN, kjer je N število primarnih strani listov, F število otrok vsake indeksne strani. –Število I/O operacij pri binarnem iskanju po urejeni datoteki je log2N. Pri iskanju po eno-nivojskem indeksu: log2(N/F) –Primer: datoteka z 1.000.000 zapisi, 10 zapisov na stran v listih in 100 zapisov v indeksnih straneh Strošek branja cele datoteke: 100.000 Strošek binarnega iskanja po urejeni datoteki: 17 Strošek binarnega iskanja po eno-nivojskem indeksu: 10 Strošek binarnega iskanja po ISAM strukturi: 3 (brez dodatnih strani)

Problem ISAM strukture se pokaže, ko naraste število dodatnih strani

–Podatki v dodatnih straneh so načeloma lahko urejeni, običajno pa niso (zaradi učinkovitosti dodajanja zapisov) –Problem omilimo tako, da v začetku, ko izgradimo indeks, pustimo nekaj praznega prostora v straneh listov. B+ drevesa… B+ indeks je dinamičen njegova struktura se dinamično prilagaja spremembam v

podatkovni datoteki. Odpravlja težave, ki so značilne za ISAM indeks

–npr. s povečevanjem števila dodatnih strani pada učinkovitost... B+ drevo predstavlja iskalno strukturo

–B+ je uravnoteženo drevo, katerega vozlišča usmerjajo iskanje, listi pa vsebujejo podatke (ključe). B+ drevo se dinamično spreminja, zato strani v listih ni možno alocirati zaporedno. Uporabimo

kazalce. Liste B+ drevesa uredimo z dvosmernim seznamom. Lastnosti B+ dreves:

–Operacije dodajanja in brisanja ohranjajo drevo uravnoteženo; –Vozlišča (razen korena) so vsaj 50% zasedena, če uporabimo ustrezen algoritem brisanja; –Iskanje določene vrednosti zahteva le pot od korena do ustreznega lista.

25

Page 26: PODATKOVNE BAZE-zapiski

–Poti do vseh vozlišč so zaradi uravnoteženosti enake in določajo višino drevesa. –Zaradi velikega razvejanja (velik F) je višina običajnih B+ dreves majhna (redko več kot 3 ali 4). Primer B+ drevesa z višino 1 in razvejanostjo F = 5.

–Vsako vozlišče B+ drevesa vsebuje m vpisov; d ≤ m≤ 2*d. –d je parameter B+ drevesa (red drevesa); 2*d predstavlja kapaciteto vozlišča. Edina izjema je korensko vozlišče, za katerega velja 1=<m=<2d. Uporaba B+ dreves se splača v primerih, ko se podatki velikokrat spreminjajo, obenem pa

potrebujemo zaporedno iskanje. Prednosti pred uporabo urejenih datotek:

–Za ceno dodatnega prostora, ki ga porabimo z indeksno datoteko, pridobimo vse prednosti urejene datoteke, obenem pa ne izgubimo na učinkovitosti dodajanja in brisanja. Prednosti pred uporabo ISAM-a:

–Zaradi dodajanja ni potrebno ustvarjati dodatnih oziroma presežnih strani. Iskanje:

–Algoritem za iskanje deluje podobno kot pri ISAM strukturi. Dodajanje:

–Dodajamo podatek k* –Poiščemo list, kamor k* spada –Če je v listu še prostor, k* dodamo, sicer moramo list razdeliti na dva dela. –Če moramo zaradi razpolovitve lista dodati k* v vozlišče, ki je že polno, se delitev ponovi. –V splošnem moramo vozlišče, ki ni list, razpoloviti, ko je polno vsebuje 2d ključev in 2d+1 kazalcev –Z dodatnim indeksnim poljem k* imamo 2d+1 ključev in 2d+2 kazalcev lahko razdelimo na dva minimalno zasedena vozlišča (vsak po d ključev in d+1 kazalcev ter dodaten ključ, ki smo ga izbrali kot delitveni ključ. –Delitveni ključ skupaj s kazalcem na drugi del razdeljenega vozlišča premaknemo eno raven višje. Algoritem za dodajanje Variacija algoritma za dodajanje elementov v B+ drevesa:

–v primeru, ko dodajamo v vozlišče N, ki je polno, uporabimo postopek redistribucije podatkov ali razcepljanje strani. –Redistribucija se nanaša na vozlišče N in na vozlišči, ki sta njen levi in desni sosed in hkrati pripadata istemu nad-vozlišču. Stroški redistribucije:

–Da ugotovimo, ali je redistribucija možna, moramo preveriti sosede (do 2 I/O operaciji). Če so sosedi polni, je razdelitev vseeno potrebna. –Stroški redistribucije v indeksnem delu Preverjanje možnosti redistribucije v povprečju poveča število I/O operacij, saj se redko zgodi, da

bi bila redistribucija možna se ne splača. –Stroški redistribucije v podatkovnem delu Če je potrebno razdeliti list, moramo vseeno prebrati sosedno vozlišče, da popravimo kazalce.

26

Page 27: PODATKOVNE BAZE-zapiski

Redistribucija se splača: če je list zaseden, preberi soseda. Če je prosto mesto, dodaj, sicer razpolovi. Brisanje:

–Poiščemo zapis in ga brišemo. –Če se zgodi, da zasedenost lista, v katerem je bil podatek, pade pod mejo, moramo redistribuirati podatke s sosednjimi listi ali pa združiti več listov skupaj. –Če podatke redistribuiramo med dve vozlišči, moramo ustrezno spremeniti vsebino nad-vozlišča. –Če podatke združimo iz dveh vozlišč, moramo vsebino njunih nad-vozlišč spremeniti tako, da brišemo indeksno polje za drugo vozlišče. Pogledali smo:

–redistribucija v listih, –združevanje v listih in –združevanje v indeksnem delu Ostane:

–redistribucija v indeksnem delu Primer redistribucije v indeksnem delu Stroški brisanja

–Pri brisanju pogledamo najprej samo enega soseda Če ima odvečna polja, naredimo redistribucijo, sicer združitev

–Če ima vozlišče tudi drugega soseda, se splača pogledati zaradi možnosti za redistribucijo. Možnosti so velike. –Redistribucija je cenejša od združevanja, saj se manifestira kvečjemu še v nadvozlišču. Z redistribucijo pridobimo tudi manj zasedena vozlišča (manj razlogov za razdruževanje ob vnosu) Duplikati

–Več zapisov ima isti ključ isti ključ se lahko pojavi v več listih. Če upoštevamo možnost duplikatov, se postopki iskanja, dodajanja in brisanja zakomplicirajo. –Iskanje: Lahko rešimo z dodatnimi stranmi (overflow; podobno kot ISAM) Običajna rešitev: algoritem poišče najbolj levo podatkovno polje z iskanim ključem in po potrebi

pregleda še nadaljnje strani… –Brisanje če brišemo zapis, moramo v listih pregledati več polj, da najdemo tistega, ki ga je potrebno

brisati. Rešitev: v iskalni ključ dodamo še rid (record ID) – tipična rešitev v komercialnih SUPB. Stiskanje ključev

–Višina drevesa premo sorazmerna številu podatkovnih polj in obratno sorazmerna velikosti indeksnih polj (F). –Število I/O operacij za branje podatkovnega polja = h. –Za povečanje učinkovitosti potrebno maksimizirati F oziroma minimizirati velikost indeksnega polja. –Velikost indeksnega polja odvisna od velikosti iskalnega ključa.

27

Page 28: PODATKOVNE BAZE-zapiski

–V indeksnem delu se ključi uporabljajo zgolj za usmerjanje… –Uporabimo tehniko stiskanja na osnovi prefiksov (Prefix Key Compresion). Komercialni sistemi:

–IBM DB2, Informix, Microsoft SQL Server, Oracle, Sybase ASE – vsi sistemi podpirajo indekse na osnovi B+ dreves; razlike predvsem v obravnavi duplikatov in postopku brisanja. –Sybase ASE: pri brisanju se uporabi Združevanje (če zasedenost pod mejo) ali Označitev zapisa, da je brisan. Občasno se požene postopek (garbage collection scheme), ki sprosti

nezaseden prostor. –Oracle: pri brisanju se zapis označi kot brisan. Obnovitev indeksa možna on-line (ko je indeks v uporabi) ali na kopiji indeksa z združevanjem nepolnih vozlišč. –Informix: pri brisanju se zapis označi kot brisan. –IBM DB2, Microsoft SQL Server: pri brisanju se zapis dejansko briše. Če pade zasedenost vozlišča pod mejo, se uporabi združevanje. BAZE_FRI_16.03-2010 -> ISAM za indeksiranje datotek Od prejšnjič: Podatki logično shranjeni v tabelah, fizično v datotekah. Vedno imamo opravka s stranmi. Datotečne organizacije: urejene/ neurejene / razpršene. -hash datoteke: razpršene: Imamo neko funkcijo, ki nam izračuna kam bomo upisali neko stran. (na katero mesto) -odprto naslavljanje ne/povezane dodatne strani, večkratna razpršitev: se večkrat zgodi. Če poda naslov, ki je že zaseden, jo izvedemo ponovno. -prednosti in slabosti hash datoteke -indeksi na splošno ; terminologija Indekse realiziramo s pomočjo podatkovne strukture v obliki na glavo obrnjenega drevesa. 2 indeksa: Isam B+ drevo ISAM: Statičen. Iskanje po datotekah, dolgotrajno. Ima prazne prostore, kjer brišemo podatke. Prostor se ne uporabi ponovno. Od danes: ISAM indeks sestavljajo dve vrsti strani: -listi : strani s podatki -vozlišča : nepodatkovne strani -isam se ne spreminja, v celoti statičen (pri b+ drevesu se drevo spreminja) -ko se indeksna datoteka kreira, so vse strani v listih urejene zaporedno, po iskalnem ključu -ko dodajamo nov zapis le-ta pride kamor pride. 3 operacije v ISAM drevesu: Iskanje:

28

Page 29: PODATKOVNE BAZE-zapiski

Začnemo v korenu. Podatki v indeksnih vozliščih nam dajo smer kamor naj gremo. Tako pridemo do lista. Če podatka ni v listu, iščemo v dodatnih straneh. Dodajanje: Stran v listih, kamor zapis sodi poiščemo enako kot pri iskanju. Če je mesto v listu prosto ga tja dodamo, sicer kreiramo novo stran. Zapis dodamo na prvo prosto mesto. Vse overflow strani niso nič urejene. V prmarnih listih so podatki za razliko urejeni. Brisanje: Podatke za brisanje iščemo enako, kot pri iskanju. Če je zapis na dodatni strani in gre za zadnji zapis na strani, stran zbrišemo. Če je zapis na primarni strani in je zadnji, stran pustimo. Služi za prazno mesto za kasnejše zapise. Lahko se zgodi da zapis nastopa v indeksnem delu v podatkovnem pa ne. Problem ISAM strukture se pokaže, ko naraste število dodatnih strani. Problem omilimo tako, da na začetku, ko izradimo indeks, pustimo nekaj praznega prostora v listih. Druga možnost: periodično obnavljamo indeks. B+ indeks/ B+ drevo: V praksi bolj uporaben. Je dimaičen. Povečuje učinkovitost. B+drevo je uravnoteženo drevo. Ker se b+ drevo dinamično spreminja listi niso urejeni. So pa listi povezani s dvosmernim seznamom. Lastnosti: drevo je uravnoteženo tako da je vsako vozlišče z izjemo korena vsaj 50 procentno zasedeno. Iskanje zahteva sprehod od korena do lista. Večja kot je globina več je avput-input opreracij. Vsaka pot od korena do vozlišča je enako dolga. Pravimo ji višina drevesa. ( D je parameter B+ drevesa. Predstavlja polovico zasedenosti drevesa.) B+ drevo ima prednost, da je dobro poleg iskanja tudi za dodajanje in brisanje. (Ponavadi se te operacije med seboj izključujejo) Algolritem za iskanje deluje podobno kot pri ISAM strukturi. Ima funkcijo, ki išče nek kluč z vrednostjo k. Deluje pa rekuzivno. Funkcija poišče searc key tako da začne pri nekem pointerju. V začetku je ta nek kazalec, nato se premakne v vozlišče. Ko ga najde rekurzivno pokliče sama sebe. Druge funkcije pri B+ drevesih: / Iskanje : enako kot pri ISAMdrevesu / Dodajanje: poiščemo list kao bi podatek sodil. Če je list prost podatek dodamo vanj. Če list ni prost, ga razdelimo na 2 dela. Če moramo zardi razpolovitve lista dodati k v vozlišče, ki je že polno, se delitev ponovi.....Delitveni ključ premaknemo na en nivo višje. (Delitev v vozliščih ni enako za podatkovni in indeksni del.) Dodajanje:

–Dodajamo podatek k* –Poiščemo list, kamor k* spada –Če je v listu še prostor, k* dodamo, sicer moramo list razdeliti na dva dela. –Če moramo zaradi razpolovitve lista dodati k* v vozlišče, ki je že polno, se delitev ponovi. –V splošnem moramo vozlišče, ki ni list, razpoloviti, ko je polno vsebuje 2d ključev in 2d+1 kazalcev –Z dodatnim indeksnim poljem k* imamo 2d+1 ključev in 2d+2 kazalcev lahko razdelimo na dva minimalno zasedena vozlišča (vsak po d ključev in d+1 kazalcev ter dodaten ključ, ki smo ga izbrali kot delitveni ključ. –Delitveni ključ skupaj s kazalcem na drugi del razdeljenega vozlišča premaknemo eno raven višje.

29

Page 30: PODATKOVNE BAZE-zapiski

Redestribucija podatkov ali razceplanje strani: glej prosojnico!!! –v primeru, ko dodajamo v vozlišče N, ki je polno, uporabimo postopek redistribucije podatkov ali razcepljanje strani. –Redistribucija se nanaša na vozlišče N in na vozlišči, ki sta njen levi in desni sosed in hkrati pripadata istemu nad-vozlišču. Stroški redestribucije: Koliko nas časovno stane? –Stroški redistribucije v indeksnem delu se ne splačajo. Redko kdaj dobimo prosto mesto v indeksnem delu. Da ugotovimo, ali je redistribucija možna, moramo preveriti sosede (do 2 I/O operaciji). Če so sosedi polni, je razdelitev vseeno potrebna. –Stroški redistribucije v indeksnem delu Preverjanje možnosti redistribucije v povprečju poveča število I/O operacij, saj se redko zgodi, da

bi bila redistribucija možna se ne splača. –Stroški redistribucije v podatkovnem delu Če je potrebno razdeliti list, moramo vseeno prebrati sosedno vozlišče, da popravimo kazalce. Redistribucija se splača: če je list zaseden, preberi soseda. Če je prosto mesto, dodaj, sicer

razpolovi. Brisanje: če se zasedenost lista, v katerem je bil podatek, pade pod mejo, moramo izvest ustrezno redistribucijo s sosednimi listi ali pa združiti več listov skupaj. –Če podatke redistribuiramo med dve vozlišči, moramo ustrezno spremeniti vsebino nad-vozlišča. –Če podatke združimo iz dveh vozlišč, moramo vsebino njunih nad-vozlišč spremeniti tako, da brišemo indeksno polje za drugo vozlišče. Pri združevanju listov se ključ premakne en nivo navzgor. Pri zruževanju indeksov se ključ premakne iz zgornjega na nivo nižje. Primer redistribucije v indeksem delu: glej shemo na prosojnici!!! –Stroški brisanja: Pri brisanju pogledamo najprej samo enega soseda Če ima odvečna polja, naredimo redistribucijo, sicer združitev

Redestribucija je cenejša od združevanja. Algoritem za brisanje deluje podobno kot algolitem za dodajanje. Dublikati: lahko imamo več vrednosti, ki imajo isti ključ. Iskanje: lahko rešimo z dodatnimi stranmi. Algoritem poišče najbolj levo polje v listu in po potrebi pregleda še dodatne strani. Prijemi za pospešitev iskanja: Pri drevesu na učinkovitost iskanja najbolj vpliva: manjša kot je višina ali globina drevsa hitreje pridemo do rezultata. Drevo moramo čimbolj razvejati. Stiskanje ključev: Za povečanje učinkovitosti iskanja skušamo maximalno povečati parameter razvejanosti. ( Prefix Key Compresion) Komercialni sistemi: –IBM DB2, Informix, Microsoft SQL Server, Oracle, Sybase ASE – vsi sistemi podpirajo indekse na osnovi B+ dreves; razlike predvsem v obravnavi duplikatov in postopku brisanja. Sybase ASE: Tako rešitev uporablja veliko SUPBjev Združevanje (če zasedenost pod mejo) ali

30

Page 31: PODATKOVNE BAZE-zapiski

Označitev zapisa, da je brisan. Občasno se požene postopek (garbage collection scheme), ki sprosti nezaseden prostor. Oracle: omogoča on-line obnovitev sistema -pri brisanju se zapis označi kot brisan. Obnovitev indeksa možna on-line (ko je indeks v uporabi) ali na kopiji indeksa z združevanjem nepolnih vozlišč. –Informix: pri brisanju se zapis označi kot brisan. –IBM DB2, Microsoft SQL Server: pri brisanju se zapis dejansko briše. Če pade zasedenost vozlišča pod mejo, se uporabi združevanje. Bitni indeksi Uporabljajo se za polja, ki imajo majhno število vrednosti. (stolpci v tabelah) Prednosti bitnega indeksa v primerjavi z B+ drevesi: -kompatiblinost –večja učinkovitost pri iskanju po več predikatih Stični indeks Deluje podobno kot bitni. Uporablja za specifične naloge, npr. podatkovna središča. Uporablja se za tabele, ki imajo skupna polja. Gruče Fizično združene relacije na disku. Omogočajo zelo hitro iskanje. Za ključ gruče glej prosojnice. Smernice za izbero datotečne organizacije: Glej prosojnice!!! 6.April 2010 RELACIJSKO POIZVEDOVANJE SQL-1.del Uvod v SQL… SQL je transformacijsko usmerjen jezik, ki ga sestavljata dve skupini ukazov:

–Skupina ukazov DDL (Data Definition Language) za opredelitev strukture podatkovne baze in –Skupina ukazov DML (Data Manipulation Language) za poizvedovanje in ažuriranje podatkov.

31

Page 32: PODATKOVNE BAZE-zapiski

SQL do izdaje SQL:1999 ne vključuje ukazov kontrolnega toka. Kontrolni tok je bil potrebno obvladati s programskim jezikom ali interaktivno z odločitvami uporabnikov. Lastnosti SQL:

–Enostaven; –Nepostopkoven (kaj in ne kako); –Uporaben v okviru številnih vlog: skrbniki PB, vodstvo, razvijalci informacijskih rešitev, končni uporabniki; –Obstaja ISO standard za SQL; –SQL je de-facto in tudi uradno standardni jezik za delo z relacijskimi podatkovnimi bazami.

Pisanje SQL stavkov… SQL stavki so sestavljeni iz rezerviranih in uporabniško definiranih besed. Rezervirane besede so natančno določene, napisane morajo biti pravilno, ne smejo se lomiti med

vrstice. Uporabniško definirane besede označujejo razne podatkovne objekte, kot so npr. relacije, stolpci,

pogledi,… Večina komponent SQL stavkov je neodvisna od velikosti pisave; izjema so tekstovni podatki. Da dosežemo boljšo berljivost, pišemo SQL stavke v več vrsticah in z zamiki:

–Vsak sklop SQL stavka se začne v novi vrstici –Sklopi so levo poravnani –Če ima sklop več delov, je vsak v svoji vrstici in poravnan z začetkom sklopa Za opis sintakse SQL stavkov bomo uporabljali razširjeno BNF notacijo:

–REZERVIRANE BESEDE z velikimi črkami, –uporabniško definirane besede z malimi črkami, –Znak | za izbiro med alternativami, –{Obvezni elementi} v zavitih oklepajih, –[Opcijski elementi] v oglatih oklepajih, –Znak … za opcijske ponovitve (0 ali več). Podatkovne vrednosti predstavljajo konstante v SQL stavkih.

Vse ne-numerične vrednosti so zapisane v enojnih navednicah

‘Ljubljana’ Vse numerične vrednosti brez navednic

225.990 Implementacije SQL Stavki skupine SQL DML DML skupina zajema SQL stavke za manipulacijo s podatki

–SELECT Izbira –INSERT Dodajanje –DELETE Brisanje –UPDATE Spreminjanje

32

Page 33: PODATKOVNE BAZE-zapiski

Sintaksa SELECT stavka: FROM Določa tabele za poizvedbo WHERE Filtrira vrstice GROUP BY Združuje vrstice po vrednostih izbranih stolpcev HAVING Filtrira skupine glede na določene pogoje SELECT Določa stolpce, ki naj se pojavijo v izhodni relaciji ORDER BY Določa vrstni red vrstic na izhodu

Primeri: Za primere bomo uporabljali shemo PB o hotelih

Hotel (hotelNo, hotelName, address) Room (roomNo, hotelNo, type, price) Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo, comments) Guest (guestNo, guestName, guestAddress) Izpiši vse podatke o hotelih:

SELECT hotelNo, hotelName, address FROM Hotel ali krajše SELECT * FROM Hotel Uporaba DISTINCT Izpiši oznake hotelov in sob, ki so bile kdaj koli rezervirane

SELECT DISTINCT hotelNo, roomNo FROM Booking Izračunana polja Izpiši ceno sob za deset dnevni najem

SELECT RoomNo, type, price*10 AS CenaNajema FROM Room Iskalni kriteriji Izpiši oznake hotelov, ki imajo tri-posteljne sobe (type = 3) in ceno manjšo kot 100 EUR

SELECT hotelNo FROM Room WHERE type = 3 AND price < 100 Iskanje z uporabo BETWEEN Izpiši vse sobe s ceno med 50 in 70 EUR

SELECT roomNo

33

Page 34: PODATKOVNE BAZE-zapiski

FROM Room WHERE price BETWEEN 50 AND 70 Iskanje po članstvu množice Izpiši oznake hotelov in številke dve ali tri-posteljnih sob

SELECT hotelNo, roomNo FROM Room WHERE type IN (2,3) Iskanje z vzorcem Izpiši vse goste, ki živijo kjerkoli v Ljubljani (v polju guestAddress je tudi string ‘Ljubljana’)

SELECT guestNo, guestName, guestAddress FROM Guest WHERE guestAddress LIKE ‘%Ljubljana%’ Iskanje z NULL vrednostjo v pogoju Izpiši vse rezervacije brez podanih komentarjev

SELECT * FROM Booking WHERE comments IS NULL Sortiranje vrstic v izhodni relaciji Izpiši vse podatke o sobah, urejene po tipu sobe od največje do najmanjše in znotraj tipa po

cenah od najmanjše do največje SELECT * FROM Room ORDER BY type DESC, price ASC Agregiranje podatkov… ISO standard definira pet agregarnih operacij

–COUNT vrne število vrednosti v določenem stolpcu –SUM vrne seštevek vrednosti v določenem stolpcu –AVG vrne povprečje vrednosti v določenem stolpcu –MIN vrne najmanjšo vrednost v določenem stolpcu –MAX vrne največjo vrednost v določenem stolpcu Vse operacije delujejo na enem stolpcu in vračajo eno samo vrednost. COUNT, MIN in MAX se uporabljajo za numerične in ne-numerične vrednosti, SUM in AVG

zahtevata numerične vrednosti.

34

Page 35: PODATKOVNE BAZE-zapiski

Vse operacije razen COUNT(*) najprej odstranijo vrstice z NULL vrednostjo v stolpcu, po katerem agregiramo. COUNT(*) prešteje vse vrstice, ne glede na NULL vrednosti ali duplikate. Če se želimo znebiti duplikatov, uporabimo DISTINCT pred imenom stolpca. Nima učinka na

MIN/MAX, lahko pa vpliva na SUM/AVG. Agregarne operacije lahko uporabimo le v SELECT ali HAVING sklopu Če SELECT sklop vsebuje agregarno operacijo, mora obstajati tudi GROUP BY sklop, sicer ni

moč dodeliti agregirane vrednosti. SELECT roomNo, AVG(price) FROM Room Uporaba COUNT in DISTINCT V koliko različnih hotelih obstajajo rezervacije za prvi teden v mesecu januarju 2005

SELECT COUNT (DISTINCT hotelNo) AS numH FROM Booking WHERE dateFrom = ‘1.1.2005’ AND dateTo = ‘7.1.2005’ Uporaba več agregatov istočasno Izpiši povprečno, minimalno in maksimalno ceno dvoposteljne sobe

SELECT AVG(price), MIN(price), MAX(price) FROM Room WHERE type = 2 Združevanje podatkov… Sklop GROUP BY uporabimo za združevanje podatkov v skupine.

SELECT in GROUP BY sta tesno povezana

–vsak element v SELECT seznamu, mora imeti samo eno vrednost za vse elemente v skupini, –SELECT sklop lahko vsebuje le: imena stolpcev agregarne operacije konstante ali izraze, ki so sestavljeni iz kombinacije naštetih elementov. Vsi stolpci, ki so navedeni v SELECT sklopu, se morajo nahajati tudi v GROUP BY sklopu,

razen tistih, ki nastopajo samo v agregarnih operacijah. Če uporabljamo WHERE sklop v kombinaciji z GROUP BY, se WHERE upošteva najprej,

združevanje pa se izvede na preostalih vrsticah. ISO standard jemlje NULL vrednosti kot enake, ko gre za združevanje.

35

Page 36: PODATKOVNE BAZE-zapiski

Primer: Izpiši število enoposteljnih, dvoposteljnih in troposteljnih sob v vsakem hotelu

SELECT hotelNo, type, COUNT(roomNo) FROM Room GROUP BY hotelNo, type Omejitev skupin HAVING sklop je namenjen uporabi v kombinaciji z GROUP BY kot omejitev skupin, ki se

lahko pojavijo v rezultatu. Deluje podobno kot WHERE

–WHERE filtrira posamezne vrstice –HAVING filtrira skupine. Stolpci, ki so navedeni v HAVING sklopu, morajo biti tudi v SELECT sklopu ali v agregatih.

Uporaba sklopa HAVING Izpiši število enoposteljnih, dvoposteljnih in troposteljnih sob v vsakem hotelu ter njihovo

povprečno ceno. Upoštevaj samo tiste primere, ko je število sob večje od 1. SELECT hotelNo, type, COUNT(roomNo), AVG(price) FROM Room GROUP BY hotelNo, type HAVING COUNT(roomNo) > 1 Gnezdenje poizvedb… Nekateri SQL stavki imajo lahko vgnezdene SELECT stavke. Vgnezdeni SELECT stavki se lahko uporabijo v WHERE ali HAVING sklopih drugega SELECT

stavka (subselect). Lahko se pojavijo tudi v INSERT, UPDATE in DELETE stavkih.

Primer vgnezdenega SELECT stavka: Izpiši nazive hotelov, ki imajo vsaj 10 troposteljnih sob

SELECT hotelName FROM Hotel WHERE hotelNo IN ( SELECT hotelNo FROM Room GROUP BY hotelNo HAVING COUNT(hotelNo) > 9) Pravila gnezdenja SELECT stavkov…

36

Page 37: PODATKOVNE BAZE-zapiski

Vgnezdeni SELECT stavki ne smejo uporabljati ORDER BY sklopa. SELECT sklop vgnezdenega SELECT stavka lahko zajema samo en stolpec, razen v primeru

uporabe ukaza EXISTS. Imena stolpcev v vgnezdenem SELECT stavku se privzeto nanašajo na tabele iz vgnezdenega ali

zunanjega SELECT stavka (uporaba alias-ov) Ko je vgnezden SELECT stavek operand v primerjavi, se mora nahajati na desni strani enačbe. Vgnezdeni SELECT stavek ne more biti operand v izrazu.

Vaja Napišite SQL poizvedbo, ki vrne imena hotelov, ki imajo nadpovprečno ceno svojih sob.

Uporaba ANY in ALL V vgnezedenih SELECT stavkih, ki vračajo en sam stolpec, lahko uporabljamo operatorja ANY

in ALL. Z uporabo ALL bo pogoj izpolnjen samo, če bo veljal za vse vrednosti, ki ji vrača poizvedba. Z uporabo ANY, bo pogoj izpolnjen, če bo veljal za vsaj eno od vrednosti, ki ji poizvedba vrača. Če je rezultat poizvedbe prazen, bo ALL vrnil true, ANY pa false. Namesto ANY lahko uporabljamo tudi SOME.

Primer uporabe ANY: Izpiši številke sob ter pripadajočih hotelov, katerih cena je večja kot cena vsaj ene sobe v hotelu

‘Hilton New York’ (hotelNo = 5). SELECT R.hotelNo, R.roomNo FROM room AS R WHERE R.hotelNo <>5 AND R.price > ANY ( SELECT price FROM Room WHERE hotelNo = 5 ); Primer uporaba ALL: Izpiši številke sob ter pripadajočih hotelov, katerih cena je večja kot cena vseh sob v hotelu

‘Hilton New York’ (hotelNo = ‘HIL’). SELECT R.hotelNo, R.roomNo FROM Room AS R WHERE R.hotelNo <>5 AND R.price > ALL ( SELECT Price FROM Room WHERE hotelNo = 5 ); 13. April

POIZVEDOVANJE V SQL-2.del

37

Page 38: PODATKOVNE BAZE-zapiski

Od prejšnič SQL ->Stavek SELECT.... -> naslednjič TRANSAKCIJE.... STIKI: Ali poizvedovanje po več tabelah. Združujemo jih po tujih ključih. 2 načina uporabe stikov: -uporabimo ukaze -stik realiziramo s pogojem Če pogoja ne napišemo imamo kartezični produkt. Če pišemo poizvedbe v SELECT stavku v več tabelah uprabljamo sinonime za ime tabele. Sinonimi so nujni. V relacijah imamo lahko istoimenske atribute. Primer: � Izpiši imena in naslove gostov, ki imajo za termin od 1.1.2005 do 6.1.2005 rezervacije v hotelu ‘Hilton New York’ SELECT G.guestName, G.guestAddress FROM Guest G, Booking B, Hotel H WHERE B.guestNo = G.guestNo AND B hotelNo = H hotelNo AND B.H.B.fromDate = ‘1.1.2005’ AND B.toDate = ‘6.1.2005’ AND H.hotelName = ‘Hilton New York’ Različni ukazi za poizvedovanje v različnih implementacijah SQLa. Računaje stika: Predstavlja podmnožico kartezijskega produkta. Če pri navedbi dveh tabel A in B v FROM sklopu ne navedemo stika v WHERE sklopu, dobimo kartezijski produkt med A in B. � ISO standard nudi posebno obliko zapisa za kartezijski produkt: SELECT [DISTINCT | ALL] {* | columnList} FROM Table1 CROSS JOIN Table2 Dediciran ukaz: CROSS JOIN eksplicitno prevajalniku povemo, da je naša zelja narediti kartezični produkt. Postopek za generiranje rezultata SELECT stavka s stikom:

1. kartezijski produkt 2. selekcija –izberemo ustrezne vrstice 3. projekcija –izberemo ustrezne stolpce

38

Page 39: PODATKOVNE BAZE-zapiski

4. DISTINCT –eliminiramo dvojnike 5. ORDER BY – razvrščanje po pogojih; ni obvezen

Zunanji stik: S pomočjo zunanjega stika dobimo v rezultat tudi vrstice, ki nimajo stične vrednosti v drugi tabeli. Sintaksa: SELECT DISTINCT H.hotelName FROM Hotel H LEFT JOIN Booking B ON H.hotelNo = B. hotelNo _ Kaj izpiše zgornja poizvedba ? ODG: Nazive hotelov + št. sob. Samo za tiste hotele kjer najdemo par v bookingu. Gre za levo odprti stik: izpišejo se vsi hoteli. če imajo rezervacije, se izpišejo še št. sob Če bi imeli naraven stik bi se izpisali samo ustrezni hoteli. Polni zunanji stik: / Full Outer Join Vrne tudi tiste vrstice, ki v tabeli A in B nimajo stičnega para. Sintaksa: SELECT DISTINCT G.guestName, H.hotelName FROM Hotel H FULL JOIN Guest G ON H.address = G.guestAddress EXISTS / NOT EXSISTS Ukaza , ki vračata logičen rezultat. Samo True/False. Ne vračata nobenih numeričnih vrednosti. Preverja ali obstaja nekaj kot rezultat poizvedbe ali ne. -True dobimo, če obstaja vsaj ena vrstica v tabeli, ki je rezultat vgnezdene poizvedbe. -False dobimo, če vgnezdena poizvedba vrača prazno množico. NOT EXISTS je negacija EXISTS. Primer: Izpiši vse goste, ki so kdaj koli imeli rezervacije v hotelu Hilton New York. SELECT guestName, guestAddress FROM Guest G WHERE EXISTS Were true je zmeraj izpoljen, were false pa nikoli. (SELECT * FROM BookingB HotelH Booking B, Hotel H WHERE B.guestNo = G.guestNo AND

39

Page 40: PODATKOVNE BAZE-zapiski

B.hotelNo = H.hotelNo AND Kaj dobimo, če ta pogoj izpustimo? to je klasičen stik med 2. tabelama. Če ga izpustimo dobimo kartezični produk. --zapisi iz 1. tabele se bodo združili z 2. tabelo. Exsist bo vedno vračal true. H.hotelName = ‘Hilton New York’) Namesto EXISTS lahko uporabimo stik SELECT DISTINCT G.guestName, G.guestAddress FROM Guest G, Booking B, Hotel H WHERE B.guestNo = G.guestNo AND B.hotelNo = H.hotelNo AND H.hotelName = ‘Hilton New York’) Stik časovno najbolj potretna relacija. OPERACIJE NAD MNOŽICAMI: -unija -presek -razlika Domene atributov a in b tabele morajo biti enake. Uporaba operacij nad množicami Sintaksa: op [ALL] [CORRESPONDING [BY {column1 [, ...]}]] � Če uporabimo CORRESPONDING BY, se operacija izvede samo nad poimenovanimi stolpci � Če uporabimo samo CORRESPONDING brez BY člena, se operacija izvede nad skupnimi stolpci. � Če uporabimo ALL, lahko rezultat vključuje tudi dvojnike Primer unije � Izpiši vse mesta, kjer je bodisi lociran kakšen gost hotelske verige ali kakšen hotel. (SELECT address FROM Hotel) UNION (SELECT guestAddress FROM Guest) -Kako bo naziv stolpca, ki ga poizvedba vrne? Polja morajo imeti enak pomen. V prvi relaciji so drugačna imen a kot pri drugi. Vzame se prva relacija. Odg: address Unija z uporabo CORRESPONDING BY (SELECT * FROM Hotel)

40

Page 41: PODATKOVNE BAZE-zapiski

UNION CORRESPONDING BY address (SELECT * FROM Guest) Address: Hotel(hotelNo, hotelName, address)

Guest(guestNo, guestName, address) Če polje ni enako poimenovano CORRESPONDING BY ne deluje!!! Primer preseka � Izpiši vse mesta, kjer je lociran kakšen gost hotelske verige in obenem kakšen hotel. (SELECT address FROM Hotel) INTERSECTION (SELECT guestAddress FROM Guest) Presek z uporabo COORESPONDING BY (SELECT * FROM Hotel) INTERSECT CORRESPONDING BY address Naredi presek, vendar zgolj po polju address (SELECT * FROM Guest) Uporaba EXCEPT � Izpiši vse mesta, kjer je lociran kakšen gost hotelske verige in obenem v tem kraju ni nobenega hotela. (SELECT guestAddress FROM Guest) EXCEPT (SELECT address FROM Hotel) EXCEPT z uporabo COORESPONDING BY (SELECT * FROM Guest) EXCEPT CORRESPONDING BY address (SELECT * FROM Hotel) Address -> Hotel(hotelNo, hotelName, address)

Guest(guestNo, guestName, address)

41

Page 42: PODATKOVNE BAZE-zapiski

INSERT stavek: Izjemno močno poizvedovanje. Za dodajanje karšnih koli zapisov v podatkovno bazo. Paziti moramo na vrstni red stoplcev; na obvezne vrednosti. Je možnost dodajanja privzete vrednosti. (DEFAULT) Sintaksa: INSERT INTO TableName [ (columnList) ] VALUES (dataValueList) v istem vrstnem redu kot so imena stolpcev [] pomeni neobvezno. � Seznam columnList ni obvezen; če ga spustimo, interpreter pričakuje vrednosti za vse stolpce tabele, v vrstnem redu, kot so bili kreirani. � Pri vnosu moramo vpisati najmanj vse obvezne vrednosti (not null), razen za stolpce, pri katerih je bila ob kreiranju določena privzeta vrednost (DEFAULT). Seznam dataValueList mora ustrezati seznamu columnList: Predstavlja vrednosti, ki jih vnašamo – Število elementov v seznamih mora biti enako; – Vrednost, ki se nanaša na nek stolpec, mora biti v seznamu dataValueList na istem mestu, kot je stolpec v seznamu columnList; – Podatkovni tip vrednosti, ki se nanaša na nek stolpec, mora biti enak kot podatkovni tip stolpca. Primer: � Vnos nove vrstice v tabelo Booking INSERT INTO Booking VALUES (21, 109, ’12.12.2005’, ’17.12.2005’, 109, ‘soba za nekadilce’); � Shema relacije Booking: Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo, comments) � Vnos nove vrstice v tabelo Booking – vnos samo obveznih vrednosti INSERT INTO Booking

42

Page 43: PODATKOVNE BAZE-zapiski

VALUES (21, 109, ’12.12.2005’, ’17.12.2005’, 109, null); -> stolpec comments je neobvezen � ali INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES (21, 109, ’12.12.2005’, ’17.12.2005’, 109); -Vnos več vrstic iz ene ali več drugih tabel... INSERT INTO TableName [ (columnList) ] SELECT ... Če navedemo imena stolpcev, potem lahko določene vrdnosti izpustmo. Razen če niso obvezne. Lahko naredimo tudi SELECT stavek in njegov rezultat vpišemo v tabelo. Primer: Predpostavimo, da imamo tabelo HotelRez, ki za vsak hotel pove oznako hotela, naziv hotela in število trenutno odprtih rezervacij HotelRez(hotelNo, hotelName, NumRez) � S pomočjo tabel Hotel in Booking napolnimo tabelo HotelRez INSERT INTO HotelRez (SELECT H.hotelNo, H.hotelName, COUNT(*) FROM Hotel H, Booking B WHERE H.hotelNo = B.hotelNo AND B.dateFrom >= date() GROUP BY H.hotelNo, H.hotelName) UNION (SELECT hotelNo, hotelName, 0 FROM Hotel WHERE hotelNo NOT IN (SELECT DISTINCT hotelNo FROM Booking WHERE B.dateFrom>=date())); Kaj se zgodi če spodnji del stavka : (SELECT hotelNo, hotelName, 0 FROM Hotel WHERE hotelNo NOT IN (SELECT DISTINCT hotelNo FROM Booking WHERE B.dateFrom>=date())); izpustimo?

43

Page 44: PODATKOVNE BAZE-zapiski

Odg: Prvi del nam ne vrne tistih hotelov v katerih ni nobene rezervacije. Zelimo da je tabela napolnjena z vsem hoteli. Umetno dodamo vse tiste ki nimajo nobene rezervacije. --> napišemo 0. DRUG NAČIN: Rešitev z Levo-Odprim stikom UPDATE data stavek: UPDATE TableName SET columnName1 = dataValue1 [, columnName2 = dataValue2...] [WHERE searchCondition] � TableName se lahko nanaša na ime osnovne tabele ali ime pogleda. � Sklop SET določa nazive enega ali več stolpcev ter nove vrednosti teh stolpcev. Sprememba stoplcev v tabeli. WHERE skolp je neobvezen. –Predstavlja pogoje. Če WHERE-a ni, spreminjamo celotno tabelo. V imenovane stolpce se vpišejo nove vrednosti za vse vrstice v tabeli. Če WHERE sklop določimo, se spremembe zgodijo zgolj za vrstice, ki ustrezajo WHERE pogojem. Nove podatkovne vrednosti morajo ustrezati podatkovnemu tipu stolpca. Primer: Vse dvoposteljne sobe v hotelu z oznako 201 povišaj za 5% UPDATE Room SET price = price * 1,05 WHERE type = 2 AND hotelNo = 201 DN: V vseh hotelih zmanjšaj ceno najdražjih spb za 10% ! Ali lahko napišemo takšen UPDATE stavek v enem sklopu? DELETE stavek: Sintaksa: DELETE FROM TableName [WHERE searchCondition] � TableName se lahko nanaša na ime osnovne tabele ali ime pogleda. � WHERE sklop ni obvezen. Če ga spustimo, zbrišemo vse vrstice v tabeli. Tabela ostane Z DELETOM vedno brišemo VRSTICE. ( ne brišemo posameznih vrednosti.--> te postavimo na NULL, za to uporabljamo UPDATE stavek.) Primer: Izbriši vse potekle rezervacije, ki se nanašajo na

44

Page 45: PODATKOVNE BAZE-zapiski

hotel Slon. DELETE FROM Booking WHERE FromDate < ‘25.11.2005’ AND hotelNo IN (SELECT hotelNo FROM Hotel WHERE hotelName = ‘Hotel Slon‘ ) STAVKI za definicijo, tabel, ključev, omejitev.... (Stavki skupine SQL DDL) Podatkovni tipi: So imaginarni. Vsak SUPB jih imaginira posvoje. � DDL skupina zajema SQL stavke za manipulacijo s strukturo podatkovne baze. � Vsebina: – Podatkovni tipi, ki jih podpira SQL standard. – Namen sklopa “integrity enhancement feature”. – Kako definirati omejitve z SQL-om? – Kako uporabiti “integrity enhancement feature” v CREATE in feature ALTER TABLE stavkih? – Kako kreirati in brisati poglede z SQL-om? – Kako SUPB izvaja operacije nad pogledi? – Pod kakšnimi pogoji so pogledi spremenljivi? – Prednosti in slabosti pogledov – Način delovanja ISO transakcijskega modela – Uporaba GRANT in REVOKE stavkov v okviru zagotavljanja varnosti INTEGRITY ENHANCEMENT FEATURE Zagotavljanje skladnosti podatkov. Med omejitve, ki nam določajo skladnost določamo: – Obveznost podatkov – Omejitve domene (Domain constraints) – Pravila za celovitost podatkov (Integrity constraints) Celovitost entitet (Entity Integrity) Celovitost povezav (Referential Integrity) – Števnost (Multyplicity) Splošne omejitve (General constraints) Da gre za obvezen podatek, navdedemo ko kreiramo tabelo. Primeri: Glej prosojnice!!! NOT NULL == podatek je obvezen (229/115) Domene lahko tudi ukinemo, Uporabimo ukaz DROP. Sintaksa: DROP DOMAIN DomainName

45

Page 46: PODATKOVNE BAZE-zapiski

[RESTRICT | CASCADE] Celovitost entitet lociramo s primarnim ključem. Vsaka tabela ima lahko natanko 1 primarni ključ. Obvezno mora biti enoličen. Ukaz UNIQUE: Enoličnost neosnovnih stolpcev lahko zagotavljamo z uporabo UNIQUE OMEJITVE POVEZAV: Celovitost povezav zagotavlja, da če ima FK ( tuji ključ) neko vrednost, potem se ta vrednost nahaja v primarnem ključu povezane tabele. Rediferecialna integriteta: Ne dovoli da nekaj vnesemo, če ne obstaja. Lahko zagotovimo da se povezave ne uničijo. Ponavadi SUPBji realizirajo več možnosti. 4 možnosti: – CASCADE – SET NULL -SET DEFAULT – NO ACTION Povezava med tabelami se ne sme zgubiti. SPLOŠNE OMEJITVE: Splošne omejitve določimo z CHECK/UNIQUE opcijami v CREATE in ALTER TABLE stavkih. CREATE ASSERTION AssertionName CHECK (searchCondition) Primer: Glej prosojnice!!! SQL DDL omogoča kreiranje in brisanje podatkovnih objektov, kot so: shema, domena, tabela, pogled in indeks. � Glavni SQL DDL stavki so: CREATE SCHEMA DROP SCHEMA CREATE/ALTER DOMAIN DROP DOMAIN CREATE/ALTER TABLE DROP TABLE CREATE VIEW DROP VIEW � Mnogi SUPB-ji omogočajo tudi CREATE INDEX DROP INDEX

46

Page 47: PODATKOVNE BAZE-zapiski

KREIRANJE PODATKOVNIH OBJEKTOV Relacije in drugi podatkovni objekti obstajajo v nekem okolju. � Vsako okolje vsebuje enega ali več katalogov, vsak katalog pa množico shem. � Shema je poimenovana kolekcija povezanih podatkovnih objektov. � Objekti v shemi so lahko tabele, pogledi,domene, trditve, dodelitve, pretvorbe in znakovni nizi. Vsi objekti imajo istega lastnika. KREIRANJE SHEME: Sintaksa : CREATE SCHEMA [Name | AUTHORIZATION CreatorId ] DROP SCHEMA Name [RESTRICT | CASCADE ] � RESTRICT (privzeto): shema mora biti prazna, sicer brisanje ni možno. CASCADE kaskadno se brišejo si objekti � CASCADE: brišejo vsi objekti,povezani s shemo. Če katerokoli brisanje ne uspe, se zavrne celotna operacija. KREIRANJE TABELE Postopek: -ime tabele -ime stolpca in njegov podatkovni tip } - zaključi navajanje stolpcev Sintaksa: CREATE TABLE TableName ({colName dataType [NOT NULL] [UNIQUE] [DEFAULT defaultOption] [CHECK searchCondition] [,...]} [PRIMARY KEY (listOfColumns),] {[UNIQUE (listOfColumns),] […,]} {[FOREIGN KEY (listOfFKColumns) REFERENCES ParentTableName [(listOfCKColumns)], [ON UPDATE referentialAction] [ON DELETE referentialAction ]] [,…]} {[CHECK (searchCondition)] [,…] }) Za množico stolpcev lahko zahtevamo da so enolični. Ko smo jih navedli še 1x povemo UNIQUE. - določimo tuje ključe -znotraj tujega ključa povemo diferencialno itengriteto Primer: 1.) Kreiranje domen : CREATE DOMAIN hotelNumber AS NUMERIC(3)

47

Page 48: PODATKOVNE BAZE-zapiski

CHECK (VALUE IN (SELECT hotelNo FROM Hotel)); Najprej kreiramo domene CREATE DOMAIN guestNumber AS NUMERIC(3) CHECK (VALUE IN (SELECT guestNo FROM Guest)); CREATE DOMAIN rezervDate AS DATE; CHECK(VALUE BETWEEN ‘1.1.1995’ AND ‘1.1.2200’); CREATE DOMAIN roomNumber AS INTEGER; CHECK(VALUE BETWEEN 100 AND 545); CREATE DOMAIN comments AS VARCHAR(100); 2.) kreiranje tabele CREATE TABLE Booking ( hotelNo hotelNumber NOT NULL, CONSTRAINT PrevecRezervacij… guestNo guestNumber NOT NULL, dateFrom rezervDate NOT NULL DEFAULT date(), dateTo rezervDate NOT NULL, roomNo roomNumber NOT NULL, comments comments, PRIMARY KEY (hotelNo), FOREIGN KEY (guestNo) REFERENCES Guest ON DELETE SET NULL ON UPDATE CASCADE …); ALTER TABLE stavek: S njim spreminjamo tabelo. Dodajamo ali ukinjamo stolpce v tabeli. Dodajamo ali ukinemo omejitve tabele; – Za stolpce v tabeli določamo ali ukinjamo privzete vrednosti; -Spreminjamo podatkovne tipe stoplcev v tabeli; Primer: � Spremeni tabelo Booking tako, da ukineš privzeto vrednost stolpca fromDate. ALTER TABLE Booking ALTER fromDate DROP DEFAULT; Spremeni tabelo Booking tako, da ukineš omejitev, da nobena soba nobenega hotela ne

48

Page 49: PODATKOVNE BAZE-zapiski

sme imeti več kot eno rezervacijo na isti dan. V tabelo Gost dodaj stolpec Spol. ALTER TABLE Booking DROP CONSTRAINT prevecRezervacij; ALTER TABLE Gost ADD Spol NOT NULL DEFAULT = ‘M’; Stavek DROP TABLE: Izbriše celotno tabelo. Tudi celotno strukturo. Sintaksa: DROP TABLE TableName [RESTRICT | CASCADE] Restrict: Ukaz se ne izvede, če obstajajo objekti, ki so vezani na tabelo, ki jo brišemo Cascade: kaskadno se brišejo vsi vezani objekti. � Primer: DROP TABLE Gost RESTRICT; 20.4. 2010 Stavek CREATE VIEW SQL ukaz, fizično ne obstajajo na disku. Sintaksa: CREATE VIEW ViewName [(newColumnName [,...]) ] AS subselect [WITH [[CASCADED | LOCAL] CHECK OPTION] Obcijska možnost: Določimo pogled kot SELECT stavek. Dodatne obcije: [WITH [CASCADED | LOCAL] CHECK OPTION] Posebna opcija: WITH CHECK OPTION: Ne omogoča, da bi v pogled ki ima določene pogoje, vpisali nekaj kar temu pogledu ne ustrza. ( Če te obcije ne določimo, tak pogled lahko kreiramo. Zgolj do njega nikoli ne bi prišlo. ) Za ukinitev pogleda ukaz: DROP VIEW Tudi tu možnost: Ristict / CASCADE

49

Page 50: PODATKOVNE BAZE-zapiski

Primer: Promblemska domena sob in hotelov. Želimo narediti poglede, ki bodo služili posameznim hotelom.

Kreiraj pogled RecepcijaSlon tako, da bodo v recepciji hotela Slon videli samo svoje rezervacije.

CREATE VIEW RecepcijaSlon AS SELECT * FROM Booking B, Hotel H WHERE B.hotelNo = H.hotelNo AND H.hotelName = ‘Hotel Slon’; Primer vertikalnega/ horizontalnega pogleda. Vertikalni: Izključimo določene stolpce. Tiste ki so za konkretnega uporabnka uporabni. Horizontalni: Prikaz vrstic. Primer horizontalnega pogleda:

Kreiraj pogled RecepcijaSlon tako, da bodo v recepciji hotela Slon videli samo svoje rezervacije.

CREATE VIEW RecepcijaSlon AS SELECT * FROM Booking B, Hotel H WHERE B.hotelNo = H.hotelNo AND H.hotelName = ‘Hotel Slon’; Primer vertikalnega pogleda:

Izdelaj pogled vseh sob hotela Slon brez cen. CREATE VIEW RoomsSlon AS SELECT R.roomNo, R.type FROM Room R, Hotel H WHERE R.hotelNo = H.hotelNo AND H.hotelName = ‘Hotel Slon’; Primer pogleda z grupiranjem podatkov: Primer: Število rezervacij v vsakem hotelu. CREATE VIEW HotelRez (hNo, hName, hStRez) AS ( SELECT H.hotelNo, H.hotelName, COUNT(*) AS Cnt FROM Hotel H, Booking B

50

Page 51: PODATKOVNE BAZE-zapiski

WHERE H.hotelNo = B.hotelNo AND B.dateFrom >= date() GROUP BY H.hotelNo, H.hotelName) Izvedba pogleda: Imamo SELECT stavek, ki izpisuje iz pogleda, ki smo ga prej kreirari , podatke. Izpisujemo št. hotela, št. rezervaci in ime hotela. Sortiramo jih po imenu hotela. -Imena stolpcev pogleda iz SELECT stavka so prevedena v imena SELECT stavka, ki definira pogled. -Ime iz FROM sklopa pogleda, zamenjamo z imeni iz FROM sklopa SELECT stavka, ki definira pogled. - WHERE sklop SELECT stavka se združi z WHERE sklopom iz SELECT stavka, ki definira pogled. OMEJITVE POGLEDOV: Kakšna pravila morajo veljati, da po ISO standardu lahko spreminjamo poglede?

Pri kreiranju in uporabi pogledov veljajo številne omejitve: – Če je stolpec A v pogledu V definiran z agregatno funkcijo:

Stolpec A lahko nastopa le v SELECT ali ORDER BY sklopu v stavkih, ki do pogleda V dostopajo;

Stolpec A ne smemo uporabiti v WHERE sklopu niti ne sme nastopati kot argument v agregatni funkciji poizvedbe nad pogledom V.

– Pogled, ki je kreiran z združevanjem (GROUP BY), ne smemo stakniti z osnovno tabelo ali pogledom.

Spreminjanje vsebine pogledov ni vedno možno Veljajo mnoge omejitve ISO standard določa, da je pogled možno spreminjati samo, če veljajo naslednji pogoji:

– Opcija DISTINCT v pogledu ni uporabljena; – Vsak element v SELECT seznamu stavka, ki definira pogled, se nanaša na stolpec

ene izmed osnovnih tabel; noben stolpec se ne pojavi več kot enkrat; – FROM sklop v pogledu se nanaša samo na eno tabelo ali pogled, pri čemer pogled

ne sme temeljiti na stiku, uniji, preseku ali razliki; – V pogledu ni vgnezdenih poizvedb; – Sklopa GROUP BY in HAVING v pogledu nista uporabljena;

Za primere glej prosojnice! WITH CHECK OPTION: Vrstice v pogledu obstajajo, če izpolnjujejo WHERE pogoj SELECT stavka, ki pogled definira. -če se vrstica spremeni, tako da ne zadošča več pogoju, se izbriše iz pogleda. -Nove vrstice se v pogledu pojavijo lle, če ustrezajo WHERE pogoju.

51

Page 52: PODATKOVNE BAZE-zapiski

WITH CHECK OPTION prepoveduje selitev vrstic iz pogleda. - na volju sta tudi opciji LOCAL in CASCADED. Nad pogledom lahko naredimo še en pogled, itd. PREDNOSTI/ SLABOSTI POGLEDOV:

PREDNOSTI – Podatkovna neodvisnost – Ažurnost – Večja varnost – Manjša kompleksnost – Udobnost – Prilagodljivost – Podatkovna celovitost

. SLABOSTI:

– Omejitve spreminjanja – Omejitve strukture – Slabša učinkovitost

MATERIALIZIRANI POGLEDI: Dodaten način izvedbe pogleda, ki ga približa tabeli. Ima podatke dejansko shranjene na disku. Iskanje je kasnejše. To stanje moramo potem vzdrževati. ( ) Vaja: Napiši poizvedbo v SQL jeziku, ki bo izpisala naziv hotela z najvišjo povprečno ceno hotelskih sob. SELECT H.hotelName, avg(R.price) AS AvgPrice FROM Room AS R, Hotel AS H WHERE R.hotelNo = H.hotelNo GROUP BY R.hotelNo, H.hotelName HAVING avg(R.price) = (SELECT max(AvgPrice) AS maxAvgPrice FROM (SELECT R.hotelNo, avg(R.price) AS AvgPrice FROM Room AS R GROUP BY R.hotelNo))

52

Page 53: PODATKOVNE BAZE-zapiski

TRANSAKCIJE: SQL definira tranaskcijski model z ukazoma COMMIT in ROLLBACK. Vse kar naredimo znotraj transakcije še ni vidno navbzven drugim transakcijam. Transakcijo zaključimo s: COMMIT ukazom—zadeve so dokončne. ROLLBACK: eksplicitni ukaz. Stanje podatkovne baze naj se ponovi nazaj. Implicitno zaključevanje transakcije. Sintaksa za definiranje transakcije: SET TRANSACTION [READ ONLY | READ WRITE] | [ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED|REPEATABLE READ |SERIALIZABLE ] Določiti moramo izolacijski nivo. READ ONLY- pove, da transakcija vključuje samo operacije, ki se iz baze berejo. INSOLATION LAVEL- pove stopnjo interakcije, ki jo SUPB dovoli med to in drugimi transakcijami. KRŠENJE SERABILNOSTI: V transakcijah je mozno brati podatke, tudi če še niso dokončane.

– DIRTY READ: transakcija prebere podatek, ki je bil zapisan s strani druge transakcije, čeprav je še nepotrjen.

– NONREPEATABLE READ read: transakcija ponovno prebere podatek, ki ga je predhodno že prebrala, če ga je neka druga potrjena transakcija spremenila ali brisala v vmesnem obdobju.

– PHANTOM READ: transakcija izvede poizvedbo, ki vrača množico zapisov, ki ustrezajo iskalnem pogojem. Ko transakcija ponovi poizvedbo kasneje, se v rezultatu pojavijo dodatne vrstice, ki so bile v vmesnem času dodane s strani druge potrjene transakcije.

TAKOJŠNE IN ZAPOZNELE TRANSAKCIJE: Včasih želimo, da se omejitve ne bi upoštevale takoj, po vsakem SQL stavku, temveč ob zaključku transakcije. Omejitve lahko definiramo kot: INITIALLY IMMEDIATE –takojšno previrjanje

53

Page 54: PODATKOVNE BAZE-zapiski

INITIALLY DEFERRED – preverjanje šele na koncu Če izberemo INITIALLY IMMEDIATE (privzeta možnost), lahko določimo tudi, ali je

zakasnitev moč določiti kasneje. Uporabimo [NOT] DEFERRABLE. NADZOR DOSTOPA ( Z VIDIKA SQLa) : -subjektivno določen nadzor dostopa -Obvezen nadzor dostopa SUBJEKTIVNI: Vsak uporanik ima določene pravice, omejitve. Za vsak objekt imamo lastnika, ki določi kaj bo dovolil in kaj ne. Nekega centralnega nadzora ni. Tak način je tvegan. OBVEZEN: Vsak objekt PB ima določeno stopnjo zaupanja. Vsak subjek potrebuje za delo raven zaupanja nad delom. Ne moremo dodaljevati pravic. Precej bolj varen in kompleksen sistem. Vsak objekt ki ga v SQLu kreiramo ima lastnika. Običajno tisti, ki ga je kreiral. Pravice: SELECT, INSERT, UPDATE, DELETE ; REFERENCES, USAGE

– SELECT – pravica branja podatkov – INSERT – pravica dodajanja podatkov – UPDATE – pravica spreminjanja podatkov (ne tudi brisanja) – DELETE – pravica brisanja podatkov – REFERENCES – pravica sklicevanja na stolpce določene tabela v omejitvah – USAGE – pravica uporabe domen, sinonimov, znakovnih nizov in drugih

posebnih objektov podatkovne baze Ukaz GRANT – dodeljevanje pravice ostalim uporabnikom Pri pogledu: ne dobimo nujno vseh pravic. Sintaksa GRAND na primeru: GRANT {PrivilegeList | ALL PRIVILEGES} ON ObjectName TO {AuthorizationIdList | PUBLIC} [WITH GRANT OPTION]

PrivilegeList – je sestavljen iz ene ali več pravic, ločenih z vejico (INSERT, UPDATE,...) ALL PRIVILEGES – dodeli vse pravice. PUBLIC – omogoča dodelitev pravic vsem trenutnim in bodočim uporabnikom. ObjectName – se nanaša na osnovno tabelo, pogled, domeno, znakovni niz, dodelitve in

prevedbe. WITH GRANT OPTION – dovoljuje, da uporabnik naprej dodeljuje pravice.

WITH GRAND OPTION: pravica nadaljnega dodaljevanja pravic naprej.

54

Page 55: PODATKOVNE BAZE-zapiski

Primeri dodaljevanja pravic:

Vsem vodjem oddelkov dodaj vse pravice nad tabelo Delavec. GRANT ALL PRIVILEGES ON Delavec TO VodjaOddelka WITH GRANT OPTION;

Uporabnikom Osebje in Direktor dodeli SELECT in UPDATE pravice nad stolpcem Plača v tabeli Delavec.

GRANT SELECT, UPDATE (Plača) ON Delavec TO Osebje, Direktor; Z ukazom REVOKE pravice odvzamemo! POMEN DOSTOPA PRAVIC:

ALL PRIVILEGES določa vse pravice, ki jih je uporabnik, ki REVOKE uporabi, dodelil uporabniku ali uporabnikom, na katere se REVOKE nanaša.

GRANT OPTION FOR – omogoča, da se pravice, ki so bile dodeljene prek opcije WITH GRANT OPTION ukaza GRANT, odvzema posebej in ne kaskadno.

RESTRICT, CASCADE – enako kot pri ukazu DROP REVOKE ukaz ne uspe, kadar SUPB ugotovi, da bi njegova poizvedba povzročila zapuščenost objektov. (== Nihče več nima pravice do objektov.)

Za kreiranje določenih objektov so lahko potrebne pravice. Če take pravice odstranimo, lahko dobimo zapuščene objekte.

– Če uporabimo opcijo CASCADE, bo REVOKE ukaz uspel tudi v primeru, da privede do zapuščenih objektov. Kot posledica bodo ti ukinjeni.

Primeri: Če uporabnik Ua odvzema pravice uporabniku Ub potem pravice, ki so bile

uporabniku Ub dodeljene s strani drugih uporabnikov, ne bodo odvzete. Odvzemi SELECT pravice nad tabelo Delavec vsem uporabnikom.

REVOKE SELECT ON Delavec FROM PUBLIC;

Uporabnikom iz skupine Osebje in Direktor odvzemi vse pravice na tabelo Delavec. REVOKE ALL PRIVILEGES ON Delavec

55

Page 56: PODATKOVNE BAZE-zapiski

FROM Osebje, Direktor; QBE – Query By Example Vizualen način dostopa do podatkov. Z vzorcem povemo kakšni podatki nas iz podatkovne baze zanimajo. Temelji na domensknem relacijskem računu. Za pisanje ukazov ad-hock. QBE uporabnikom obogoča:

QBE uporabnikom omogoča: – Poizvedovati po podatkih ene ali več tabel. – Določiti stolpce, ki jih želimo imeti v odgovoru (projekcija). – Določiti kriterije za izbiro vrstic (selekcija). – Izvajati izračune nad podatki v tabelah. – Dodajati in brisati zapise. – Spreminjati vrednosti v poljih. – Kreirati nove tabele in stolpce.

Za primere iz Accessa glej prosojnice! 11. maj PANORAMSKI POGLED NA PODATKOVNE BAZE Iztok Lajovic (KreS) Predstavitev baze Panorama -programska oprema za neznane kupce -razmišljanje proces -sposobnost asociativnega razmišljanja - predmeti razmišljanja: predmeti tvarne in miselne narave -temelj za asociativno razmišljanje so skupne lastnosti dveh misli Vsak predmet ima svoj kontekst/ okolico. - v našem razmišljanju z lahkoto oblikujemo sezname; Seznami so eni od temeljnih elementov našega razmišljanja. -Podatkovni slovar: ima modele vseh možnih predmetov, z vsemi možnimi lastnostmi. Gradimo ga z izkušnjami. - Sosedstvo predmeta == svet okoli nas Sosedstvo je atribut ZGOLJ relanega sveta, vezan na čas. Pičakovanja uporabnikov: -možnost intuitivne uporabe PC (empatija do uporabnika, intuitivnost=uporabnost) - enostavno in hitro preiskovanje BP - potreba po fleksibilnih orodjih

56

Page 57: PODATKOVNE BAZE-zapiski

- enostavno dopoljnjevanje in spreminjanje baz podatkov Uporaba BP -administracija datotek -poizvedovanja -povezovanja Povezave med objekti: -osnovna: 1 : n -različnih objektov s povezavami n : m (naredimo umesno tabelo) Dobimo informacijske vozle. Vmesni razred povezave n : m : p : r - rekurzivna povezava istega razreda vodi v hierarhične strukture Npr. drevo direktorijev v pc. Potujemo lahko zgolj navzgor ali navzdol. Čez ne moremo. -razvejani sklici Podatkovna baza ima enovito strukturo. Struktura vseh datotek ima skupno jedro. To vodi k povezljivosti. Tipi polj: - standardni - posebni - povezovalni Razvejani sklici -nova stopnja normaliazcije Faze izdelave aplikacije: Koraki: -analiza podatkovnih in funkcionalnih potreb -podatkovni model (je stabilna in statična baza) -programiranje -testiranje -vpeljava 18.maj

57

Page 58: PODATKOVNE BAZE-zapiski

NAČRTOVANJE PB Pb se ponavadi oblikuje dvonivojsko. 2 pristopa: -iz vrha navzdol:

primeren za večje baze predstavlja uporabo tehnike Entiteta – Razmerje (E-R).

-od spodaj navzgor

Pristop od spodaj navzgor primeren za enostavne podatkovne baze z majhnim številom atributov.

Sprva zajame prav vse atribute. Nato z normalizacijo označimo potrebne atribute. Normalizacija = identifikacija potrebnih atributov in njihovih agregacij v normalizirane relacije na osnovi funkcionalnih odvisnosti. - od znotraj navzven najprej določimo nekaj najpomembnejših atributov nato dodajamo novembe - po delih V praksi najbolj uporabna strategija! razdelimo si področja – načrtovanje lahko poteka vzporedno nekateri koncepti lahko nastopijo v večih sklopih zato se najprej nardi gobalno shemo Shema pristopa po delih: Glej prosojnice!

58

Page 59: PODATKOVNE BAZE-zapiski

3 nivoji načrtovaja PB: -Konceptualni / semantični -Logični -Fizična shema BP (Kako kreirat PB?)

Vizualni model lažje nadzarovaje, kot če zgolj podatki na disku Konceptualno načrtovanje: -se ne ukvarjamo s tehnologijo - zahteva sodelovanje uporabnikov - potrebno dosti časa Gre za prenos semantike v model Umestitev konceptualnega načrtovanja: -realni svet -mentalni model -konceptualni model -stvari, ki so za razvoj programa pomembne Največkrat se uporablja tehnika entiteta-razmerje včasih pa tudi razredni seznami. Gradniki entitetnega modela: -Entitetni tip -Atribut -Razmerje -Enolični identifikator Entiteni tip predstavlja množico objektov, ki so istega tipa. Entitete so konkretni primeri. Entiete imajo neke lastnosti ...

59

Page 60: PODATKOVNE BAZE-zapiski

Entiete imajo različne vrednosti za te lastnosti. Velja časovna spremenljivost Grafična predstavitev: glej prosojnice! Atributi so lastnosti npr. entitetna imena, prave entitetne lastnosti, ki jih določimo za potrebe poslovnih procesov.... Glede na kardinalnost atributov ločimo:

Totalne (1,n), kjer je n >= 1 Parcialni atribut (0,n), kjer je n >= 1 Enovrednostni atribut (m,1), kjer je m € {0,1} Večvrednostni atribut (m,n), kjer je m € {0,1} in n>1

Minimalna števnost 0 pomeni, da je atribut lahko brez vrednosti (ni obvezen). Atribut pripada določenemu tipu: numerični, znakovni,… Za večino tipov je potrebno določiti tudi dolžino.

Razmerja med entitetami:

Predstavitev razmerja v modelu entiteta-razmerje je povezava. Med opazovanim parom (v splošnem podmnožici) entitet je lahko več razmerij: OSEBA,

KRAJ – stalno bivališče, začasno bivališče Kardinalnost razmerja: S koliko primerki entite na eni strani je povezan ta primer entite na drugi strani.

Kardinalnost (števnost) predstavlja število entitet entitetnega tipa, ki so v razmerju glede na pomen razmerja.

Vsaka entiteta ima svojo kardinalnost v razmerju – kardinalnost glede na vlogo. Entiteti OSEBA, POŠTA:

Ena (naključno izbrana) oseba ima stalno bivališče v enem kraju V enem (naključno izbranem) kraju ima stalno bivališče več oseb

OSEBA (1,1)

EMŠO (1,3Ime

(1,1Priimek

(0,nVzdevek

60

Page 61: PODATKOVNE BAZE-zapiski

Minimalna/maksimalna kardinalnost... Razmerja: 1 : 1 1 : mnogo mnogo : mnogo Ali je razmerje obvezno ali ne? Uvedemo števnost 0. Samo razmerje lahko ima atributiven značaj. Npr. Entitetni tip ŠTUDENT + entiteni tip PREDMET Enolični identifikator: Vsak entitetni tip mora biti vsaj v nečem drugačen od drugega.

Imamo lahko več enoličnih identifikatorjev, vendar moramo enega izbrati – določiti Izbrani – določeni enolični identifikator je podlaga za ključ v relacijskem modelu

Več vrst: Umetni Naravni Močni entitetni tip

Enolični identifikator sestavljajo le atributi entitete (identifikacijski atributi) {a1, … ak} je enolični identifikator entitete A, če ustreza naslednjim pogojem:

a) a1, … ak so vsi totalni enovrednostni atributi, kar zagotavlja, da imajo vsi identifikacijski atributi definirano natanko eno vrednost (eno dimenzijo)

b) T: V1 x …x Vk ET je totalna ali parcialna enovrednostna funkcija, kar zagotavlja, da se vsak element kartezijskega produkta vrednostnih množic, ki so območja identifikacijskih atributov, preslika v največ eno entiteto tipa A

c) Je minimalna podmnožica, ne obstaja prava podmnožica, za katero bi tudi veljal pogoj b)

61

Page 62: PODATKOVNE BAZE-zapiski

Šibke entitete: uporabljajo atribute, ki jih dobijo od drugje.

Enolični identifikator ni sestavljen le iz lastnih atributov, temveč tudi iz razmerij oz. drugih entitet v razmerju oz. njenih identifikatorjev.

{a1, … ak} ∪ IT1 ∪ .. ∪ ITn je enolični identifikator entitete A, če ustreza naslednjim pogojem:

a) a1, … ak so vsi totalni enovrednostni atributi, I pa identifikatorji entitetnih tipov b) T: V1 x …x Vkx ET1 x .. X ETn ET je totalna ali parcialna enovrednostna

funkcija, kar zagotavlja, da se vsak element kartezijskega produkta vrednostnih množic, ki so območja identifikacijskih atributov, preslika v največ eno entiteto tipa A

c) Je minimalna podmnožica, ne obstaja prava podmnožica, za katero bi tudi veljal pogoj b)

Generalizacija in specializacija: Primer. Če želimo razlikovati med rednimi in izrednimi študenti. Študijskimi programi UNI / VSŠ. Če imajo entitetni tipi, ki imajo podobne lastnosti gre za generalizacijo. Npr. asistent in predavatelj sta oba pedagoška delavca. Razmerja: Totalno in ekskluzivno (oseba: moški ali ženska) Delno in prekrivno (oseba: študent in/ali športnik)

Entitetni tip A s podtipoma B in C B in C pokrivata A totalno in ekskluzivno, če velja: EB ∪ EC = EA in EB ∩ EC = {} B in C pokrivata A totalno in prekrivno, če velja: EB ∪ EC = EA in EB ∩ EC ≠ {} B in C pokrivata A delno in ekskluzivno, če velja: EB ∪ EC ⊂ EA in EB ∩ EC = {} B in C pokrivata A delno in prekrivno, če velja: EB ∪ EC ⊂ EA in EB ∩ EC ≠ {}

Podpora konceptualnega načrtovanja:

62

Page 63: PODATKOVNE BAZE-zapiski

Možni koraki: Identificiramo entitene tipe Identificiramo popvezave Identificiramo atribute za atribute določimo domene določimo ključ preverimo, če lahko uporabimo elemente razširjenega diagrama (entitea-razmerje) ali obstajajo odvečni elementi preveri, če model zdrži transakcije !!! preveri model z uporabnikom Podroben opis korakov: glej prosojnice! Domena je množica vrednosti, ki jih atribut lahko zavzame. Npr: Starost -> (0...20) EMSO -> number 13 Uporaba razširjenih elementov: Specializacija Generalizija Agregacija Kompozicija (del ne more obstajati brez celote) Kdaj uporabimo te elemente? -če bo bolj breljivo -ponavadi zgolj povečajo kompleksnost Odvečne povezave: povezave 1-1, jih zdržimo v en entitetni tip Poveza je odvečna, ko je možno priti do iste informacije /podatka po drugih povezavah.

63

Page 64: PODATKOVNE BAZE-zapiski

Logično načrtovanje: Se odločimo v katerem SUPBju bomo bazo kreirali. Vzadje je jezik, ki ga razume SUPB. Velika večina CASE orodji omogoča, da iz konceptualnega modela generiramo logični model. Prehod iz konceptualnega v logični model: shema: glej prosojnice!

Šifra/ključ se vedno prenaša iz smeri ena proti mnogo ! Povezava ena proti mnogo. -> tuji kluči Funkcionalne odvisnosti: Odvisnosti med atributi Iz enega atributa, katerega vrednost poznamo, lahko sklepamo na vrednost ostalih atributov. S pomočjo funkcionalnih odvisnosti ugotovimo ključ. Ključ funkcionalno določa vse ostale atribute. Primer relacijske sheme: Izpit (VpŠt, Priimek, Ime, ŠifraPredmeta, DatumIzpita, OcenaPisno, OcenaUstno) Kašne so tu funkcionalne odvisnosti? Odg: VpŠt -> določa Ime in Priimek, skupaj z DatumomIzpita bo določala /verjetno/ tudi vse ostale atribute. Vrste ključev: Kandidati za ključ Primarni ključ Super ključ ( vse množice atributov, ki v sebi skrivajp ključ) Tuji ključ

Kandidat za ključ je vsaka podmnožica atributov relacije, ki relacijo enolično določa. Primarni ključ je tisti kandidat za ključ, ki ga izberemo za shranjevanje relacij v fizični

podatkovni bazi. Superključ je vsaka množica atributov, v kateri je vsebovan ključ ključ je podmnožica

superključa. Tuji ključ je množica atributov, v okviru ene relacije, ki je enaka kandidatu za ključ neke

druge ali iste relacije.

64

Page 65: PODATKOVNE BAZE-zapiski

Primeri: glej prosojnice! 25.05.2010 NORMALIZACJA Postopek s katerim ugotavljamo če smo relacije pravilno oblikovali. Če ja: Ni redundance podatke Ne bo prišlo do težav pri brisanju, vnašanju podatkov v bazo 4 stopnje normalizacije

Kaj si bomo pogledali? Namen normalizacije. Uporaba normalizacije pri načrtovanju relacijske podatkovne baze. Problemi zaradi redundance podatkov v osnovnih relacijah. Postopek normalizacije. Osnovne normalne oblike:

I. normalna oblika, II. Normalna oblika, III. Normalna oblika IV. Poslovna normalna oblika

Primeri težav/anomalij : glej prosojnice!

Relacije, ki vsebujejo odvečne podatke lahko povzročajo anomalije pri spreminjanju

podatkov ◊ govorimo o ažurnih anomalijah. Poznamo več vrst anomalij:

– Anomalije pri dodajanju n-teric v relacijo – Anomalije pri brisanju n-teric iz relacije – Anomalije pri spreminjanju n-teric

Anomalije pri dodjanju:

65

Page 66: PODATKOVNE BAZE-zapiski

– Če želimo dodati podatke o novih članih (staff) za neko organizacijsko enoto (branch) moramo vpisati tudi vse podrobnosti o organizacijski enoti.

– Če želimo dodati podatke o novi organizacijski enoti, ki še nima nobenega člana, moramo v vsa polja , ki člane opisujejo, vpisati Null.

– Če iz relacije zbrišemo n-terico, ki predstavlja zadnjega člana v neki organizacijski enoti, zgubimo tudi podatke o tej organizacijski enoti.

– Če želimo spremeniti vrednost nekega atributa določene organizacijske enote (npr. naslov), moramo popraviti vse n-terice, v katerih takšna vrednost atributa nastopa.

Kako preprečimo anomalije? Z normalizacijo.

Postopku preoblikovanja relacij v obliko, pri kateri do ažurnih anomalij ne more priti, pravimo normalizacija.

Obstaja več stopenj normalnih oblik. Obravnavali bomo:

66

Page 67: PODATKOVNE BAZE-zapiski

– 1NO – Prva normalna oblika – 2NO – Druga normalna oblika – 3NO – Tretja normalna oblika in – 4PNO – Četrta poslovna normalna oblika

1. normalna oblika (1NO): -zahtevamo da ni ponovljajočih skupin atributov -določimo funkcionalne odvisnosti - da je definiran ključ Postopek: Koraki:

– Odstranimo ponavljajoče atribute – Določimo funkcionalne odvisnosti – Določimo primarni ključ

Primer:

67

Page 68: PODATKOVNE BAZE-zapiski

F==množica vseh funkcionalnih odvisnosti Ključ je množica atributov, ki določa vse ostale atribute. (vpisna št + šifra predmeta) 2. normalna oblika (2NO) - relacija mora biti v 1NO - ne sme vsebovati parcialnih odvisnosti (noben atribut, ki ni del ključa, ni funkcionalno odvisen le od dela primarnega ključa, temveč od celotnega ključa)

Relacija je avtomatsko v drugi normalni obliki, če: – Je njen primarni ključ sestavljen le iz enega atributa, – Je njen primarni ključ sestavljen iz vseh atributov relacije ali – Je njen primarni ključ sestavljen iz vseh razen enega atributa relacije

68

Page 69: PODATKOVNE BAZE-zapiski

3. normalna oblika (3NO) -relacija mora biti v 2NO - ne vsebuje transitivnih normalnih odvisnosti Uporabimo lahko dekompozicijo. Relacija je v tretji normalni obliki: – Če je v drugi normalni obliki in – Če ne vsebuje tranzitivnih funkcionalnih odvisnosti � med atributi, ki niso del primarnega ključa, ni odvisnosti. � Relacija je avtomatsko v tretji normalni obliki, če: – Je njen ključ sestavljen iz vseh atributov relacije – Je njen ključ sestavljen iz vseh razen enega atributa relacije

69

Page 70: PODATKOVNE BAZE-zapiski

4 poslovna normalna oblika 4PNO je v tretji normalni obliki v relaciji ne obstajajo atributi, ki bi bili odvisni od vrednosti primarnega ključa

70

Page 71: PODATKOVNE BAZE-zapiski

Uporaba Nenormaliziranih relacij... Primer:

– Rezultat (športnik, tekmovanje, čas prvega teka, čas drugega teka, čas skupaj) – Relacija ni v tretji normalni formi. – Čas skupaj je izpeljan atribut � ni odvisen od ključa, temveč je seštevek časov obeh tekov. – Skupen čas računamo ob vpisu v bazo, zato izboljšamo

učinkovitost pri nadaljnji obdelavi podatkov. FIZIČNO MODELIRANJE Načrtovanje fizične PB je korak, ki sledi logičnemu načrtovanju. Logični načrt opredeljuje “kaj”, fizični načrt pa “kako”. Vhod v načrtovanje fizične PB so:

– Logični podatkovni model, – Relacijska shema – dokumentacija

Metoda logičnega načrtovanja... Možni koraki: Možni koraki konceptualnega načrtovanja:

– K1.1: Identificiraj entitetne tipe – K1.2: Identificiraj povezave – K1.3: Identificiraj in z entitetnimi tipi poveži atribute – K1.4: Atributom določi domene – K1.5: Določi kandidate za ključe; izmed kandidatov izberi

primarni ključ

71

Page 72: PODATKOVNE BAZE-zapiski

– K1.6: Po potrebi uporabi elemente razširjenega diagrama entiteta – razmerje

– K1.7: Preveri, če v modelu obstajajo odvečni elementi – K1.8: Preveri, če model “zdrži” transkacije – K1.9: Preveri model z uporabnikom

Možni koraki logičnega načrtovanja:

– K2.1: Za entitetne tipe kreiraj relacije – K2.2: Preveri relacije z normalizacijo – K2.3: Preveri relacije s pregledom uporabniških transakcij – K2.4: Preveri omejitve integritete – K2.5: Preveri model z uporabnikom – K2.6: Združi lokalne modele v globalni model (opcijsko) – K2.7: Preveri zmožnosti modela za razširitve

Ročna pretvorba: močni + šibki entitetni tipi

Povezave: 1 : * + 1 : 1 Če je obveznost na obeh straneh 1:1 povezave potem lahko združimo. Povezava, ki ni obvezna na obeh straneh. Obvezno entiteto vzamemo kot osnovo in njen ključ prenesemo še v drugo smer. Rekurzivne povezave: problematične, rezultat prenašanja ključev je lahko nerazumljiv. Definiramo še en ID. Genaerator kar podvoji oznako (t.j. ključ) zato ga ponavadi preimenujemo. Povezave med nadtipi in podtipi:

Identificiraj nadtipe kot očete ter podtipe kot otroke. Obstajajo različne možnosti, kako takšne povezave predstaviti z relacijami.

72

Page 73: PODATKOVNE BAZE-zapiski

Izbira najbolj ustrezne opcije je odvisna od številnih faktorjev: izključevanje, obveznost povezav, število entitet v povezavi....

Povezave * : * Potrebujemo vmesno relacijo. Več-vrednostni atributi: Za njih moramo kreirati novo relacijo. (Npr. Telefon je GSM, stac... Se omejimo. Poznamo končno število.) Če ne vemo koliko je končnih vrednosti naredimo namesto atributa nov entitetni tip. Pravila združevanja lokalnih modelov: Namen tega koraka je združiti vse lokalne modele v en globalni model, ki predstavlja vse

uporabniške vidike podatkovne baze. Čeprav so lokalni modeli preverjeni, lahko pri njihovem združevanju pride do prekrivanja

in neskladnosti. Globalni model preverim podobno kot smo preverjali lokalne modele. Če pri načrtovanju nismo zajeli več uporabniških vidikov, lahko korak preskočimo.

Preveri imena in vsebino relacij ter njihove kandidate za ključ. Preveri imena in vsebino povezav in tujih ključev. Združi relacije z lokalnih podatkovnih modelov Brez združevanja vključi relacije, ki so unikatne v posameznih podatkovnih

modelih. Združi povezave in tuje ključe z lokalnih podatkovnih modelov. Brez združevanja

vključi povezave in tuje ključe, ki so unikatni v posameznih podatkovnih modelih.

73

Page 74: PODATKOVNE BAZE-zapiski

Preveri, če morda manjkajo relacije, povezave in tuji ključi. Preveri tuje ključe. Preveri pravila za zagotavljanje celovitosti podatkov. Nariši globalni podatkovni model. Ažuriraj dokumentacijo.

Metoda načrtovanja fizične PB.... Do sedaj smo imeli le modele od tu naprej pa kreiramo fizično bazo Odločamo o tem: -kakšne so osnovne relacije -datotečna organizacija - kako bomo imeli indekse definirane ... 2. koraka: k3 + k4 K3:Pretvorimo fizični model v jezik ciljnega SUPBja K4: Izdelamo načrt datotečne organizacije in indeksov Podrobnosti: glej ppt!!! Osnovni vir za kreiranje podatkov je katalog. ☺ -podatkovni slovar: podatki glej ppt!!! Predstavitev izpeljanih atributov: Določiti moramo ali je shranjen v fizični bazi ali ne. Da se jih izračunat. Kaj je večji časovni strošek? Primer hranjenja izpeljanega atributa ...... Načrt splošnih omejitev....Jih definiramo kot je pač mogoče. Datotečna organizacija in indeksi ... Namen je izbrati optimalno datotečno organizacijo. Analiza transakcij: previrjamo katere so transakcije ki vplivajo na učinkovitost....Pregledamo zgolj najpomembnejše. Naredimo matriko transakcija/relacija in nato diagram transakcij. Izbira datotečne organizacije....kopica, hash tabela, kakšni bodo indeksi... Izbira indeksov... smernice za uporabo sek. Indeksov Ocena velikosti PB.... Načrt varnostnih mehanizmov: sistemska + podatkovna varnost .... Uvedba nadzorovane redundance... Nekaj pravil denormalizacije...

74

Page 75: PODATKOVNE BAZE-zapiski

75

Koraki denormalizacije: – K7.1 – združevanje 1:1 povezav – K7.2 – Podvajanje neosnovnih atributov v povezavah 1:* za zmanjšanje potrebnih

stikov. – K7.3 – Podvajanje tujih ključev v 1:* povezavah za zmanjšanje potrebnih stikov. – K7.4 – Podvajanje atributov v *:* povezavah za zmanjšanje potrebnih stikov. – K7.5 – Uvedba ponavljajočih skupin atributov – K7.6 – Kreiranje tabel, ki predstavljajo izvleček osnovne tabele. – K7.7 – Razbitje relacij.

»Lookup Tabele« - so najmanjši šifranti imajo zgolj ime in ID. LookUp tabele se sestoje zgolj iz šifre in naziva. Prednosti uporabe LookUp tabel so mnoge. Vseeno obstajajo primeri, ko je smiselno (LookUp tabele ukiniti in) podatke podvajati v osnovnih relacijah. Taki primeri so: • Ko se do LookUp tabele frekventno dostopa • Ko so LookUp tabele uporabljene v kritičnih poizvedbah • Ko je majhna verjetnost, da se bodo po vrednosti spreminjale Uporaba izvlečkov....Za poizvedbe ki zahtevajo dostop do več relacij in povezave med njimi zahtevamo da dostopajo do njih bolj hitro. Razbitje relacij...Relacije ki so zelo velike lahko razbijemo na particije. 2 načina: horizontalni + vertikalni. Povečevanje učinkovitosti na račun paralerizma. Prednosti razbitja relacij na particije:

– Boljša porazdelitev vnosa (load balancing) – Večja učinkovitosti (manj podatkov za obdelavo, paralelnost izvajanja,...) – Boljša razpoložljivost – Boljša obnovljivost – Več možnosti za zagotavljanje varnosti

Slabosti razbitja relacije na particije Particioniranje ima tudi slabosti:

– Kompleksnost (particije niso vedno transparentne za uporabnike...) – Slabša učinkovitost (pri poizvedbah, kjer je potrebno poizvedovati po več

particijah, je učinkovitost slabša) – Podvajanje podatkov (pri vertikalnem particioniranju)

Vpeljujemo v kontroliranem načinu.