Prezentarea se încărcă. Vă rugăm să așteptați

Prezentarea se încărcă. Vă rugăm să așteptați

Structura fișierelor index Securitate în baze de date

Prezentări similare


Prezentarea pe tema: "Structura fișierelor index Securitate în baze de date"— Transcriere de prezentare:

1 Structura fișierelor index Securitate în baze de date
Curs 6 Structura fișierelor index Securitate în baze de date Probleme examen scris

2 Fişiere cu structură arborescentă

3 Structură de arbore binar
Fişiere heap sau sortate - utile pt tabele statice Arbori binari: eficienţi pentru inserare /ştergere inregistrări utilizare algoritmi de căutare binară Structura memoriei pentru un nod: Structura memoriei pentru arbore binar: colecţie de noduri; referință rădăcină listă de noduri libere (înlănţuite prin PointerLeft) K Data PointerLeft PointerRight

4 Structură de arbore binar
Root – referință rădăcină Free – referință cap listă noduri libere Exemplu: Root = 1 Free = 3 L DataL 1 2 3 4 5 6 7 8 9 D DataD -6 NULL Q DataQ NULL 5 L D Q B F S S DataS NULL NULL -9 NULL F DataF NULL NULL B DataB NULL NULL NULL NULL

5 Inserare / Eliminare Înregistrări
Inserare înregistrare: detectare poziţie înregistrare stocare înregistrare nouă într-un nod liber legare nod la părinte Eliminare înregistrare: căutare înregistrare 3 cazuri: fără copii: pointer părinte= NULL 1 copil: ataşează nod copil la părinte 2 copii: înlocuieşte cu cel mai apropiat vecin adaugă nodul în lista de noduri libere L D Q B F S E 20 10 30 5 15 12

6 Anomalie de inserare în arbore binar
L, D, B, Q, N, F, S, R, T, M, E, G, P, A, C L D Q B F N S A E C G M P R T

7 Anomalie de inserare în arbore binar
A, T, B, S, C, D, E, F, G, R, Q, P, N, M, L A T B S C D E F G Dezavantaj: timpul de căutare depinde de ordinea de inserare a înregistrărilor R Q P N M L

8 Arbori binari optimali
frunzele sunt poziţionate pe cel mult 2 nivele întreţinerea e dificilă → consumă timp pentru adăugare, ștergere sau actualizare

9 Arbori binari echilibraţi
pentru fiecare nod diferenţa dintre înălţimile sub-arborilor săi este 0, 1 sau –1 (înălţime arbore: dimensiunea celui mai lung drum de la rădăcină la frunze) număr redus de operaţii de întreţinere 6 cazuri distincte de “dezechilibrare” a unui arbore după o inserare

10 Întreţinere arbori echilibraţi
-1 (1) A B A1 (h) A2 A3* (h+1) B A A3 (h) A1 A2 1 A1* (h+1) (2)

11 Întreţinere arbori echilibraţi
-1 1 A B C A1 (h) A2 (h-1) A3* A4 (3) A B C A1 (h) A2 (h-1) A3 A4 -1 A2 * (4)

12 Întreţinere arbori echilibraţi
1 (5) A B C A1 (h) A2 * A3 (h-1) A4 -1 A B C A1 (h) A2 (h-1) A3 A4 1 (6) 1 A B C A1 (h) A2 (h-1) A3 * A4

13 Căutări pe intervale ``Returnează toţi studenţii cu grade > 8.0’’
Dacă datele sunt stocate într-un fişier ordonat, prin căutare binară se detectează primul student, şi apoi sunt citite toate înregistrările următoare. Costul căutarii/întreţinerii poate fi ridicat Idee: creare fisier `index’ Fisier Index k1 k2 kN Fisier Date Page 1 Page 2 Page 3 Page N Cautarea binară se realizeaza pe fisierul index (mai mic)!

14 ISAM (Indexed Sequential Access Method)
index entry P K P K P K P 1 1 2 m 2 m Fisierul index poate fi mare, dar aceeași idee se poate aplica repetitiv Noduri Indexed Sequential Access Method Interne Pagini Frunză Pagini suplimentare Pagini principale

15 Observații asupra ISAM
Creare fisier: paginile (de date) frunză sunt alocate secvential, sortate dupa cheia de căutare; apoi se memorează paginile index, apoi spațiul pentru paginile suplimentare. Intrări index : <val cheie căutare, id pagină>; vor `direcționa’ căutarea către paginile de date (frunze). Căutare: Comparări ale cheii pornind de la rădăcina spre frunze. Cost log F N ; F = număr intrări/pg index, N = numărul paginilor frunză Inserare: Căutare pagină frunză și adăugare înregistrare. Ștergere: Găsire și eliminare înregistrare din frunză; dacă e cazul, se dealocă o pagina suplimentară (overflow) Data Pages Index Pages Overflow pages Structura arborescenta statica: inserarea/ștergerea afectează doar frunzele!

16 Exemplu arbore ISAM Fiecare nod poate stoca 2 inregistrări; Rădăcină
40 20 33 51 63 10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97*

17 După inserare 23*, 48*, 41*, 42* ... Rădăcină Pagini Index Pagini
40 Index 20 33 51 63 Pagini Frunză 10* 15* 20* 27* 33* 37* 40* 46* 51* 55* 63* 97* Principale Pagini 23* 48* 41* Suplimentare 42*

18 ... apoi ștergere 42*, 51*, 97* Rădăcină 40 20 33 51 63 10* 15* 20* 27* 33* 37* 40* 46* 55* 63* 23* 48* 41* Obs. 51* apare la nivelul indexului, dar nu mai există în frunze!

