Majoritatea persoanelor desfasoara activitati care implica interactiunea cu BD:
-BD de evidenta:elevilor de pe universitatea,conturilor bancare -BD pe internet -BD din organizatii:operatiuni financiare,productie,salarizare,comenzi,plati -BD in biblioteci,librarii BD pot avea un numar de inregistrari diferite de la zeci sau sute de inregistrari(o agenda telefonica) pana la zeci de milioane de inregistrari(BD privind plata impozitelor). Utilizatorii unei BD au posibilitatea sa efectueze mai multe categorii de operatii asupra datelor introduse: -actualizarea datelor memorate(update) -interogarea BD(query) pentru a regasi anumite informatii selectate dupa un criteriu ales -introducerea datelor noi(insert) -stergerea unor date existente(delete) O BD este o colectie de date corelate dpdv logic care reflecta un anumit aspect a lumii reale si este destinat unui anumit grup de utilizatori.Astfel datele pot fi create manual(fisele cartilor intr-o biblioteca) sau computerizat(majoritatea BD) utilizat la momentul de fata. O BD este o colectie de date creata si mentinuta cu ajutorul unui sistem de calcul ce permite operatii de introducere,stergere,actualizare si interogare a datelor. COMPONENTELE UNUI SISTEM DE BAZE DE DATE Un sistem de BD este un sistem computerizat de mentinere a evidentei unei anumite activitati folosind BD. Componentele unui sistem de BD: -hardware -software -utilizatorii -date persistente 1.Hardware Sistemele de BD sunt instalate de obicei pe calculatoare personale dar in unele situatii in care volumul sau nivelul prelucrarilor este complex sunt necesare sisteme multiprocesor foarte puternice. Performantele BD sunt influentate direct de specificatiile statiei de lucru:marimea unitatii de stocare,viteza microprocesorului,dimensiunea memoriei interne etc. 2.Software Intre BD si utilizator exista un nivel software numit SGBD. Utilizatori<->Program de aplicatie<->SGBD<->BD SGBD receptioneaza cererile utilizate de acces la BD pentru operatii de introducere, stergere, modificari sau interogari,le interpreteaza,executa operatiile corespunzator si returneaza rezultatul catre utilizator. SGBD ofera o viziune a BD de nivel inalt facand ca utilizatorul sa nu cunoasca organizarea particulara a sistemului. Pe langa SGBD mai exista si alte componente software utilizate in crearea si manipularea BD. 3.Utilizatorii Utilizatorii unui sistem de BD se pot imparti in: a)Programatorii de aplicatii sunt cei care dezvolta aplicatiile de BD folosind limbajele de programare. Aplicatiile efectuate se pot executa independent, pot fi aplicatii online sau sa necesite funct in cadrul unui mediu definit. b)Utilizatorii finali sunt utilizatorii care acceseaza BD printr-un program de aplicatie care le ofera anumite drepturi de acces si de prelucrare a datelor. c)Administratorul BD este acea persoana care are ca sarcina mentinerea functionalitatii BD prin stabilirea drepturilor de acces ale diferitelor categorii de utilizatori precum si prin efectuarea operatiunilor periodice de salvare a datelor, monitorizarea performantelor sistemului si restaurarea datelor cum este necesar. 4.Date Datele memorate sunt date persistente,care raman memorate independent de executia programelor de aplicatie. Datele persistente ale unei BD se introduce, se sterg sau se actualizeaza folosind date de intrare. Datele de intrare sunt date nepersistente care sunt memorate si astfel devin persistente doar dupa o validare a SGBD. Datele de iesire din system sunt date nepersistente provenind din operatii de interogare a BD si sunt puse la dispozitia utilizatorului sub forma de rapoarte,liste,rapoarte tiparite etc. Orice SGBD suporta 2 categorii de limbaje,un limbaj de descriere a datelor si un limbaj de manipulare. Limbajul de descriere a datelor permite definirea conceptual a datelor neavand nici o legatura cu modul de memorare. Limjalu de manipulare a datelor permite operatii de introducere,modificare,stergere si interogare a datelor. ARHITECTURA INTERNA A SISTEMELOR BD Arhitectura interna a unui system BD contine 3 nivele functionale: a)extern: o colectie de scheme externe ce sunt vederi ale diferitor grupuri de utilizatori.Exista cate o vedere individuala a datelor pentru fiecare grup b)conceptual:contine schema logica a BD c)intern:schema fizica a BD O schema externa a BD corespunde unei reprezentari unice pentru toti utilizatorii descriind datele ce sunt stocate in BD precum si asocierile dintre acestea. Schema interna(fizica) a BD specifica modul de reprezentare a datelor pe suportul fizic. Un system BD suporta o schema interna,o schema conceptual si mai multe scheme externe. Toate aceste scheme sunt reprezentari ale aceleasi colectii de date ce exista doar in nivelul intern. Toate aceste reprezentari ale datelor sunt gestionate de catre SGBD ce asigura in acelasi timp si corespondenta intre schema externa si cea conceptuala precum si cea conceptual si cea interna. AVANTAJELE UTILIZARII BD Pe langa avantajele de stocare a unor informatii care poate fi realizata si pe suport fizic(hartie) sistemele BD ofera o serie de avantaje suplimentare fapt care explica gradul mare de raspandire a acestora. Avantaje: -viteza mare de regasire si actualizare a informatiilor -compactitatea ridicata(volumul ocupat de sisteme BD este mult mai redus decat volumul ocupat de documente scrie sau alte fisiere necorelate) -retundenta scazuta a datelor memorate care se obtine prin partajarea datelor intre mai multi utilizatori si aplicatii -posibilitatea de introducere a standardelor privind modul de stocare a datelor, ceea ce permite schimbul intre diferite organizatii -mentinerea integritatii datelor printr-o politica de securitate bazata pe acces diferit in functie de rolul utilizatorului(aceasta securitate se face si prin gestionarea tranzactiilor sau refacerea datelor in cazul de functionare defectuoasa) -independenta datelor fata de suportul hardware utilizat SGBD ofera o vedere externa a datelor care nu se modifica odata cu schimbarea suportului fizic de memorare a datelor=imunitatea structurii BD si a aplicatiilor la modificare ale hardware-ului utilizat. CLASIFICAREA SISTEMELOR BD Exista mai multe criteria de clasificare: 1.Dupa modelul de date: majoritatea BD actuale sunt realizate pe baza modelului de date relational sau a modelului orientat obiect.Datorita complexitatii deosebite in utilizare a modelului orientat obiect a fost dezvoltat un alt model, modelul obiect relational care combina avantajele celor 2 modele. Modele de date mai vechi:ierarhic,retea. 2.Dupa numarul de utilizatori:majoritatea BD actuale sunt multiutilizatori,permit accesul concurrent a mai multor utilizatori la aceeasi BD si o alta categorie de BD este cea a sistemelor monoutilizatori care permit accesul la un moment dat a unui singur utilizator. 3.Dupa numarul de statii pe care este stocata BD:centralizate si distribuite Un system de BD centralizat este un system BD in care datele in sistemul de gestiune sunt stocate pe o singura statie de lucru.Un system centralizat poate suporta mai multi utilizatori la un moment dat accesand sistemul de pe calculatoare diferite dar BD sunt stocate intr-un singur loc pe o singura statie. Un system distribuit poate avea atat date cat si sisteme de gestiune distribuite pe mai multe statii interconectate printr-o retea de comunicatii. Sistemele de BD pot fi reprezentate dpdv a functionarii printr-o arhitectura client server. Intr-un system centralizat exista un singur server care este system de gestiune a BD si care poarta raspunderea in acelasi timp a mai multor utilizatori in cadrul sistemului multiutilizatori sau a unui singur utilizator in sistemul monoutilizator. Clientii sunt programe de aplicatii oferite de furnizori BD care permit accesul la server. Aplicatiile client pot fi executate pe statii diferite conectate printr-o retea de comunicatie cu statia ce functioneaza ca server. Aceasta arhitectura permite o prelucrare distribuita a datelor oferind suplimentar posibilitatea de configurare a unor cerinte particulare.Astfel serverul BD poate fi un system puternic echipat corespunzator pentru buna functionare a BD in timp ce fiecare client poate fi un calculator obisnuit capabil sa execute aplicatia dorita. O BD distribuita este o colectie de date care apartine dpdv logic aceluiasi system iar dpdv fizic poate fi memorata pe mai multe statii de lucru conectate prin retea de comunicatie.Sistemul care functioneaza in acest caz se numeste SGBD. Clientii ruleaza pe statii din retea accesand SGB distribuite. MODELAREA DATELOR Un model este o abstractizare a unui system care ia cele mai multe intorsaturi de la nivelul sistemului.Acestea sunt relevante dpdv al scopului pentru care se defineste modelul respective.Tehnica de identificare a trasaturilor caracteristice esentiale ale unui system se numeste abstractizare. Un model de date stabileste regurile de organizare si interpretare a unei colectii de date. In proiectarea BD se folosesc de obicei mai multe modele de date: -conceptuale(de nivel inalt) -specializate Un model conceptual contine o descriere concisa a colectiei de date ce modeleaza o activitate dorita. In acest caz nu se detaliaza modul de prezentare sau de prelucrare a datelor. Modelele specializate de date(ierarhic,retea,relational,orientat obiect,obiect relational) impun anumite structuri speciale de reprezentare a multimilor de entitati si a asocierilor dintre acestea. O BD este reprezentata printr-o schema conceptual specifica. Trecerea de la conceptual la specific reprezinta etapa de proiectare a BD. MODELE CONCEPTUALE DE NIVEL DINAMIC(INALT) Cel mai utilizat model conceptual este entitate-asociere care reprezinta schema conceptual a BD prin multimi de entitati si asocieri dintre acestea. Dezvoltarea acestui model astfel incat sa permita extinderea tipului de entitati este cunoscuta ca modelul entitate-asociere extins. Proiectarea modelului entitate-asociere sau entitate-asociere-extins este de obicei una dintre primele etape din proiectarea BD etapa care se mai numeste proiectarea schemei conceptuale. Modelul entitate-asociere a fost introdus in 1976 si este un model conceput a unei BD care defineste multimile de entitati si asocieri dintre ele dar nu impune nici un mod specific de structurare si prelucrare a datelor. Elementele esentiale ale modelului entitate-asociere sunt entitatile si asocierile dintre acestea. O entitate este orice poate fi identificat prin mod distinct.O entitate se refera la aspect,la realitati obiective care poate fi deosebit de restul universului putand reprezenta un obiect fizic,un concept etc. Atributele prin care este descrisa o entitate se alege pe baza criteriului relevantei relative la domeniul de interes pentru care se defineste modelul respective astfel incat sa se asigure diferentierea acelei entitati de restul universului. Toate entitatile similare pot fi descrise prin aceleasi atribute colectia tuturor entitatilor dintr-o BD contine o multime de entitati. Asocierea reprezinta totalitatea legaturilor existente intre datele din BD.Intre entitati exista 1 sau mai multe aocieri in functie de scopul BD respective. O asociere reprezinta o corespondenta intre entitati din 2 sau mai multe multimi. Gradul unei asocieri este dat de numarul de multimi de entitati asociate. Asocierile pot fi binare sau de gradul II, multiple intre mai mult de 2 multimi de entitati. Asociatiile binare sunt la randul lor de 3 categorii in functie de numarul de elemente din cele 2 multimi puse in corespondenta: 1.asocieri unu la unu- prin care un element din multimea E1 ii corespunde un singur element din multimea E2 si reciproc.se noteaza 1:1 2.asocieri unu la mai multe- prin care un element din multimea E1 ii corespunde mai multe elemente din multimea E2 dar in acelasi timp un element din multimea E2 ii corespunde un singur element din multimea E1.se noteaza 1:n 3.asocieri multe la multe- prin care un element din E1 ii corespunde 1 sau mai multe elemente din E2 si reciproc.se noteaza m:n Cardinalitatea sau multiplicitatea unei asocieri fata de o multime de entitati reprezinta numarul maxim de elemente din acea multime ce pot fi associate cu un element din alta multime a asocierii. Diagrama entitate-asociere reprezinta modelul entitate-asociere prin multimi de entitati si asocieri dintre acestea. Modelul entitate-asociere-extins permite definirea de subtipuri ale unui tip de entitate care mostenesc attribute de la tipul de entitate pe care il extend(se numeste supertip) si in plus au atribute specific semnificatiei lor.Prin definirea tipurilor si a subtipurilor de entitati se pot crea ierarhii de tipuri de entitati pe mai multe nivele. In principiu modelul entitate-asociere este suficient pentru modelarea aplicatiilor de natura economico-financiare pe baza de date traditionale. In alte domenii mai complexe este necesara insa utilizarea modelului extins in domenii ca telecomunicatiile,proiectare tehnologica,cartografiere geografica etc. Tipurile de entitati definite astfel de BD nu sunt tocmai complexe pentru care modelul entitate- asociere nu este sufficient. Modelul entitate-asociere extins se reprezinta printr-o diagram entitate-asociere extinsa iar ierarhiile de tipuri se pot crea prin specializare sau generalizare. Specializarea este un process de abstractizare a datelor pornind de la un tip de entitate dat prin definirea unui sau mai multe subtipuri differentiate intre ele in functie de rolul specific pe care il au in modelul de date. Generalizarea este un process prin care se creeaza un supertip de entitate pornind de la mai multe tipuri de entitati.Este process de abstractizare invers specializat. Pentru definirea unei generalizari se identifica atributele commune ale mai multor tipuri de entitati urmand ca aceste tiputi sa caracterizeze supertipul entiate. Atributele care difera raman atribute specifice fiecarui tip. Mostenirea atributelor este proprietatea principal a ierarhiilor de tipuri de entitate create prin specializare sau generalizare. Mostenirea dintre un subtip de entitate si supertipul acestuia se reprezinta in diagrama entitate- asociere extinsa prin o legatura intre subtip si supertipul de entitate corespunzator printr-un semicerc orientat catre subtip. In modelul relational reprezentat mostenirii dintre un subtip de entitate si supertipul extins de acesta printr-o asociere 1:1 implica faptul ca o entitate instant a unui subtip este in asociere cu o entitate de baza impreuna reprezentand realitatea modelata. Constrangeri de specializare si generalizare: In general un supertip poate avea mai multe grupuri de supertipuri reprezentand o specializare dupa anumite criteria astfel incat subtipurile sunt legate de supertipul respective prin legaturi impreuna cu o litera d care semnifica constrangerea de disjunctive. O specializare are proprietate de disjunctive daca o entitate nu poate sa apartina decat unuia din subtipurile specializarii. Daca o entitate poate apartine la 2 sau mai multe subtipuri ale unei specializari atunci acea specializare se numeste specializare cu suprapunere. In general ******** specializarilor disjuncte se reprezinta prin litera d plasata intr-un cerc localizat pe legaturile specializarii.Specializarile cu suprapunere se reprezinta similar insa utilizandu-se litera o(de la OVER LAPPING). MODELE DE DATE SPECIALIZATE Principalele metode de date specializate sunt: -modelul ierarhic -modelul relational -modelul obiect -modelul biect relational 1.Modelul ierarhic In modelul de date ierarhic o BD se reprezinta printr-o structura ierarhica de inregistrare de date conectate prin legaturi.Acest model a fost primul analizat in dezvoltarea BD. Cel mai cunoscut SGBD bazat pe modelul ierarhic este sistemul IMS(Information Management Sistem) dezvoltat de firma IBM in cadrul programului spatial APOLLO din anii60. O inregistrare in modelul ierarhic este o instant a unui tip de inregistrare si consta intr-o colectie de campuri, fiecare camp continand valoarea unui atribut. Un tip de inregistrare corespunde unui tip de entitate, iar o inregistrare corespunde unei entitati din modelul entitate-asociere. Un tip de legatura in modelul ierarhic este un tip de asociere cu raportul de cardinalitate 1:n intre 2 tipuri de inregistrari. Tipul de inregistrare din partea cu multiplicitate 1 a asocierii este numit parinte in timp ce tipul cu multiplicitate n este numit fiu. Schema conceptual a unei BD in modelul ierarhic se reprezinta printr-un numar oarecare de scheme ierarhice. O schema ierarhica este un arbore directionat reprezentat de mai multe niveluri in care modurile sunt tipuri de inregistrare, iar acelea sunt tipuri de lagaturi. Fiecare nod cu exceptia nodului radacina are o singura legatura cu un nod de pe un nivel superior numit si nodul parinte,fiecare nod avand una sau mai multe legaturi catre niveluri inferioare. Se poate stabili o corespondenta intre schema ierarhica si diagram entitate-asociere(EA) in sensul ca tipurile de inregistrare corespund tipurilor de entitati iar tipurile de legaturi corespund tipurilor de asociere. In modelul ierarhic sunt admise doar legaturi de tipul parinte-fiu care corespunde asocierii 1:1: si 1:n din modelul entitate-asociere(EA). Asocierea de tip m:n din modelul entitate-asociere nu se pot reprezenta direct cu modelul ierarhic ci doar prin multiplicarea inregistrarii de tip fiu atunci cand sunt referinte mai multe inregistrate decat parinte. Acest lucru conduce la un grad ridicat de redundanta datelor. Implementarea modului ierarhic se realizeaza prin memorarea explicita a tuturor legaturilor de tip parinte-fiu in fiecare inregistrare de tip parinte memorandu-se lista adreselor la inregistrarea fiu cu care este asociat. Din acest motiv pentru utilizarea modelului ierarhic se pot rezolva doar interogarile pentru care au fost definite explicit legaturile necesare. Avantaje: -simplitatea si eficienta in calcul,dar cu toate acestea datorita redundantei datelor modelul nu mai este folosit 2.Modelul de date retea Modelul de date retea foloseste o structura de grafic pentru definirea schemei conceptuale a BD.Nodurile graficului sunt tipuri de entitati,iar muchiile grafurilor explicit asocierile dintre tipurile de entitati. Principala deosebire fata de modelul ierarhic este ca in acest caz legaturile de tip m:n se reprezinta fara duplicarea inregistrarilor fiecare inregistrare fiind referita in mai multe inregistrari. Principalul dezavantaj este ca si in acest caz inregistrarea trebuie definite inca din faza de proiectare prin memorarea explicita a legaturii intre tipurile de entitate. In momentul actual utilizarea acestui model este restransa fiind utilizat in modelarea scenelor tridimensionale in realitatea virtual. 3.Modelul relational Modelul relational se bazeaza pe notiunea de relatie din matematica care corespunde unei multimi de entitati de acelasi tip si are o reprezentare usor de inteles si de manipulate ce consta dintr-un table bidimensional compus din linii si coloane. Fiecare linie din table reprezinta o entitate si este compusa din multimea valorilor atributelor entitatii respective, fiecare atribut corespunde unei coloane a tabelului. Modelul relational a fost propus de E.F.CODD in anii 70 fiind realizat in cadrul firmei IBM. Chiar daca notiunile de table si relatie difera in esenta lor cele 2 denumiri se pot folosi in general interschimbabil sugerand acelasi lucru. Principalele caracteristici: -datele sunt percepute de utilizatori ca tabele si numai ca tabele -operatorii care pot fi folositi pentru prelucrarea datelor genereaza un table rezultat din tabele operante. -asocierea dintre tabele se realizeaza prin intermediul egalitatii valorilor unor attribute commune Acest lucru permite sa se poata crea orice interogare fara a fi nevoie in prealabil sa fie definite legaturile explicit dintre cele 2 tabele(asa cum este necesar in cadrul modelelor ierarhic si retea) Primul system de gestiune al bazelor de date relationale a fost sistemul R dezvoltat de compania IBM in anii 70. Pe langa avantajul unui model de date prcis si simplu sistemul relational beneficiaza si de un limbaj de programare, unanim recunoscut si acceptat numit SQL. 4.Modelul orientat obiect Modelul orientat obiect este concept unificator in informatica fiind aplicabil in programare in proiectarea hardware-ului, la a interfetelor, a BD etc. SGBD orientate obiect se bazeaza pe limbaje de programare orientate obiect si au capacitate de persistent.In sensul ca datele sunt independente de tipul de viata al programului care le creeaza sau acceseaza prin memorie pe un suport magnetic. Acest model a aparut deoarece modelul relational a fost considerat insuficient de expresiv si cu performante de executie reduse. Modelul obiect este utilizat in general pentru proiectarea asistata de calculator. Sisteme de informatii geografice sau medicina. Caracteristicile fundamentale: -abstractizarea -mostenirea -incapsularea -modularitatea In programarea orientat obiect programele sunt organizate ca si colectii de obiecte fiecare obiect fiind o instant a unei clase. Fiecare clasa reprezinta abstractizarea unnui tip de entitate din realitatea modelata iar clasele sunt member ale unei ierarhii de clase corelate intre ele prin relatii de mostenire. Orice obiect este incapsulat, ceea ce inseamna ca reprez lui nu este vizibila utilizatorilor care au acces doar la functiile pe care acel obiect este capabil sa le execute. Clasele si obiectele unui program sunt grupate in module ce pot fi compilate separat ceea ce reduce complexitatea de manevrare a datelor. Pentru dezvoltarea unui SGBD orientat obiect se poate aborda una din urmat strategii: -extinderea unui limbaj de programare orientat obiect cu capacitate de administrare a obiectelor persistente -extinderea unui limbaj de programare relational cu capacitate de orientare spre obiect -dezvoltarea unui limbaj orientat obiect pentru BD complet nou care sa asigure crearea si interogarea obiectelor persistente. Intre avantajele SGBD orientat obiect se evidentiaza capacitatea acestora de a define si manevra tipuri de date complexe care se pot extinde prin mecanismul de mostenire ceea ce duce la cresterea performantelor. Principalul dezavantaj il reprezinta complexitatea mare a bazei de date si a aplicatiilor deoarece programatorii trebuie sa prevada in structura obiectelor toate legaturile necesare tuturor interogarilor.Cu cat interogarile sunt mai complexe cu atat sunt necesare mai multe legaturi intre obiecte si deci se complica structura acestora. 5.Modelul obiect relational Acest model reprezinta extinderea modelului relational cu caracteristici ale modelului orientat obiect pentru prelucrarea tipurilor de date complexe.In esenta modelul obiect relational pastreaza structura datelor in relatii reprezentate ca tabele,dar adauga posibilitatea definirii unor noi tipuri de date pentru domeniile de valoare a atributelor. Tipurile de date definite de utilizator pot fi extinse prin mecanismul de mostenire si pentru fiecare tip sau subtip se pot define metode pe care le pot executa cu obiectele de acel tip. In general dezvoltarea SGBD obiect relational se realizaza prin extinderea sistemelor relationale in mod gradat adaugandu-se de la o versiune la alta cat mai multe caracteristici posibile ale modelului obiect pastrand caracteristicile modelului relational. SQL SERVER- este system de gestiune BD relationale dezvoltat de Microsoft pentru SO. Windows Microsoft ACCESS este unul dintre cele mai cunoscute SGBD relationale pentru pc, dispune de interfata grafica care faciliteaza interactiunea cu utiliztorul. MY SQL-SGBD relationale cu implementari pe S.O. Windows,Linux,Unix. RELATII O BD relationala este compusa dintr-o multime finite de relatii fiecare relatie reprezentand un tip de entitate sau asociere dintre 2 sau mai multe tipuri de entitati din aceasta definitie rezulta ca intr-o BD fiecare relatie este unica. O relatie se defineste prin intermediul atributelor sale. Atributele unei relatii sunt atributele tipului de entitate sau de asociere pe care le reprezinta relatia respective.Fiecare atribut ale unei relatii are un domeniu de definire si poate lua o singura valoare pentru fiecare tuplu. Un domeniu de definitie este o multime cu nume de valori atomice care au acelasi tip, avand o anumita semnificatie din care isi iau valori atributele relatiilor. Schema relatiei se noteaza cu 'r' [relatie] (a1,a2....an) este compusa din numele relatie si din lista ordonata a domeniului sau de definitie notat cu D(ai). Schema relatie este folosita pentru a descrie relatia respectiva, si se mai numeste tipul sau intesiteatea relatie. Numarul de atribute al schemei unei relatii se numeste GRADUL RELATIEI. O relatie r definita pe schema r(a1 a2 ... an) este o multime de n tupluri, fiecare tuplu fiind o lista ordonata de n valori notata cu t = v1, v2... vn unde fiecare valoare corespunde unui atribut al relatiei. OBSERVATIE : din aceasta definitie rezulta ca intr o relatie nu exista tupluri duplicat, adica doua sau mai multe tupluri identice, pentru ca relatia este o multime matematica de tupluri. Tot din aceeasi definitie rezulta cardinalitatea relatie reprezentata de nr de tupluri. O relatie corespunde in general unei multimi de entitati din diagrama entitate - asociere a unei baze de date, iar un tuplu reprezinta o entitate din multimea de entitati. Atributele tipului de entitate din modelul conceptual de nivel inalt devin atributele relatie in modelul relational. De exemplu relatia angajati se defineste prin angajati (nume, prenume, data_nasterii, adresa, functie, salariu). Domeniile de definitie ale atributelor se specifica prin numele domeniului, semnificatia acestuia, tipul de date si restrictii asupra valorilor in cadrul tipului de date. De exemplu, domeniul corespunzator campului nume reprezinta domeniul numelor de persoane reprezentate printr-un sir de maxim 30 de caractere (ne imaginam ca nu exista un nume mai lung de 30 de carectere) in care primul caracter este litera mare urmand ca celelalte litere sa fie mari sau mici. campul data_nasteri este format din domeniul datelor calendaristice reprezentate prin trei numere intregi separate prin simbolul -, primul nr reprezentant anul, format din patru cifre, al doilea si al treilea formate din cate doua cifre (ziua si luna). Suplimentar pentru campul salarii este reprezentat printr-un nr zecimal. Intr-o tabela nu este necesar ca fiecare atribut sa aiba un domeniu diferit. Eeste posibil ca unul sau mai multe domenii sa coincida. De exemplu domeniul apartinand campului data_nasterii poate fi similar domeniului ce reprezinta data_angajarii. REPREZENTAREA RELATIILOR PRIN TABELE O tabela este o reprezentare a unei relatii si este compusa din urmatoarele parti: - numele tabelei care este identic cu numele relatiei pe care o reprezinta - un numar de coloane cu un nr de atribute ale relatiei, fiecare coloana reprezentand un atribut. - capul tabelei in care se inscriu numele atributelor relatiei, fiecare atribut fiind inscris in coluana corespunzatoare. - o multime de linii, fiecare linie corespunzand unui tuplu, deci unei singure entitati, in fiecare element al unei linii inregistrandu-se valauarea atributului corespunzator coloanei in care se afla elementul respectiv. Notiunile de tabela si relatie sunt identice, sugerand acelasi lucru, notiunea de relatie fiind insa o notiune abstracta. Reprezentarea unei notiuni abstracte cum este relatia intr-o forma usor de interpretat cum e tabela reprezinta una din caracteristicile de basa ale modelului relational. Intr-o tabela nu este importanta ordinea tuplurilor, doarece tabela este definita ca o multime de tupluri. ORDONAREA VALORILOR ATRIBUTELOR IN TUPLURI Tuplul este considerat o lista ordonata de n valori ale atributelor, ordinea valorilor atributelor in tupluri nefiind importanta atata timp cat se face o legatura intre atribut si valoarea acestuia. Daca presupunem schema relatiei definita ca o multime de atribute r(a1 a2 ... an) relatia r este o multime de n tupluri, fiecare tuplu fiind compus dintr-o multime de n valori ordonate t (a1 v1, a2 v2 ..... an vn) unde vi reprezinta valoarea atributului ai din domeniul sau de definitie. In aceasta definitie ordinea atributelor nu mai conteaza deoarece numele atributului si valoarea lui sunt grupate impreuna si de aceea aceasta definitie este mai generala. Catalogul sistemului reprezinta partea centrala a oricarui SGBD in care se memoreaza descrierea bazelor de date pe care acesta le admisistreaza. Catalogul sistemului este o mica baza de date in care sunt memorate date despre datele stocate, aceste informatii fiind numite METADATE. In sistemele de gestiune a bazelor de date relationale, catalogul este compus din relatii care pot fi actualizate sau interogate folosind chiar comenzi ale SGBD in catalog sunt descrise relatiile, interogarile, procedurile stocate sau functiile definite de utilizatori. LIMBAJUL SQL Este un limbaj utilizat de majoritatea sistemelor de baze de date relationale pt definirea si manipularea datelor. A fost inventat in anii70 in cadrul companiei IBM iar in anul 1987 Institutul American pt Standarde a elaborat un standard pt limbajul SQL. Majoritatea SGBD urilor relationale actuale suporta standardul SQL 2, fiecare implementand un diabet specific. In unele implementari ale limbajului pot lipsi unele comenzi standard, dar pot exista si extensii specifice, care prin utilizare reduc gradul de portabilitate al programelor realizate, adica un program realizat intr-un astfel de SGBD nu poate functiona pe un alt calculator unde exista un alt tip de SGBD. Limbajul SQL foloseste terminii de tabela, linie si coloana pt a desemna o relatie, un tuplu sau un atribut, deci este orientat catre reprezentarea datelor in tabele, care este mult mai intuitiva pt proiectanti si pt programatori. Limbajul SQL cuprinde atat componenta de descriere a datelor relationale cat si componenta de manipulare a datelor, ambele fiind absolut necesare in gestiunea bazelor de date. Pe langa aceste componente principale, standardul SQL mai cuprinde si urmatoarele elemente : 1.Controlul tranzactiilor care contine comenzi pt specificarea tranzactiilor 2.Controlul securitatii si al protectiei datelor care contine comenzi de administrare a bazelor de date pt definirea utilizatorilor si a drepturilor acestora de acces la tebele. Aceasta componenta este puternic dependenta de SGBD, administrarea bazelor de date reprezentand o activitate foarte complexa. Limbajul SQL este un limbaj neprocedural, o instructiune SQL specificand ce informatii trebuie sa fie setate sau obtinute, netrebuind sa specifice procedura cu care se apreciaza. Limbajul SQL contine numai instructiuni de definire si manipulare a datelor si nu contine instructiuni de control al fluxului executiei. O instructiune SQL este o secventa de elemente componente ce se termina cu i fiecare instructiune SQL contine o comanda care specifica ce actiune se efectueaza, urmata de alte elemente componente ce semnifica operatii, clauze sau parametrii. De exemplu, comanda SELECT * FROM studenti contine comanda SQL SELECT urmata de alte elemente ale instructiunii. Un element al unei instructiuni poate fi un cuvant cheie , un identificator, o constanta, sau un caracter special. Cuvintele cheie sunt elementele componente cu semnificatie fixa in limbajul SQL. Acestea pot fi comenzi, de ex SELECT, INSERT, UPDATE, DELETE, operatori :and,or,not,like, sau clauze :where, set, values. Identificatorii sunt elemente componente care denumesc tabele, coloane sau alte obiecte ale bazei de date. Pe langa acest tip de identificatori simpli, formati de obicei dintr-un singur cuvant, mai exista un tip de identificatori numiti IDENTIFICATORI DELIMITATI care sunt formati dintr-o secventa de caractere avand la inceput si la sfarsit simbolul ghilimele. Constante :pot fi siruri de caractere, numere intregi, numere reale sau nule. O constanta sir de caractere consta intr-o secventa de caractere delimitata la inceput si la sfarsit de simbolul apostrof. Caracterele speciale- unele caractere speciale care nu sunt litere sau cifre pot avea rol de operatori SQL sau pot avea o semnificatie speciala in cadrul comenzilor SQL. De exemplu, simbolul (;) este utilizat pt delimitarea sfarsitului unei comenzi. Simbolul (.) este utilizat ca punct zecimal, iar caracterul (*) este folosit ca operator de inmultire sau cand urmeaza specificarea tuturor coloanelor dintr-o tabela atunci cand urmeaza dupa cuvantul SELECT. Expresii, operatori si functii SQL O expresie SQL consta in unul sau mai multi operanti, operatori si paranteze. Un operator poate fi numele unei coloane dintr-o tabela, o constanta sau o valoare returnata de o functie, in timp ce parantezele sunt utilizate pt a preciza ordinea operatiilor, in situatia in care aceasta ordine este diferita de cea implicita. Operatorii de comparatie in SQL : -A Beetween, MIN, AND, MAX, compara A cu doua valori MIN si MAX -A IN(v1,v2vn) compara A cu o lista de valori v1,v2vn -A IS NULL compara A cu valoarea nula -A IS NOT NULL compara A cu NOT NULL -A LIKE compara A cu un sir de caractere Operatorii logici ai limbajului SQL sunt notati prin cuvintele cheie AND, OR, NOT. Toti acesti operatori se aplica unor variabile logice cu 3 valori(adevarat, fals si nul). Valoarea NULL semnifica lipsa de informatie. Operatorii relationali sunt notati prin cuvinte cheie cum ar fi UNION, INTERSELECT sau MINUS Functiile definite in SQL sunt de doua categorii : -functii agregate -functii scalare Functiile agregate calculeaza un rezultat din mai multe linii ale unei tabele (sum, min, max, avg). Functiile scalare primesc unul sau mai multe argumente si returneaza valoarea calculata sau NULL in caz de eroare. TIPURI DE DATE SI DOMENII In limbajul SQL sunt definite mai multe tipuri de date :numeric, text, sir de caractere, sir de biti, data calendaristica si timp. Tipul numeric include numere intregi de diferite dimensiuni. Sir de caractere- permite definirea sirurilor de caractere de lungime fixa sau variabila. Duble tipuri reprezinta siruri de n sau mai mici decat n caractere. In cazul celor cu lungime fixa se completeaza cu spatii libere sirul pana ajunge la lungimea n, iar in cazul celor variabile se memoreaza doar atatea caractere cate are sirul. Tipul sir de biti defineste secvente de cifre binare, care pot lua valoare 0 sau 1, de lungime fixa sau variabila. Tipurile pt data calendaristica si timp : domeniile atributelor in SQL se specifica pe baza tipurilor de date predefinite ale limbajului SQL, deci observam ca sunt destul de diferite fata de notiunea teoretica de domeniu, fiindca nu se face nicio precizare a semnificatiei domeniului. Instructiuni SQL de definire a datelor Componenta de definire a datelor limbajului SQL permite modificarea, crearea si distrugerea obiectelor bazei de date, a vederilor, indexurilor sau a procedurilor. Crearea se face cu ajutorul instructiunii CREATE avand urmatoarea sintaxa :CREATE TABLE nume tabela (coloana 1 domeniul 1 [constrangeri coloana 1] coloana n domeniul n [constrangeri coloana n] [constrangeri tabela]. De ex : create table studenti (cod_matricol (text,(6), nume (text, (35) ), specializare (text(20)) Instructiunea CREATE TABLE defineste atat un tip de relatie cu atributele specificate, cat si o variabila relatie care initial este vida, nu contine niciun tuplu. Tabelele create cu instructiunea CREATE TABLE sunt numite si tabele de baza, ele fiind memorate in fisierele bazei de date si apoi putand fi accesate pt introducerea, modificarea sau integrarea datelor. Un tabel vedere este un tabel virtual care nu este memorat fizic in fisiere ce reprezinta o solutie dupa un anumit criteriu a datelor memorate in unul sau mai multe tabele de baza. Comanda de modificare a tabelelor este ALTER TABLE. Ea permite adaugarea sau stergearea unor atribute, modificarea domeniilor unor atribute precum si adaugarea, modificarea sau stergerea unor constrangeri ale tabelei. Pt stergerea unei coloane dintr-o tabela se utilizeaza cuvantul cheie DROP, in comanda ALTER TABLE. De exemplu, daca dorim sa stergem coloana specializare din cadrul tabele studenti se face prin ALTER TABLE studenti DROP specializare. INSTRUCTIUNI DE MANIPULARE A DATELOR Instructiunile de manipulare contin una din comenzile SELECT, INSERT, UPDATE, DELETE. Instructiunea SELECT este instructiunea de interogare a limbajului SQL prin care se regasesc informatiile dorite din una sau mai multe tabele ale bazei de date. Sintaxa instructiunii SELECT este SELECT[distinct] lista coloana FROM lista tabele [where conditie] [clauze secundare] Ca rezultat al instructiunii SELECT se obtine o tabela care contine coloanele din lista coloanelor ale acelor linii din produsul cartezian al tabelelor din lista de tabele pt care expresia logica conditie este adevarata. In instructiunea SELECT se remarca 3 clauze fundamentale :SELECT, FROM si WHERE. Clauza SELECT defineste coloanele care vor aparea in rezultat, FROM defineste tabelele in care se regasesc aceste coloane, iar WHERE defineste conditia pe care toate liniile din tabela relutata trebuie sa le respecte. Clauzele secundare sunt ORDER BY, GROUP BY si HAVING. Clauza SELECT introduce lista coloanelor unor tabele sau expresii care vor fi selectate si afisate.. coloanele din lista trebuie sa apartina uneia din tabelele specificate in clauza FROM. De exemplu SELECT nume FROM salariati va selecta toti salariatii din tabela cu acelasi nume, conditie obligatorie fiind ca atributul nume sa se regaseasca in tabela salariati. Interogarea de mai sus poate da doua sau mai mai multe linii identice in cazul in care avem mai multi salariati. In aceasta situatie, daca se doreste afisarea fiecarui nume o singura data, se va utiliza parametrul DISTINCT pt eliminarea liniilor duplicat. Interogarea SELECT DISTINCT nume FROM salariati . daca dupa clauza SELECT in locul numelor de coloane se foloseste simbolul * atunci se vor selecta toate atributele produsului cartezian al tabelelor specificate in clauza FROM. SELECT * FROM angajati va afisa toate coloanele cu toate valorile, fiindca nu avem conditie. In clauza SELECT se pot introduce functii totalizatoare si functii agregate. Principalele functii agregate sunt : -COUNT calculeaza nr-ul de linii al rezultatului -SUM calculeaza suma tuturor valorilor dintr-o coloana -MAX calculeaza valoarea cea mai mare dintr-o coloana -MIN calculeaza valoare minima dintr-o coloana -AVG calculeaza media aritmetica a valorilor dintr-o coloana Ex : SELECT COUNT (*) FROM angajati ne va da nr-ul total de inregistrari din tabela angajati , adica nr-ul de angajati. In clauza SELECT se pot redenumi atributele sau se pot specifica nume pt expresii, folosind urmatoarea sintaxa : SELECT nume 1, AS, nume 2 AS nume FROM lista tabele WHERE conditie Ex : salariul net pe baza salariului brut stiind ca salariul net reprezinta 65% din salariul brut vom avea : SELECT nume, sal_brut*0.65 as sal_net FROM angajati OBS : Noul nume care urmeaza clauzei AS trebuie sa fie un singur sir de caractere, daca sunt mai multe cuvinte se va considera ca nou nume doar primul cuvant dupa AS, urmand ca celalalt cuvant sa reprezinte o eroare de sintaxa. Clauza FROM este obligatorie daca intr-una din clauzele SELECT,WHERE,HAVING apar nume de coloane ale unor tabele. In acest caz, lista de tabele care insoteste clauza FROM trebuie sa contina numele tuturor tabelelor separate prin virgula ale caror coloane se folosesc. Daca lista contine mai mult de o tabela, atunci numarul coloanelor din clauza SELECT trebuie sa fie diferit, iar daca nu sunt diferite se va specifica numele tabelei din care fac parte coloanele respective. De exemplu, daca avem si in tabela angajati si in tabela departamente campul nume si se doreste afisarea numelui anagajatilor alaturi de numele departamentelor in care lucreaza, vom avea SELECT angajati.nume, departamente.nume FROM angajati, departamente, WHERE angajati.cod_dep=departamente.cod_dep Clauza WHERE restrictioneaza tuplurile returnate ca rezultat la acele tupluri care indeplinesc conditia introdusa de aceasta clauza sub forma unei experesii logice. O expresie logica se construieste din valori logice, operatori logici (and, or , not) si paranteze. O valoare logica se obtine in mod obisnuit ca rezultat al comparatiei intre doi operanti, folosind un operator de comparatie. Un operant poate fi un atribut, o constanta, valoarea unei expresii logice sau valoarea returnata de o functie. Clauza ORDER BY introduce numele atributului dupa care se face ordonarea liniilor in tabela rezultat. Ordonarea se face implicit crescator cand campul este un nr, si alfabetic, atunci cand campul este un sir de caractere. In situatia in care se doreste ordonarea descrescatoare, se va utiliza dupa numele campului cuvantul DESC. SELECT nume, salariu FROM angajati ORDER BY salariu DESC ne va face ordonarea salariatilor, pornind de la cel cu salariul cel mai mare, ajungand la cel cu salariul cel mai mic. Clauza GROUP BY se foloseste pentru gruparea rezultatelor functiilor agregate in functie de valoarea uneia sau mai multor coloane. Pt aceasta, in instructiunea SELECT se introduce clauza GROUP BY urmata de numele coloanei dupa valoarea careia se doreste gruparea rezultatelor functiei agregate. In acest caz, functia agregata se aplica separat doar pt acele linii care au aceeasi valoare a atributelor specificate in group by. SELECT COUNT (*) , cod_depFROM angajati GROUP BY cod_dep- ne va afisa pt fiecare cod de departament, cati angajati avem. Clauza HAVING- functiile agregate nu pot fi utilizate impreuna cu o clauza WHERE. Pt folosirea unei functii agregate intr-o conditie, se va utiliza clauza HAVING, care este asemanatoare cu WHERE, dar care permite utilizarea functiei agregate in expresia conditionala. Select nume From angajati Having salariu=max(salariu) va returna numele salariatului cu salariul maxim. SUBINTEROGARILE Mai sunt numite si instructiuni select imbricate. Instructiunile select se pot imbrica pe mai multe niveluri, o instructiune avand ca argument rezultatul unei alte instructiuni numite subinterogare. Cea mai cunoscuta sintaxa este : SELECT lista atribute FROM tabela 1 WHERE coloana x IN (SELECT coloana x FROM tabela 2 WHERE conditie)- in aceasta constructie valoarea de comparatie din clauza where a primei instructiuni select se defineste printr-o subinterogare car reiese din alta instructiune select. De exemplu, daca dorim sa afisam numele salariatilor cu salariul cel mai mare, dar neutilizand having, putem utiliza o subinterogare astfel : SELECT nume FROM angajati WHERE salariu=(SELECT max(salariu) from angajati) INSTRUCTIUNEA INSERT Se utilizeaza pt introducerea datelor in tabele avand urmatoarea sintaxa : INSERT INTO nume tabela (col1, col 2coln) VALUES (val1, val 2,.val n) OBSV :- intre valori si numele de coloane trebuie sa existe o corespondenta 1 la 1pt ca fiecare valoare sa intre pe coloana dorita. -daca se cunoaste cu exactitate ordinea coloanelor din tabela nu mai este necesara specificarea acestora in clauza INSERT si este necesara doar introducerea valorilor in aceeasi ordine. Ex :daca avem tabela salariati (CNP, nume, salariu) : INSERT INTO angajati (salariu, nume, CNP) values (1000, ana popescu, 384093824902384) sau se pot introduce valori direct in ordinea coloanelor din tabela : INSERT INTO salariati VALUES (38059830, ana popescu, 1000 ) INSTRUCTIUNEA UPDATE Permite actualizarea valorii coloanelor din una sau mai multe linii ale unei tabele. Sintaxa generala : UPDATE nume tabela SET coloana 1=expresie 1, coloana 2=expresie 2..[WHERE conditie] Clauza WHERE permite ca actualizarea valorilor sa fie facuta doar pt acele linii care indeplinesc conditia data. Daca este omisa clauza WHERE vor fi modificate valorile coloanei specificate dupa SET pt toate liniile tabelei. Ex : UPDATE angajati SET salariu=1200 [where nume=ana popescu) va modifica salariul anagajatei ana popescu la valoarea de 1200 INSTRUCTIUNEA DELETE Permite stergerea unora sau mai multor linii dintr-o tabela : DELETE from nume tabela WHERE conditie. Din tabela se sterg acele linii care respecta conditia data in clauza WHERE. Daca clauza WHERE lipsest, vor fi sterse toate inregistrarile din tabela. Daca dorim sa stergem din tabela angajati toti angajatii din cadrul departamentului productie : DELETE FROM angajati [where dep=dep_productie] CONSTRANGERI DE INTEGRITATE Sunt reguli care se definesc la proiectarea unei baze de date si trebuie sa fie respectate de orice stare a acesteia. Relatiile unei BD reflecta realitatea modelata, si de aceea valorile pe care le contin trebuie sa respecte anumite reguli care sa corespunda celor din realitate. Constrangerile se pot clasifica dupa locul unde sunt definite si dupa modul in care sunt definite. Dpdv al locului unde sunt definite, constrangerile pot fi : -intrarelati -interrelatie Constrangerile intrarelatie sunt reguli care se impun in cadrul unei relatii si care asigura integritatea datelor acesteia. La randul lor, aceste constrangeri sunt de 3 feluri : 1.Constrangeri de domeniu,impun valoarea atributelor si asigura integritatea domeniului atributelor 2.Constrangeri de tuplu, se impun deasupra tuplurilor unei relatii, asigrand identificarea corecta prin intermediul cheilor 3.Constrangerile impuse, prin care valorile unor atribute, ale unor relatii determina valorile altor atribute din cadrul aceleiasi relatii Constrangerile interrelatii se impun intre doua sau mai multe relatii, cele mai importante sunt constrangerile de integritate referentiala care se realizeaza prin intermediul cheilor straine si asigura asocierea corecta a relatiilor. Dpdv al modului de definire, constrangerile unei BD se pot clasifica in constrangeri : -inerente, -implicite, -explicite. Constrangerile inerente apartin modelului de date, ele nu trebuie specificate cande se face definirea relatiilor, dar trebuie respectate atunci cand se face aceasta definire. Constrangerile implicite sunt reguli care se definesc odata cu definirea schemelor relatiilor, sunt memorate in BD iar sistemul de gestiune verifica si impune respectarea lor. In aceasta categorie se incadreaza constrangerile de domeniu, de tuplu si cele de integritate referentiala. Constrangerile explicite sunt constrangeri suplimentare pe care trebuie sa le respecte relatiile unei BD si care nu sunt impuse automat de SGBD, ci necesita proceduri speciale de verificare si impunere a respectarii lor. Constrangerile de domeniul sunt conditii impuse valorilor atributelor astfel incat acestea sa corespunda semnificatiei pe care o au in realitatea modelata. Dintre constrangerile de domeniu, constrangerea NOT NULL si constrangerea de valoarea implicita DEFAULT sunt constrangeri cu caracter general ce se pot aplica oricarui atribut. Constrangerile interrelatii sunt reguli care se impun intre 2 sau mai multe relatii. Cele mai multe constrangeri interrelatii sunt constrangerile de inegritate referentiala care se realizeaza prin cheile straine si asigura asocierea corecta a relatiilor. Dpdv al modului de def. constrangerile pot fi: -inerte, -implicite -explicite. Constrangerile inerte - sunt cons... CONSTRANGERILE TUPLU - cheia primara si cheile secundare. Orice relatie se defineste ca o multime de tupluri ceaa ce inseamna ca tuplurile trebuie sa fie disticte; deci val continute in fiecare tuplu trebuie sa fie o combinatie unica pentru a respecta unitatea. De obicei intr-o schema de relatie exista o submultime de atribute SK (superkey) cu proprietatea ca nu exista 2 tupluri distincte ale relatie care sa aiba aceiasi combinatie de valori a atributurilor. O supercheie (SK) a unei relatii este o submultime de atribute ale relatie care prezinta proprietatea de unicitate adica orice combinatie de valori ale atributele supercheii este unica in orice stare a relatiei; acest lucru inseamna ca daca se cunoaste combinatia de valori ale atributelor supercheii, atunci acel tuplu pote fi indentificat in mod unic. Orice relatie are cel putin o supercheie cea formata din multimea tuturor atributelor sale. O cheie candidata este o supercheie ireductibila conform definitiei de mai sus aceasta inseamna ca o cheie candidata trebuie sa respecte urmatoarele 2 proprietati : 1) unicitate - deci nu exista 2 tipuri diferite care sa contina aceiasi combinatie de valori ale atributelor cheii candidate. 2) ireductibilitate - nu exista nici o submultime proprie nevida a cheii candidate care sa aiba proprietatea de unicitate. Acest lucru inseamna ca daca se elimina un atribut oarecare din submultimea cheii candidate, noua submultime de atribute numai are proprietatea de unitate. Deci o cheie candidata este o super cheie minimala adica o supercheie din care nu se poate elimina niciun atribut fara a pierde proprietatea de unitate. Proprietatea cheii de a avea o valoare unica pentru fiecare tuplu este o constrangere de integritate a tuplurilor care trebuie respectata de orice stare a relatie in orice moment. O cheie candidata poate fi compusa dintr-un singur atribut, in acest caz numindu-se simpla, sau compusa din mai multe atribute numindu-se compusa. De ex : in relatia angajati (CNP, nume, prenume, salariu) nu se poate desemna ca si cheie submultimea formata din atributele nume, prenume deoarece nu exista nicio garantie ca nu vor exista la un mement dat 2 persoane cu acelasi nume si prenume. O cheie primara este o cheie candidata careia proiectantul ii confera un rol special de accesare si identificare a tuplurilor relatiei. Asupra cheii primare se impun urmatoarele restrictii : - nici o valoare a atributelor cheii primare nu poate fi modificata prin operatii de actualizare a datelor. - nu se admit valori de nul pentru niciunul din atributele cheii primare. O cheie secundara este o cheie candidata care nu a fost desemnata de proiectant drept cheie primara ea putand admite valori de nul daca se respecta conditia de unicitatea valorilor. Alegerea cheii primare din mai multe chei candidate este arbitrara dar in mod obisnuit se alege cheia cu nr cel mai mic de atribute. Doarece conditia de unicitate se refera la fiecare tuplu nou intrus inseamna ca prin introducere noul tuplu va fi comparat cu toate atributele cheilor primare existante. O cheie primara compusa din atributele existente ale ti??? de entitate se numeste cheie naturala. In general cheile naturale sunt compuse din mai multe atribute ceea ce duce la scaderea eficientei bazei de date. In practica de cele mai multe ori se folosesc chei artificiale. De ex : in relatia salariati(nume, prenume, adresa, salariu, departament) putem avea cheia naturala formata din nume, prenume si adresa sau putem introduce o cheie artificiala cum ar fi de exemplu cod angajat. Atributul, cod angajat, este o cheie artificiala prin care se identifica unic fiecare tuplu. In limbajul SQL constrangerea de cheie primara se introduce prin comanda CREATE TABLE, daca cheia primara este simpla se specifica la definirea atributului iar daca este compusa se specifica dupa definirea atributelor ca o constrangere de tabele. Constrangeri intre relatii - cheia straina. Asocierile intre tipurile de entitati def in modelul conceput prin diagrama entitate-asociere se realizeaza modelul relational prin intermediul cheilor straine. De ex : Daca pp relatiile salariati si departamente intre ele existand o asociere de tipul 1 la n putem introduce un atribut suplimentar numit cod sectie care va reprezenta identificatorul sectiei in care lucreaza angajatul respectiv. Vom avea tabelele angajati (cod-angajat, nume, prenume, adresa, salariu, cod dep) si departamente (cod dep, denumire, adresa). In momentul introduceii datelor pentru orice angajat va trebui sa introducem un cod departament care sa existe in tabela departamente. Cheia straina este o submultime de atribute ale unei relatii R1 care prefera relatia R2 si satisface urmatoarele conditii : 1) atributele cheii straine sunt definite pe domenii compatibile cu cele ale atributelor unei chei candidate din relatia R2. 2) combinatia de valori a atributelor cheii straine intr-un tuplu din relatia R1 fie este identica cu combinatia de valori ale atributelor cheii candidate a unui tuplu oarecare din stare curenta a relatie R2, fie ia valoarea NUL. Relatia care contine cheia straina se numeste relatia care refera, iar relatia care contine cheia candidata se numeste relatia referita. Dpdv relational doua domenii sunt compatibile daca ele sunt compatibile semnatic. De ex:campul cod_dep reprezinta pt ambele tabele salariati si departamente un identificator al sectiei, pe de alta parte daca relatia salariati are campurile ( nr crt, nume, prenume, salariu, cod_dep) iar tabela departamente are campurile (nr crt, denumire, adresa) se observa ca atributul nr crt are intelesuri semantice diferite pt cele doua tabele. Pe de o parte, pt tabela salariati reprezinta numarul de salariati, iar pt tabela departamente, numarul current al departamentului. In acest caz, legatura logica intre cele doua tabele se face cu ajutorul campului cod_dep din tabela salariati care trebuie sa coincide cu numarul current din departamente. Cheia straina realizeaza asocierea intre relatiile r1 si r2 reprezentand o constrangere intre doua relatii numita constrangere referentiala. Integritatea refentiala este proprietatea bazei de date care garanteaza ca orice valoare a unei chei straine se regaseste printre valorile cheii candidate corespunzatoare din relatia referita sau cheia straina are valoarea nul. OBSV: numele atributelor care fac legatura intre cele doua relatii nu trebuie sa fie identic. De exemplu tabela salariati ( cod sal, nume, prenume, salariu, cod dep) si tabela departamente (cod departament, denumire, adresa) au ca atribut de lagatura logica cod de psi cod department, desi numele celor doua campuri difera in momentul introducerii datelor valorile introduce in cod_dep din tabela angajati trebuie sa se regaseasca intre valorile campului cod_departament din tabela departamente. MENTINEREA INTEGRITATII REFERENTIALE A DATELOR Operatiile de modificare a starii unei relatii (introducere, stergere si modificare) pot afecta integritatea referentiala a BD daca modificarile se fac intr-o singura relatie, fara a tine cont de referintele cu alte relatii. Opertia de introducere se poate face fara restrictii intr-o relatie referita. In schimb la introducerea unui nou tuplu intr-o relatie care refera trebuie sa se verifice ca relatia referita exista un tuplu care are valorile atributelor cheii referite egale cu valorile atributelor cheii straine a tuplului de introdus. De ex, daca dorim sa introducem o noua inregistrare in tabela departamente, introducerea se face nemijlocit, dar daca dorim sa introducem in tabela angajati un nou angajat, atunci va trebui sa verificam daca valoarea introdusa la cod_dep in tabela salariati se regaseste in una din valorile campului cod_dep din departamente. Operatia de stergere se face fara nicio restrictive intr-o relatie care refera o alta relatie. Intr o relatie referita stergerea unui tuplu poate fi executata in doua moduri: -stergerea restrictionata -stergerea in cascada Stergerea restrictionata interzice stergerea unui tuplu din relatia referita daca acesta este referit de un tuplu din relatia care o refera. Stergerea in cascada permite stergerea unui tuplu din relatia referita daca tuplul sters era referit de unul sau mai multe tupluri atunci se sterg si acestia din relatia care o refera, iar daca tuplurile care trebuiesc sterse sunt la randul lor referite de alte tupluri, atunci trebuie sterse si acestea s.a.m.d. Operatia de actualizare poate fi privita ca o stergere urmata de o introducere, deci restrictiile de actualizare reprezinta combinatia restrictiilor de introducere si stergere. INDEXAREA RELATIILOR Unul dintre avantajele sistemelor de gestiune este ca proiectantul B.D nu trebuie sa cunoasca informatii detaliate despre organizarea datelor.Acest lucru se realizeaza prin independenta datelor. Aceasta independenta a datelor nu este completa astfel incat in momentul actual creatorii B.D trebuia sa ia in considerare influenta modalitatii de stocare a datelor in functionarea diferitelor aplicatii. Astfel, o buna gestionare a datelor poate conduce la scaderea timpilor necesari executiei asupra respectivei bazei de date. Intr-o relatie care este privita ca o colectie de elemente nu sunt admise elemente duplicat. Operatiile de baza ca in orice colectie de elemente sunt: cautarea, inserarea si stergeerea. In timpul unei cautari se face parcurgerea tuturor elementelor pentru a se verifica conditiile impuse. In cazul unei multimi reprezentate printr-o colectie neordonata de elemental timpul de cautare al unui element creste proportional cu un numar de elemente al multimii deoarece in cazul cel mai defavorabil este necesara parcurgerea tuturor elementelor colectiei de date respectiva multime este ordonata. De exemplu, pentru inserarea unui element intr-o multime trebuie cautat mai intai elementul identic interzice introducerea noului element iar daca nu exista, se permite aceasta introducere. Un arbore binar ordonat este un arbore in care eticheta fiecarui mod este mai mare decat etichetele tuturor modurilor subordinate arborului stang si mai mica decat etichetele modurilor subordinate arborului drept. In reprezentarea unei multimi printr-un arbore binar ordonat fiecare element al multimii corespunde unui nod al arborelui iar pozitia nodului in arbore este data de valoarea etichetei elementului. Timpul de cautare , de inserare si stergere a unui element intr-un arbore binar ordonat este proportional cu logaritmul dintre nr. total de elemente al arborului. Un index al unei relatii este o structura auxiliara memorata in bd care permite accesul raportului la inregistrarea relatiilor prin ordonarea acestora. La definirea unei relatii se stabilesc 2 categorii de indexuri: -indexul primar al relatiei : care determina localizarea tuplurilor in fisierele bazei de date -0, 1 sau mai multe indexuri secundare : care nu modifica localizarea tuplurilor dar sunt folosite pentru regasirea tuplurilor pentru un criteriu dat, INDEXUL PRIMAR se defineste pe 1 sau mai multe attribute ale relatiei si reprezinta cheia dupa care ordoneaza tuplurile relatiei. Fiecare SGBD prevede o anumita modalitate de reprezentare a indexului primar. In general este utilizat termenul de eticheta de ordonare pentru a nu fi confundat cu cheia relatiei. Majoritatea SGBD-urilor definesc in mod implicit indexul primar pe cheia primara a relatiei. Operatiile de cautare sau stergere in care specifica valoarea atributlui index primar se executa efficient prin calcularea in primul rand a grupului caruia ii apartine tuplul prin aplicarea unei functiide dispersie asupra valorii atributului index. Procesul continua cu cautarea pozitiei tuplului in lista inlantuita corespunzatoare grupului. Daca intr-o operatie de cautare sau stergere nu se specifica valoarea atributului index primar atunci cautarea unui anumit tuplu presupune parcugurea tuturor listelor si tuturor grupurilor in cazul cel mai nefavorabil al tabelei de dispersie. Situatia cea mai nefavorabila este aceea in care tuplul cu val Popescu Alin este ultimul tuplu al relatiei iar pentru stergeerea lui este necesara parcurgerea tuturor elementelor. INDEXURILE SECUNDARE : Un index secundar pe un atribut A al unei relatii este o structura care contine o multime de perechi de forma (V,L) ordonate dupa V fiecare pereche corespunzatoare unui tuplu al relatiei, V fiind valoarea atributului A iar L este adresa tuplului in structura indexului primar al relatiei. SECURITATEA SI PROTECTIA BD Securitatea si protectia prezinta 2 aspecte fundamentale pe de o parte aspecte etice si legale privind drepturilor de acces in anumite informatii si pe de alta parte elemente legate de organizarea sistemelor informatice d.p.d.v al posibilitatilor de acces la datele stocate. Unele informatii stocate in bd au un caracter strict privat si nu pot fi accesate de persoane neautorizate. Diferite reglementari guvernamentale sau legi stabilesc ce informatii privind activitatea persoanelor sau institutiilor pot fi facute publice si in ce conditii in SGBD-urile cu utilizatori multiplii sist trebuie sa prevada tehnici care sa specifice dr de acces ale utilizatorilor la obiectivele bd, sa verifice si sa impuna respectarea acestor drepturi. Aceste sarcini revin unei componente continuate in majoritatea SGBD-urilor numit SUBSISTEMUL DE AUTORIZARE. Se permite acordarea/ revocarea drepturilor diferitelor grupuri de utilizatori ale bazei de date astfel incat acestia sa poata accesa doar acele informatii la care au dreptul. Din punct de vedere al implementarii subsistemului de autorizare in diferite SGBD-uri obervam mari diferente, elementele de baza fiind insa aceeleasi. O tehnica des utilizata de protectie a datelor este criptarea datelor prin care datele importante sunt codate folosind diferiti algoritmi de codare in momentul in care sunt transmise prin intermediul retelelor de comunicatie. Interceptarea datelor criptate este deosebit de dificila dar nu imposibila daca nu este cunoscuta cheia de codare. In felul acesta, informatia poate fi decripsata si interpretata doar de cei care detin cheia de decriptare. In principiu conectarea la o bd se realizeaza printr-o procedura de nume utilizator+parola prin care se face autentificarea utilizatorului. Conectarea unui utilizator al unei bd nu este suficienta pentru ca acel utilizator sa beneficieze de date functionaliste oferite de respectivul SGBD ci el poate beneficia doar de acele drepturi care i-au fost conferite de administratorul bazei de date. In cele mai multe SGBD-uri exista 2 niveluri de autorizare : nivelul contului si nivelul relatiilor. 1)La nivelul contului se pot specifica drepturile generale pe care le are utilizatorul respective independent de relatiile existente in baza de date. Astfel de drepturi sunt CREATE TABLE pentru crearea relatiilor, CREATE VIEW pentru crearea interogarilor ALTER TABLE pentru adaugarea sau stergerea atributelor din relatii, DROP pentru stergerea relatiei, INSERT , SELECT, UPDATE, DELETE pentru operatii la nivelelul datelor. 2)Nivelul relatiilor se aplica fiecarei relatii sau vederi. In acest caz se specifica ce operatii poate efectua un anumit utilizator asupra relatiei respective. In unele SGBD-uri cele 2 niveluri nu sunt diferentiale ceea ce creaza o dificultate sporita in coordonarea drepturilor de acces. TRANSPUNEREA MODELULUI ENTITATE-ASOCIERE IN MODELE RELATIONALE Schema conceptuala de nivel inalt a unei bd reprezentata printr-o diagrama entitate-asociere poate fi transpusa in schema conceptuala specifica oricarui model de date(ierarhic,retea,rational,orientat obiect, obiect relational). In transpunerea unei scheme conceptual de nivel inalt in schema conceptuala pentru modelul de date rational tipurile de entitati devin relatii iar asocierile dintre tupurile de entitati devin constrangeri interrelatii ce se realizeaza prin intermediul cheilor straine. Pentru transpunerea modelului entitate-asociere in model relational se parcurg in principal 2 etape: -proiectarea relatiilor corespunzatoare multimilor de entitati din diagrama entitate-asociere -proiectarea asocierilor ce se reprezinta prin chei straine sau prin relatii de asociere Proiectarea relatiilor: multimile de entitati puternice din diagrama entitate-asociere devin relatii cu atributele date de atributele entitatilor. Numele fiecarei relatii trebuie sa fie unic intr-o bd iar numele unui atribut trebuie sa fie unic in cadrul unei relatii. Pot exista insa attribute cu aceelasi nume in relatii diferite. In relatiile corespunzatoare multimilor de entitati puternice cheia primara se defineste ca o cheie naturala, adica ca o combinatie de attribute ce identifica unic fiecare tuplu al relatiei, fie ca o cheie artificiala. De obicei se utilizeaza chei primare artificiale cum ar fi cod angajat, cod sectie, cod componenta, cod produsCheia primara a relatiei dependente poate fi formata dintr-o combinatie dintre atributul cheii straine si alte attribute care asigura posibilitatea de identificare unica a unui tuplu sau poate fi o cheie artificiala. Multimile de entitati care sunt subtipuri ale unui tip de entitate dat devin relatii aflate in asociere 1:1 cu relatiile corespunzatoare multimii de entitati a tipului respective/ super tipului. Pentru a realize aceasta asociere in relatiile corespunzatoare supertipului se defineste ca o cheie straina care refuza cheia primara din relatia corespunzatoare supertipului de entitate. Proiectarea asocierilor: asocierea binara de tipul N:1 dintre 2 multimi de entitati puternice din diagrama entitate- asociere se realizeaza in modelul rational prin intermediul unei chei straine in prima rol( cea cu multiplicitatea N) cea care refera cheia primara din din relatia referita. Asocierea M:N se realizeaza modelul rational prin intermediul unei noi relatii numita relatie de asociere. Aceasta relatie se afla in asociere M:1 si N:1 cu fiecare din cele 2 relatii date. De exemplu pentru a prezenta asocierea dintre produse si componentele intre care exista o asociere M:N este necesara introducerea unei noi relatii numita compozitii care contine cheile straine cod comp si cod produs ce refera cheile primare cu aceelasi numedin relatiile componentei si produse. Asocierea binara 1:1 intre 2 multimi de entitati puternice se poate transpune in modelul rational in 2 moduri: fie prin intermediul unei chei straine fiind un caz particular 1-N fie printr-o relatie de asociere M:N . Asocierea multipla M-N-P se realizeaza asemanator asocierii binare prin intermediul unei noi relatii care se afla in asociere M-1 si P-1 cu fiecare din relatiile date. De exemplu relatia achizitii realizeaza asocierea dintre comp furnizori si angajati continand 3 chei straine cod comp, cod furnizori si cod angajati. NORMALIZARE. FORME NORMALE La proiectarea bazelor de date rationale se stabilesc entitatile din realitatea moderata. Modul in care se pot stabili entitatile unei bd nu este unic si de aceea este necesar sa existe criterii de evaluare a calitatii entitatilor astefel incat acestea sa asigure integritatea datelor. Procesul de normalizare a fost propus de E.F.CODD in 1970 urmarind executia asupra unei tabele a unor serii de teste pentru a studia aparentele la forma normalaCODD a propus 3 forme normale ce au fost preluate apoi de BOYCE dezvoltand forma normala boyce CODD. Normalizarea datelor poate fi privita ca un process in timpul caruia schemele de tabela nesatisfacatoare sunt descompuse prin impartirea atributelor in mai multe tabele cu attribute mai putine si care poseda propritatile dorite. Obiectivele procesului de normalizare constau in asigurarea faptului ca tabela poseda o buna arhitectura oferind posibilitatea de modificare prin eliminarea anomalilor ce pot aparea. Forma normala ofera proiectantului B.D. : 1)Un schelet formal pentru analiza relatiilor bazat pe chei sip e dependenta dunctionala dintre attribute. 2)Ofera o serie de teste ce pot elimina tabelele individuale astfel incat baza de date relationala poate fi normalizata in orice grad. Forma normala de ordinul 1 : Aceasta forma normala este considerate ca fiind parte a definitiei formale a unei tabele. Ea nu permite attribute cu mai multe valori, attribute compuse sau combinatii ale lor. Aceasta stabileste ca domeniul atributelor trebuie sa contina numai valori atomice, iar valoarea oricarui atribut intr-un tuplu este o valoare unica in domeniul atributului respective. Deci forma normala 1 nu permite un set de valori sau imbinatia acestora ca valoare a unui atribut pentru un tuplu. Cu alte cuvinte forma normala 1 nu permite tabele in tabele sau tabele ca attribute ale tuplurilor. Valorile admise de forma normala 1 sunt atomice sau invizibile pentru un domeniu specificat de valori. Forma normala de ordinul 2 : Cea de-a doua forma normala impune ca fiecare atribut sa fie dependent de fiecare parte a cheii principale. Mai exact, o tabela indeplineste forma normala 2 daca ea indeplineste forma normala 1 si contine numai attribute care dau informatii despre cheia tabelei. De exemplu, daca tabela discipline ar contine campurile cod_disciplina, den, an, professor, nume_student, nota, data notei, tabela nu ar fi in forma normala 2 pentru ca campurile nume student , nota, data notei nu apartin de cheia primara.Pentru a adduce tabela in forma normala 2 este necesara crearea a doua tabele suplimentare studenti si note. Cele 3 tabele vor avea structura discipline(cod_disciplina, den , an, professor) studenti( cod_matricol, nume_student, adresa, email), note( nota, data, cod_student, cod_materie) Forma normala de ordinal 3: Pentru a ajunge la aceasta forma , tabela trebuie sa fie deja in prima si a 2 forma normala si in plus toate campurile non-primare sa depinda numai de campuri primare, De exemplu, pentru tabela studenti daca avem ca atribut in tabela data nasterii nu mai este necesar un camp suplimentar numit varsta. Forma de ordinul BOYCE-CODD: Este o forma stricta normala de gradul 3 intelegand prin asta ca orice tabela in forma normala BOYCE-CODD este sa fie in forma normala 3, viceversa nefiind neaparat adevarat. Cele 2 forme normale sunt asemanatoare, ambele punand conditia ca atributul care determina functionand alte attribute sa fie o cheie a tabelei. Forma normala BOYCE-CODD este mai restrictica decat forma normala 3 deoarece in forma normala BOYCE-CODD se introduce aceasta conditie tututror atributelor atat primare cat si neprime, pe cand in forma normala 3 conditia sa impuna doar atributele neprime. Atributele prime sunt atributele care apartin unei chei, iar celelalte se numesc attribute neprime. Orice tabela formata din 2 atribute este in forma normala boyce-codd , in forma normala 2 si in forma normala 3. Aceasta tabela compusa din 2 atribute este in forma normala 2 deoarece fie cheia este formata din ambele attribute si atunci nu exista attribute neprime, fie cheia este formata dintr-unul dintre attribute ,iar dependenta functionala a celuilalt atribut fata de cheie este totala. Aceasta tabela din 2 atribute este in forma normala 3 deoarece este in forma normala 2 si nu poate exista nici un atribut neprim care sa determine functional un alt atribut neprim pentru ca o tabela cu 2 campuri poate avea cel mult un atribut neprim. DEPOZITE DE DATE Depozitele de date si intrumentele de tip OLLAP (online analytical procesal) sunt bazate pe modele de date multidimensionale. Aceste modele vizualizeaza datele sub forma unui cub n-dimensional. Cubul de date permite modelarea si vizualizarea datelor in dimensiuni multiple, el este definit prin dimensiuni si fapte. Dimensiunile exprima perspectivele in care o anumita organizatie doreste sa pastreze inregistrarea privitoare la tranzactiile desfasurate. STELE, FULGI DE ZAPADA SI CONSTELATII DE FAPTE Modelul entitate-asociere este utilizat frecvent in proiectarea bd relationale. Schema bd consta intr-un set de antitati precum si relatiile dintre acestea. Ca model de date acesta este corespunzator reprezentarii online a tranzactiilor. Totusi depozitele de date necesita o schema concise, orientate pe subiecte care faciliteaza analiza online a datelor. Cel mai popular model pentru depozitele de date este modelul multidimensional. Acesta poate fi in forma de STEA/ FULG DE ZAPADA/ CONSTELATIE. 1)Schema STEA : reprezinta cel mai comun model de date in care depozitul de date contine o tabela centrala de mari dimensiuni precum si un set de tabele insotitoare numite tabele dimensiune pentru fiecare dimensiune in parte. Graful asociat seamana cu o stea in care tabelele dimensiune sunt afisate in jurul tabelului central de fapte. 2)Schema FULG DE ZAPADA : este o varianta a modelului stea unde o parte din tabelele dimensiune sunt normalizate. Din acest motiv datele sunt impartite in tabele suplimentare, de aici rezulta o schema reprezentata printr-un graf similar unui fulg de zapada. Diferenta majora dintre modelul stea si fulg de zapada este ca tabelele dimensiune din modelul fulg de zapada pot fi pastrate in forma normalizata ceea ce determina o redundanta scazuta. Utilizarea acestui model face ca tabelele sa fie usor de intretinut economisind si spatial de stocare desi aceasta economie de spatiu este neglijata in comparative cu volumul foarte mare de date din tabela de fapte. Practic modelul fulg de zapada este mai putin raspandit decat cel stea in proiectarea modelelor de date. 3)Schema CONSTELATIE DE FAPTE : Aplicatiile sophisticate pot solicita tabele multiple care partajeaza tabelele dimensiune. Acest gen de schema poate fi vazuta ca o colectie de stele, de aici reiesind si denumirea de schema GALAXIE sau CONSTELATIE DE FAPTE. Aceasta schema este des utilizata pentru depozitele de date, de obicei pentru activitati cum ar fi gestiunea clientilor, a produselor, a personalului.