CATEGORII DOCUMENTE |
Deseori bazele de date se confunda cu foile de calcul tabelar datorita structurii lor relativ asemanatoare. Exista insa o mare diferenta intre aceste doua categorii de aplicatii, diferenta pe care vom incerca sa o clarificam in cele ce urmeaza.
Probabil ca aplicatiile folosite cel mai frecvent de catre specialistii din domeniul stiintelor socio-umane sunt aplicatiile de baze de date care corespund perfect necesarului de stocare, reactualizare si regasire a informatiilor referitoare la subiecti. De aceea vom aborda detaliat elementele definitorii ale proiectarii si gestionarii eficiente a bazelor de date.
La un nivel de maxima generalitate, bazele de date sunt baze de date locale, in care fisierul ce contine informatiile se gaseste pe masina utilizatorului si servere de baze de date care asigura accesul la datele aflate la distanta de masina utilizatorului, pe computere speciale si in general dedicate acestui scop.
Primele sisteme de baze de date au fost sistemele bazate pe fisiere. Acestea au reprezentat o colectie de programe aplicatie care efectueaza servicii pentru utilizatorii finali cum ar fi producerea de rapoarte. Fiecare program definea si gestiona propriile sale date. Acest tip de stocare a datelor a constituit o incercare de a computeriza sistemul de indosariere manual. Acest sistem de gestionare avea insa o serie de limitari serioase pentru care s-a si renuntat la el destul de repede. In primul rand, datele fiind izolate in fisiere separate, cele care trebuiau sa fie imediat disponibile erau greu de accesat. Era necesara sincronizarea preluarii a cel putin doua fisiere pentru a se asigura corectitudinea datelor. Apoi, abordarea descentralizata a determinat dublarea necontrolata a datelor care ducea la risipa de spatiu, fisiere de mari dimensiuni si cel mai important la alterarea integritatii informatiilor. Dependenta de date a programelor si incompatibilitatea fisierelor de date facea aproape imposibila portabilitatea si se constituia intr-o alta limita majora a acestui sistem.
Toate aceste limitari se datorau faptului ca definitia datelor este incorporata in programele aplicatie in loc sa fie stocata independent si nu exista nici un control asupra accesului si manipularii datelor dincolo de cel impus de programele aplicatie.
Astfel au aparut bazele de date si sistemul de gestionare al bazelor de date (SGBD). Bazele de date reprezinta o colectie partajata de date, intre care exista relatii logice si o descriere a acestora, proiectata pentru a satisface necesitatile informationale ale unei organizatii. Prin urmare, datele se constituie intr-un depozit unic, definit o singura data si utilizat in comun de mai multe persoane. Relatiile logice presupun identificarea entitatilor, atributelor si a relatiilor la care se refera necesitatile informationale ale unei organizatii.
O entitate este un obiect distinct (persoana, loc, lucru, eveniment) din organizatie care trebuie reprezentat in baza de date. Atributul reprezinta o proprietate care descrie un aspect oarecare al obiectului pe care dorim sa-l reprezentam (spre exemplu inaltimea unei persoane) iar relatia se refera la modul de asociere intre doua sau mai multe entitati (spre exemplu entitatea angajat face parte din entitatea departament. Orice angajat apartine unui departament. Intre angajat si departament s-a stabilit relatia de apartenenta)
Un SGBD reprezinta un sistem de programe care permite utilizatorului definirea, crearea si intretinerea bazei de date precum si accesul controlat la aceasta.
Se observa separarea clara a bazelor de date de aplicatiile care le gestioneaza. Un SGBD permite utilizatorilor sa defineasca baza de date prin intermediul unui limbaj de definire a datelor (DDL), sa insereze, reactualizeze, stearga sau sa extraga date din baza de date folosind un limbaj de manipulare al datelor (DML). Accesul controlat la bazele de date se refera la sistemul de securitate care previne accesarea bazei de date de catre utilizatorii neautorizati, la asigurarea concordantei datelor stocate prin intermediul sistemului de integritate, la accesul partajat la baza de date prin sistemul de control al concurentei si la refacerea bazei de date in cazul unor defectiuni hardware sau software prin sistemul de control al refacerii.
Un mediu SGBD are o serie de componente impartite in doua clase principale: masina si utilizatorul, legatura dintre acestea fiind asigurata de datele propriu-zise.
Masina se refera atat la elementele hardware cat si la cele software. Evident ca pentru a putea rula, orice SGBD are nevoie de unul sau mai multe computere. Totalitatea echipamentelor fizice implicate in functionarea unui SGBD formeaza hardware-ul asociat. Partea software se refera la programele SGBD si la programele aplicatie, impreuna cu sistemul de operare aferent. Cele mai importante sisteme de gestiune a bazelor de date folosite pe computerele locale sunt aplicatiile Microsoft Access, FoxPro si DBase, iar ca servere de baze de date amintim Oracle, MySQL, Sybase sau Microsoft SQL Server.
Utilizatorul sau mai exact partea de utilizare, cuprinde procedurile, instructiunile si regulile care guverneaza proiectarea si utilizarea bazei de date impreuna cu persoanele implicate in sistem si care dobandesc diferite roluri.
Cea mai importanta componenta a unui mediu SGBD o constituie datele care se refera atat la datele operationale cat si la informatiile despre date. Structura unei baze de date se numeste schema si cuprinde entitatile, atributele si relatiile existente intr-o baza de date. La randul lor, schemele bazelor de date se pot constitui intr-un catalog al sistemului care contine date precum: denumirile, tipurile si dimensiunile articolelor de date, denumirile relatiilor, constrangerile de integritate asupra datelor, utilizatorii autorizati care au acces la date, etc. Observam ca toate elementele prezentate mai sus se refera la informatiile despre date ("meta-date") si nu contin nici o referire la datele propriu-zise. Toate aceste aspecte sunt tratate in procesul de proiectare a bazelor de date.
In anul 1982, analizand critic diferite SGBD, Codd a enuntat opt servicii pe care trebuie sa le furnizeze un sistem de gestiune a bazelor de date complet:
Aceasta este functia fundamentala a unui SGBD. Pentru asigurarea acestei functionalitati, sistemul trebuie sa ascunda fata de utilizatorul final detaliile privind implementarea fizica interna a bazei de date.
Un asemenea catalog va contine descrieri ale articolelor de date, precum denumirile, tipurile si dimensiunile articolelor de date, denumirile relatiilor, constrangeri de integritate asupra datelor, numele utilizatorilor autorizati care au acces la date, schemele externe, conceptuale si interne, statistici de utilizare.
Beneficiile catalogului de sistem sunt remarcabile si se refera la faptul ca informatiile despre date pot fi colectate si stocate central contribuind la mentinerea controlului asupra datelor, sensul datelor poate fi definit si inteles mai bine de catre utilizatori, redundanta si incoerentele pot fi mai usor identificare si corectate, modificarile pot fi inregistrare, securitate si integritate sporita, pot fi furnizate informatii de audit.
Un SGBD trebuie sa ofere un mecanism prin care sa garanteze ca sunt efectuate toate reactualizarile corespunzatoare unei tranzactii sau ca nu se efectueaza nici una. O tranzactie nereusita poate aduce baza de date intr-o stare incoerenta. Spre exemplu, in momentul extragerii unei sume de bani dintr-un bancomat pot sa apara o multime de evenimente care sa blocheze tranzactia si sa determine doua situatii posibile: dumneavoastra sa primiti banii iar modificarea sa nu se inregistreze in cont (cazul fericit pentru dumneavoastra) sau modificarea sa se inregistreze in cont dar dumneavoastra sa nu primiti nimic (cazul fericit pentru banca). Un SGBD trebuie sa se asigure ca nu pot sa apara asemenea situatii. Un eveniment neprevazut care ar bloca tranzactia, determina sistemul sa restaureze baza de date la starea de inaintea inceperii tranzactiei.
Un SGBD permite mai multor utilizatori accesul concurent la datele partajate si de aceea acesta trebuie sa furnizeze un mecanism care sa garanteze ca baza de date este corect actualizata si nu apar interferente in momentul in care mai multi utilizatori efectueaza simultan astfel de operatii.
Din diferite motive software sau hardware un SGBD poate sa se blocheze sau sa aduca baza de date intr-o stare incoerenta. In ciuda acestui fapt, SGBD trebuie sa asigure un mecanism de reconstituire a bazei de date in cazul in care aceasta este deteriorata intr-un fel oarecare.
Majoritatea datelor continute in bazele de date utilizate de psihologi au un caracter confidential. Termenul de securitate se refera la protectia bazei de date impotriva accesului neautorizat, fie intentionat, fie accidental. Un SGBD trebuie sa furnizeze un mecanism care va garanta ca numai utilizatorii autorizati pot accesa baza de date sau anumite date din aceasta.
Un SGBD trebuie sa poata fi integrat unui software de comunicatie deoarece majoritatea utilizatorilor acceseaza baza de date la nivelul terminalelor. Acestea pot fi conectate direct la calculatorul ce contine SGBD (cazul bazelor de date locale) sau pot fi situate la mii de kilometri de acesta (cazul serverelor). Utilizatorii trebuie sa poata accesa baza de date centralizata indiferent de locatia acesteia. O astfel de topologie se numeste prelucrare distribuita.
Cuprind mijloacele care asigura ca atat datele din baza de date cat si modificarile acestora respecta anumite reguli. Practic, integritatea bazei de date se refera la corectitudinea si coerenta datelor stocate si are in vedere calitatea acestora. Spre exemplu, constrangerea ca nici un subiect sa nu poata fi examinat in acelasi timp de doi psihologi este o problema de integritate a bazelor de date.
Proiectarea bazelor de date, adica determinarea structurii acestora poate fi un proces extrem de complex caruia ii pot fi dedicate, fara exagerare, mii de pagini. Proiectarea unei baze de date este un proces crucial si determina o schimbare de paradigma prin punerea accentului intai pe date si apoi pe aplicatie. O baza de date prost proiectata va genera erori care pot duce la decizii gresite cu repercusiuni serioase asupra activitatii si asupra institutiei.
O baza de date relationala stocheaza datele in tabele, care amintesc de foile de calcul tabelar, fiecare tabel continand informatii despre un anumit tip de entitate. Aceste tabele se mai numesc si relatii. Elementul definitoriu al unui tabel este coloana, denumita si atribut al unei relatii si care poarta o anumita denumire. O relatie este deci reprezentata printr-un tabel bidimensional in care randurile acestuia corespund inregistrarilor individuale iar coloanele corespund atributelor. Domeniul reprezinta multimea de valori permise pentru unul sau mai multe atribute. Domeniile pot fi definite pentru fiecare atribut sau doua sau mai multe atribute pot fi definite pe acelasi domeniu (spre exemplu, strada "Pacurari" este definita pe domeniul Denumirile_Strazilor). Randurile dintr-un tabel care contin inregistrarile individuale poarta denumirea de tupluri in literatura de specialitate.
O relatie (tabel) este caracterizata prin doua elemente importante: gradul unei relatii ce reprezinta numarul de atribute pe care le contine aceasta (numarul de coloane) iar din acest punct de vedere putem vorbi despre relatii unare, binare, ternare si asa mai departe si de asemenea de cardinalitatea unei relatii care se refera la numarul de tupluri (randuri) aflate intr-o relatie.
Aceste lucruri fiind cunoscute, putem afirma ca o baza de date relationala reprezinta un set de relatii normalizate, adica o baza de date ce contine relatii structurate adecvat prin procesul de normalizare pe care al vom aborda putin mai tarziu.
Din acest punct de vedere, relatiile au o serie de proprietati caracteristice care fundamenteaza matematic acest proces. Astfel:
O relatie are o denumire diferita de toate celelalte denumiri de relatii. In acest fel se asigura unicitatea tabelelor din baza de date. Nu pot exista intr-o baza de date doua tabele (relatii) cu acelasi nume.
Fiecare celula a relatiei contine exact o valoare atomica (singulara). Aceasta valoare este data de tipul atributului si de domeniul caruia ii apartine. Stocarea in aceeasi celula a doua numere de telefon ale unui subiect este ilegala.
Fiecare atribut are o denumire distincta si toate valorile unui atribut apartin aceluiasi domeniu. In coloana ce contine codul numeric personal al unui subiect nu poate, de exemplu, sa existe codul postal al localitatii.
Ordinea atributelor nu are nici o importanta. Practic nu conteaza in ce ordine definim coloanele unei relatii. Acest lucru nu afecteaza in nici un fel performanta si regulile bazei de date.
Fiecare tuplu este distinct si nu exista dubluri ale tuplurilor. Acest lucru elimina problema inregistrarilor multiple din vechile sisteme bazate pe fisiere. Nu exista nici o logica pentru a stoca acelasi subiect de doua ori in relatia care contine datele personale ale subiectului. Aceasta operatiune este atat ilogica cat si ilegala.
Teoretic ordinea tuplurilor nu are nici o importanta. Aici apare o prima diferenta dintre teorie si practica deoarece unele comenzi din limbajul de manipulare al datelor sunt afectate de ordinea inregistrarilor iar din acest punct de vedere eficienta accesarii tuplurilor poate fi diferita.
Dupa cele afirmate mai sus, putem observa ca o inregistrare dintr-un tabel poate fi identificata in mod unic printr-o coloana sau prin mai multe coloane. Astfel, prin supercheie intelegem un atribut sau un set de atribute, care identifica in mod unic un tuplu din interiorul unei relatii. Supercheia sta la baza stabilirii cheii primare, dar inainte de a se realiza acest lucru, proiectantii de baze de date identifica asa-numitele chei candidat - o supercheie pentru care nici o submultime adecvata nu este o supercheie in cadrul relatiei respective. O cheie candidat are deci 2 proprietati: este unica - in fiecare inregistrare (tuplu) din tabel valorile sale identifica unic acel tuplu si este ireductibila - nici o submultime a cheii candidat nu are proprietatea de unicitate. Intr-o relatie pot exista doua sau mai multe chei candidat iar in momentul in care o cheie este construita din doua sau mai multe atribute, aceasta se numeste cheie compusa.
Cheia primara reprezinta cheia candidat selectata pentru a identifica in mod unic tuplurile din cadrul unei relatii. Toate celelalte chei se numesc chei alternative. De exemplu o cheie primara ar putea fi reprezentata de codul numeric al subiectilor, deoarece exista certitudinea ca acesta identifica unic fiecare subiect, iar fiecare subiect are un con numeric personal.
In momentul in care in baza de date exista mai mult de o relatie, se stabilesc si cheile straine care reprezinta un atribut sau o multime de atribute din cadrul unei relatii cale se potrivesc cu cele din cheia candidat a unei alte relatii. Cheile straina asigura practic legatura dintre tabelele unei baze de date. Intelegerea acestora are un rol deosebit de important pentru asimilarea conceptelor de indexare, si integritate relationala.
Orice atribut are un domeniu asociat existand astfel posibilitatea de a implementa anumite constrangeri asupra multimii de valori permise pentru atributele relatiilor. Aceste constrangeri se numesc constrangeri de domeniu. Pe langa acestea exista doua reguli importante de integritate care reprezinta restrictii ce se aplica tuturor instantelor unei baze de date. Acestea sunt cunoscute sub denumirile de integritate a entitatilor, respectiv integritate referentiala.
Integritatea entitatilor afirma ca intr-o relatie de baza, nici un atribut al unei chei primare nu poate fi nul[1]. Daca o cheie primara este un identificator minim utilizat pentru identificarea unica a tuplurilor, este logic sa presupunem ca in mod obligatoriu atributele care intra in componenta cheii primare sa contina valori iar rezultatul combinarii acestora sa fie unic. Este ilegala existenta unei valori nule intr-un atribut ce intra in componenta cheii primare sau existenta unor chei primare duplicat. Spre exemplu, nu poate fi introdus in baza de date un subiect care nu are cod numeric personal, dupa cum nu pot exista doi subiecti diferiti cu acelasi cod numeric personal. Dupa cum am stabilit deja, nu are nici un sens introducerea in baza de date de doua ori a aceluiasi subiect.
Integritatea referentiala afirma ca daca intr-o relatie exista o cheie straina, valoarea acesteia trebuie ori sa coincida cu valoarea unei chei candidat a unui tuplu din relatia sa de baza, ori sa fie in intregime nul. Daca avem doua relatii, una care stocheaza datele personale ale subiectilor si alta care stocheaza rezultatele obtinute la testul Raven, atunci integritatea referentiala spune ca nu poate exista un rezultat la testul Raven care sa identifice un subiect inexistent in tabelul cu datele personale ale subiectilor. Deci orice rezultat stocat trebuie sa aiba un corespondent in tabelul subiectilor. Nu este insa obligatoriu ca orice subiect sa aiba o examinare facuta cu testul Raven. In definitiv nu suntem obligati sa examinam toti subiectii cu testele pe care le avem iar integritatea referentiala nici nu ne solicita acest lucru.
Aceste doua reguli reprezinta reguli esentiale si obligatorii pentru orice baza de date. Proiectantii pot insa pot specifica si alte reguli aditionale numite constrangeri de intreprindere in functie de necesitatile punctuale. Spre exemplu se poate limita domeniul de valori al varstei subiectilor intre 0 si 100 de ani care sa accepte doar date de timp intreg.
Orice proiectare a bazelor de date incepe in mod firesc cu un inventar al datelor necesare si al domeniului de valori pe care acestea le pot lua. Nu trebuie sa avem tendinta de a pune toate aceste date intr-un singur tabel deoarece pot exista cazuri particulare cara sa incalce regulile de integritate sau regulile generale ale bazelor de date. Procesul de normalizare reprezinta o tehnica de realizare a unui set de relatii cu proprietati dezirabile in functie de cerintele institutiei. Sa nu uitam ca bazele de date relationale deriva din teoria multimilor iar majoritatea legilor aplicabile multimilor se regasesc si aici. Normalizarea este deci o metoda formala care identifica relatiile bazandu-se pe cheile primare sau pe cheile candidat ale acestora si pe dependentele functionale ale atributelor lor. Prin aceasta se asigura evitarea redundantei datelor si a anomaliilor de reactualizare.
Normalizarea se prezinta ca o serie de pasi iar fiecare pas corespunde unei anumite forma normale cu proprietati cunoscute. Pe masura desfasurarii normalizarii, relatiile devin mai restrictive ca format si mai putin vulnerabile fata de anomaliile de actualizare. Prima forma normala este obligatorie si de importanta critica. Toate celelalte sun optionale, insa abordarea lor duce la elaborarea de relatii mai puternice in cadrul bazei de date.
Un tabel nenormalizat contine unul sau mai multe grupuri repetitive. Prima forma normala afirma ca o relatie in care intersectia fiecarui rand cu fiecare coloana contine o singura valoare si numai una se afla in prima forma normala.
Tehnic, se procedeaza prin introducerea datelor inventariate intr-un tabel nenormalizat. Pentru a transforma acest tabel in prima forma normala se identifica si se elimina grupurile repetitive din cadrul acestuia, adica a atributelor din cadrul unui tabel care apar cu valori multiple pentru o singura aparitie a cheii nominalizate al acestui tabel. Astfel se nominalizeaza un atribut sau un grup de atribute ca o cheie a tabelului nenormalizat dupa care se elimina grupurile repetitive prin plasarea datelor care se repeta, impreuna cu cheia initiala, intr-o relatie separata. Un set de relatii se afla in prima forma normala daca nu contin grupuri repetitive.
Se bazeaza pe conceptul de dependenta functionala si se aplica relatiilor cu chei compuse, adica relatiilor cu o cheie primara compusa din doua sau mai multe atribute. A doua forma normala ilustreaza o relatie care se afla in prima forma normala si in care fiecare atribut care nu este cheie primara este total dependent functional de cheia primara.
Orice dependenta partiala intalnita va fi eliminata din relatia respectiva si plasata intr-o noua relatie.
Are la baza conceptul de dependenta tranzitiva., adica, daca atributul A al unei relatii implica atributul B iar atributul B implica atributul C, atunci atributul C este dependent tranzitiv de A prin intermediul lui B cu conditia ca A sa nu fir dependent functional de B sau C. O relatie se afla in forma a treia normala daca se afla in prima si a doua forma normala si in care nici un atribut care nu este cheie primara nu este dependent tranzitiv de cheia primara.
Daca exista o dependenta tranzitiva atributul va fi plasat intr-o noua relatie impreuna cu o copie a determinantilor.
Alaturi de aceste trei forme pe cere le consideram esentiala in proiectarea bazelor de date, exista forma normala Boyce-Codd si inca doua forme normale care contribuie la crearea bazelor de date puternice. Consideram insa ca prezentarea acestora nu este reprezentativa pentru scopul cursului iar cititorii interesati pot parcurge bibliografia recomandata pentru detalii suplimentare.
Dupa cum observati, proiectarea unei baze de date eficiente nu este un proces nici simplu si nici lipsit de importanta. O baza de date care respecta cel putin primele trei forme normale duce la siguranta in exploatare, evitarea anomaliilor de reactualizare si economie de spatiu. In continuare vom aborda un exemplu de proiectare a unei baze de date specific domeniului psihologic.
Sa presupunem ca dorim sa construim o baza de date care sa stocheze rezultatele subiectilor examinati cu doua probe psihologice: Raven si 16PF. In acelasi timp, in institutia in care activam lucreaza trei psihologi si fiecare dintre acestia poate efectua examinari psihologice. Ne intereseaza sa stim si care psiholog a examinat subiectul. Primul pas consta in inventarierea necesarului de date. Astfel, avem:
codul numeric al subiectului, numele si prenumele, varsta, sexul, adresa.
codul psihologului, numele psihologului, adresa, telefonul
codul testului administrat, data administrarii, forma testului, nota bruta si nota standard.
Mai intai vom transforma in format de tabel cateva exemple de date extrase din protocoalele de examinare. Acest tabel poarta denumirea de tabel nenormalizat.
CodS |
NumeS |
AniS |
SexS |
AdrS |
CodP |
NumeP |
AdrP |
TelP |
CodT |
DataT |
FormaT |
NBT |
NST |
Ionescu |
M |
Independentei, Nr. 8 |
Marin |
Pacurari, Nr. 1 |
Raven |
A | |||||||
Vasile |
Pacurari, Nr. 2 |
16PF |
|
B | |||||||||
Marin |
Pacurari, Nr. 1 |
Raven |
B | ||||||||||
Vasilescu |
F |
Toma Cozma, Nr. 16 |
Vasile |
Pacurari, Nr. 2 |
Raven |
A | |||||||
Marin |
Pacurari, Nr. 1 |
16PF |
B |
Atributul cheie al acestui tabel nenormalizat este codul subiectului, cod care identifica unic fiecare subiect in parte. Grupul repetitiv din acest tabel cuprinde date referitoare la psihologii examinatori si la testele administrate. In acest fel, grupul repetitiv este caracterizat prin:
GR = (CodP, NumeP, AdrP, TelP, CodT, DataT, FormaT, NBT, NST)
La intersectia anumitor coloane cu anumite randuri apar deci valori multiple care incalca prima forma normala. In conformitate cu metodologia de lucru, eliminam grupul repetitiv prin introducerea detaliilor referitoare la subiecti, rezultand tabelul urmator:
CodS |
NumeS |
AniS |
SexS |
AdrS |
CodP |
NumeP |
AdrP |
TelP |
CodT |
DataT |
FormaT |
NBT |
NST |
Ionescu |
M |
Independentei, Nr. 8 |
Marin |
Pacurari, Nr. 1 |
Raven |
A | |||||||
Ionescu |
M |
Independentei, Nr. 8 |
Vasile |
Pacurari, Nr. 2 |
16PF |
B | |||||||
Ionescu |
M |
Independentei, Nr. 8 |
Marin |
Pacurari, Nr. 1 |
Raven |
B | |||||||
Vasilescu |
F |
Toma Cozma, Nr. 16 |
Vasile |
Pacurari, Nr. 2 |
Raven |
A | |||||||
Vasilescu |
F |
Toma Cozma, Nr. 16 |
Marin |
Pacurari, Nr. 1 |
16PF |
B |
In acest tabel, cheia primara o putem identifica drept codul subiectului (CodS). Acum tabelul nostru se afla in prima forma normala deoarece la intersectia dintre fiecare coloana si rand exista cate o singura valoare. Relatia contine date care descriu subiectii, psihologii si testele administrate, informatiile fiind repetate de mai multe ori. Daca aceasta relatie ar fi implementata in aceasta forma, ar fi expusa anomaliilor de actualizare. Este necesara deci transformarea in cea de-a doua forma normala.
Aceasta transformare presupune eliminarea dependentelor partiale de cheia primara. Dar sa vedem intai care sunt aceste dependente si care ar putea fi cheile. O cheie candidat este CodS, atribut care identifica unic fiecare subiect. Insa fiecare subiect poate fi examinat de catre unul sau mai multi psihologi identificati printr-un cod propriu. Deci CodP ar fi o cheie candidat care identifica psihologii. In acelasi timp, subiectii sunt examinati cu probe psihologice identificate prin atributul CodT. Totusi nu putem permite ca un subiect sa fie examinat de doua ori in aceeasi zi cu aceeasi forma a probei. Noua cheie candidat devine astfel o cheie compusa formata din atributele CodT, DataT si FormaT. Avem deci 3 chei candidat corespunzatoare celor trei domenii din baza de date: subiectii, testele si psihologii. In continuare sa analizam dependentele functionale:
Numele subiectului, varsta, sexul si adresa subiectului depind functional de codul acestuia. Adresa totusi constituie o dependenta partiala. La o analiza mai atenta putem constata ca un subiect poate avea doua sau mai multe adrese, situatie in care am incalca a doua forma normala (subiectii cu vize de flotant spre exemplu).
Numele psihologului, adresa acestuia si telefonul sunt atribute care depind functional doar de codul psihologului. Vom considera aici AdresaP ca fiind adresa institutiei pentru a nu mai include inca o dependenta partiala.
Un test este identificat unic nu prin codul sau, cum s-ar putea crede ci prin cod si forma de administrare, deoarece un test cu acelasi cod poate avea forme diferite de administrare. Totusi am spus ceva mai devreme ca nu dorim sa permitem examinarea de doua ori in decursul aceleasi zile cu aceeasi forma a probei. Cheia in acest caz este cheia compusa din atributele CodT, DataT si FormaT, cheie care asigura unicitatea fiecarei examinari. De aceasta cheie depind functional atributele NBT si NST.
Am identificat pana acum trei dependente functionale absolute si o dependenta functionala partiala. In conformitate cu regula celei de-a doua forme normale, trebuie create patru relatii care sa reflecte aceste elemente. Desigur, aceste noi relatii vor fi create incluzand si copiile dupa cheile candidat.
Prin urmare, relatia Subiecti devine:
CodS |
NumeS |
AniS |
SexS |
Ionescu |
M |
||
Vasilescu |
F |
In acest fel, tabelul stocheaza doar atributele strict dependente functional de cheia primara CodS. S-a eliminat astfel redundanta datelor si posibilitatea de aparitie a anomaliilor de reactualizare. Fiecare linie din tabel identifica in mod unic un subiect, impreuna cu datele sale personale si nu sunt permise inregistrari duplicat. Acest tabel se afla acum in cea de-a doua forma normala. In realitate, prezentand aceasta structura, tabelul se afla in toate formele normale.
Dependenta partiala a adreselor de codul subiectilor se rezolva prin crearea unei noi relatii denumita Subiecti_Adrese si care devine:
CodS |
AdrS |
Independentei, Nr. 8 |
|
Copou, Nr. 3 |
|
Toma Cozma, Nr. 16 |
Am inclus astfel o noua adresa pentru subiectul 1254 (Ionescu) pentru a ilustra situatia in care o persoana are doua adrese. S-a evitat din nou redundanta, fiecare subiect putand avea un numar nelimitat de adrese, fara a aparea duplicate iar fiecare adresa corespunde unui anumit subiect. In acest caz, legatura dintre cele doua relatii poarta numele de relatie "unu la multi". Prin implementarea integritatii referentiale, daca stergem de exemplu subiectul 1254, sistemul va sterge automat si cele doua adrese asociate. Nu exista asadar riscul de incoerenta a bazei de date prin posibilitatea de a ramane o adresa care sa nu fie asociata unui subiect. Mecanismele interne ale SGBD elimina aceasta varianta.
Relatia care stocheaza datele psihologilor, in urma aplicarii celei de-a doua forme normale devine:
CodP |
NumeP |
AdrP |
TelP |
Marin |
Pacurari, Nr. 1 | ||
Vasile |
Pacurari, Nr. 2 |
Lucrurile ar fi foarte simple daca am pastra unicitatea relatiei subiect-examinator. Totusi in acest exemplu noi am permis ca un subiect sa poata fi examinat de mai multi psihologi. Desi tabelul psihologilor respecta acum cea de-a doua forma normala, daca am include atributul CodS pentru a lega psihologii de subiecti, ar apare inregistrari duplicat in tabelul psihologilor care determina incalcarea celei de-a doua forme normale. La fel ar sta lucrurile daca am introduce atributul CodP in tabelul subiectilor. Intuim deja despre ce fel de dependenta vorbim. Intr-adevar, atributul CodP depinde atat de relatia subiectilor cat si de cea a testelor. La un moment dat, un subiect este examinat cu o proba psihologica de catre un psiholog. Este o dependenta tranzitiva pe care o vom rezolva prin cea de-a treia forma normala. In acest moment, relatia Psihologi respecta toate formele normale.
Relatia Teste, folosind cheia primara CodS, CodT, DataT si FormaT devine:
CodS |
TelP |
CodT |
DataT |
FormaT |
NBT |
NST |
|
Raven |
A | ||||
16PF |
B | |||||
Raven |
B | |||||
Raven |
A | |||||
16PF |
B |
Observam ca aceasta cheie asigura unicitatea fiecarei inregistrari. Un subiect nu poate fi examinat intr-o zi decat o singura data cu aceeasi forma a unei probe psihologice. La fel ca in cazul precedent, aceasta relatie identifica doar testele administrate unui subiect, nu si psihologul care le-a administrat. Pentru a putea realiza acest lucru este necesar sa abordam cea de-a treia forma normala.
CodS |
CodP |
CodT |
FormaT |
Raven |
A |
||
16PF |
B |
||
Raven |
B |
||
Raven |
A |
||
16PF |
B |
Ne amintim ca o relatie se afla in a treia forma normala daca indeplineste conditiile din prima si a doua forma normala. Toate relatiile de mai sus indeplinesc aceasta conditie, insa a ramas o problema nerezolvata. Cum asociem psihologii unui subiect. Orice am face folosind primele doua forme normale, cel putin un tabel va incalca regula non-redundantei si va determina aparitia de anomalii la reactualizare. A treia forma normala ne spune insa ca daca exista vreo dependenta tranzitiva, aceasta va fi plasata intr-o noua relatie. Prin urmare va trebui sa cream o noua relatie care sa rezolve dependenta tranzitiva aparuta. Un subiect poate fi examinat psihologic de mai multi specialisti care pot administra mai multe probe psihologice. Ramane sa identificam cheia care caracterizeaza unic fiecare tuplu din aceasta noua relatie pe care o vom numi Subiecti_Psihologi_Teste. Subiectul este identificat prin CodS iar psihologul prin CodP. Asigura o cheie compusa din aceste doua atribute unicitatea tuplului? Nu, deoarece ar explica doar faptul ca un subiect este asociat unui psiholog, fara a referi in nici un fel testele. Care este insa cheia ce caracterizeaza unic un test? Ne amintim ca era vorba despre cheia compusa din CodT si FormaT. O cheie primara formata din atributele CodS, CodP, CodT si FormaT caracterizeaza un subiect caruia un psiholog ii administreaza o anumita forma a uni test. Este ceea ce ne intereseaza? De data aceasta raspunsul este pozitiv, chiar daca ati putea sesiza faptul ca nu am inclus data examinarii. Noua relatie trebuie sa stabileasca o legatura intre psiholog, subiect si teste. Unicitatea examinarilor a fost deja stabilita in relatia anterioara. Prin urmare, noul nostru tabel devine:
Acesta se numeste tabel de legatura si rezolva problema asocierii dintre un psiholog, un test si un subiect. Prin urmare, un subiect este examinat de un anumit psiholog cu o forma a unui test psihologic. Daca am fi introdus data examinarii in acest tabel am fi asigurat inregistrari unice. Nu ne intereseaza insa acest lucru deoarece tabelul nu face decat legatura dintre cele trei domenii principale. Duplicatele sunt eliminate prin insasi structura bazei de date. Ne intereseaza sa stim de cine a fost aplicat testul si nu cand.
Prin acest procedeu am reusit sa realizam o baza de date care respecta toate cele trei forme normale si sa implementam integritatea acesteia.
Care sunt caracteristicile unei baze de date relationale?
Ce intelegeti printr-un SGBD?
Care sunt functiile principale ale unui SGBD?
Care sunt proprietatile caracteristice ale unei relatii?
Ce sunt cheile primare?
Explicati caracteristicile celei de-a treia forme normale?
TEMA: Imaginati o baza de date utilizabila in domeniul dumneavoastra de activitate si normalizati-o folosind cele trei forme normale.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1704
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved