TUTORIALE TIC COLEGIUL ECONOMIC "DPM" ALBA IULIA
Profesor
Simona Dogaru ,
ISBN 978-973-0-31260-7
; Alba Iulia, 2020 ISBN
978-973-0-31261-4 ; Alba Iulia, 2020
|
În acest capitol vom verifica cheile relaţiilor,
apoi vom defini relaţiile permanente din cadrul bazei de date. Se vor
stabili reguli de menţinere a integrităţii referenţiale.
Operaţii care trebuie cunoscute
-
Realizarea
relaţiilor între tabele: Stabilirea
relaţiei se face din meniul Tools→Relationships sau
prin click pe butonul
.
Selectăm tabelele, poziţionăm mouse-ul pe câmpul tabelei părinte şi
glisăm(tragem) peste câmpul din tabela fiu. Automat se deschide
fereastra de editare a legăturii unde vom
apăsa pe primul buton cu numele Creare.
-
Menţinerea
integrităţii referenţiale:
Deschidem fereastra Relationships, dăm dublu click pe
relaţia dintre tabelele, activăm opţiunea Impunere
integritate referenţială. Aici putem activa şi opţiunile Actualizare în cascadă câmpuri
corelate şi Ştergere în cascadă câmpuri corelate.
-
Vizualizarea
relaţiilor: deschidem
fereastra Relationships
Stabilirea unei relaţii între tabelele unei baze de date
este determinată de obţinerea unor informaţii prin interogări. De
asemenea procesul de actualizare sau ştergere se realizează concomitent
în ambele tabele.
Tabelele care participă la o relaţie se numesc: tabela
părinte şi tabela fiu. Între ele pot exista relaţiile:
-
Relaţie una-la-una: unei înregistrări din
tabela părinte îi corespunde o singură înregistrare în tabela fiu
-
Relaţie
una-la-mai-multe: unei
înregistrări din tabela părinte îi corespund mai multe înregistrări în
tabela fiu
-
Relaţie
mai-multe-la-una: unei
înregistrări din tabela fiu îi corespund mai multe înregistrări în
tabela părinte
Tipul relaţiei va fi dat de tipul indexului din tabela fiu.
Dacă indexul este cheie unică atunci relaţia va fi una-la-una; dacă nu
este cheie unică atunci relaţia va fi una-la-mai-multe. Ambii indecşi
trebuie fie de acelaşi tip.
Rezultatul returnat de o relaţie îl puteţi privi ca un tabel
care are pe fiecare linie valori şi din primul tabel şi din al doilea.
Tipuri de relaţii:
-
Inner join (Uniune
internă) : include numai acele
rânduri din ambele tabele care au valori egale în câmpul de legătură.
-
Left join (Uniune
externă la stânga): include toate
articolele tabelei părinte şi numai acele linii din tabela fiu pentru
care există corespondent în tabela părinte
-
Right join (Uniune
externă la dreapta):
include toate articolele tabelei fiu şi numai acele linii din
tabela părinte pentru care există corespondent în tabela fiu
Reguli de integritate referenţială
Integritatea referenţială funcţionează astfel: nu pot fi
şterse înregistrări din tabela părinte dacă există înregistrări cu
aceeaşi valoare în tabela fiu, adică nu putem lăsa orfani.
Atunci când impunem această regulă se vor activa opţiunile
pentru actualizare şi pentru ştergere.
-
Opţiunea pentru
actualizare: actualizează toate
înregistrările legate în tabela fiu cu noile valori ale cheii
modificate din tabela părinte. Dacă nu impunem această regulă atunci se
interzice corectarea valorii cheii primare în tabela părinte dacă sunt
înregistrări legate.
-
Opţiunea pentru
ştergere: se şterg toate
înregistrările care au aceeaşi valoare în tabela fiu şi în tabela
părinte. Dacă nu impunem această regulă atunci se interzice ştergerea
valorii cheii primare în tabela părinte dacă sunt înregistrări legate.
Vom realiza o evidenţă informatizată a elevilor din liceu.
Rezolvare:
Vom crea tabelele având structurile de mai jos. Cheile
primare sunt boldate. Stabiliţi legătura Clase→1,n→Elevi.
Tabela Clase
Denumire câmp |
Tip de dată |
Dimensiune câmp |
Clasa |
Text |
3 |
Diriginte |
Text |
20 |
Sala |
Text |
10 |
profil |
Text |
35 |
Tabela Elevi
Denumire câmp |
Tip de dată |
Dimensiune câmp |
Nr
matricol |
Numar |
Intreg |
Nume
elev |
Text |
20 |
Media |
Numar |
Simpla precizie, 2 zecimale |
Data
nasterii |
Data/Ora |
Data medie |
Caminist |
Da/Nu |
|
Clasa |
Text |
3 |
1.
Deschidem în modul Design
View şi creem cele două tabele.
2.
Tabela Clase
are ca şi index primar câmpul Clasa.
3.
Tabela Elevi se
indexează neunic – Da (Cu dubluri) după câmpul cu
acelaşi nume.
4.
Introducem valori, ca în
imaginea de mai jos:
Observaţie:
Tabela Clase conţine două clase, 12D şi 12E,
cărora nu le-au fost alocate elevi. Tabela Elevi
conţine elevi în clasa
5.
Stabilirea relaţiei se face
astfel:
o
Selectăm tabelul Clase
şi activăm fila Foaie de date.
o
Din Grupul Relaţii
alegem comanda Relaţii
o
Din fila Proiectare
care se activează alegem Afişare tabel.
o
În fereastra de dialog care se
deschide selectăm tabelele Clase şi Elevi
prin dublu-click pe numele lor după care dăm click pe butonul Închidere.
o
Poziţionăm mouse-ul pe câmpul
(cheia) de legătură a tabelei părinte şi glisăm(tragem) peste câmpul
(cheia) din tabela fiu. Automat se deschide fereastra
de editare a legăturii unde vom apăsa pe primul buton cu numele Creare.
o
Această fereastră conţine
informaţii despre tabelele relaţionate, tipul legăturii precum şi
despre câmpurile participante la relaţie. Tipul relaţiei o putem
stabili dând click pe butonul Tip asociere.., poziţia
tabelelor relaţionate cu ajutorul celui de-al doilea buton cu numele Creare...
Tabelele între care există o relaţie vor arăta astfel:
6.
Prin faptul că s-a ales primul
tip de asociere, vor fi afişaţi numai elevii care au clase asociate în
tabela părinte, ca în figura de mai jos:
Cu aceleaşi tabele de la aplicaţia 1 veţi realiza pe rând
legătură la stânga şi apoi legătura la dreapta. Observaţi rezultatul.
Rezolvare:
1.
După ce s-a stabilit relaţia
între cele două tabele, se pot edita rapid elevii fiecărei clase în
modul Foaie de date, deoarece tabelul Elevi
apare ca subset de date asociat clasei.
Dacă deschidem tabela Clase se va
observa semnul plus în faţa primului câmp.
Dacă apăsăm pe el, se va deschide o subfereastră cu
valorile din tabela legată, Elevi.
2.
Deci în tabela părinte, Clase, avem clase care nu au elevi iar în tabela fiu, Elevi, avem elevi a căror clasă nu a fost încă definită
în tabela părinte. Deschidem fereastra de Relaţii şi
apăsăm pe butonul Tip asociere şi
bifăm pentru relaţie la stânga, adică 2.
3.
Prin această asociere obţinem
toate clasele cu elevii corespunzători. Vor lipsi elevii din clasa
4.
Ne întoarcem în fereastra de
relaţii, dăm dublu click pe relaţie , selectăm butonul Tip asociere şi
bifăm opţiunea 3, adică uniune la dreapta.
5.
Prin această asociere obţinem
toţi elevii cu clasele corespunzătoare. Vor lipsi clasele 12D şi 12E.
Proiectaţi baza de date Firma ce conţine
informaţii despre comenzile de produse ale furnizorilor cu care
lucrează firma.
a)
Pentru tabelele de mai jos
stabiliţi relaţiile: Furnizori→1,n→Comenzi şi
Comenzi→1,n→Produse.
b)
Impuneţi condiţia de
actualizare. Faceţi actualizări asupra primului furnizor în tabela Furnizori . Schimbaţi numele acestuia şi urmăriţi efectul
în tabela Comenzi.
c)
După impunerea integrităţii
referenţiale între tabelele Comenzi şi Produse
şi impunerea restricţiei la ştergere, ştergeţi comanda cu numărul 1 din
tabela Comenzi. Observaţi ce se întâmplă în tabela Produse.
Tabela Comenzi
Denumire câmp |
Tip de dată |
Dimensiune câmp |
Nr comanda |
numar |
Intreg |
Data |
Data/Ora |
Data
medie |
Furnizor |
text |
20 |
Valoare
|
numar |
Simpla
precizie, 3 zecimale |
Tabela Produse
Denumire câmp |
Tip de dată |
Dimensiune câmp |
Nr
comanda |
numar |
Intreg |
Codprodus |
Text |
5 |
Cantitate |
Numar |
Simpla precizie, 2 zecimale |
Pret |
Numar
|
Simpla precizie, 2 zecimale |
Tabela Furnizori
Denumire câmp |
Tip de dată |
Dimensiune câmp |
Furnizor |
Text |
20 |
Adresa |
Text |
50 |
Rezolvare:
a)
1.
Deschidem fereastra Relaţii
şi introducem cele trei tabele folosindu-ne de fereastra Afişare
tabel.
2.
Cu ajutorul mouse-ului prin
operaţia de glisare vom trasa legăturile astfel:
-
Din tabela Furnizori
spre tabela Comenzi , câmpul (cheia) de legătura fiind
furnizor (vezi figura de mai jos)
-
Din tabela Comenzi
spre tabela Produse, câmpul (cheia) de legătura fiind nr_comanda (vezi figura de mai jos)
-
Salvăm relaţiile stabilite
3.
Relaţiile vor arăta ca în figura
de mai jos:
b)
1.
Deschidem fereastra Relaţii.
Dăm dublu click pe relaţia dintre tabelele Furnizori
şi Comenzi.
2.
Activăm opţiunea Impunere
integritate referenţială precum şi cel de actualizare adică: Actualizare în cascadă câmpuri corelate. Şi apoi OK
3.
Relaţia va arăta
ca în figura de mai jos. Observaţi simbolurile introduse: 1 şi ∞
4.
Deschidem tabela Furnizori
şi schimbăm numele primei societăţi. Salvăm şi închidem .
5.
Deschidem tabela Comenzi
şi vom observa că s-a produs modificarea automat şi aici.
c)
1.
Deschidem fereastra Relationships.
Dăm dublu click pe relaţia dintre tabelele Comenzii şi Produse.
2.
Activăm opţiunea Impunere
integritate referenţială precum şi cel de ştergere automată adică: Ştergere în cascadă câmpuri corelate. Şi apoi OK
3.
Relaţia va arăta
ca în figura de mai jos. Au apărut şi în acest caz simbolurile: 1 şi ∞.
032
4.
Deschidem tabela Comenzi, ştergem prima comandă şi salvăm.
5.
Deschidem tabela Produse
şi observăm că nr_comandă cu valoarea 1 nu mai există
în tabelă. Deci ştergerea s-a efectuat automat datorită măsurilor de
integritate stabilite.