Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Relaţia unu-la-mai-mulţi
De exemplu, se consideră o bază de date pentru gestionarea proiectelor care are tabelele
Coordonatori şi Proiecte. Un coordonator poate coordona mai multe proiecte. În consecinţă, pentru
orice coordonator din tabelul Coordonatori pot exista mai multe proiecte în tabelul Proiecte. Astfel,
relaţia dintre tabelul Coordonatori şi tabelul Proiecte este o relaţie de tipul unul-la-mai-mulţi.
Relaţia mai-mulţi-la-mai-mulţi
De exemplu, se consideră relaţia dintre tabelul Studenţi şi tabelul Proiecte din baza de date
pentru gestionarea proiectelor. Un student se poate ocupa de mai multe proiecte. Pe de altă parte, un
proiect poate fi abordat de mai mulţi studenţi. De aceea, pentru fiecare înregistrare din tabelul
Studenţi pot exista mai multe înregistrări în tabelul Proiecte. În acelaşi timp, pentru fiecare
înregistrare din tabelul Proiecte pot exista mai multe înregistrări în tabelul Studenţi. Acest tip de
1
Cursul 3 Iniţiere în Access 2
relaţie este denumit mai-mulţi-la-mai-mulţi. Pentru a detecta relaţii mai-mulţi-la-mai-mulţi între
tabele este important să se ia în considerare ambele părţi ale relaţiei.
Subiectele celor două tabele - Studenţi şi Proiecte - se află într-o relaţie mai-mulţi-la-mai-
mulţi. Acest lucru prezintă o problemă. Dacă s-ar crea o relaţie între cele două tabele prin adăugarea
câmpului ID Proiect la tabelul Studenţi, pentru a avea mai mult de un proiect pentru fiecare student
este nevoie de mai mult de o înregistrare pentru fiecare student în tabelul Studenţi. Astfel, s-ar
repeta informaţiile despre student pentru fiecare rând asociat cu un student - rezultând o proiectare
ineficientă. Aceeaşi problemă apare dacă se adaugă câmpul ID Student la tabelul Proiecte - rezultă
mai multe înregistrări în tabelul Proiecte pentru fiecare proiect. Pentru a rezolva această problemă
se crează un al treilea tabel, numit adesea tabel de joncţiune, care împarte relaţia mai-mulţi-la-mai-
mulţi în două relaţii unu-la-mai-mulţi. În acest scop se inserează câmpul cheie primară din fiecare
dintre cele două tabele în al treilea tabel. Ca rezultat, al treilea tabel înregistrează fiecare apariţie,
denumită şi instanţă.
Fiecare înregistrare din tabelul Rezultate proiecte reprezintă un element linie al unui proiect
tratat de un student. Cheia primară a tabelului Rezultate proiecte constă din două câmpuri - cheile
secundare ale tabelelor Studenţi şi Proiecte. Utilizarea câmpului ID Student singur nu funcţionează
ca o cheie primară pentru acest tabel, deoarece un student poate avea mai multe elemente linie.
ID Student se repetă pentru mai multe elemente linie, astfel încât câmpul nu conţine valori unice.
Nici utilizarea câmpului ID Proiect singur nu funcţionează, deoarece un proiect poate apărea la mai
mulţi studenţi. Dar împreună cele două câmpuri produc întotdeauna o valoare unică pentru fiecare
înregistrare.
În baza de date pentru gestionarea proiectelor, tabelele Studenţi şi Proiecte nu sunt asociate
direct. În schimb, ele sunt asociate indirect prin tabelul Rezultate proiecte. Relaţia mai-mulţi-la-
mai-mulţi între tabelele Studenţi şi Proiecte se reprezintă utilizând două relaţii unu-la-mai-mulţi:
Între tabelele Studenţi şi Rezultate proiecte există o relaţie unu-la-mai-mulţi. Fiecare student are
mai mult de un element line, dar fiecare element linie este conectat cu un singur student.
Între tabelele Proiecte şi Rezultate proiecte există o relaţie unu-la-mai-mulţi. Fiecare proiect
poate avea mai multe elemente linie asociate, dar fiecare element linie face referire la un singur
proiect.
Din tabelul Rezultate proiecte, se pot determina toate proiectele abordate de un anumit
student. De asemenea, se pot determina toţi studenţii care se ocupă de un anumit proiect.
Relaţia unu-la-unu
De exemplu, să presupunem că trebuie înregistrate câteva informaţii suplimentare despre
studenţi, de care este nevoie rar sau care se aplică numai câtorva studenţi. Deoarece este nevoie rar
de aceste informaţii şi stocarea informaţiilor în tabelul Studenţi ar produce spaţii libere pentru
fiecare student la care acestea nu se aplică, ele se amplasează într-un tabel separat. Ca şi în tabelul
2
Cursul 3 Iniţiere în Access 3
Studenţi, câmpul ID Student se utilizează cu rolul de cheie primară şi în tabelul suplimentar. Relaţia
dintre acest tabel suplimentar şi tabelul Studenţi este o relaţie de tipul unu-la-unu.
Fiecare înregistrare din primul tabel poate avea o singură înregistrare potrivită în al doilea
tabel şi fiecare înregistrare din al doilea tabel poate avea o singură înregistrare potrivită în primul
tabel. Acest tip de relaţie nu este comun, deoarece, de cele mai multe ori, informaţiile asociate în
acest mod se stochează în acelaşi tabel. O relaţie unu-la-unu poate fi utilizată pentru a diviza un
tabel cu multe câmpuri, pentru a izola o parte dintr-un tabel din motive de securitate sau pentru a
stoca informaţii care se aplică numai la un subset al tabelului principal.
În proiectare, o relaţie de tipul unu-la-unu se reprezintă astfel:
Dacă cele două tabele au acelaşi subiect, probabil se poate configura relaţia utilizând aceeaşi
cheie primară în ambele tabele.
Dacă cele două tabele au subiecte diferite, cu chei primare diferite, se alege unul dintre tabele
(oricare) şi se inserează cheia sa primară în celălalt tabel pe post de cheie secundară.
Integritatea referenţială
De exemplu, se consideră o relaţie unu-la-mai-mulţi între tabelele Coordonatori şi Proiecte
şi se şterge o înregistrare din tabelul Coordonatori. Dacă coordonatorul şters are proiecte în tabelul
Proiecte, acele proiecte vor deveni "solitare". Înregistrările din tabela Proiecte vor conţine în
continuare un ID de coordonator, dar ID-ul nu va mai fi valid, deoarece înregistrarea la care face
referire nu mai există. O înregistrare cu referinţă către altă înregistrare care nu există se numeşte
înregistrare solitară.
Scopul integrităţii referenţiale este de a împiedica apariţia înregistrărilor solitare şi de a ţine
sincronizate referinţele, astfel încât această situaţie ipotetică să nu apară niciodată.
Integritatea referenţială se impune prin activarea sa pentru o relaţie între tabele. Odată
impusă, Access respinge orice operaţiuni care încalcă integritatea referenţială pentru acea relaţie
tabel. Acest lucru înseamnă că Access va respinge atât actualizările care modifică ţinta referinţei,
cât şi ştergerile care elimină ţinta unei referinţe.
Cu toate acestea, este posibil să fie nevoie în mod justificat să se modifice cheia primară
pentru un coordonator care are proiecte în tabelul Proiecte. Pentru astfel de cazuri, este nevoie ca
Access să actualizeze automat, într-o singură operaţiune, toate înregistrările afectate. Astfel, Access
asigură că actualizarea este completă, astfel încât baza de date nu este lăsată într-o stare
inconsistentă, cu unele înregistrări actualizate şi altele nu. Din acest motiv, Access acceptă opţiunea
"Actualizare în cascadă câmpuri corelate". Dacă este impusă integritatea referenţială şi este
selectată opţiunea "Actualizare în cascadă câmpuri corelate", în urma actualizării unei chei primare,
Access actualizează automat toate câmpurile care fac referire la cheia primară.
De asemenea, este posibil să fie nevoie să se ştergă o înregistrare şi înregistrările asociate -
de exemplu, o înregistrare din tabelul Coordonatori şi toate proiectele asociate pentru coordonatorul
respectiv. Din acest motiv, Access are opţiunea "Ştergere în cascadă câmpuri corelate". Dacă se
impune integritatea referenţială şi se alege opţiunea "Ştergere în cascadă câmpuri corelate", la
ştergerea unei înregistrări din partea cu cheia primară a unei relaţii, Access şterge automat toate
înregistrările care fac referire la cheia primară.
3
Cursul 3 Iniţiere în Access 4
Deschiderea ferestrei Relaţii
Dacă baza de date conţine relaţii, acestea se afişează în fereastra Relaţii. Dacă baza de date
nu conţine relaţii şi se deschide fereastra Relaţii pentru prima oară, se afişează fereastra de
dialog Afişare tabel.
O relaţie între tabele este reprezentată printr-o linie de relaţie trasată între aceste tabele din
fereastra Relaţii. O relaţie care nu are impusă integritatea referenţială apare ca o linie subţire între
câmpurile comune care acceptă relaţia. Când se selectează relaţia făcând clic pe linia sa, linia se
îngroaşă pentru a indica faptul că este selectată. Dacă este impusă integritatea referenţială pentru o
relaţie, linia apare îngroşată la fiecare capăt. În plus, numărul 1 apare deasupra porţiunii îngroşate a
liniei în partea unu a relaţiei, iar simbolul infinit (∞) apare deasupra liniei în partea mai-mulţi.
Cheia primară
Această linie reprezintă relaţia
Cheia secundară
4
Cursul 3 Iniţiere în Access 5
Crearea unei relaţii tabel
O relaţie tabel se poate crea utilizând fereastra Relaţii sau prin glisarea unui câmp din
panoul Listă de câmpuri într-o foaie de date. Când se crează o relaţie între tabele, câmpurile
comune nu trebuie să aibă neapărat acelaşi nume, deşi acest lucru se întâmplă deseori. Mai degrabă
câmpurile trebuie să aibă acelaşi tip de date. În cazul în care câmpul cheie primară este un câmp de
tip AutoNumerotare, câmpul cheie secundară poate fi de tip Număr dacă proprietatea Dimensiune
câmp a ambelor câmpuri este aceeaşi. De exemplu, se poate potrivi un câmp de tip
AutoNumerotare cu un câmp de tip Număr dacă proprietatea Dimensiune câmp a ambelor câmpuri
este Întreg lung. Când ambele câmpuri sunt de tip Număr, acestea trebuie să aibă aceeaşi setare a
proprietăţii Dimensiune câmp.
2. Dacă nu s-a definit încă nici o relaţie, se afişează automat fereastra de dialog Afişare tabel.
Dacă nu apare, în fila Proiectare, în grupul Relaţii, se face clic pe Afişare tabel.
Fereastra de dialog Afişare tabel afişează toate tabelele şi interogările din baza de date.
Pentru a vedea numai tabele sau numai interogări se face clic pe Tabele, respectiv pe
Interogări. Pentru a le vedea pe amândouă se face clic pe Ambele.
3. Se selectează unu sau mai multe tabele şi interogări, apoi se face clic pe Adăugare. După ce
au fost adăugate tabelele şi interogările în fereastra Relaţii se face clic pe Închidere.
4. Se glisează un câmp (de obicei cheia primară) dintr-un tabel peste câmpul comun (cheia
secundară) din celălalt tabel. Pentru a glisa mai multe câmpuri, acestea se selectează ținând
apăsată tasta CTRL și apoi se glisează.
Access afişează fereastra de dialog Editare relaţii.
5. Se verifică dacă numele câmpurilor afişate sunt cele ale câmpurilor comune pentru relaţie.
Dacă un nume de câmp este incorect, se face clic pe numele câmpului şi se selectează
câmpul potrivit din listă.
Pentru a impune integritatea referenţială pentru această relaţie, se bifează caseta de validare
Impunere integritate referenţială.
6. Se faceţi clic pe Creare.
Access trasează o linie de relaţie între cele două tabele. Dacă s-a bifat caseta de validare
Impunere integritate referenţială, linia apare îngroşată la capete, iar deasupra porţiunii
îngroşate într-o parte a liniei de relaţie se afişează numărul 1 şi în cealaltă parte se afişează
simbolul infinit (∞).
NOTE
Pentru a crea o relaţie unu-la-unu Ambele câmpuri comune (de obicei cheia primară şi
cheia secundară) trebuie să aibă un index unic. Acest lucru înseamnă că proprietatea Indexat
pentru aceste câmpuri trebuie să fie setată la Da (fără dubluri). Dacă ambele câmpuri au un
index unic, Access creează o relaţie unu-la-unu.
Pentru a crea o relaţie unu-la-mai-mulţi Câmpul de pe partea "unu" a relaţiei (de obicei
cheia primară) trebuie să aibă index unic. Acest lucru înseamnă că proprietatea Indexat pentru
acest câmp trebuie setată la Da (fără dubluri). Câmpul din partea "mai mulţi" nu trebuie să
aibă index unic. El poate avea index care să permită dubluri. Acest lucru înseamnă că
proprietatea Indexat pentru acest câmp trebuie să fie setată la Nu sau la Da (se permit
5
Cursul 3 Iniţiere în Access 6
dubluri). Când un câmp are index unic şi celălalt nu are, Access creează o relaţie unu-la-mai-
mulţi.
În Access se poate adăuga un câmp dintr-un tabel existent, la un tabel care este deschis în
vizualizarea Foaie de date, glisându-l din panoul Listă de câmpuri. Panoul Listă de câmpuri
afişează câmpurile disponibile în tabelele înrudite (cu care există relații) şi cele disponibile în
celelalte tabele din baza de date (cu care nu este corelat).
O relaţie tabel poate fi creată prin adăugarea unui câmp din panoul Listă de câmpuri urmând
paşii:
1. Se deschide tabelul în modul de vizualizare Foaie de date.
2. În fila Foaie de date, în grupul Câmpuri şi coloane, se face clic pe Adăugare câmpuri
existente.
NOTĂ Dacă unul dintre tabelele utilizate în relaţie este în uz, poate de către altă persoană sau
proces, ori într-un obiect deschis din baza de date (cum ar fi un formular), atunci relaţia nu se va
6
Cursul 3 Iniţiere în Access 7
şterge. Înainte de eliminarea unei relaţii, trebuie închise toate obiectele deschise care folosesc
tabelele.
În urma unei relaţii tabel, datele relaţiei determină proiectarea interogărilor. De exemplu, la
crearea unei interogări ce utilizează două tabele conectate printr-o relaţie, aplicația Access
selectează automat câmpurile care se potrivesc implicit pe baza câmpurilor specificate în relaţie.
O interogare pentru mai multe tabele combină informaţiile din aceste tabele prin potrivirea
valorilor din câmpurile comune. Operaţiunea care efectuează potrivirea şi combinarea este denumită
asociere. Pentru fiecare relaţie se poate specifica tipul de asociere. Tipul de asociere informează
Access despre înregistrările care vor fi incluse în rezultatul interogării.
De exemplu, pentru afişarea proiectelor coordonatorilor din baza de date pentru gestiunea
proiectelor se crează o interogare care asociază tabelul Coordonatori şi tabelul Proiecte după
câmpul comun ID Coordonator. Rezultatul interogării conţine informaţiile coordonatorului şi cele
ale proiectului numai pentru acele înregistrări unde s-a găsit o potrivire. Utilizând tipul de asociere
implicită, denumită asociere internă, interogarea a returnat numai informaţiile din înregistrările
tabelelor Coordonatori şi Proiecte unde câmpurile comune (denumite şi câmpuri asociate) sunt
egale.
7
Cursul 3 Iniţiere în Access 8
Dacă se dorește includerea tuturor coordonatorilor, chiar şi a celor care nu au proiecte,
trebuie modificat tipul de asociere dintr-o asociere internă într-o asociere cunoscută sub numele de
asociere externă la stânga. O asociere externă la stânga returnează toate înregistrările din tabelul
din stânga relaţiei şi numai înregistrările care se potrivesc din tabelul din dreapta. O asociere
externă la dreapta returnează toate înregistrările din tabelul din dreapta relaţiei şi numai
înregistrările care se potrivesc din tabelul din stânga.
NOTĂ În acest caz, "stânga" şi "dreapta" se referă la poziţia tabelelor în fereastra de dialog
Editare relaţii, nu a ferestrei Relaţii.
Tipul de asociere se setează astfel:
1. În fereastra de dialog Editare relaţii , se face clic pe Tip asociere.
Access afişează fereastra de dialog Proprietăţi asociere.
Este posibil să fie justificată nevoia de a modifica cheia primară în partea "unu" a relaţiei. În
acest caz, este nevoie ca Access să actualizeze automat, într-o singură operaţiune, toate câmpurile
8
Cursul 3 Iniţiere în Access 9
asociate. Actualizarea este efectuată complet, astfel că baza de date nu rămâne inconsistentă - cu
unele câmpuri actualizate şi altele nu. După impunerea integrității referenţiale şi selectarea opţiunii
Actualizare în cascadă câmpuri corelate, la actualizarea unei cheie primare, Access actualizează
automat toate câmpurile cu referinţă la cheia primară.
Este posibil să fie necesară ştergerea unei înregistrări în partea "unu" a relaţiei şi a tuturor
înregistrărilor corelate. Din acest motiv, Access deţine opţiunea Ştergere în cascadă câmpuri
corelate. După impunerea integrității referenţiale şi selectarea opţiunii Ştergere în cascadă
câmpuri corelate, Access şterge automat toate înregistrările cu referinţă la cheia primară când se
şterge înregistrarea care conţine cheia primară.
Activarea sau dezactivarea actualizării şi/sau ştergerii în cascadă se face urmând paşii:
1. În fereastra de dialog Editare relaţii se bifează caseta de validare Impunere integritate
referenţială.
2. Se bifează/debifează caseta de validare Actualizare în cascadă câmpuri corelate şi/sau
caseta de validare Ştergere în cascadă câmpuri corelate.
3. Se face clic pe OK.
NOTĂ Dacă cheia primară este un câmp de tip AutoNumerotare, bifarea casetei de validare
Actualizare în cascadă a câmpurilor corelate nu va avea efect, deoarece valoarea dintr-un câmp
de tip AutoNumerotare nu se poate modifica.