19 Avantaje & dezavantaje ale ISAM
Se dezechilibrează - în urma a multor inserări & ștergeri (→ timp de căutare neuniform) Înregistrările din paginile de rezervă nu sunt sortate de obicei (dar ar putea fi) Inserări & ștergeri rapide (fără echilibrări de arbore) Acces concurent îmbunătățit (nodurile arborelui nu sunt blocate nicodată) potrivite doar pentru tabele al căror conținut se modifică rar

20 Organizare sub formă de Arbore-B
Cea mai populară metodă de organizare a indecșilor în baze de date “B” vine de la “balanced” sau “broad” Arbore-B – arbore ordonat; un nod are mai mulți sub-arbori Un nod conține chei și pointeri la sub-arbori Căile de la rădăcină la frunze au aceeași lungime L;Q G N S I A;E M P R T;Z

21 Proprietăți Arbori-B Arbore-B de ordin m:
Dacă nu e frunză, rădăcina va avea mereu cel puțin 2 subarbori Fiecare nod intern are cel puțin [m/2] sub-arbori (mai puțin rădăcina) Fiecare nod intern are cel mult m sub-arbori Toate frunzele sunt la același nivel Un nod cu p sub-arbori conține p-1 chei ordonate (K1, K2, … Kp) T1 conține valori <K1 Ti conține valori între Ki-1 si Ki Tp conține valori > Kp K1;K2;…;Kp-1 T1 Tp T2 . . .

22 Organizarea în memorie a Arborilor-B
Ca arbore binar PointerLeft referă prima cheie a sub-arborelui stâng din Arborele-B PointerRight/H referă vecinul din dreapta în nodul Arborelui-B referă prima cheie a sub-arborelui drept din Arborele-B (dacă e ultima valoare a cheii în nodul Arborelui B) Flag adițional / utilizare semn pentru pointer dreapta K Data PointerLeft PointerRight/H L;Q G N S I A;E M P R T;Z G N S I M P R L Q T Z A E

23 Organizarea în memorie a Arborilor-B
Alocare memorie pentru a stoca m-1 chei per nod N – număr de chei stocate Ki – valoarea cheii, ADi – adresa înregistrării Pointi – referă un sub-arbore Utilizarea spațiului de memoriei pentru pointeri la stocarea cheilor în frunze m/2  N  m-1 – pentru noduri interne m/2  N  t – pentru noduri terminale flag adițional/ semn pentru N N K1 K Km-1 Point Pointm Km Km Kt

24 Căutarea într-un Arbore-B
Exemplu: căutare ’15’ 55 25 10 78 70 84 79 93 44 40 76 71 77 15 12 22 57 56 63 6 1

25 Inserarea înregistrărilor în Arbore-B
Pași de inserare: localizare nod un cheia trebuie să fie inserată se inserează noua cheie se aplică o procedură de echilibrare în cazul în care este depășit numărul maxim de chei ce pot fi stocate în nod

26 Inserarea înregistrărilor în Arbore-B
Algoritmul procedurii de inserare 1. Localizare nod pentru inserare 2. Inserare cheie 3. Dacă nodul e plin (dimensiunea e depășită): A) Se crează un nou nod în care se mută cheile mai mari decât valoarea cheii mediane B) Se inserează cheia mediană în nodul părinte C) Pointerul din dreapta cheii va referi noul nod, iar cel din stanga referă vechiul nod ce conține valorile mai mici 4. Daca și nodul părinte e plin: A) Dacă nodul părinte e radacină atunci se crează o radacină nouă B) Se repetă pasul 3 pentru nodul părinte

27 Inserarea înregistrărilor în Arbore-B
Inserare înregistrare cu cheia ’57’ 78 66 51 30 11 44 40 15 12 22 84 79 93 69 68 71 76 54 53 57 63 6 1 78 66 51 30 11 44 40 15 12 22 84 79 93 69 68 71 76 54 53 63 6 1

28 Inserarea înregistrărilor în Arbore-B
… apoi se inserează înregistrarea cu cheia ’72’ 78 66 51 30 11 44 40 15 12 22 84 79 93 69 68 71 76 54 53 57 63 6 1 72 median

29 Inserarea înregistrărilor în Arbore-B
… apoi se inserează înregistrarea cu cheia ’72’ 71 66 78 51 30 11 44 40 15 12 22 84 79 93 69 68 54 53 57 63 6 1 76 72

30 Ștergerea înregistrărilor în Arbore-B
Pași de ștergere: se indentifică nodul ce conține valoarea ce trebuie ștearsă dacă e un nod intern, se transferă o valoare din frunze în caz de subdimensionare, se realizează o redistribuire sau o concatenare

31 Ștergerea înregistrărilor în Arbore-B
Algoritm de ștergere 1. Se caută valoarea ce trebuie ștearsă. Dacă se află într-un nod intern se înlocuiește cu valoarea vecină mai mare (adică cu cea mai din stânga valoare a celei mai din stânga frunze a subarborelui drept ) 13 11 17 45 . . . 23 21 24 26

32 Ștergerea înregistrărilor în Arbore-B
2. Se repetă acest pas până se ajunge în cazurile A) sau B) A) Dacă nodul ce conține valoarea de șters este rădăcina sau numărul valorilor rămase în nod este  [m/2]: se elimină valoarea se re-aranjează valorile și pointerii din nod se termină algoritmul 15 9 27 15 9 27 valoare de șters 11 10 14 11 10 12 14

33 Ștergerea înregistrărilor în Arbore-B
B) Dacă numărul valorilor rămase în nod este < [m/2] unul dintre nodurile vecine conține > [m/2] valori  redistribuire se ordonează valorile din ambele noduri + valoarea separator din părinte se alege valoarea mediană și se adaugă la nodul părinte, iar celelalte valori se inserează în nodul stâng, respectiv drept algoritmul se termină valoare separator 12 9 27 11 10 15 14 20 15 9 27 25 20 Valoare de șters 11 10 12 14

