Definirea unei relatii intre tabelele bazei de date presupune existenta a cel putin doua tabele. In baza de date Angajati.sdf, se adauga tabelul AccessAng prin care se defineste tipul de acces la resursele materiale, financiare si informationale ale organizatiei.
Tabelul AccesAng are urmatoarea structura:
- IDAcc: identificator tip de acces; are rol si de cheie primara a tabelului AccesAng;
- Exp: explicatie cu privire la natura accesului;
- Obs: observatii cu privire la tipul de acces.
Tabela AccesAng este populata prin definirea nivelurilor de acces.
Intrucat tabelele Ang si AccesAng sunt relationate, acestea trebuie sa aiba ca punct de legatura un camp de acelasi tip in ambele tabele. Prin definirea tipurilor de acces, fiecare angajat are asociat un tip de acces, ceea ce inseamna ca in tabela Ang trebuie adaugat campul pentru definirea tipului de acces. Valoarea acestui camp va fi pusa in corespondenta cu IDAcc din tabela AccesAng, ceea ce inseamna ca:
- in tabela Ang, va fi adaugat un camp denumit IDAcc, avand acelasi tip cu IDAcc din tabela AccesAng; acest camp nu trebuie sa permita valori de null intrucat orice inregistrare din Ang are asociata o inregistrare din AccesAng; de asemenea, sunt permise repetitii ale valorilor acestui camp pentru inregistrari diferite;
- relatia dintre tabela AccesAng si tabela Ang este de tipul “one-to-many”, adica un tip de acces poate fi asociat mai multor angajati, iar un angajat poate avea asociat doar un singur tip de acces; relatia dintre cele doua tabele se construieste pe campul comun IDAcc cheie primara in tabela AccesAng si IDAcc camp definit in tabela Ang; acest al doilea camp poarta denumirea de cheie externa a tabelei Ang.
Cheia externa a unei tabele reprezinta campul comun al acesteia cu unul al altei tabele in care campul de legatura este cheie primara.
Pentru a defini o relatie intre tabela AccesAng si tabela Ang in Visual Studio 2008, se procedeaza astfel:
- din meniul contextual al tabelei care contine cheia externa Ang se selecteaza comanda Table Properties; pe ecran va aparea caseta de dialog Table Properties – Ang;
- se denumeste relatia in campul Relation Name (DefinireAcces);
- se definesc regulile la actualizarea si/sau stergerea inregistrarilor in AccesAng (CASCADE);
- se selecteaza tabela aflata la capatul “one” al relatiei, deci tabela care contine cheia primara, la optiunea Primary Key Table;
- se selecteaza tabela aflata la capatul “many” al relatiei, deci tabela care contine cheia externa, la optiunea Foreign Key Table;
- se selecteaza campul de legatura din tabela “one” a relatiei la Primary Key Table Column (IDAcc), respectiv campul de legatura din tabela “many” la Foreign Key Table Column (IDAcc);
- se adauga legatura formata la definirea relatiei prin apasarea butonului Add Columns;
- se finalizeaza definirea relatiei prin apasarea butonului Add Relation.
Astfel, atunci cand se adauga inregistrari in tabela Ang, campul cheie externa IDAcc poate lua valori doar din multimea celor introduse in IDAcc cheie primara a tabelului AccesAng. Mesajul de eroare care este afisat are forma:
Atunci cand se modifica valoarea cheii primare pentru una sau mai multe inregistrari din tabela AccesAng, aceste modificari sunt aplicate inregistrarilor in tabela Ang. Aplicarea se realizeaza prin comanda Execute SQL plasata in bara de instrumente Query Designer sau automat la inchiderea vizualizarii Show Table Data pentru cele doua tabele.
Atunci cand o inregistrare din tabela “one” AccesAng este eliminata, sunt sterse inregistrari din tabela “many” Ang prin aceleasi mecanisme ca in cazul actualizarii valorilor cheii externe IDAcc definita in tabela Ang. Stergerea unei inregistrari din tabela “one” AccesAng se realizeaza prin selectarea comenzii Delete din meniul contextual al inregistrarii selectate in vederea stergerii. Inregistrarea se selecteaza in totalitatea ei prin apasarea butonul asociat acesteia, acesta fiind plasat in fata primului camp vizualizat al tabelei in Show Table Data.