curs numarul 3 - baze de date

19
1 PROIECTAREA BAZELOR DE DATE RELAŢIONALE 3.1. Preliminarii Modelul relaţional a fost conceput şi dezvoltat de E.F. Codd. El este un model formal de organizare conceptuală a datelor, destinat reprezentării legăturilor dintre date, bazat pe teoria matematică a relaţiilor. Este modelul cel mai accesibil pentru utilizatorul bazei de date deoarece structura sa fizică este aceeaşi cu cea a datelor care trebuie prelucrate. În general, datele se prezintă sub forma unor tabele (relaţii) în care liniile constituie înregistrări, iar coloanele sunt atribute ce caracterizează aceste înregistrări. Obiectivele modelului relaţional, considerate de către E.F. Codd, sunt următoarele: să permită un grad înalt de independenţă a datelor; să furnizeze baze solide pentru tratarea semanticii, coerenţei şi problemelor de redundanţă a datelor; să permită dezvoltarea limbajelor de prelucrare a datelor. Modelul relaţional a permis introducerea unor limbaje neprocedurale de prelucrare a datelor. Modelul relaţional nu este orientat spre sistemul de calcul, deci modelul nu include regulile, structurile şi operaţiile referitoare la implementarea fizică a unui sistem de baze de date. De fapt, unul dintre obiectivele modelului este acela de a face o distincţie între aspectele fizice şi logice ale unei baze de date (independenţa datelor). Definirea unui SGBD relaţional impune analizarea caracteristicilor pe care trebuie să le prezinte un model de date pentru a fi considerat relaţional. Există diferite modalităţi pentru a defini acest concept : prezentarea datelor în tabele supuse anumitor operaţii de tip proiecţie, selecţie, reuniune, compunere, intersecţie etc. (definiţie simplă); un sistem de baze de date ce suportă un limbaj de tip SQL Structured Query Language (definiţie practică); un sistem de baze de date care respectă principiile modelului relaţional introdus de E.F. Codd (definiţia folosită cel mai frecvent).

Upload: bagzylove

Post on 15-Jan-2016

11 views

Category:

Documents


0 download

DESCRIPTION

Al treilea curs din disciplina Baze de date la specializarea Informatica.

TRANSCRIPT

Page 1: Curs numarul 3 - Baze de date

1

PROIECTAREA BAZELOR DE DATE

RELAŢIONALE

3.1. Preliminarii

Modelul relaţional a fost conceput şi dezvoltat de E.F. Codd. El este

un model formal de organizare conceptuală a datelor, destinat reprezentării

legăturilor dintre date, bazat pe teoria matematică a relaţiilor. Este modelul

cel mai accesibil pentru utilizatorul bazei de date deoarece structura sa fizică

este aceeaşi cu cea a datelor care trebuie prelucrate. În general, datele se

prezintă sub forma unor tabele (relaţii) în care liniile constituie

înregistrări, iar coloanele sunt atribute ce caracterizează aceste

înregistrări.

Obiectivele modelului relaţional, considerate de către E.F. Codd, sunt

următoarele:

să permită un grad înalt de independenţă a datelor;

să furnizeze baze solide pentru tratarea semanticii, coerenţei şi

problemelor de redundanţă a datelor;

să permită dezvoltarea limbajelor de prelucrare a datelor. Modelul relaţional a permis introducerea unor limbaje neprocedurale

de prelucrare a datelor. Modelul relaţional nu este orientat spre sistemul de calcul, deci modelul nu include regulile, structurile şi operaţiile referitoare la implementarea fizică a unui sistem de baze de date. De fapt, unul dintre obiectivele modelului este acela de a face o distincţie între aspectele fizice şi logice ale unei baze de date (independenţa datelor).

Definirea unui SGBD relaţional impune analizarea caracteristicilor pe care trebuie să le prezinte un model de date pentru a fi considerat relaţional. Există diferite modalităţi pentru a defini acest concept:

prezentarea datelor în tabele supuse anumitor operaţii de tip proiecţie, selecţie, reuniune, compunere, intersecţie etc. (definiţie simplă);

un sistem de baze de date ce suportă un limbaj de tip SQL – Structured Query Language (definiţie practică);

un sistem de baze de date care respectă principiile modelului relaţional introdus de E.F. Codd (definiţia folosită cel mai frecvent).

Page 2: Curs numarul 3 - Baze de date

2

E.F. Codd a publicat un set de 13 reguli, numite reguli de fidelitate, în raport cu care un SGBD poate fi apreciat ca relaţional. Ulterior, cele 13 reguli de fidelitate ale lui Codd au fost extinse la un număr de 100. Trebuie remarcat că nu există un SGBD care respectă toate regulile definite de Codd. Nu trebuie să apreciem un SGBD ca fiind relaţional sau nu, ci măsura în care acesta este relaţional, deci numărul regulilor de fidelitate pe care le respectă.

3.2. Caracterisicile modelului relaţional

Dintre principalele caracteristici ale modelului relaţional se remarcă:

nu există tupluri identice;

ordinea liniilor şi a coloanelor este arbitrară;

articolele unui domeniu sunt omogene;

fiecare coloană defineşte un domeniu distinct şi nu se poate repeta în cadrul aceleiaşi relaţii;