34 Ștergerea înregistrărilor în Arbore-B
C) Dacă suma valorilor din nodul din care s-a eliminat valoarea și a valorilor unuia din vecini este < m  concatenare se inserează valorile ambelor noduri + valoarea separator din nodul părinte într-un singur nod se repetă pasul 2. pentru nodul părinte (din care s-a eliminat valoarea separator) dacă nodul parinte este rădăcina și nu mai conține valori  nodul curent devine rădăcina Valoare Separator 15 10 27 27 10 14 12 15 20 25 20 Cheie de șters 14 12

35 Ștergerea înregistrărilor în Arbore-B
Valoare de șters 60 21 13 8 17 40 25 80 70 5 2 52 43 90 85 95 98 77 72 78 65 63 67 10 9 28 26 24 22 20 19 16 15 60 22 13 8 17 40 25 80 70 5 2 52 43 90 85 95 98 77 72 78 65 63 67 10 9 28 26 24 20 19 16 15 concatenare subdimensionare vecinul mai mare

36 Ștergerea înregistrărilor în Arbore-B
60 22 13 8 17 40 80 70 5 2 52 43 90 85 95 98 77 72 78 65 63 67 10 9 25 24 26 28 20 19 16 15 redistribuire subdimensionare

37 Ștergerea înregistrărilor în Arbore-B
60 17 13 8 40 22 80 70 5 2 52 43 90 85 95 98 77 72 78 65 63 67 10 9 25 24 26 28 16 15 20 19 20 19

38 Fişiere cu organizare directă

39 h(Ki) = adresa celei de-a i-lea înregistrări
Fișiere cu organizare directă Organizarea directă este o metodă de determinare a adresei unei înregistrări pe baza valorii unuia sau mai multor câmpuri (reprezentând, în general, cheia) Caz ideal: utilizarea unei funcții ce calculează adresa înregistrării (funcție de dispersie): h: {K1, K2,…,Kn}  A, h(Ki) = adresa celei de-a i-lea înregistrări (Ki e valoarea cheii înregistrării i, A este mulțimea de adrese de memorie)

40 h(Ki) = h(Kj), pt. i  j (h – ‘funcție de dispersie’)
Fișiere cu organizare directă În practică: e greu de definit astfel de funcții: trebuie cunoscute de la început toate valorile posibile ale cheilor pentru tabele mari este aproape imposibil de menținut bijectivitatea Soluție → sunt permise coliziunile: h(Ki) = h(Kj), pt. i  j (h – ‘funcție de dispersie’) Înregistrările cu valorile pentru cheie Ki și Kj se numesc sinonime

41 Partiții (buckets) Toate înregistrările sinonime sunt stocate într-o partiție care începe la adresa returnată de h. O partiție este de obicei un bloc de memorie. valoare cheie funcție h număr partiție … N

42 Provocări ale organizării directe
Distribuirea – odată ales algoritmul de dispersie se pierde controlul asupra distribuirii înregistrărilor pe partiții. Gruparea – majoritatea înregistrărilor sunt plasate în aceeași partiție iar restul partițiilor conțin doar puține înregistrări. Depășirea – este posibilă depășirea spațiului de memorie alocat inițial unei partiții.

43 Definirea funcțiilor de dispersie
Cerințele pentru o funcție de dispersie ‘bună’: - evaluare rapidă - minimizează numărul de coliziuni (dispersie uniformă a înregistrărilor pe partiții)

44 Definirea funcțiilor de dispersie
Fie 41 partiții goale unde adaugăm înregistrări: probabilitatea plasării înregistrării 1 într-o partiție goală e 41/41 a doua înregistrare - 40/41, a treia înregistrare - 39/41, etc. Probabilitatea plasării a 8 înregistrări în 8 partiții goale este : (41/41)(40/41)(39/41)….(34/41) = 0.482  sub 50%!!!

45 Definirea funcțiilor de dispersie
Abordări: Diviziune Metoda pătratului (mid-square) Împachetare (folding) Multiplicare În general funcțiile de dispersie se aplică pe reprezentarea binară a cheii de căutare (de exemplu, pentru o cheie de căutare de tip text, se pot însuma reprezentările binare ale tuturor caracterelor acesteia iar rezultatul este transmis ca parametru funcției de dispersie).

46 Definirea funcțiilor de dispersie
Diviziune: Funcții de forma h(k) = k mod N Garantează plasarea rezultatului h(k) în intervalul [0 ...N-1] E ușor de calculat  cea mai populară abordare Dacă alegem N = 2d, pentru un d număr natural oarecare, doar ultimii d biți ai lui k vor fi luați în considerare S-a arătat că numerele prime sunt cele mai potrivite ca valori ale lui N

47 Definirea funcțiilor de dispersie
Metoda pătratului (mid-square): Se ridică numărul la pătrat apoi se extrag l cifre din mijlocul rezultatului. l = lung(k2) – c1 – c2 , unde c1 și c2 sunt reprezintă numărul celor mai puțin semnificative, respectiv cele mai semnificative cifre eliminate din pătratul lui l l si c1 sunt fixate de la început

48 Definirea funcțiilor de dispersie
Împachetare (folding): Fiecare cheie k este partiționată în bucăți de lungimi egale (cu excepția ultimei) k1, k2, k3,...,kn Funcția de dispersie e dată de formula h(k) = (k1+ k2+ k kn) mod 10l unde l e numărul maxim de partiții

