Cheia primara — ce este si de ce e obligatorie
Cheia primara (Primary Key) este campul (sau combinatia de campuri) dintr-un tabel care identifica in mod unic fiecare inregistrare. Doua reguli obligatorii: valoarea cheii primare nu se poate repeta la doua inregistrari diferite si nu poate ramane necompletata (nu poate fi goala).
Codul numeric personal (CNP) identifica fiecare persoana in mod unic — nu exista doi oameni cu acelasi CNP. La fel, codul de bare al unei piese dintr-un depozit identifica exact acea piesa, chiar daca in depozit exista alte piese cu denumire asemanatoare.
Cum alegi cheia primara
Cineva alege campul Nume ca si cheie primara, crezand ca doi angajati nu vor avea niciodata acelasi nume. Cand apare al doilea "Popescu Ion", Access refuza sa salveze acel rand — nu iti permite sa introduci o valoare care exista deja in campul-cheie, pentru ca ar incalca regula de unicitate.
| Nume (cheie primara?) | Functie |
|---|---|
| Popescu Ion | Electrician |
| Popescu Ion | Lacatus mecanic |
Al doilea rand nu poate fi salvat asa cum e — Access semnaleaza o eroare de valoare duplicata in cheia primara.
| id_angajat | Nume | Functie |
|---|---|---|
| 1 | Popescu Ion | Electrician |
| 2 | Popescu Ion | Lacatus mecanic |
Acum cei doi angajati coexista fara probleme, pentru ca id_angajat este diferit (1, respectiv 2), chiar daca numele e identic.
1. Deschide tabelul in Vizualizare Proiectare (Design View) — clic dreapta pe numele tabelului in panoul din stanga si alege aceasta optiune, sau butonul corespunzator din fila Home/Pornire.
2. Da clic pe randul campului pe care vrei sa il faci cheie primara (ex. id_angajat).
3. Clic dreapta pe bara gri din stanga randului si alege optiunea Cheie primara (Primary Key) din meniul aparut — sau apasa butonul cu pictograma unei chei din grupul de instrumente al filei de proiectare a tabelului.
4. Langa numele campului apare simbolul unei chei mici — semn ca operatia a reusit.
5. Salveaza tabelul (Ctrl+S).
Cand creezi un tabel nou direct in modul Vizualizare Foaie de date (Datasheet View) — ecranul in care vezi tabelul ca un grid cu randuri si coloane, asemanator unei foi de calcul, spre deosebire de Vizualizare Proiectare unde vezi doar structura campurilor — Access adauga automat un camp numit ID, de tip AutoNumber, si il seteaza singur ca si cheie primara — de aceea majoritatea tabelelor din Access au un camp ID la inceput.
Indexul — cauta rapid fara sa parcurgi tot tabelul
Indexul alfabetic de la finalul unui manual iti spune direct la ce pagina apare un termen — nu citesti toata cartea ca sa il gasesti. Un index de tabel functioneaza la fel: Access "stie" deja unde sa caute, in loc sa verifice fiecare inregistrare pe rand.
In Vizualizare Proiectare (Design View), selectezi campul dorit (ex. campul judet dintr-un tabel de Clienti, daca il cauti des) si, in panoul de proprietati de jos, la proprietatea Indexed (Indexat), alegi:
Yes (Duplicates OK) — index simplu, valorile se pot repeta (potrivit pentru un camp precum judet, unde multi clienti pot fi din acelasi judet)
Yes (No Duplicates) — index cu unicitate impusa, ca la cheia primara (potrivit pentru un camp precum CNP, chiar daca nu e el cheia primara aleasa)
Cheia externa — legatura spre alt tabel
Tabelul CLIENTI tine datele fiecarui client o singura data:
| id_client | nume | telefon |
|---|---|---|
| 1 | Popescu Ion | 0742 111 222 |
| 2 | Ionescu Maria | 0745 333 444 |
| 3 | Vasilescu Radu | 0746 555 666 |
Tabelul COMENZI tine comenzile, iar campul id_client este cheia externa — arata din CLIENTI cine a facut fiecare comanda, fara sa mai copieze numele si telefonul pe fiecare rand:
| id_comanda | data | id_client (cheie externa) | valoare (lei) |
|---|---|---|---|
| 101 | 03.03.2026 | 1 | 450 |
| 102 | 05.03.2026 | 1 | 220 |
| 103 | 06.03.2026 | 2 | 900 |
| 104 | 07.03.2026 | 3 | 150 |
Observa ca valoarea 1 apare de doua ori in coloana id_client din COMENZI (comenzile 101 si 102) — asta e permis pentru o cheie externa, pentru ca acelasi client poate avea mai multe comenzi. In schimb, id_comanda ramane unic, pentru ca este cheia primara a tabelului COMENZI.
Atentie la tipul de date al cheii externe: campul id_client din COMENZI NU se creeaza ca AutoNumber, desi id_client din CLIENTI este AutoNumber. In Vizualizare Proiectare a tabelului COMENZI, il creezi cu tipul de date Number (Numar) si proprietatea Field Size (Dimensiune camp) setata pe Long Integer (Numar intreg lung) — este singura combinatie pe care Access o accepta intre o cheie primara AutoNumber si cheia ei externa. Daca lasi id_client tot AutoNumber in COMENZI, campurile nu se mai potrivesc ca tip de date si relatia din pasii urmatori nu se poate crea.
Relatia unu-la-mai-multi (1-la-N)
Partea "1" = tabelul CLIENTI (un singur client cu id_client = 1: Popescu Ion).
Partea "N" = tabelul COMENZI (Popescu Ion apare de 2 ori ca id_client — comenzile 101 si 102).
Un client poate avea 0, 1 sau mai multe comenzi. O comanda apartine intotdeauna unui singur client — nu are sens ca o comanda sa fie "pe jumatate" a doi clienti diferiti.
1. Deschide fila Database Tools (Instrumente baze de date) din ribbon.
2. Apasa butonul Relationships (Relatii).
3. Daca tabelele CLIENTI si COMENZI nu sunt deja afisate, adauga-le din fereastra care apare (Show Table / Afisare tabel).
4. Cu mouse-ul, trage campul id_client din tabelul CLIENTI peste campul id_client din tabelul COMENZI.
5. Se deschide fereastra Edit Relationships (Editare relatii) — verifici ca cele doua campuri sunt corect asociate.
6. Apasa Create (Creeaza) pentru a salva relatia.
Dupa acest pas, intre cele doua tabele apare o linie subtire in fereastra Relationships — asta arata ca legatura exista, dar inca fara niciun simbol pe ea. Abia dupa ce bifezi Enforce Referential Integrity (pasul urmator, explicat in ATOM 6) linia devine mai groasa la capete si apar cifra "1" langa CLIENTI si semnul infinit "∞" langa COMENZI — asa arata Access vizual relatia 1-la-N confirmata. (Access nu afiseaza niciodata litera "N" pe linie — doar simbolul ∞.)
Integritatea referentiala — regula care nu lasa date rupte
La pasul 5 din crearea relatiei (fereastra Edit Relationships), bifezi caseta Enforce Referential Integrity (Impune integritatea referentiala), apoi apesi Create.
Optional, mai apar doua casete: Cascade Update Related Fields (actualizeaza automat id_client-ul in COMENZI daca il modifici in CLIENTI) si Cascade Delete Related Records (sterge automat si comenzile atunci cand stergi clientul). Le bifezi doar daca esti absolut sigur ca vrei acest comportament — in mod normal, pentru comenzi deja facturate, NU vrei ca stergerea unui client sa iti stearga si istoricul comenzilor.
Cineva incearca sa stearga direct din tabelul CLIENTI un client care are deja comenzi, fara sa observe legatura. Daca integritatea referentiala este activata (fara stergere in cascada), Access refuza stergerea si afiseaza o eroare legata de inregistrari asociate in alt tabel. Nu este un bug — este exact protectia care te impiedica sa ramai cu comenzi fara client valid in spate.
Recapitulare si conexiuni
CLIENTI (id_client = cheie primara)
↓ legatura prin cheia externa id_client
COMENZI (id_comanda = cheie primara, id_client = cheie externa)
↓ protejata de
Integritate referentiala — nicio comanda fara client valid, niciun client sters cat timp mai are comenzi
Acum ca cele doua tabele sunt corect legate, urmatorul pas este sa introduci datele mai usor si mai sigur decat direct in tabel. In lectia urmatoare vei invata cum se creeaza formulare (forms) — ecrane prietenoase de introducere a datelor, construite pe baza tabelelor CLIENTI si COMENZI.
Cheia primara — unica, niciodata goala; de preferat AutoNumber cand nu ai un camp natural sigur unic.
Indexul — viteza la cautare/sortare, doar pe campurile folosite des.
Cheia externa — repeta valoarea cheii primare din alt tabel; se poate repeta ea insasi.
Relatia 1-la-N — "1" langa tabelul parinte, "N" (infinit) langa tabelul copil.
Integritate referentiala — blocheaza comenzi orfane si stergeri care ar lasa date incoerente.