Documente Academic
Documente Profesional
Documente Cultură
Relatii Intre Tabele
Relatii Intre Tabele
1
1 Relaţii între tabele
O bază de date se compune din mai multe tabele. O tabelă este o structură logică de date
ce conţine informaţii pe care baza de date le reprezintă. Fiecare tabelă are un nume unic.
O tabelă este constituită dintr-un număr de coloane (atribute). Fiecare tabelă are o cheie
primară ce identifică liniile tabelei. Cheia primară poate consta dintr-un singur atribut sau
din mai multe atribute.
O tabelă se poate referi la atributele uneia sau mai multor alte tabele din baza de date.
Acest lucru se face prin cheia externă. Atunci când o tabelă trebuie să se refere la
atributele altei tabele, unul sau mai multe atribute ale tabelei vor conţine cheia externă,
care este cheia primară a tabelei referite. In cele ce urmează vom arăta modul în care se
descriu grafic şi programatic relaţiile între tabele (cum se specifică grafic faptul că un
atribut al unei tabele este cheie externă).
Pentru exemplificare vom utiliza tabelele de mai jos, care descriu proiectele unei
intreprinderi. In fiecare tabelă, atributele ce constituie cheia primară sunt subliniate.
tabela PROIECTE conţine identificatorul unui proiect ID_PRJ şi numele proiectului,
NUME_PRJ. Atributul ID_PRJ este cheia primară a tabelei,
PROIECTE
ID_PRJ NUME_PRJ
100 Web
200 Clienti
300 Furnizori
400 Personal
tabela ANGAJATI conţine date despre angajaţii intreprinderii care lucrează la diverse
proiecte. Ea conţine identificatorul angajatului ID_ANG, numele angajatului,
NUME_ANG şi departamentul de care aparţine angajatul, DPT_ANG. Cheia primară
a tabelei este ID_ANG,
ANGAJATI
2
tabela ORE_EXECUTATE conţine orele executate de fiecare angajat pentru un
anumit proiect. Ea conţine identificatorul proiectului, ID_PRJ, identificatorul
angajatului, ID_ANG şi numărul de ore prestate pentru un anumit proiect, ORE.
Cheia primară a tabelei este formată din atributele ID_PRJ şi ID_ANG,
ORE_EXECUTATE
SALARIU
DPT_ANG SAL_ORA
Informatica 60
Suport 40
Documentare 25
Cheia primară a tabelei SALARIU, DPT_ANG, este cheie externă în tabela ANGAJATI
(coloana DPT_ANG din tabela ANGAJATI).
Proiectarea celor patru tabele este prezentată mai jos. Numele departamentului se va
introduce cu o casetă combinată (Combo Box).
3
Figura 3. Proiectarea tabelei ORE_EXECUTATE.
4
Figura 6. Fereastra Show Table.
3. se selectează pe rând tabelele dorite din caseta Show Table şi se adaugă la fereastra
Relationships cu butonul Add. Se inchide caseta Show Table cu clic pe butonul
Close. Figura 7 arată fereastra Relationships cu tabelele adăugate.
5
b) meniul contextual al ferestrei
a) meniul Relationships
Relationships
Tabelul 1. Meniuri la afişarea ferestrei Relationship.
Semnificaţiile opţiunilor acestor meniuri şi a butoanelor corespunzătoare sunt
următoarele:
opţiunea Show Table şi butonul afişază caseta Show Table,
opţiunea Show All şi butonul afişază toate tabelele între care există relaţii,
în cazul unei tabele selectate, opţiunea Show Direct şi butonul afişază şi tabele ce
sunt în relaţii cu tabela selectată,
opţiunea Hide Table ascunde o tabelă selectată,
opţiunea Edit Relationship afişază caseta Edit Relationships din Figura 9 cu care se
definesc relaţiile între tabele.
6
Figura 9. Caseta Edit Relationships după definirea unei relaţii.
2. clic pe butonul Join Type, care afişază caseta Join Properties din Figura 10, unde
butonul 1 corespunde relaţiei unu la mai mulţi; clic pe butonul OK al casetei Join
Properties,
7
Figura 11. Fereastra Relationships cu relaţia între tabele.
Relaţia unul la mai mulţi apare desenată ca în Figura 12.
8
După definrea relaţiei între tabelele SALARIU şi ANGAJATI, tabela SALARIU arată ca
în Figura 15.
9
Figura 17. Caseta de dialog Create New.
3. se selectează din lista Left Table Name numele tabelei în care atributul este cheie
primară, în cazul nostru SALARIU,
4. se selectează din lista Left Column Name numele atributului care este cheie primară,
în cazul nostru DPT_ANG,
5. se selectează din lista Right Table Name numele tabelei în care atributul este cheie
externă, în cazul nostru ANGAJATI,
6. se selectează din lista Right Column Name numele atributului care este cheie
externă, în cazul nostru DPT_ANG,
7. se închide caseta Create New cu clic pe butonul OK,
8. se alege tipul relatiei unu la mai mulţi din caseta Join Properties ca mai sus,
9. se marchează opţiunea Enforce referenţial Integrity în caseta Edit Relationships,
10. clic pe butonul OK,
11. clic pe butonul Create al casetei Edit Relationships.
10
sunt afişate în culoarea gri. Relaţia este creată în baza de date cu clic pe butonul Create.
In acest moment butonul Create se transformă în buton OK vezi Figura 18.
Atunci când baza de date conţine prea multe tabele şi relaţii, fereastra Relationships
devine aglomerată. Putem afişa doar tabelele de interes cu relaţiile între ele. Pentru
aceasta procedăm după cum urmează:
1. se şterg toate tabelele din fereastra Relationships. Clic pe fereastra Relationships şi
apoi pe meniul Edit Clear Layout sau pe butonul al barei de instrumente,
2. se selectează din caseta Show Table una din tabelele de interes,
3. clic pe meniul Relationships Show Direct sau butonul şi în fereastră apar
toate tabele ce au relaţii cu tabela selectată, vezi Tabelul 1.
11
INNER JOIN nume_tabela_2 ON conditie;
In cazul a mai multe tabele, se repetă clauza INNER JOIN pentru câte condiţii este
nevoie. In cazul nostru, instrucţiunea SELECT este cea de mai jos.
La crearea unui formular de interogare din mai multe tabele se crează mai întâi
legăturile între tabele.
12
Figura 20. Caseta Show Table.
3. se selectează tabelele ANGAJATI şi SALARIU în caseta Show Table şi se adaugă la
formularul de interogare cu clic pe butonul Add; se închide caseta cu butonul Close;
tabelele apar în formularul Select Query ca în Figura 21, cu legăturile între ele,
13
Figura 22. Formularul completat.
5. se salvează formularul creat cu una dintre opţiunile Save sau Save As ale meniului
File, sau cu butonul Close al ferestrei formularului,
14
Figura 24. Instrucţiunea SELECT corespunzătoare formularului din Figura 22.
CLIENTI
15
COMENZI
16
Figura 27. Pasul I. Crearea unei interogări. Selectarea câmpurilor.
17
Figura 29. Pasul III. Alegerea titlului interogării.
4. se introduce titlul interogării în caseta What title do you want for your query; se
poate alege între a executa interogarea marcând opţiunea Open the query to view
information şi modificarea interogării marcând opţiunea Modify the query design;
clic pe butonul Next şi se afişază tabela rezultat din Figura 30.
18
Putem sumariza rezultatele căutării prin aplicarea unor funcţii de agregare. Pentru aceasta
la pasul II, Figura 28, alegem opţiunea Summary şi obţinem caseta din Figura 32.
3. clic pe Summary Options şi se afişază caseta Summary Options din Figura 33,
19
Figura 33. Pasul III. Alegerea funcţiei de agregare.
20
Figura 34. Pasul IV. Gruparea datelor calendaristice în interogare.
21
Pentru a exemplifica modul de creare a unui formular cu subformulare vom considera
tabelele CLIENTI şi COMENZI din Figura 25 şi Figura 26, cu informaţii despre clienţii
unei intreprinderi şi comenzile lor. Cheia primară din tabele este subliniată.
22
Figura 38. Pasul II. Selectarea datelor ce vor apare în subformular.
6. aplicaţia wizard afişază caseta de dialog din Figura 39; în lista How do you want to
view your data? se alege tabela ce va apare în formularul principal, în cazul nostru se
marchează opţiunea by CLIENTI; se marchează opţiunea Form with subform(s) şi
clic pe butonul Next,
23
Figura 39. Pasul III. Alegerea tabelei ce va apare în formularul principal.
7. se aleg opţiunile dorite din casetele de dialog următoare.
Formularul creat în final este cel din Figura 40, în care, pentru fiecare linie din tabela
CLIENTI, avem afişat în subformular liniile cu comenzi din tabela COMENZI.
24
Figura 41. Formular subformulare în vederea Datasheet.
25
Figura 43. Proiectarea formularului creat de aplicaţia vrăjitor.
Adăugarea obiectului subformular se face astfel:
1. se afişază caseta Toolbox din Figura 44 cu clic pe butonul Toolbox , al barei de
instrumente,
26
Figura 45. Aplicaţia Subform Wizard, pasul I.
3. la pasul I se marchează opţiunea Use existing Tables and Queries, vezi Figura 45.
Clic Next şi se afişază pasul II în Figura 46,
27
4. la pasul II se selectează tabela COMENZI din lista Tables / Queries şi se mută
câmpurile dorite din lista Available Fields în lista Selected Fields cu clic pe butonul
. Clic Next şi se afişază pasul III din Figura 47,
28
Figura 48. Aplicaţia Subform Wizard, pasul IV.
6. la pasul IV se alege numele subformularului în caseta What name would you like
for your subform or subreport? Clic Finish.
Fromularul proiectat în vederea Design este cel din Figura 49 iar în vederea Form cel din
Figura 50.
29
Figura 49. Formularul Proiectat în vederea Design.
30
Figura 51. Caseta de proprietăţi a subformularului.
31
Figura 53. Formularul proiectat în vederea Datasheet cu ultima înregistrare expandată.
Instrucţiunea SELECT de selectarea a datelor subformularului din tabela COMENZI este
cea din Figura 54.
32
R1 R2
X Y Y Z
X1 Y1 Y1 Z1
X2 Y2 Y2 Z2
X3 Y2 Y2 Z3
X4 Y3 Y3 Z4
a) tabela R1 b) tabela R2
Tabelul 3. Tabelele R1 şi R2.
Vom selecta câmpurile X, Y, Z ce au valori egale pentru câmpurile Y din cele două
tabele. Definiţiile celor două tabele sunt cele din Tabelul 4 şi Tabelul 5.
a) definiţie b) date
Tabelul 4. Tabela R1.
a) definiţie b) date
Tabelul 5. Tabela R2.
Crearea interogării se face astfel.
1. în caseta Database se selectează opţiunea Query,
2. clic pe opţiunea Create query in Design View ce afişază formularul Select Query şi
caseta Show Table,
3. se selectează tabelele R1 şi R2 în caseta Show Table şi se adaugă la formularul de
interogare cu clic pe butonul Add; se închide caseta cu butonul Close; tabelele apar în
formularul Select Query ca în Figura 55,
33
4. se crează legătura între câmpul Y din tabela R1 şi câmpul Y din tabela R2 selectând
câmpul Y în tabela R1 şi trăgându-l cu mousul peste câmpul Y din tabela R2, vezi
Figura 55,
5. se salvează formularul creat cu una dintre opţiunile Save sau Save As ale meniului
File, sau cu butonul Close al ferestrei formularului,
6. se afişază tabela rezultat cu clic pe butonul al barei de instrumente sau pe meniul
Query Run, sau pe meniul View Datasheet View sau pe opţiunea Datasheet
View a meniului contextual al formularului.
34
Figura 57. Instrucţiunea SELECT corespunzătoare formularului din Figura 55.
La un clic cu butonul drept pe legătură se afişază meniul contextual al legăturii din Figura
58. In acest meniu se poate şterge legătura şi se poate afişa caseta Join Properties din
Figura 59.
CLIENTI
35
2341 Vasilescu Ioan Timisoara
1956 Nicolae Vasile Cluj
COMENZI
Cheia primară a tabelei CLIENTI este ID_CLIENT, cea a tabelei COMENZI este
ID_COMANDA. Coloana ID_CLIENT a tabelei COMENZI este cheie externă. Câmplul
DATA va fi de tipul Date/Time, iar câmpul SUMA de tipul Currency.
se vor proiecta cele două tabele; regulile de validare sunt: ID_CLIENT >= 1000,
ID_COMANDA >= 100,
se vor introduce datele cu ajutorul unui formular,
se va crea legătura corespunzătoare cheii externe,
se va crea o interogare care să afişeze câmpurile NUME, PRENUME, ADRESA,
NUMAR_COMANDA, DATA şi SUMA,
se va scrie instrucţiunea SELECT pentru interogare.
ANGAJATI
DEPARTAMENT
ID Nume Adresa
100 Contabilitate Craiova
200 Marketing Bucuresti
300 Vanzari Craiova
Cheile primare ale celor daouă tabele sunt câmpurile ID de tip numeric. Celelalte câmpuri
au tipul text.
se vor proiecta cele două tabele,
se vor introduce datele în câmpurile Departament din tabela ANGAJATI şi Nume din
tabela DEPARTAMENT cu ajutorul unei casete combinate (Combo Box),
36
se va crea o interogare care să afişeze câmpurile ID, Nume, Department, Functie din
tabela ANGAJATI şi câmpul Adresa din tabela DEPARTAMENT. Condiţia de
selectare este câmpul Department al tabelei ANGAJATI să fie egal cu câmpul Nume
al tabelei DEPARTAMENT.
37