49 Definirea funcțiilor de dispersie
Multiplicare Se extrage partea fracționară a numărului Z * k (pentru un Z specific) și se înmulțește cu N (N fiind numărul partițiilor): h(k) = N * ( Z*k - Z*k) = N *{Z*k} Cele mai bune rezultate se obțin pentru Z = ( )/2 = sau Z = (3 – 5)/2 = Pentru Z = Z’/2w și N = 2d (w: număr de biți într-un cuvânt) h(k) = msbd (Z’*k) unde msbd(x) reprezintă cei mai semnificativi d biți ai lui x (exemplu: 42 a reprez. binară , msb3(42) = 5 – binar 101)

50 Definirea funcțiilor de dispersie
Teoremă. Având un număr irațional x și plasând {x}, {2x},...,{nx} pe segmentul [0,1] se obțin n+1 segmente ce au cel mult 3 dimensiuni diferite. De asemena, următoarea valoare, {(n+1)x}, va fi plasată pe unul dintre segmentele cu dimensiunea cea mai mare.

51 Exemple de funcții de dispersie
Valoare cheie ‘Toyota’ Concatenând reprezentarea numerică a caracterelor de pe primele două poziții obținem: Toyota  Funcții de dispersie posibile Diviziune: mod by 97  2015 mod 97 = 75 Metoda pătratului: = Împachetare: 2015  = 35 Multiplicare: 99*{2015* } =32 De ce nu se utilizează 2015 ca valoare de dispersie? 4 cifre  valori posibile!  o bună parte a partițiilor vor fi goale pentru cazul nostru 100 partiții sunt suficiente 20 15

52 Rezolvarea coliziunilor
Noile înregistrări se memorează într-o zonă suplimentară Se aplică o a doua funcție de dispersie pentru a obține o adresă “second choice”. Se memorează doar referințe (pointeri). La adresa returnată de funcția de dispersie avem: Toți pointerii înregistrărilor sinonime – partiție de adrese. Pointer către prima înregistrare. Aceasta va conține la rândul său un pointer către a doua înregistrare sinonimă, ș.a.m.d. – listă înlănțuită. Dispersie statică vs. dispersie dinamică

53 Dispersie statică Numărul paginilor/sloturilor principale e fix
Paginile/sloturile sunt alocate secvențial, și nu sunt de-alocate; se pot utiliza pagini/sloturi suplimentare dacă este nevoie h(k) = k mod M = partiția căreia îi aparține intrarea cu cheia k. (M = număr de partiții) h(key) = key mod M 1 key 2 h M-1 Pagini principale Pagini suplimentare

54 Dispersie statică: Liste independente
Toate sinonimele sunt stocate într-o listă înlănțuită specifică Fișierul conține o listă de M intrări reprezentând capul unei liste de sinonime (partiții) Ordinea sinonimelor în listă poate fi: ordinea de inserare ordine descrescătoare a frecvenței de căutare ordinea crescătoare a cheii de căutare (căutările fără succes se vor termina mai rapid) 1 2 3 4 5 6 h(k) = k mod 7 k 11 44 15 4 2 1 15 11 4 2 4 4 2 4 2 44

55 Dispersie statică: Liste întrețesute
Nu se utilizează pagini/sloturi suplimentare La inserarea unei noi intrări cu valoare cheii K: Dacă slotul de la adresa h(K) e gol: se memorează înregistrarea Dacă slotul de la adresa h(K) e ocupat: se ocupă primul slot liber (căutând de la baza fișierului) slotul ocupat e inserat la finalul listei ce conține slotul referit de h(K) 1 2 3 4 5 6 7 8 9 10 11 12 h(k) = k mod 13 k 16 23 36 25 19 32 29 49 22 16 8 22 5 19 9 49 7 Exemplu: 29 32 23 12 25 11 36

56 Dispersie statică: Liste întrețesute
Ștergerea unei înregistrări cu valoarea cheii K: Dacă slotul de la adresa h(K) e gol: mesaj de eroare Dacă slotul h(K) e ocupat: - parcurgem lista pentru a căuta înregistrarea. Dacă aceasta nu e găsită: mesaj de eroare Dacă înregistrarea e găsită: se elimină Se caută, în continuarea listei, o înregistrare r cu h(Kr) = h(K) dacă e găsită se mută înregistrarea în slotul curent. se repetă pasul 2 pentru noul slot gol 3. se copiază pointerul slotului gol în precedentul element din listă (dacă există)

57 Dispersie statică: Liste întrețesute
Exemplu: eliminarea cheii cu valoarea cheii 23. 1 2 3 4 5 6 7 8 9 10 11 12 k h(k) = k mod 13 16 8 16 23 36 25 19 32 29 49 22 3 10 12 6 9 22 19 9 49 29 32 5 36 12 11 12 23 12 25 7 25 11 7 25 7 36 11

58 Dispersie statică: Adresare deschisă
Fișierul conține doare date (fără pointeri) Inserarea unei înregistrări cu valoarea cheii K: Dacă slotul de la adresa h(K) e gol: se memorează înregistrarea Dacă slotul de la adresa h(K) e ocupat se caută următorul slot liber la adresele h(K)+1, h(K)+2, ..., M-1, 0, ...., h(K)-1. Potrivit pentru ocupare de 75% h(k) = k mod 13 k 5 21 24 22 23 34 35 8 11 9 10 1 2 3 4 6 7 12 35 5 Exemplu: 21 22 23 24 34

59 Dispersie statică: Adresare deschisă
Ștergerea unei înregistrări cu valoarea cheii K: A. Înlocuirea valorii K cu un cod sau caracter special (vor trebui ajustați algoritmii de căutare și inserare pentru a interpreta corect valorile speciale) B. Se elimină înregistrarea și se fac transferuri de înregistrări astfel (i, j, p sunt adrese de memorie): i e adresa înregistrării șterse, nu sunt sloturi goale între i și j înregistrarea stocată la j trebuie să fie stocată la p p p p p p p i j M-1 j i M-1 i<j i < p  j : - j  p  m-1 : înreg. din j se transferă la i 0  p  i : înreg. din j se transferă la i j <i 0< p  j : - j < p  i înreg. din j se transferă la i i < p  i : -

60 Concluzii asupra dispersiei statice
Partițiile conțin înregistrări. Dacă se adaugă multe înregistrări, se formează liste de pagini de memorie suplimentare (crește numărul de pagini transferate în memoria internă). Similar, dacă numărul înregistrărilor descrește semnificativ, este o risipă de spațiu de stocare (sloturile din partiții rămân nealocate). Dispersie extensibilă și liniară: tehnici dinamice de abordare a dezavantajelor dispersiei statice.

61 Dispersie extensibilă
Idee: Dacă partițiile primare devin neîncăpătoare, fișierul se reorganizează prin dublarea numărului de partiții Fișierul va conține un director de pointeri la partiții, Dublarea numărului de partiții se realizează prin dublarea directorului, Se distribuie înregistrările doar din partiția ce a devenit neîncăpătoare Nu există pagini suplimentare! Funcția de dispersie va fi ajustată corespunzător

