PODATKOVNE BAZE-zapiski
description
Transcript of 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
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
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
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
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
–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
–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
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
–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
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
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
–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
–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
–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
–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
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
. 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
–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
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
–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
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
–Č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
–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
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
–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
–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
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
–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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
[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
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
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
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
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
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
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
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
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
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
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
- 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
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
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
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
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
Š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
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
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
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
– Č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
– 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
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
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
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
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
– 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
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
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
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.