toate valorile unui domeniu corespunzătoare tuturor cazurilor nu mai pot fi descompuse în alte valori (sunt atomice).

Comparativ cu celelalte modele de date, modelul relaţional are avantaje remarcabile dintre care se remarcă:

fundamentarea matematică riguroasă,

independenţa fizică a datelor,

posibilitatea filtrărilor,

existenţa unor structuri de date simple,

minimizarea redundanţei,

supleţea în comunicarea cu utilizatorul neinformatician etc.

Ca limite ale modelului relaţional pot fi menţionate:

rămâne totuşi redundanţă,

ocupă spaţiu,

apar fenomene de inconsistenţă,

nu există mecanisme pentru tratarea optimă a cererilor recursive,

nu lucrează cu obiecte complexe,

nu există mijloace perfecţionate pentru exprimarea constrângerilor de integritate,

nu realizează gestiunea cunoştinţelor etc.

Un model relaţional este caracterizat de trei elemente:

Page 3: Curs numarul 3 - Baze de date

3

structura relaţională a datelor (caracteristica structurală),

operatorii modelului relaţional (caracteristica de asigurare a prelucrării),

regulile de integritate care guvernează folosirea cheilor în model (caracteristica de asigurare a integrităţii).

Aceste trei elemente corespund celor trei componente ale ingineriei

software: informaţie, proces, integritate.

3.2.1. Structura datelor Conceptelor descrise formal drept relaţie, tuplu sau atribut, le

corespund uzual denumirile tabel, linie sau coloană, iar fizic fişier, înregistrare sau câmp.

Un domeniu este o mulţime de valori care se poate defini fie enumerând elementele componente, fie specificând o proprietate distinctivă a valorilor. Domeniului îi corespunde, atât uzual cât şi fizic, conceptul de

tip de date. Un tip de date este o mulţime de valori, şi anume mulţimea tuturor

valorilor care satisfac o anumită constrângere a tipului. Un tip de date poate fi definit de către sistem sau de către utilizator. De asemenea, fiecare tip are asociat un set de operatori care pot fi aplicaţi valorilor tipului respectiv. Tipurile constrâng operaţiile prin faptul că este necesar ca operanzii unei operaţii să fie de tipurile definite pentru operaţia respectivă.

Tipurile pot fi oricât de simple sau de complexe. Se pot distinge tipuri de date ale căror valori sunt numere, şiruri, date calendaristice, înregistrări

audio sau video, hărţi, puncte geometrice etc. Orice tip de date este scalar (atomic, încapsulat) sau nescalar. Tipul

nescalar are componente vizibile utilizatorului şi direct accesibile. Trebuie făcută distincţia între un tip şi reprezentarea sa fizică,

deoarece tipurile sunt legate de model, iar reprezentarea fizică este un aspect legat de implementare.

Fie D1, D2, ..., Dn domenii finite, nu neapărat disjuncte. Produsul

cartezian D1 D2 ... Dn al domeniilor D1, D2, ..., Dn este definit de

mulţimea tuplurilor (V1, V2, ..., Vn), unde V1 D1, V2 D2, ..., Vn Dn. Numărul n defineşte aritatea tuplului.

O relaţie R pe mulţimile D1, D2, ..., Dn este o submulţime a produsului

cartezian D1 D2 ... Dn, deci este o mulţime de tupluri. Există un alt mod

de a defini relaţia, şi anume ca o mulţime finită de funcţii. Asociem fiecărui domeniu Di un atribut Ai şi definim relaţia R = {f1, f2, ..., fm}, unde

Page 4: Curs numarul 3 - Baze de date

4

fi : {A1, A2, ..., An} D1 D2 ... Dn şi fi(Aj) Dj pentru orice valori ale lui i şi j. În această definiţie nu mai este restricţionată ordinea.

