Lectia 5.1: Ce inseamna relatie intre tabele?
Preambul
O relație este o legatura care se stabileste intre campurile din doua tabele. Este cea mai buna metoda de descriere a dependențelor dintre obiecte in viața reala folosind tabele dintr-o baza de date.
Cele mai importante tipuri de relații sunt cele 1 la N si cele N la M.
In cadrul relațiilor dintre tabele, campurile corespondente nu trebuie sa aiba neaparat acelasi nume. Totusi, campurile in relație trebuie sa aiba acelasi tip de date, daca nu cumva campul cheie primara este un camp AutoNumber, caz in care campul corespondent trebuie sa fie de tipul Long Integer.
In exemplul care urmeaza, vom demonstra cum se acceseaza instrumentul de creat relații si cum se creeaza relațiile intre tabele.
Pasul 0
Descarcați arhiva care conține fisierul ajutator si dezarhivați-l.
Pasul 1
Efectuați un click pe tab-ul Database Tools (Instrumente pentru baza de date). (1)
Efectuați un click pe comanda Relationships (Relații). (2)
Efectuați un click pe comanda Show Table (Afisare tabel). (3)
Atunci cand accesam instrumentul pentru crearea relațiilor, putem afisa tabelele si interogarile din baza de date prin intermediul comenzii Show Table (Afisare tabel).
Aceste tabele si interogari pot fi adaugate in panoul Relationships (Relații) prin executarea unui dublu click pe cele dorite.
Efectuați dublu click pe tabelul Carti. (4)
Efectuați dublu click pe tabelul Scriitori. (5)
Efectuați dublu click pe tabelul Scriitori_Carti. (6)
Efectuați un click pe butonul Close (Inchidere). (7)
Pasul 2
Acum vom rearanja dispunerea tabelelor in panoul Relationships (Relații) in scopul de a putea crea relațiile dintre acestea mai facil.
Pentru a crea o relație intre doua tabele, se va folosi opțiunea Drag and Drop (Trage si plaseaza).
Concret, vom trage un camp din tabelul principal (in general, cheia primara a acestuia) si ii vom da drumul peste campul din tabelul cu care dorim sa il relaționam.
Fereastra de dialog aparuta este pentru editarea relației create.
Bifați caseta de validare Enforce Referential Integrity (Impune integritatea referentiala). (1)
Integritatea referențiala impiedica apariția inregistrarilor orfane in tabelul copil, care nu au legatura intr-un tabel principal.
Un exemplu de inregistrare orfana in tabelul Scriitori_Carti ar fi atribuirea valorii 4, de exemplu, pentru campul ID_C in condițiile in care nicio inregistrare din tabelul Carti nu ar conține valoarea 4 in campul ID_Carti.
Efectuați un click pe butonul Create (Creare). (2)
Mai departe vom crea cea de-a doua relație, intre tabelul principal (sau parinte) Scriitori si tabelul secundar (sau copil) Scriitori_Carti.
Bifați caseta de validare Enforce Referential Integrity (Impune integritatea referentiala). (3)
Efectuați un click pe butonul Create (Creare). (4)
Dupa ce am creat relațiile, le vom salva.
Efectuați un click pe butonul Save (Salvare). (5)
Efectuați un click pe comanda Close (Inchidere). (6)
Pasul 3
Efectuați dublu click pe tabelul Scriitori_Carti. (1)
Campul ID_S corespunde campului ID_Scriitori din tabelul Scriitori.
Campul ID_C corespunde campului ID_Carti din tabelul Carti.
Cu ajutorul relațiilor create mai devreme si completand datele din acest tabel, am atribuit scriitorilor carțile pe care stim ca le-au scris.
Cu alte cuvinte, scriitorul cu ID-ul numarul 1, conform acestui tabel, este autorul carții cu ID-un numarul 1, iar scriitorul cu ID-ul numarul 2 este autorul carții cu ID-ul numarul 2.
Efectuați un click pe butonul Close (Inchidere). (2)
Efectuați dublu click pe tabelul Carti. (3)
Datorita realației create, tabelul Scriitori_Carti apare ca foaie de date secundara atasata tabelului Carti.
Executand click pe butonul de extindere al unei inregistrari din tabelul Carti, putem vedea inregistrarile din tabelul Scriitori_Carti care sunt inrudite cu inregistrarea respectiva din tabelul Carti.
Acelasi lucru este valabil si pentru tabelul Scriitori.
Efectuați un click pe butonul de extindere al primei inregistrari. (4)
Dupa cate se poate observa, datorita relației stabilite si conform valorilor introduse in tabelul Scriitori_Carti, cartea cu ID-ul 1 aparține scriitorului cu ID-ul 1.
Lectia 5.2: Ce inseamna relatie 1 la N?
Preambul
In cadrul relațiilor de tip 1 la N, unei inregistrari din primul tabel ii corespunde una sau mai multe inregistrari in cel ce-al doilea tabel. Primul tabel se numeste Tabel Parinte sau Tabel Stanga si uneori il regasim sub denumirea de tabel principal sau primar. Cel de-al doilea tabel se numeste Tabel Copil sau Tabel Dreapta.
Campurile pe baza carora se realizeaza relația sunt:
– in Tabelul Parinte, de obicei, cheia primara (Primary Key);
– in Tabelul Copil, campul de legatura se numeste cheie externa sau straina (Foreign Key).
Pentru a realiza o relație de tip 1 la N, trebuie sa indeplinim trei condiții:
1) Cele doua campuri de legatura trebuie sa fie identice din punct de vedere fizic (acelasi tip de date, aceeasi dimensiune, etc.);
2) Campul de legatura din tabelul Parinte este bine sa fie declarat de tip Primary Key (Cheie primara);
3) Campul Foreign Key (Cheie externa) din tabelul Copil trebuie sa accepte doar valori ce exista in campul Primary Key, pentru a nu exista inregistrari orfane, fapt care se realizeaza prin impunerea integritații referențiale.
Pasul 0
Descarcați arhiva care conține fisierul ajutator si dezarhivați-l.
Pasul 1
Efectuați dublu click pe tabelul Copii. (1)
Efectuați un click pe comanda Design View (Modul de proiectare). (2)
O data intrați in modul de proiectare, vom insera un nou camp, inaintea campului Prenume, care va juca rolul de cheie straina.
Efectuați un click pe selectorul campului Prenume. (3)
Efectuați un click pe comanda Insert Rows (Inserare randuri). (4)
Efectuați un click in campul Field Name (Numele campului). (5)
Efectuați un click in campul Data Type (Tipul de date). (6)
Efectuați un click pe butonul indicat. (7)
Efectuați un click pe tipul de date Number (Numar). (8)
Access a atribuit subtipul de date Long Integer (Intreg lung) campului introdus, ceea ce este perfect intrucat vom dori sa relaționam acest camp cu un camp de tip AutoNumber din alt tabel.
Efectuați un click pe butonul Save (Salvare). (9)
Efectuați un click pe butonul Close (Inchidere). (10)
Pasul 2
Efectuați un click pe tab-ul Database Tools (Instrumente pentru baza de date). (1)
In acest moment vom incepe sa cream relația dintre tabele.
Instrumentul ce ne permite sa realizam acest lucru se regaseste in tab-ul Database Tools (Instrumente pentru baza de date), grupul Relationships (Relații).
Efectuați un click pe comanda Relationships (Relații). (2)
Atunci cand accesam instrumentul pentru crearea relațiilor, putem afisa tabelele si interogarile din baza de date prin intermediul comenzii Show Table (Afisare tabel), in cazul in care aceasta fereastra nu apare automat.
Aceste tabele si interogari pot fi adaugate in panoul Relationships (Relații) prin executarea unui dublu click pe cele dorite.
Efectuați dublu click pe tabelul Copii. (3)
Efectuați dublu click pe tabelul Parinti. (4)
Efectuați un click pe butonul Close (Inchidere). (5)
In acest moment, putem crea relația dintre cele doua tabele.
Pasul 3
Dupa ce tragem campul cheie primara din tabelul principal peste campul din tabelul cu care dorim sa il relaționam, apare fereastra de dialog Edit Relationships (Editare relații).
In cadrul acesteia, integritatea referențiala (Referential Integrity) impiedica apariția inregistrarilor orfane care nu au legatura in tabelul principal.
Un exemplu de inregistrare orfana in tabelul Copii ar fi atribuirea valorii 4 pentru campul ID_P in condițiile in care nicio inregistrare din tabelul Parinti nu contine valoarea 4 in campul cheie primara ID_Parinti (cu alte cuvinte, am atribui un copil unui parinte care nu exista).
Pentru a menține integritatea referențiala, exista doua setari opționale.
Cascade Update Related Fields (Actualizare in cascada a campurilor legate) specifica faptul ca, daca valoarea cheii primare din tabelul principal s-ar modifica (in cazul nostru, ID_Parinti), vor fi modificate si valorile din cheia straina a tabelului relaționat (in cazul nostru, ID_P), astfel incat sa corespunda noii valori a campului cheie primara.
Cascade Delete Related Records (Ștergere in cascada a inregistrarilor legate) specifica faptul ca, atunci cand dorim stergerea unei inregistrari din tabelul principal, inregistrarile corespondente din tabelul cu care este legat vor fi sterse si ele, de asemenea.
Bifați opțiunea Enforce Referential Integrity (Impune integritatea referențiala). (1)
Efectuați un click pe butonul Create (Creare). (2)
Observam ca pe legatura creata intre cele doua tabele, Access a inserat cifra 1 in dreptul tabelului parinte si simbolul infinitului in dreptul tabelului copil.
Efectuați un click pe comanda Save (Salvare). (3)
Efectuați un click pe comanda Close (Inchidere). (4)
Pasul 4
Efectuați dublu click pe tabelul Copii. (1)
In tabelul Copii a mai aparut un camp (pe care l-am adaugat la pasii inițiali din acest exemplu).
In cadrul acestui camp vom completa ID-ul parinților.
Dat fiind faptul ca am relaționat cele doua tabele si am impus integritatea referențiala, in acest camp putem introduce DOAR un ID care se regaseste in tabelul Parinti.
Efectuați un click in celula indicata. (2)
Efectuați un click in celula indicata. (3)
In momentul in care intenționam sa trecem la alta inregistrare, Access ne atenționeaza in legatura cu faptul ca valoarea introdusa nu corespunde niciunei valori din inregistrarile tabelului corespondent.
Efectuați un click pe butonul OK. (4)
In continuare vom introduce valori in campul ID_P, valori care corespund unor ID-uri de parinți din tabelul Parinti.
Dupa ce am atribuit copiilor cate un ID de parinte, vom inchide acest tabel.
Efectuați un click pe butonul Close (Inchidere). (5)
Pasul 5
Efectuați dublu click pe tabelul Parinti. (1)
Datorita relației create, in dreptul fiecarui parinte a aparut cate o opțiune de extindere a unui meniu ce ne afiseaza copiii acestuia.
Dupa apasarea acestui simbol, tabelul curent va afisa un subset de informații.
Efectuați un click pe butonul de afisare a foii secundare de date. (2)
Acum putem observa care parinți au copii si care sunt acei copii.
De reținut:
– dupa ce am relaționat doua tabele, nu mai putem adauga valori in cheia straina (Foreign Key) din tabelul Copii care nu exista intr-o celula din cheia primara (Primary Key) din tabelul Parinti (in cazul in care am impus integritatea referențiala);
– nu vom mai putea sterge inregistrari din tabelul parinte ce au inregistari corespondente in tabelul copil, cu excepția cazului in care bifam opțiunea corespunzatoare de menținere a integritații referențiale discutate anterior.
Lectia 5.3: Ce inseamna relatie N la M?
Preambul
Conform tipului de relație N la M, unei inregistrari din primul tabel ii corespund una sau mai multe inregistrari in cel de-al doilea tabel, si reciproc.
Pentru acest tip de relații avem nevoie de un al treilea tabel; intre fiecare dintre tabelele inițiale si acest al treilea tabel va exista cate o relație de tip 1 la N.
Pentru exemplul nostru avem create trei tabele: Clienti, Produse si Tranzactii.
Fiecare client poate achiziționa unul sau mai multe produse, iar un produs poate fi achiziționat de unul sau mai mulți clienți.
Pasul 0
Descarcați arhiva care conține fisierul ajutator si dezarhivați-l.
Pasul 1
Efectuați un click pe tab-ul Database Tools (Instrumente pentru baza de date). (1)
In acest moment vom incepe sa cream relația dintre tabele.
Instrumentul ce ne permite sa realizam acest lucru se regaseste in tab-ul Database Tools (Instrumente pentru baza de date), grupul Relationships (Relații).
Efectuați un click pe comanda Relationships (Relații). (2)
Efectuați un click pe comanda Show Table (Afisare tabel). (3)
Efectuați dublu click pe tabelul Clienti. (4)
Efectuați dublu click pe tabelul Produse. (5)
Efectuați dublu click pe tabelul Tranzactii. (6)
Efectuați un click pe butonul Close (Inchidere). (7)
Pasul 2
In acest moment, vom modifica dispunerea tabelelor in cadrul ferestrei Relashionships (Relații) pentru a crea relațiile dintre ele.
In acest moment, putem crea relațiile dintre tabele.
Bifați opțiunea Enforce Referential Integrity (Impune integritatea referențiala). (1)
Efectuați un click pe butonul Create (Creare). (2)
In acest moment, vom crea a doua relație.
Bifați opțiunea Enforce Referential Integrity (Impune integritatea referențiala). (3)
Efectuați un click pe butonul Create (Creare). (4)
Observam ca pe legaturile create intre cele trei tabele, Access a inserat cifra 1 in dreptul tabelelor parinte si simbolul infinitului in dreptul tabelului copil.
Efectuați un click pe comanda Save (Salvare). (5)
Efectuați un click pe comanda Close (Inchidere). (6)
Pasul 3
Efectuați dublu click pe tabelul Tranzactii. (1)
In tabelul Tranzactii vom specifica ID-urile clienților care au achiziționat produse, acestea din urma fiind identificate, la randul lor, prin ID-urile proprii.
Dupa cum putem observa, clientul avand ID-ul 1 a achiziționat produsele cu ID-urile 1, 2 si 3, iar clientul avand ID-ul 2 a achiziționat produsele cu ID-urile 1 si 3.
Efectuați un click pe butonul Close (Inchidere). (2)
Efectuați dublu click pe tabelul Clienti. (3)
Datorita relațiilor create, in dreptul fiecarui client a aparut cate o opțiune de extindere a unui meniu ce ne afiseaza produsele achiziționate.
Dupa apasarea acestui simbol, tabelul curent va afisa un subset de informații.
Efectuați un click pe butonul de afisare a foii secundare de date. (4)
Dupa cum putem observa, clientul cu ID-ul 1 a achiziționat produsele cu ID-urile 1, 2 si 3, conform informațiilor introduse anterior.
Efectuați un click pe butonul de afisare a foii secundare de date. (5)
Dupa cum putem observa, clientul cu ID-ul 2 a achiziționat produsele cu ID-urile 1 si 3, conform informațiilor introduse anterior.
Efectuați un click pe butonul de afisare a foii secundare de date. (6)
In schimb, clientul cu ID-ul 3 nu a achiziționat niciun produs deoarece nu i-am atribuit nicio inregistrare in tabelul Tranzactii.
Aceleasi informații le putem regasi si in tabelul Produse, fiecarui produs fiindu-i asociate inregistrarile din tabelul Tranzactii, reprezentand clienții care l-au achiziționat.