62 Exemplu Directorul are dimensiunea 4.
Pentru a determina partiția lui r, se iau în considerare ultimii biți din reprezentarea binară a lui h(r) (numărul de biți luați în considerare e dat de `adâncimea globală ’). Dacă h(r) = 5 = binar 101, se află în partiția referită de 01. Inserarea: Dacă partiția e plină, acesta se împarte în două (se alocă o nouă pagină și se redistribuie înregistrări). Dacă e necesar, directorul se dublează. (doar când adâncimea globală devine mai mică decât adâncimea locală a noii partiții) ADÂNCIME LOCALĂ 2 4* 12* 32* 16* Partiția A ADÂNCIME GLOBALĂ 2 2 00 1* 5* 21* 13* Partiția B 01 10 2 11 10* Partiția C DIRECTOR 2 15* 7* 19* Partiția D PAGINI DE DATE

63 Inserare k: h(k) = 20  Dublare
ADÂNCIME LOCALĂ 2 ADÂNCIME LOCALĂ 3 ADÂNCIME GLOBALĂ 32* 16* Partiția A 32* 16* Partiția A ADÂNCIME GLOBALĂ 2 2 3 2 00 1* 5* 21* 13* Partiția B 000 1* 5* 21* 13* Partiția B 01 001 2 10 2 010 11 10* Partiția C 011 10* Partiția C 100 2 2 DIRECTOR 101 15* 7* 19* Partiția D 15* 7* 19* 110 Partiția D 111 2 3 4* 12* 20* Partiția A2 DIRECTOR 4* 12* 20* Partiția A2 (`derivată’ din (`derivată’ din Partiția A) PartițiaA)

64 Dispersie extensibilă
Inserare h(k) = 20 (binar 10100). Ultimii 2 biți (00) arată că r aparține lui A sau A2. E nevoie de ultimii 3 biți pentru a identifica partiția potrivită. Adâncimea globală a directorului: numărul maxim de biți necesari pentru a determina partiția căreia îi aparține o înregistrare. Adâncimea locală a partiției: numărul de biți utilizați pentru a determina dacă o înregistrare aparține partiției. În ce condiții adăugarea unei noi partiții implică dublarea directorului? Înaintea inserării, adâncimea locală partiției = adâncimea globală. Inserarea face ca adâncimea locală să devină > adâncimea globală; directorul se dublează prin copiere

65 Dublarea directorului
Utilizarea celor mai puțin semnificativi biți  dublarea directorului se realizează prin copiere! 6 = 110 3 6 = 110 3 000 000 001 100 2 2 010 010 1 00 011 1 00 110 6* 01 100 10 001 6* 1 10 101 1 6* 01 101 6* 6* 11 110 6* 11 011 111 111 Cel mai puțin semnificativ vs. Cel mai semnificativ

66 Securitatea bazelor de date

67 Obiective Secretizare: Integritate: Disponibilitate:
Informaţiile nu trebuie să fie disponibile unor utilizatori neautorizaţi. Un student nu este autorizat să vadă notele altor studenţi. Integritate: Doar utilizatorii autorizaţi au permisiunea de a modifica date. Doar profesroii pot modifica notele. Disponibilitate: Asigurarea accesului la date utilizatorilor autorizaţi. Powerful variants of these commands are available; more later!

68 Controlul accesului O politică de securitate specifică cine este autorizat să efectueze anumite operaţii. Un mecanism de securitate ne permite implementarea unei politici de securitate specifice. Exista două mecanisme de securitate implementate la nivel de SGBD: Controlul discreţionar al accesului Controlul obligatoriu al accesului Powerful variants of these commands are available; more later!

69 Controlul discreţionar al accesului
Se bazează pe conceptul drepturilor de acces (sau privilegiilor) pentru obiectele bazei de date (tabele & view-uri), şi pe mecanisme de acordare şi revocare de privilegii. Creatorul unei tabele sau view primeşte implicit toate privilegiile asupra acelui obiect: Un SGBD reţine cine câştigă sau pierde privilegii şi se asigură că numai cererile de la utilizatorii ce au privilegiile corespunzătoare (la momentul iniţierii cererii) sunt permise. Powerful variants of these commands are available; more later!

70 Comanda GRANT Se pot specifica următoarele privilegii :
GRANT privileges ON object TO users [WITH GRANT OPTION] Se pot specifica următoarele privilegii : SELECT: se pot citi valorile tuturor coloanelor (inclusiv acelea adăugate ulterior prin comanda ALTER TABLE). INSERT(nume_col)/UPDATE(nume_col): se pot insera /actualiza înregistrări cu valori concrete (ne-nule şi/sau ne-implicite) pentru coloanele specificate. DELETE: Se pot şterge înregistrări. REFERENCES (nume-col): Se pot defini chei străine în alte tabele ce referă coloana specificată. Powerful variants of these commands are available; more later!

71 Comanda GRANT GRANT privileges ON object TO users [WITH GRANT OPTION] Dacă un utilizator primeşte privilegii cu GRANT OPTION, poate transmite privilegiile respective către alţi utilizatori (cu sau făra transmiterea de GRANT OPTION). Numai creatorii unui obiect pot executa operaţiile CREATE, ALTER şi DROP. Powerful variants of these commands are available; more later!

72 Exemple Horatio poate interoga Students sau insera înregistrări.
GRANT INSERT, SELECT ON Students TO Horatio Horatio poate interoga Students sau insera înregistrări. GRANT DELETE ON Students TO David WITH GRANT OPTION David poate şterge înregistrări şi poate autoriza alţi utilizatori să şteargă înregistrări. GRANT UPDATE (Grade) ON Students TO Dustin Dustin poate actualiza (doar) câmpul Grade al înregistrărilor tabelei Students. GRANT SELECT ON ActiveStudents TO Sarah, Jen Nu se permite celor doi utilizatori să interogheze direct tabela Students! Powerful variants of these commands are available; more later!

73 Comanda REVOKE REVOKE:
Când este revocat un privilegiu lui X, acesta este revocat tuturor utilizatorilor care au primit privilegiul doar de la X. Identificarea acestora se realizează pe baza unui graf de autorizări: nodurile sunt utilizatori şi un arc indică cine cui i-a transmis un anumit privilegiu Powerful variants of these commands are available; more later!

74 GRANT/REVOKE pentru view-uri
Dacă creatorul unui view pierde privilegiul de SELECT asupra unei tabele, view-ul este automat eliminat din baza de date Dacă creatorul unui view pierde un privilegiu deţinut cu grant option pentru o tabelă, pierde privilegiul respectiv şi asupra view-ului; la fel se întâmplă şi utilizatorilor care au primit de la acest utilizator privilegii asupra view-ului! Powerful variants of these commands are available; more later!

75 Securitatea şi view-urile
View-urile pot fi utilizate pentru a prezenta anumite informaţii (detaliate sau agregate), ascunzând alte detalii ce ţin de tabelă. Prin intermediul unui view numit ActiveStudents, se pot afla studenţii care participă la cel puţin un curs, dar evitând accesul la câmpurile id ale cursurilor. Creatorul unui view are privilegii asupra view-ului dacă acesta are privilegii asupra tuturor tabelelor accesate de către view. Alături de comenzile GRANT/REVOKE, views-urile sunt instrumente foarte puternice de control al accesului. Powerful variants of these commands are available; more later!

76 Autorizare pe bază de roluri
În SQL-92, privilegiile sunt asignate unor id-uri de autorizare, ce pot referi un utilizator sau un grup de utilizatori. În SQL:1999 (şi în implentările mai multor sisteme curente), privilegiile sunt asignate unor roluri. Rolurile pot fi transmise unor utilizatori sau altor roluri. Reflectă modul în care funcţionează organizaţiile din lumea reală. Powerful variants of these commands are available; more later!

77 Probleme examen scris

78 Evaluare Test grilă: 20 întrebări cu 4 răspunsuri posibile – un singur răspuns corect. (20%) 2-3 probleme (30%) Activitate laborator & test (50%) Powerful variants of these commands are available; more later!

79 Structura relației R este R(a; b)
Q1: UPDATE R SET b = 10 WHERE a = 20; SELECT * FROM R; Q2: DELETE FROM R WHERE a = 20; INSERT INTO R VALUES(20,10); Q1 ≠ Q2

80 Pentru următoarele interogări se poate considera o structură arbitrară a lui R, dar care include un câmp b Q1: SELECT COUNT(DISTINCT b) FROM R; Q2: SELECT COUNT(b) FROM R; Q1 ≠ Q2

81 În următoarele interogări vom presupune că relaţiile R(a; b) şi S(b; c) nu au valori NULL, dar pot conţine înregistrări duplicate Q1: SELECT R.a FROM R, S WHERE R.b = S.b; Q2: SELECT R.a FROM R WHERE R.b IN ( SELECT S.b FROM S); Q2 Q1

82 Pentru următoarele interogări se consideră că cheia relaţiei R(a; b; c) este c
Q1: SELECT a, MAX(b) FROM R GROUP BY a Q2: SELECT a, b FROM R r1 WHERE b >= ALL ( SELECT b FROM R r2 WHERE r1.a = r2.a); Q1 Q2

83 Problema 1 Fie următoarea instanță a relației Studenti :
1. Dați exemplu de un atribut (sau mulțime de atribute) ce nu poate fi cheie candidat, considerând că instanța de mai sus este legală. 2. Putem deduce dacă un atribut (sau mulțime de atribute) este cheie candidat, considerând că instanța de mai sus este legală? sid nume varsta nota 2833 Jones 19 9 2877 Smith 20 8 2976 21 10 2765 Mary 22 7.7 3000 Dave 18 5.5 3010 7 3020 Sam 9.5 Powerful variants of these commands are available; more later!

84 Problema 1 – Soluție 1. Exemple de atribute ce nu reprezinta chei candidat sunt: nume, varsta. (nota nu este un exemplu potrivit luand in considerare instanta data ca exemplu, chiar daca "bunul simt" ne spune ca in general mai multi studenti pot avea aceeasi nota). 2. Nu putem determina o cheie doar pe baza instantei unei relatii. Faptul ca instanta este “legala” nu este suficient, o cheie candidat trebuind sa fie respectata de toate instantele legale ale unei relatii. Powerful variants of these commands are available; more later!

85 Problema 2 Exprimați următoarele interogări în SQL:
Fie următoarea structură de bază de date pentru stocarea de informații despre filme - Actors (ID, Name, YoB), unde ID este un identificator unic pentru un actor, Name și YoB fiind numele și anul nasterii actorului; - Movies(ID, Title, Year), unde ID este un identificatorul unic al unui film, Title și Year reprezentând titlul și anul producției filmului; - Casting(MovieID, ActorID, Charac), unde MovieID și ActorID referă înregistrări din Movies și Actors. Actorul joacă personajul Charac în filmul respectiv. Exprimați următoarele interogări în SQL: Powerful variants of these commands are available; more later!

86 Problema 2 – Soluție 1. Titlurile filmelor produse după 1950 și înainte de 2000; SELECT Title FROM Movies WHERE Year > 1950 AND Year < 2000 2. Titlurile filmelor produse după 2000 sau înainte de 1950 WHERE Year < 1950 OR Year > 2000 Powerful variants of these commands are available; more later!

87 Problema 2 – Soluție 3. Numele actorilor ce au jucat personajul "Fletcher Christian" într-o producție a filmului "Mutiny on the Bounty", alături de anul productiei filmului; SELECT Actors.Name, Movies.Year FROM Actors INNER JOIN Casting ON Casting.ActorID = Actors.ID INNER JOIN Movies ON Casting.MovieID = Movies.ID WHERE Casting.Charac = ‘Fletcher Christian’ AND Movies.Title = ‘Mutiny on the Bounty’ Powerful variants of these commands are available; more later!

88 Problema 2 - Solutie 4. Găsiți numele actorilor care au jucat personajele “Superman” și “Clark Kent” in aceeași producție a unui film; SELECT DISTINCT Actors.Name FROM Actors INNER JOIN Casting as C1 ON C1.ActorID = Actors.ID INNER JOIN Casting as C2 ON C2.ActorID = Actors.ID WHERE C1.Charac = ‘Superman’ AND C2.Charac = ‘Clark Kent’ AND C1.MovieID = C2.MovieID Powerful variants of these commands are available; more later!

89 Problema 2 – Soluție 5. Numele actorilor care au jucat două personaje diferite în acelasi film; SELECT DISTINCT Actors.Name FROM Actors INNER JOIN Casting as C1 ON C1.ActorID = Actors.ID INNER JOIN Casting as C2 ON C2.ActorID = Actors.ID WHERE C1.Charac <> C2.Charac AND C1.MovieID = C2.MovieID Powerful variants of these commands are available; more later!

90 Problema 2 – Soluție 6. Perechi de nume a doi actori diferiți care au jucat același caracter în producții diferite ale aceluiași film SELECT A1.Name, A2.Name FROM Actors A1, Actors A2 INNER JOIN Casting C1 ON C1.ActorID = A1.ID INNER JOIN Movies M1 ON C1.MovieID = M1.ID INNER JOIN Casting C2 ON C2.ActorID = A2.ID INNER JOIN Movies M2 ON C2.MovieID = M2.ID WHERE M1.Title = M2.Title AND M1.Year <> M2.Year AND C1.Charac = C2.Charac AND A1.ID<>A2.ID Powerful variants of these commands are available; more later!

91 Problema 3 Fie următoarea structură: Suppliers ( sid, sname, address)
Products ( pid, pname, color) Catalog ( sid, pid, cost) Câmpurile cheie sunt subliniate. Relația Catalog conține prețurile practicate de un furnizor pentru un produs particular. Explicați ce returnează următoarele interogări: Powerful variants of these commands are available; more later!

92 Problema 3 – Soluție 1.sname(sid((color=‘red’ Products)  (cost<100 Catalog)) Suppliers) Numele tuturor furnizorilor ce distribuie produse roșii cu pretul < 100. 2.sname(sid((color=‘red’ Products)  (cost<100 Catalog) Suppliers)) Interogarea nu returnează nimic, deoarece ultima proiecție nu se poate realiza, câmpul sname neexistând (odatș ce a fost proiectat sid la un pas anterior, acesta este singurul câmp în rezultat). Powerful variants of these commands are available; more later!

93 Problema 3 – Soluție 3.sname( (color=‘red’ Products)  (cost<100 Catalog)  Suppliers) sname( (color=‘green’ Products)  (cost<100 Catalog)  Suppliers) Numele tuturor furnizorilor ce distribuie cel puțin un produs roșu cu prețul < 100 și cel puțin un produs verde cu prețul < 100. 4. sname( (color=‘red’ Products)  (cost<100 Catalog)  Suppliers) sname( (color=‘green’ Products)  (cost<100 Catalog)  Suppliers) Numele tuturor furnizorilor ce distribuie cel puțin un produs roșu sau cel puțin un produs verde la prețul < 100. Powerful variants of these commands are available; more later!

94 Problema 4 Fie urmatoarele trei tupluri ale unei instanțe legale a relației S a cărei structură e formată din 3 atribute: A, B, C (în această ordine): (1,2,3) (4,2,3) (5,3,3) 1. Despre care dintre urmatoarele dependențe funcționale putem spune că nu sunt respectate de S? a) AB b) BCA c) BC 2. Puteți identifica o dependență funcțională ce este satisfacută de S? Powerful variants of these commands are available; more later!

95 Problema 4 – Soluție 1. Despre care dintre următoarele dependențe funcționale putem spune ca nu sunt respectate de S? a) AB b) BCA nu e respectată. (1,2,3) & (4,2,3): valori diferite pentru A cu aceleași valori pentru BC c) BC 2. Puteti identifica o dependență funcțională ce este satisfacuta de S? Nu. Pentru a spune ca o DF e satisfacută de o relație trebuie să ne asigurăm că aceasta e satisfacută de toate instanțele permise (legale) ale relației. Powerful variants of these commands are available; more later!

96 Problema 5 Fie o bază de date care stochează rezultatele obținute de echipele naționale de fotbal în toate meciurile disputate (o echipă poate juca un singur meci la o anumită dată). Baza de date are următoarea structură: tabelul Echipa cu câmpurile CodE, Tara, Continent; tabelul Jucator cu câmpurile CodJ, CodEchipa, Nume, Varsta, NumarMeciuri; tabelul Meciuri cu câmpurile CodEchipa1, GoluriEchipa1, CodEchipa2, GoluriEchipa2, Data, Stadion, NumarLocuri, Oras, Tara.

97 Problema 5 - cont 1. Determinați cheile primare și cheile externe pentru fiecare dintre tabelele de mai sus. 2. Determinați cel puțin 4 dependențe funcționale care se referă la câmpuri care nu reprezintă coduri.

98 Problema 5 - cont 3. Considerați următoarele modificări de structură și precizați care dintre ele sunt esențiale pentru ca baza de date să fie în 3NF (a 3-a formă normală). În cazul unui răspuns afirmativ, justificați-vă opțiunea. Crearea unui tabel separat pentru stocarea țărilor. Utilizarea unui câmp DataNasterii în locul câmpului Varsta. Crearea unui tabel separat pentru stocarea stadioanelor. Adăugarea constrângerii de integritate CodEchipa1 > CodEchipa2.

99 Problema 6 Se considera un arbore binar echilibrat. Descrieti operatiile ce trebuiesc realizate pentru ca arborele sa ramana echilibrat si dupa inserarea valorii ‘A’ G 3-3 Arbore echilibrat = pentru fiecare nod diferenta dintre inaltimile subarborilor sai este 0, 1 sau –1 E J -1 2-1 1 C F H K 1-1 B D I L A

100 Problema 6 – Soluție - nodul ‘E’ devine copilul drept al lui ‘C’
G E J C F H K B D I L A - nodul ‘E’ devine copilul drept al lui ‘C’ - nodul ‘D’ devine copilul stang al lui ‘E’ - nodul ‘C’ devine copilul stang al lui ‘G’ G E J C F H K B D I L A 1 2 1

101 Problema 7 Fie urmatorul arbore - B de ordin 5:
1. Determinati arborele ce rezulta in urma inserarii valorii ‘3’. 2. Determinati arborele ce rezulta in urma eliminarii valorii ‘8’ din din arborele original (se va folosi redistribuirea). 3. Determinati arborele ce rezulta in urma eliminarii valorii ‘8’ din din arborele original (se va folosi concatenarea). radacina 50 18 8 32 40 85 73 99 91 2 1 5 6 45 41 80 73 39 33 58 52 10 9 27 19

102 Problema 7 – Soluție 1. Inserare ‘3’... rădăcina median median 40 32 8
50 18 50 median 3 18 8 32 40 85 73 99 91 80 73 45 41 58 52 39 33 27 19 6 5 2 1 10 9 2 1 5 6 median 3

103 Problema 7 – Soluție 1. Inserare ‘3’... rădăcina 50 50 18 8 3 18 8 32
40 85 73 99 91 40 32 80 73 45 41 58 52 39 33 27 19 6 5 2 1 10 9

104 2. Stergere ‘8’ prin redistribuire
Problema 7 – Soluție 2. Stergere ‘8’ prin redistribuire rădăcina Valoarede sters 50 18 9 32 40 10 18 8 32 40 18 6 32 40 10 9 2 1 5 85 73 redistribuire 99 91 80 73 45 41 58 52 39 33 27 19 subdimensionare vecinul mai mare 10 9 2 1 5 6

105 Problema 7 – Soluție 3. Stergere ‘8’ prin concatenare rădăcina
valoare de sters 50 18 9 32 40 10 18 8 32 40 9 32 40 18 10 19 27 85 73 concatenare 99 91 80 73 45 41 58 52 39 33 27 19 subdimensionare Vecinul mai mare 10 9 2 1 5 6

106 Problema 7 – Soluție (cont)
3. Delete ‘8’ with concatenation (merging nodes) rădăcina 50 32 8 40 85 73 99 91 80 73 45 41 58 52 39 33 18 10 19 27 2 1 5 6

107 Problema 8 Se utilizeaza un fisier cu organizare directă extensibil (extendable hashing) pentru o tabelă cu următoarele valori pentru cheia de căutare: 2, 3, 5, 7, 11, 17, 19, 23, 29. Determinați structura fișierului dacă funcția de dispersie utilizată este h(x) = x mod 8 și fiecare pagină de memorie poate conține maxim 3 valori.

108 Problema 8 – Soluție x x mod 8 bin 2 2 010 3 3 011 5 5 101 7 7 111
2* 1 2 3 1 1 1 2 3* 11* 7* 5* 1 7* 29* 17* 5* 3* 1 3 7* 19* 11* 3* 23*


Descărcați ppt "Structura fișierelor index Securitate în baze de date"

Prezentări similare


Publicitate de la Google