Definirea unei relaţii ca o mulţime de tupluri sau ca o mulţime de funcţii se referă la mulţimi care variază în timp (se adaugă, se şterg sau se modifică elemente). Pentru a caracteriza o relaţie este necesară existenţa unui element invariant în timp, iar acest invariant este dat de structura relaţiei (schema relaţională.

Mulţimea numelor atributelor corespunzătoare unei relaţii R defineşte schema relaţională a relaţiei respective. Vom nota schema relaţională prin R(A1, A2, ..., An).

De exemplu, pentru modelul de date analizat în această lucrare,

VESTIMENTATIE(cod_vestimentatie, cod_creator, cod_model,

cod_prezentare , denumire, valoare, descriere) reprezintă o schemă

relaţională.

Putem reprezenta o relaţie printr-un tabel bidimensional în care

fiecare linie corespunde unui tuplu şi fiecare coloană corespunde unui domeniu din produsul cartezian. O coloană corespunde unui atribut.

Numărul atributelor defineşte gradul relaţiei, iar numărul de tupluri din relaţie defineşte cardinalitatea relaţiei.

Bazele de date relaţionale sunt percepute de către utilizatori ca o mulţime de tabele. Tabelul reprezintă structura logică dintr-un sistem

relaţional, nu structura fizică. La nivel fizic, sistemul poate stoca datele în diferite moduri, folosind fişiere secvenţiale, indexări, înlănţuiri de pointeri etc., cu condiţia să poată realiza corespondenţa dintre reprezentarea stocată şi tabelele de la nivelul logic.

Bazele de date relaţionale respectă principiul informaţiei (principiul reprezentării uniforme), care afirmă că întregul conţinut informaţional al bazei este reprezentat într-un mod unic, şi anume, ca valori explicite ale celulelor unui tabel. Această modalitate de reprezentare este singura disponibilă, la nivel

logic, într-un sistem relaţional.

Când se inserează tupluri într-o relaţie, de multe ori valoarea unui

atribut este necunoscută sau nu este aplicabilă tuplului respectiv. Pentru a

reprezenta valoarea acestui atribut a fost introdusă o valoare convenţională

în relaţie, şi anume null. De fapt, null nu reprezintă o valoare, ci absenţa

uneia. Un null nu este acelaşi lucru cu o valoare numerică egală cu zero sau

cu un şir de caractere vid. Zerourile şi spaţiile libere (şirul vid) sunt valori,

pe când null semnifică absenţa unei valori. Prin urmare, null trebuie tratat în

Page 5: Curs numarul 3 - Baze de date

5

mod diferit faţă de alte valori şi trebuie înţeles că termenul „valoare nulă“

este depreciativ.

Evident, este necesară o aritmetică şi o logică (polivalentă) nouă

(fig.3.1) care să cuprindă acest element. De exemplu, ce valoare are „10 >

null“ ? Răspunsul este null. În general, rezultatul operaţiilor aritmetice sau

logice este null când unul din operanzi este null. Prin urmare, „null = null“

are valoarea null, iar null este null.

Întroducerea null-urilor în modelul relaţional constituie o problemă

controversată, deşi Codd tratează null ca parte integrantă a modelului. Alţii

consideră această abordare greşită şi prematură. Trebuie remarcat că nu toate

sistemele relaţionale acceptă null-urile.

AND T F Null OR T F Null

T T F Null T T T T

F F F F F T F Null

Null Null F Null Null T Null Null

Fig. 3.1. Tabele de adevăr pentru operatorii AND şi OR

Tabelul vizualizare (view, filtru, relaţie virtuală, vedere) constituie un

filtru asupra tabelului iniţial, care conţine numai informaţia necesară unei

anumite abordări sau aplicaţii. De fapt, vizualizarea este o expresie

relaţională căreia i se atribuie un nume.

Dacă baza de date conţine tabele reale depuse pe disc, o vizualizare

este virtuală deoarece datele pe care le conţine nu sunt în realitate memorate

într-o bază de date. Este memorată numai definiţia vizualizării. Vizualizarea

nu este definită explicit, ca relaţiile de bază, prin mulţimea tuplurilor

componente, ci implicit, pe baza altor relaţii obţinute prin intermediul unor

expresii relaţionale. Stabilirea efectivă a tuplurilor care compun vizualizarea

se realizează prin evaluarea expresiei atunci când utilizatorul se referă la

acest tabel.

Utilizarea vizualizărilor este avantajoasă, deoarece:

asigură securitatea tabelului iniţial (care este protejat de ştergeri,

Page 6: Curs numarul 3 - Baze de date

6

modificări etc.) prin capacitatea de a ascunde datele;

permit vizualizarea simultană a aceloraşi date de către diverşi utilizatori;

sunt concise, punând la dispoziţie capacităţi „macro“;

asigură independenţa logică faţă de date (imunitatea programelor de aplicaţie faţă de modificările din structura logică a bazei de date).

Există totuşi limitări în utilizarea acestor tabele, în special legate de problema reactualizării. De exemplu, coloanele calculate nu pot fi

reactualizate. De asemenea, inserarea, reactualizarea şi ştergerea nu sunt, în general, recomandate şi sunt permise numai cu anumite restricţii care sunt specifice fiecărui SGBD. De exemplu, Oracle9i rezolvă problema dificilă a reactualizării vizualizărilor, în anumite situaţii, utilizând o clasă specială de declanşatoare (TRIGGER de tip INSTEAD OF).

3.2.2. Reguli de integritate

Regulile de integritate sunt aserţiuni pe care datele conţinute în baza

de date trebuie să le satisfacă. Trebuie făcută distincţia între regulile

structurale care sunt inerente modelării datelor şi regulile de funcţionare (comportament) care sunt specifice unei aplicaţii particulare.

Există trei tipuri de constrângeri structurale (de cheie, de referinţă, de entitate) ce constituie mulţimea minimală de reguli de integritate pe care trebuie să le respecte un SGBD relaţional. Restricţiile de integritate

minimale sunt definite în raport cu noţiunea de cheie a unei relaţii. O mulţime minimală de atribute ale căror valori identifică unic un

tuplu într-o relaţie reprezintă o cheie pentru relaţia respectivă. Prin urmare, o cheie a unei relaţii R este o mulţime K de atribute,

astfel încât:

(1) pentru orice două tupluri t1, t2 ale lui R t1(K) t2(K);

(2) nu există nicio submulţime proprie a lui K având proprietatea (1).

Fiecare relaţie are cel puţin o cheie. Dacă există diferite chei posibile, ele se numesc chei candidat. Una dintre cheile candidat va fi aleasă pentru a identifica efectiv tupluri şi ea va primi numele de cheie primară. Cheia primară nu poate fi reactualizată. Restul cheilor candidat vor purta numele de chei alternative sau secundare. Atributele care reprezintă cheia primară pot fi

subliniate sau urmate de semnul „#“. O cheie identifică linii şi este diferită de un index care localizează

liniile.

Page 7: Curs numarul 3 - Baze de date

7

Fie schemele relaţionale R1(P1, S1) şi R2(S1, S2), unde P1 este cheie primară pentru R1, S1 este cheie secundară pentru R1, iar S1 este cheie primară pentru R2. În acest caz, vom spune că S1 este cheie externă (cheie străină) pentru relaţia R1.

De exemplu, cod_casa_moda este cheie externă pentru relaţia CREATOR şi este cheie primară pentru relaţia CASA_MODA. Cheia primară poate conţine cheia externă. De exemplu, relaţia ACCESORIU are cheia primară formată din atributele cod_accesoriu şi cod_vestimentatie, iar atributul cod_vestimentatie fiind cheie primară în relaţia VESTIMENTATIE, devine cheie externă în relaţia ACCESORIU.

Modelul relaţional respectă trei reguli de integritate structurală.

Regula 1 – unicitatea cheii. Cheia primară trebuie să fie unică şi minimală.

Regula 2 – integritatea entităţii. Atributele cheii primare trebuie să fie diferite de null.

Regula 3 – integritatea referirii. O cheie externă trebuie să fie ori null în întregime, ori să corespundă unei valori a cheii primare asociate.

3.2.3. Operatorii modelului relaţional Operatorii modelului relaţional definesc operaţiile care se pot efectua

asupra relaţiilor în scopul realizării funcţiilor de prelucrare asupra bazei de date. Modelul relaţional oferă două mulţimi de operatori pe relaţii, şi anume: algebra relaţională şi calculul relaţional. La rândul său, calculul relaţional este de două tipuri: orientat pe tupluri sau orientat pe domenii.

Operatorii algebrei relaţionale sunt fie operatori tradiţionali pe

mulţimi (UNION, INTERSECT, PRODUCT, DIFFERENCE), fie operatori

relaţionali speciali (PROJECT, SELECT, JOIN, DIVISION).

Page 8: Curs numarul 3 - Baze de date

8

3.3. Proiectarea modelului relaţional

Proiectarea bazelor de date este mai mult o artă, decât o ştiinţă. Pot

exista criterii obiective care să favorizeze o abordare în raport cu celelalte.

În cursul 2 s-a prezentat o abordare (proiectarea modelului E/R) care

are meritul că este frecvent utilizată în practică.

Pentru rafinarea proiectării modelului de date, pentru obţinerea

schemei conceptuale a bazei de date relaţionale, se pleacă de la o formă de

modelare semantică specială a datelor, mai precis de la diagrama E/R.

In acest curs se va prezenta schema conceptuală.

Ideea generală este de a reprezenta entităţile şi legăturile dintre

acestea sub forma unor tabele speciale (relaţii). Vor fi prezentate 9 reguli

care arată maniera în care se transformă entităţile, relaţiile şi atributele

acestora, în vederea obţinerii schemei conceptuale.

Ca formalism, în diagrama conceptuală, simbolul „ “ indică

plasamentul cheii externe. Dacă simbolul este subliniat („ “), se exprimă şi

faptul că respectiva cheie externă este conţinută în cheia primară.

3.3.1. Transformarea entităţilor

Entităţile independente devin tabele independente. Cheia primară

nu conţine chei externe. De exemplu, entitatea independentă

PREZENTARE generează un tabel independent pentru care

atributul cod_prezentare reprezintă cheia primară.

Entităţile dependente devin tabele dependente. Cheia primară a

entităţilor dependente conţine cheia primară a entităţii de care

depinde (cheie externă) plus unul sau mai multe atribute

adiţionale. De exemplu, cheia primară a entităţii dependente

ACCESORIU este formată din atributul cod_vestimentatie, care

reprezintă cheia primară a entităţii de care depinde

(VESTIMENTATIE), plus atributul adiţional cod_accesoriu.

Subentităţile devin subtabele. Cheia externă se referă la

supertabel, iar cheia primară este această cheie externă. De

exemplu, cheia primară a subentităţii MODEL este cod_angajat

care este o cheie externă (cheie primară a entităţii

ANGAJAT_TEMP).

Page 9: Curs numarul 3 - Baze de date

9

3.3.2. Transformarea relaţiilor

Relaţiile 1:1 şi 1:n devin chei externe. De exemplu, relaţia creeaza

(CREATOR_creeaza_VESTIMENTATIE) devine coloană în

tabelul VESTIMENTATIE. Atributul cod_creator, care este cheie

primară în tabelul CREATOR, va fi cheie externă în tabelul

VESTIMENTATIE. Relaţia 1:1 plasează cheia externă în tabelul cu

mai puţine linii.

Relaţia m:n devine un tabel special, numit tabel asociativ, care are

două chei externe pentru cele două tabele asociate. Cheia primară este compunerea acestor două chei externe plus eventuale coloane

adiţionale. Un tabel asociativ se desenează punctat. De exemplu,

relaţia participa (CASA_MODA_participa_PREZENTARE), care

este de tip m:n, devine tabel asociativ având cheia primară formată

din atributele cod_casa_moda şi cod_prezentare.

Relaţiile de tip trei devin tot tabele asociative. De exemplu, relaţia

primeste ce leagă entităţile ANGAJAT_TEMP, PREZENTARE şi

CASA_MODA, devine tabel asociativ. Cheia primară a tabelului este compunerea a trei chei externe: cod_angajat, cod_casa_moda

şi cod_prezentare. Practic, în acest caz, este preferabil să fie

introdusă o cheie primară artificială.

3.3.3. Transformarea atributelor

Un atribut singular devine o coloană.

Atributele multiple devin tabele dependendente ce conţin cheia

primară a entităţii şi atributul multiplu. Cheia primară este formată

dintr-o cheie externă, plus una sau mai multe coloane adiţionale. De exemplu, o persoană de contact poate cunoaşte mai multe limbi

străine. În acest caz, atributul limba_cunoscuta este multiplu şi va

genera tabelul dependent LIMBA.

Entităţile devin tabele, iar atributele lor devin coloane în aceste tabele. Ce devin atributele relaţiilor? Pentru relaţii 1:1 şi 1:n,

atributele relaţiilor vor aparţine tabelului care conţine cheia

externă, iar pentru relaţii m:n şi de tipul trei, atributele vor fi

plasate în tabelele asociative.

Page 10: Curs numarul 3 - Baze de date

10

Tabel Reprezintă Cheie primară

Independent entitate independentă nu conţine chei externe

Subtabel subentitate o cheie externă

Dependent entitate dependentă o cheie externă şi una sau mai

multe coloane adiţionale Atribut multiplu

Asociativ relaţie m:n două sau mai multe chei externe

şi (opţional) coloane adiţionale relaţie de tip 3

Fig. 3.2. Clasificarea tabelelor

Page 11: Curs numarul 3 - Baze de date

11

Fig. 3.3. Diagrama conceptuală.

FIRMA_PUB

PUBLICITATE

PREZENTARE

ORGANIZATOR PERS_CONTACT

LOCATIE

INFO_CONTACT

LOCALIZARE

SPONSOR ANGAJAT_SEC

FIRMA_SEC

CASA_MODA

CREATOR

VESTIMENTATIE

ACCESORIU

ANGAJAT_TEMP

MODEL

ISTORIC

SOC_ASIG

AGENTIE are

refera are

creeaza

lucreaza

prezinta

face

asigura

are

se_face

face

organizeaza

are

are

are

are

prezinta lucreaza_la

×

× × ×

×

×

× ×

×

×

× ×

×

× ×

PRIMESTE ×

PARTICIPA

PAZA FINANTEAZA

LIMBA

cunoaste

Page 12: Curs numarul 3 - Baze de date

12

Cele patru tipuri de tabele (independente, dependente, subtabele şi

asociative) se deosebesc prin structura cheii primare (figura 3.2.).

În figura 3.3 este prezentată diagrama conceptuală pentru proiectarea

modelului relaţional comentat. Ea a fost construită din diagrama E/R prin

adăugarea tabelelor asociative şi prin marcarea cheilor externe.

În continuare va fi prezentată modalitatea efectivă de trecere de la

diagrama entitate-relaţie la diagrama conceptuală pentru modelul de date

real analizat în capitolul 2.

Entităţile independente PERS_CONTACT, ORGANIZATOR,

PREZENTARE, PUBLICITATE, SPONSOR, FIRMA_PUB,

CASA_MODA, CREATOR, ANGAJAT_TEMP, VESTIMENTATIE,

LOCALIZARE, FIRMA_SEC, ANGAJAT_SEC, SOCIETATE_ASIG,

INFO_CONTACT, AGENTIE, LOCATIE devin tabele independente.

Cheile primare ale fiecărei entităţi au fost specificate în capitolul 2.

Entităţile dependente ISTORIC şi ACCESORIU, care intervin în

model, devin tabele dependente, iar cheile primare au fost specificate în

capitolul 2.

Subentitatea MODEL devine subtabel, având aceeaşi cheie primară cu

superentitatea ANGAJAT_TEMP, adică atributul cod_angajat.

Relaţiile de tip one-to-one şi one-to-many devin chei externe.

Relaţia PERS_CONTACT_are_LOCALIZARE devine cheie externă în

tabelul PERS_CONTACT. Dacă restricţia că o persoană de contact are o

singură localizare este eliminată, atunci cardinalitatea relaţiei devine 1:n, iar

atributul cod_pers_contact devine cheie externă în tabelul LOCALIZARE.

Toate comentariile anterioare rămân valabile şi pentru entităţile

FIRMA_PUB, FIRMA_SEC, PREZENTARE, ORGANIZATOR,

CASA_MODA, SPONSOR, SOC_ASIG, CREATOR, LOCATIE,

ANGAJAT_TEMP şi AGENTIE, care sunt legate de entitatea

LOCALIZARE, permiţând astfel localizarea tuturor structurilor modelului.

Relaţia PERS_CONTACT_are_INFO_CONTACT devine cheie externă în

tabelul PERS_CONTACT. Dacă restricţia că pentru o persoană de contact

există o singură posibilitate de contactare este eliminată, atunci

cardinalitatea relaţiei devine 1:n, iar atributul cod_pers_contact devine cheie

externă în tabelul INFO_CONTACT. Toate comentariile anterioare rămân

valabile şi pentru entităţile FIRMA_PUB, FIRMA_SEC,

ANGAJAT_TEMP, PREZENTARE, ORGANIZATOR, CASA_MODA,

SPONSOR, SOC_ASIG, CREATOR, LOCATIE şi AGENTIE, care sunt

legate de entitatea INFO_CONTACT, permiţând astfel accesarea tuturor

structurilor modelului.

Page 13: Curs numarul 3 - Baze de date

13

Relaţia FIRMA_PUB_face_PUBLICITATE devine cheie externă în tabelul

PUBLICITATE. Relaţia PUBLICITATE_se_face_pentru_PREZENTARE devine cheie externă în tabelul PUBLICITATE. Relaţia ORGANIZATOR_are_PERS_CONTACT devine cheie externă în tabelul PERS_CONTACT. Relaţia FIRMA_SEC_are_ANGAJAT_SEC devine cheie externă în tabelul ANGAJAT_SEC. Relaţia SOC_ASIG_asigura_PREZENTARE devine cheie externă în tabelul PREZENTARE. Relaţia CASA_MODA_lucreaza_CREATOR devine cheie externă în tabelul CREATOR. Relaţia CREATOR_creeaza_VESTIMENTATIE devine cheie externă în tabelul VESTIMENTATIE. Relaţia VESTIMENTATIE_are_ACCESORIU devine cheie externă în tabelul ACCESORIU. Relaţia MODEL_prezintă_VESTIMENTATIE devine cheie externă în tabelul VESTIMENTATIE. Relaţia CREATOR_face_ACCESORIU devine cheie externă în tabelul ACCESORIU. Relaţia PREZENTARE_prezinta_VESTIMENTATIE devine cheie externă în tabelul VESTIMENTATIE. Relaţia PREZENTARE_are_LOCATIE devine cheie externă în PREZENTARE. Relaţia MODEL_lucreaza_AGENTIE devine cheie externă în tabelul MODEL. Relaţia MODEL_are_ISTORIC devine cheie externă în tabelul ISTORIC. Relaţia ISTORIC_refera_AGENTIE devine cheie externă în tabelul ISTORIC.

Relaţiile de tip many-to-many devin tabele asociative, având două chei externe pentru cele două tabele asociate. Relaţia ANGAJAT_SEC_paza_PREZENTARE devine tabel asociativ (PAZA). SPONSOR_finanteaza_PREZENTARE devine tabel asociativ (FINANTEAZA). CASA_MODA_participa_PREZENTARE devine tabel asociativ (PARTICIPA).

Relaţiile de tipul trei (adică cele care leagă cel puţin trei entităţi) devin tabele asociative, având chei externe pentru fiecare dintre tabelele asociate.

Page 14: Curs numarul 3 - Baze de date

14

Relaţia primeste, care leagă entităţile ANGAJAT_TEMP, PREZENTARE şi CASA_MODA, devine tabel asociativ (PRIMESTE). În acest caz, s-a considerat o cheie primară artificială (atributul cod_primeste). Tabelul asociativ are drept chei externe atributele: cod_angajat, cod_casa_moda şi cod_prezentare.

Atributele multiple devin tabele dependendente ce conţin cheia primară a entităţii şi atributul multiplu. Atributul limba_cunoscuta este multiplu (relativ la entitatea PERS_CONTACT) şi va genera tabelul dependent LIMBA. Acesta va avea drept cheie primară atributele cod_pers_contact şi limba_cunoscuta. Tabelul mai conţine trei atribute ce reprezintă nivelul de cunoaştere (scris, citit, vorbit) a limbii.

Atributele entităţilor devin coloane în tabelele corespunzătoare. Pentru

relaţii 1:1 şi 1:n, atributele relaţiilor vor aparţine tabelului care conţine cheia

externă, iar pentru relaţii m:n şi de tipul trei, atributele vor fi plasate în

tabelele asociative.

Tabelul asociativ PRIMESTE va avea ca atribute, pe lângă cele ce constituie

cheia primară, suma, data_achitare, cont, banca.

Schemele relaţionale corespunzătoare diagramei conceptuale din

figura 3.3. sunt următoarele:

MODEL(cod_angajat#, cod_agentie, inaltime, nr_pantof, info)

ANGAJAT_TEMP(cod_angajat#, nume, prenume, data_nastere,

nationalitate, sex, cod_localizare, cod_info_acces, tip)

PUBLICITATE(cod_publicitate#, cod_firma_pub, cod_prezentare, tip,

nume, suma, observatii)

FIRMA_PUB(cod_firma_pub#, nume, info, director, observatii,

cod_localizare, nume_pers_contact, cod_info_acces)

ORGANIZATOR(cod_organizator#, denumire, banca, cont, cod_info_acces,

informatii, cod_localizare)

PERS_CONTACT(cod_pers_contact#, cod_organizator, nume, prenume,

directie, cod_localizare, cod_info_acces)

PREZENTARE(cod_prezentare#, denumire, data_start, data_final,

cod_soc_asig, cod_organizator, cod_locatie)

LOCATIE(cod_locatie#, denumire, tip, cod_localizare, cod_info_acces,

capacitate)

SPONSOR(cod_sponsor#, tip, nume, info, cod_localizare, cod_info_acces)

Page 15: Curs numarul 3 - Baze de date

15

CASA_MODA(cod_casa_moda#, nume, cifra_afaceri, proprietar, director,

istoric, data_creare, cod_localizare, cod_info_acces)

CREATOR(cod_creator#, nume, prenume, data_nastere, data_angajare, tip,

mod_angajare, info, cod_casa_moda, cod_localizare, cod_info_acces)

VESTIMENTATIE(cod_vestimentatie#, denumire, valoare, descriere,

cod_creator, cod_model, cod_prezentare)

ACCESORIU(cod_vestimentatie#, cod_accesoriu#, cod_creator, descriere,

tip, valoare)

AGENTIE(cod_agentie#, nume, data_creare, director, cifra_afaceri, info,

cod_localizare, cod_info_acces)

ISTORIC(cod_model#, data_angajare#, data_final, cod_agentie, conditii)

LOCALIZARE(cod_localizare#, adresa, cod_postal, oras, tara)

INFO_CONTACT(cod_info_acces#, telefon_fix, telefon_mobil, mail, fax)

FIRMA_SEC(cod_firma_sec#, nume_firma, tip_servicii, director,

cod_localizare, cod_info_acces, observatii)

ANGAJAT_SEC(cod_angajat#, nume, prenume, data_nastere, specializare,

nivel, observatii, cod_info_acces, cod_firma_sec)

PAZA(cod_angajat#, cod_prezentare#, tip_paza, dotare, observatii)

SOC_ASIG(cod_soc_asig#, conditii, suma, director, observatii,

cod_localizare, nume_pers_contact_firma, cod_info_acces)

PARTICIPA(cod_prezentare#, cod_casa_moda#, tip, data)

FINANTEAZA(cod_sponsor#, cod_prezentare#, suma, banca, cont_emitent,

data_emitere, cod_ordin_plata)

PRIMESTE(cod_primeste#, cod_angajat, cod_prezentare, cod_casa_moda,

data_achitare, suma, cont, banca)

LIMBA(cod_pers_contact#, limba_cunoscuta#, niv_scris, niv_citit,

niv_vorbit)

Page 16: Curs numarul 3 - Baze de date

16

3.4. Regulile lui Codd

Un SGBD relaţional îndeplineşte funcţiile unui SGBD, dar cu anumite particularităţi care decurg din concepţia de organizare a datelor, respectiv din modelul relaţional. Fiecare SGBD relaţional implementează modelul relaţional într-o manieră proprie, care îl diferenţiază de restul sistemelor relaţionale.

În anul 1985, E.F. Codd a publicat un set de 13 reguli în raport cu care un sistem de gestiune a bazelor de date poate fi apreciat ca relaţional. Niciun sistem de gestiune a bazelor de date pus în vânzare pe piaţa comercială nu respectă absolut toate regulile definite de Codd, dar acest lucru nu împiedică etichetarea acestor sisteme drept relaţionale. Nu trebuie apreciat un SGBD ca fiind relaţional sau nu, ci măsura în care acesta este relaţional, deci numărul regulilor lui Codd pe care le respectă.

Regulile lui Codd au fost şi sunt cauza multor controverse. Unii le consideră doar un exerciţiu academic, alţii pretind că produsele lor satisfac majoritatea regulilor. De fapt, discuţiile în jurul acestor reguli au generat o cunoaştere mai bună a caracteristicilor esenţiale ale unui SGBD relaţional, atât din punctul de vedere al utilizatorilor, cât şi din cel al producătorilor de software.

Regulile pot fi organizate în următoarele cinci domenii de funcţionalitate: reguli fundamentale, reguli structurale, reguli de integritate, reguli de prelucrare a datelor şi reguli privind independenţa datelor.

Regula 1 – regula gestionării datelor. Un SGBD relaţional trebuie să fie capabil să gestioneze o bază de date prin posibilităţile sale relaţionale. Practic, nicio implementare curentă de SGBD nu respectă această regulă, deoarece implementările conţin atât caracteristici relaţionale cât şi nerelaţionale.

Regula 2 – regula reprezentării informaţiei. Într-o bază de date relaţională, informaţia este reprezentată la nivel logic sub forma unor tabele ce poartă numele de relaţii. Este regula cea mai importantă şi conform lui Codd, un SGBD care nu respectă această regulă, nu poate fi considerat relaţional. Chiar şi meta-datele, conţinute în catalogul de sistem, trebuie să fie stocate ca relaţii.

Regula 3 – regula accesului garantat la date. Fiecare valoare dintr-o bază de date relaţională trebuie să poată fi adresată în mod logic printr-o

Page 17: Curs numarul 3 - Baze de date

17

combinaţie formată din numele relaţiei, valoarea cheii primare şi numele atributului.

Regula 4 – regula reprezentării informaţiei necunoscute. Un sistem relaţional trebuie să permită utilizatorului definirea unui tip de date numit „null“ pentru reprezentarea unei informaţii necunoscute la momentul respectiv. Într-un SGBD relaţional trebuie să putem face diferenţa între valoarea zero, un şir vid de caractere şi o valoare necunoscută.

Regula 5 – regula dicţionarelor de date. Asupra descrierii bazelor de date (informaţii relative la relaţii, vizualizări, indecşi etc.) trebuie să se poată aplica aceleaşi operaţii ca şi asupra datelor din baza de date. Descrierea bazei de date este reprezentată la nivel logic sub forma unor tabele care pot fi accesate în acelaşi mod ca şi datele efective. Prin urmare există un singur limbaj de prelucrare atât a meta-datelor, cât şi a datelor.

Regula 6 – regula limbajului de interogare. Trebuie să existe cel puţin un limbaj pentru prelucrarea bazei de date. În general, toate implementările SQL respectă această regulă. Limbajul permite utilizatorilor să definească relaţii şi vizualizări, să prelucreze datele interactiv sau prin intermediul programului, să regăsească informaţia şi să o poată actualiza, să verifice şi să corecteze datele de intrare, să implementeze constrângeri, să stabilească limite pentru tranzacţii etc.

Regula 7 – regula de actualizare a vizualizării. Un SGBD trebuie să poată determina dacă o vizualizare poate fi actualizată şi să stocheze rezultatul interogării, ce defineşte vizualizarea, într-un dicţionar de tipul unui catalog de sistem. Trebuie să existe un mecanism prin care să se poată determina dacă anumite vizualizări pot fi actualizate sau nu. Regula stabileşte că toate vizualizările care sunt teoretic reactualizabile pot fi reactualizate şi de către sistemul de gestiune. Nu au fost încă descoperite condiţiile pentru identificarea tuturor vizualizărilor care pot fi teoretic reactualizate.

Regula 8 – regula limbajului de nivel înalt. Capacitatea de tratare a unei relaţii de bază sau a unei vizualizări ca pe un singur operand se aplică atât pentru operaţiile de regăsire a datelor, cât şi asupra operaţiilor de inserare, actualizare şi ştergere a datelor. Un SGBD relaţional nu trebuie să oblige utilizatorul să caute într-o relaţie, tuplu cu tuplu, pentru a regăsi informaţia dorită. Operaţiile de prelucrare a datelor pot să fie aplicate atât în mod interactiv cât şi prin program, într-un limbaj gazdă.

Regula 9 – regula independenţei fizice a datelor. Programele de aplicaţie şi activităţile utilizatorilor nu depind de modul de depunere a datelor sau de modul de acces la date. Într-un SGBD relaţional trebuie să se

Page 18: Curs numarul 3 - Baze de date

18

separe aspectul fizic al datelor (stocare sau acces la date) de aspectul logic al datelor.

Regula 10 – regula independenţei logice a datelor. Programele de aplicaţie trebuie să fie transparente la modificările de orice tip efectuate asupra datelor. Orice modificare efectuată asupra unei relaţii nu trebuie să afecteze operaţiile de prelucrare a datelor.

Regula 11 – regula independenţei datelor din punct de vedere al inte-

grităţii. Regulile de integritate trebuie să fie definite într-un sublimbaj

relaţional de date, nu în programul de aplicaţie. SQL permite definirea de

restricţii privind integritatea datelor şi stocarea lor în catalogul de sistem. Cu

cât sunt mai multe constrângeri de integritate care pot fi întreţinute mai

degrabă de către SGBD, decât în cadrul fiecărui program aplicaţie, cu atât

garantarea calităţii datelor este mai bună.

Regula 12 – regula independenţei datelor din punct de vedere al

distribuirii. Distribuirea datelor pe mai multe calculatoare dintr-o reţea de

comunicaţii de date nu trebuie să afecteze programele de aplicaţie. ANSI-

SQL nu menţionează regula în specificaţiile sale, deoarece este destul de

greu de respectat. De observat că regula nu cere ca SGBD-ul să accepte o

bază de date distribuite pentru a fi relaţional, dar stabileşte că limbajul de

interogare va rămâne acelaşi atunci când se va introduce această capacitate,

iar datele vor fi distribuite.

Regula 13 – regula versiunii procedurale a unui SGBD. Orice

componentă procedurală a unui SGBD trebuie să respecte aceleaşi restricţii

de integritate ca şi componenta relaţională. De exemplu, dacă în partea de

prelucrare a datelor a limbajului relaţional valoarea dintr-o coloană este de

tipul not null, orice altă metodă procedurală de accesare a acestei coloane nu

trebuie să permită introducerea unui null în această coloană. Prin urmare,

regulile de integritate exprimate într-un limbaj relaţional de un anumit nivel

nu pot fi distruse de un limbaj de nivel inferior.

Deoarece regulile lui Codd sunt prea severe pentru a fi respectate de

un SGBD operaţional, s-au formulat criterii minimale de definire a unui

SGBD relaţional.

Un SGBD este minimal relaţional dacă:

toate datele din cadrul bazei sunt reprezentate prin valori în tabele;

nu există pointeri observabili de către utilizator;

Page 19: Curs numarul 3 - Baze de date

19

sistemul suportă operatorii relaţionali de proiecţie, selecţie şi

compunere naturală, fără limitări impuse din considerente interne.

Un SGBD este complet relaţional dacă este minimal relaţional şi

satisface în plus condiţiile:

sistemul suportă restricţiile de integritate de bază (unicitatea cheii

primare, constrângerile referenţiale, integritatea entităţii);

sistemul suportă toate operaţiile de baza ale algebrei relaţionale.