Invatare Atomica

Structura bazei: tabel, inregistrare, camp, cheie primara, index

Cum se organizeaza datele intr-un tabel si cum se leaga doua tabele: Autovehicule si Interventii.

Progres lectie:
0%
🎯

Obiectivul lectiei

Vei intelege din ce piese este facuta o baza de date — tabel, inregistrare, camp, cheie primara, index — si vei vedea cum doua tabele separate, Autovehicule si Interventii, raman legate intre ele fara sa repete aceleasi date de zeci de ori. Aceasta structura sta la baza oricarei evidente electronice de atelier: masini, clienti, piese, comenzi.

Dupa aceasta lectie vei putea:

  • Sa explici in cuvinte simple ce este un tabel, o inregistrare si un camp intr-o baza de date
  • Sa recunosti si sa alegi o cheie primara corecta pentru un tabel nou
  • Sa explici de ce nu repeti datele unei masini in fiecare interventie, ci le legi printr-un camp comun
  • Sa citesti si sa construiesti o relatie unu-la-multe intre doua tabele, cu exemplu numeric
  • Sa explici la ce foloseste un index si sa il setezi pe un camp cautat des
  • Sa recunosti greseala de a folosi un numar de inmatriculare drept cheie primara si sa o corectezi

Incearca singur!

Provocare — inainte sa citesti:

La atelier tii evidenta masinilor si a reparatiilor facute la fiecare. O masina poate trece de multe ori prin atelier de-a lungul anilor. Daca ai scrie totul intr-un singur tabel urias, cu o linie pentru fiecare interventie si toate datele masinii repetate pe fiecare linie (marca, model, numar de inmatriculare, an fabricatie...), ce probleme crezi ca ar aparea dupa 2-3 ani de evidenta? Noteaza mai jos cel putin doua probleme la care te gandesti.

💡 Ai nevoie de un indiciu?

Gandeste-te ce se intampla daca schimbi numarul de telefon al unui client care are 40 de fise de reparatie in caiet — trebuie sa il corectezi in 40 de locuri, si daca uiti unul, ai date contradictorii. Acelasi lucru se intampla si cu marca si modelul unei masini, daca le repeti la fiecare interventie.

Solutia este exact subiectul lectiei de azi: doua tabele separate, legate printr-un singur camp comun.

1

De la fisa pe hartie la tabel electronic

O baza de date organizeaza informatia in trei niveluri, unul in altul:
Tabel — o colectie de informatii despre acelasi fel de lucru (de exemplu, toate automobilele aduse la atelier). Corespunde, cam, unei foi de calcul intregi.
Camp — o categorie de informatie care se repeta identic la fiecare element (numarul de inmatriculare, marca, anul fabricatiei). Corespunde unei coloane.
Inregistrare — toate informatiile despre UN singur element concret, cu toate campurile lui completate (o masina anume, cu toate datele ei). Corespunde unui rand.
Analogie din atelier — dulapul cu fise:

Gandeste-te la un dulap cu fise de masini, ordonate una dupa alta. Dulapul intreg, cu toate fisele din el, este tabelul Autovehicule. O singura fisa, cea a unei masini anume, este o inregistrare. Rubrica "Marca", care apare identic, in acelasi loc, pe toate fisele, este un camp.

De ce conteaza aceasta distinctie:

Cand cineva iti spune "adauga o inregistrare noua", inseamna sa adaugi o masina noua (un rand nou), nu o coloana noua. Cand cineva iti spune "adauga un camp nou", inseamna ca vrei sa retii o informatie noua despre toate masinile deodata (de exemplu, culoarea) — asta se face o singura data, la nivel de tabel, nu la fiecare masina in parte.

2

Primul tabel: Autovehicule

Cand proiectezi un tabel, alegi doua lucruri pentru fiecare camp: numele lui si tipul de date pe care il accepta (text scurt, numar, data calendaristica etc.). Tipul de date corect evita erorile — de exemplu, anul fabricatiei trebuie sa fie Numar, nu Text, ca sa poti sorta si compara masinile dupa vechime.
Structura tabelului Autovehicule:
CampTip de dateCe retine
ID_AutoAutoNumberCheia primara — generata automat de Access, 1, 2, 3...
Nr_InmatriculareShort TextNumarul de pe placuta (ex. NT-07-ABC)
MarcaShort TextDacia, Volkswagen, Ford...
ModelShort TextLogan, Golf, Focus...
An_FabricatieNumberAnul de fabricatie, ca numar intreg
Date reale in tabelul Autovehicule:
ID_AutoNr_InmatriculareMarcaModelAn_Fabricatie
1NT-07-ABCDaciaLogan2019
2NT-12-XYZVolkswagenGolf2021
3NT-45-DEFDaciaLogan2019
4NT-88-GHIFordFocus2017

Observa masinile 1 si 3: aceeasi marca, acelasi model, acelasi an de fabricatie — dar cu ID_Auto diferit, deci sunt doua masini distincte, fara nicio confuzie.

3

Cheia primara — identificatorul care nu se repeta niciodata

Cheia primara (Primary Key) este campul — sau, mai rar, grupul de campuri — ales sa identifice fara echivoc fiecare inregistrare dintr-un tabel. Trebuie sa respecte doua reguli stricte: fiecare valoare este diferita (nu se repeta niciodata la doua inregistrari) si campul nu poate fi gol (fara valoare NULL). In tabelul Autovehicule, ID_Auto joaca acest rol.
Cum se seteaza in Access:

Deschizi tabelul in Design View (clic-dreapta pe numele tabelului din panoul din stanga → Design View). Dai clic pe randul campului dorit (ID_Auto), apoi din panglica (Ribbon), tab-ul Design, grupul Tools, dai clic pe butonul Primary Key (are o pictograma de cheita). Langa camp apare simbolul unei chei — semn ca acel camp este acum cheia primara a tabelului.

Greseala frecventa: cheia primara = numarul de inmatriculare

Multi incepatori aleg Nr_Inmatriculare drept cheie primara, pentru ca pare unic. Problema apare cand o masina este revanduta si renumerotata, sau cand introduci temporar o masina fara placute inca puse (masina noua, adusa direct din service auto vecin). Recunosti greseala atunci cand trebuie sa "schimbi cheia primara" a unei inregistrari existente — lucru pe care o cheie primara buna nu ar trebui sa il ceara niciodata. Reparatia: foloseste un camp ID generat automat (AutoNumber) ca si cheie primara, iar Nr_Inmatriculare ramane un camp normal, care se poate edita oricand fara sa afecteze legaturile catre celelalte tabele.

4

Al doilea tabel: Interventii

O masina trece de multe ori prin atelier de-a lungul anilor: schimb de ulei, reparatie frana, revizie generala. Fiecare vizita este o interventie separata. In loc sa adaugi coloane noi in Autovehicule pentru fiecare vizita (ceea ce ar fi imposibil de gestionat), construiesti un tabel separat, Interventii, cu propria cheie primara.
Structura tabelului Interventii:
CampTip de dateCe retine
ID_InterventieAutoNumberCheia primara — generata automat de Access, 101, 102, 103...
DataDate/TimeData la care s-a facut interventia
DescriereShort TextCe lucrare s-a facut (schimb ulei, reparatie frana...)
Cost_LeiNumberCostul interventiei, in lei
Cod_AutoNumber (Long Integer)Cheia externa spre Autovehicule.ID_Auto

Regula de tip pentru cheia externa: ID_Auto din Autovehicule este AutoNumber, iar Access stocheaza intern un AutoNumber ca Number — Long Integer. Ca Cod_Auto sa poata primi valorile lui ID_Auto si sa se poata construi relatia dintre cele doua tabele, Cod_Auto trebuie setat exact Number, cu marimea de camp (Field Size) Long Integer — acelasi tip pe care il vei intalni si la id_client din lectia 6, ca si cheie externa spre Clienti.id_client. Daca alegi alt tip (de exemplu tot AutoNumber, alegerea "naturala" prin analogie cu ID_Auto, sau Short Text), Access refuza sa traga legatura intre campuri, cu o eroare de nepotrivire de tip.

Date reale in tabelul Interventii:
ID_InterventieDataDescriereCost_LeiCod_Auto
10112.01.2026Schimb ulei si filtre3501
10215.01.2026Reparatie sistem frana6203
10320.01.2026Revizie generala4801
10422.01.2026Inlocuire baterie2802
10528.01.2026Verificare sistem racire1501

Cheia primara a acestui tabel este ID_Interventie (fiecare vizita e unica). Coloana Cod_Auto nu este cheia primara aici — este campul care spune carei masini ii apartine interventia respectiva, prin numarul ei ID_Auto din tabelul Autovehicule.

Ce ai fi pierdut fara aceasta separare:

Daca ai fi scris Marca si Model pe fiecare din cele 5 randuri de mai sus, ai fi scris "Dacia Logan" de trei ori (randurile 101, 103, 105) si tot riscul unei greseli de tastare la a treia scriere — de exemplu "Daciaa" sau "logan" cu litera mica, ceea ce ar strica orice cautare ulterioara dupa marca.

5

Relatia dintre Autovehicule si Interventii

Coloana Cod_Auto din Interventii se potriveste cu coloana ID_Auto din Autovehicule — acesta este campul de legatura dintre cele doua tabele. Un astfel de camp, care nu identifica inregistrari in propriul tabel ci arata catre o inregistrare din alt tabel, se numeste cheie externa (foreign key). Pentru ca un ID_Auto poate aparea de mai multe ori in Cod_Auto (o masina are mai multe interventii), dar fiecare interventie are un singur Cod_Auto, relatia se numeste unu-la-multe.
Exemplu numeric complet, dus pana la rezultat:

Intrebare: cate interventii are automobilul cu ID_Auto=1 (Dacia Logan, NT-07-ABC) si cat a costat in total?

Rezolvare: parcurgi tabelul Interventii si retii doar randurile unde Cod_Auto = 1:

ID_Interventie 101 — Schimb ulei si filtre — 350 lei
ID_Interventie 103 — Revizie generala — 480 lei
ID_Interventie 105 — Verificare sistem racire — 150 lei

Rezultat: automobilul cu ID_Auto=1 are 3 interventii, in valoare totala de 350 + 480 + 150 = 980 lei. Acest calcul a fost posibil exclusiv datorita legaturii Cod_Auto → ID_Auto, fara ca tabelul Interventii sa fi retinut vreodata marca sau modelul masinii.

Cum construiesti legatura in Access:

Din panglica, tab-ul Database Tools → butonul Relationships. In fereastra care se deschide, adaugi ambele tabele (Show Table → selectezi Autovehicule si Interventii → Add). Apoi tragi cu mouse-ul din campul ID_Auto (in Autovehicule) peste campul Cod_Auto (in Interventii). Se deschide fereastra Edit Relationships — aici bifezi obligatoriu caseta Enforce Referential Integrity, apoi confirmi cu butonul Create. Intre cele doua tabele apare o linie cu simbolul 1 langa Autovehicule si simbolul (infinit) langa Interventii — acestea sunt dovada vizuala ca relatia este de tip unu-la-multe si ca Access va respinge de acum orice interventie introdusa cu un Cod_Auto care nu exista in Autovehicule.

Fara bifa Enforce Referential Integrity, linia tot apare intre cele doua tabele, dar fara simbolurile 1 si ∞ — relatia ramane de tip "Indeterminate", iar Access nu mai verifica nimic: poti introduce o interventie cu Cod_Auto = 99, chiar daca nicio masina cu ID_Auto = 99 nu exista. Bifa este cea care transforma o simpla linie desenata intr-o regula pe care Access chiar o aplica.

6

Indexul — cautari rapide intr-un tabel mare

Un index este un mecanism intern care accelereaza cautarea si sortarea dupa un anumit camp — la fel cum indexul unei carti tehnice te ajuta sa gasesti pagina cu un anumit termen fara sa citesti tot volumul. Access creeaza automat un index unic pe cheia primara a fiecarui tabel. Poti adauga index si pe alte campuri, cele pe care le cauti des.
De ce conteaza la un atelier real:

Daca atelierul acumuleaza, sa spunem, 3.000 de interventii in cativa ani, iar tu vrei mereu sa vezi rapid toate interventiile unei anumite masini, o cautare dupa Cod_Auto fara index inseamna ca Access parcurge, in principiu, toate cele 3.000 de randuri pe rand. Cu un index pe Cod_Auto, gaseste direct grupul de randuri cautat, mult mai rapid — diferenta devine vizibila pe masura ce tabelul creste.

Cum se seteaza un index in Access:

In Design View, selectezi randul campului (de exemplu Cod_Auto). In panoul Field Properties, de jos, tab-ul General, cauti proprietatea Indexed si alegi din lista una dintre cele trei optiuni:

No — fara index (implicit pentru majoritatea campurilor)
Yes (Duplicates OK) — index care accepta valori repetate; potrivit pentru Cod_Auto, pentru ca aceeasi masina apare la mai multe interventii
Yes (No Duplicates) — index care impune unicitate; acesta e setat automat pe cheia primara

Un compromis, nu o solutie universala:

Indexul ocupa spatiu suplimentar pe disc si incetineste, foarte putin, adaugarea de inregistrari noi (pentru ca Access trebuie sa actualizeze si indexul, nu doar tabelul). De aceea nu indexezi orice camp, ci doar pe cele cautate sau sortate frecvent — la Interventii, acestea sunt de obicei Cod_Auto si Data.

7

Recapitulare si conexiuni

O baza de date bine structurata separa informatiile care se repeta (datele masinii) de informatiile care se acumuleaza in timp (interventiile), pastrand o singura legatura clara intre ele — campul de legatura.
Rezumat vizual al relatiilor:

Tabel (colectie de inregistrari) → format din campuri (coloane) si inregistrari (randuri)
  fiecare inregistrare identificata unic de cheia primara (ex. ID_Auto, ID_Interventie)
  doua tabele legate printr-un camp comun — ID_Auto (Autovehicule) = Cod_Auto (Interventii) — relatie unu-la-multe
  campurile cautate des primesc un index, pentru viteza

Conexiune cu urmatoarea lectie:

Acum ca stii cum arata structura celor doua tabele, in lectia urmatoare vei invata sa lucrezi efectiv cu datele din ele: adaugarea de inregistrari noi, modificarea si stergerea celor gresite, sortarea dupa un camp si filtrarea dupa un criteriu — de exemplu, "arata-mi doar interventiile mai scumpe de 400 lei".

De retinut pentru activitatile practice:

Tabel = colectie · Camp = coloana · Inregistrare = rand.
Cheia primara = unica, niciodata goala, stabila in timp (nu folosi Nr_Inmatriculare sau alte date care se pot schimba).
Doua tabele legate printr-un camp comun evita repetarea datelor si a greselilor de tastare.
Relatia unu-la-multe: o inregistrare "parinte" (o masina) poate avea mai multe inregistrari "copil" (interventii).
Indexul = viteza de cautare, cu un mic cost de spatiu si de scriere — se pune doar pe campurile cautate des.

Exercitii practice

Exercitiul 1 (Nivel minim) — Tabelul Furnizori

Atelierul tine si o evidenta a furnizorilor de piese, intr-un tabel Furnizori cu coloanele: ID_Furnizor, Denumire_Firma, CUI, Oras, Telefon. Raspunde: a) Care dintre aceste 5 coloane sunt campuri? b) Ce reprezinta o inregistrare in acest tabel? c) Multi furnizori au un CUI (Cod Unic de Inregistrare) care pare unic — ai folosi totusi CUI-ul ca si cheie primara, sau tot un ID_Furnizor generat automat? Motiveaza in doua-trei propozitii, tinand cont si de faptul ca unii furnizori mai mici (persoane fizice autorizate) pot avea un cod de identificare fiscala de alt format decat CUI-ul obisnuit.

Vezi rezolvarea

a) Toate cele 5 coloane sunt campuri: ID_Furnizor, Denumire_Firma, CUI, Oras si Telefon — fiecare e o categorie de informatie care se repeta identic la orice furnizor din tabel.

b) O inregistrare in Furnizori este randul complet cu toate datele unui singur furnizor concret (de exemplu, un anume magazin de piese, cu CUI-ul, orasul si telefonul lui).

c) Mai bine ramai la un ID_Furnizor de tip AutoNumber, generat automat, la fel ca ID_Auto din lectie — nu CUI-ul. Motiv: unele PFA-uri (persoane fizice autorizate) au un cod de identificare fiscala de alt format decat CUI-ul obisnuit, deci campul CUI nu ar fi completat identic la toti furnizorii si ar putea lipsi la unii — iar o cheie primara nu are voie sa fie niciodata goala.

Exercitiul 2 (Nivel standard) — Interogare pe hartie

Ai urmatoarele date, identice ca structura cu tabelele din lectie, pentru automobilul cu ID_Auto = 2 (Volkswagen Golf, NT-12-XYZ) si ID_Auto = 3 (Dacia Logan, NT-45-DEF):

Interventia 102 — 15.01.2026 — Reparatie sistem frana — 620 lei — Cod_Auto 3
Interventia 104 — 22.01.2026 — Inlocuire baterie — 280 lei — Cod_Auto 2
Interventia 106 — 03.02.2026 — Schimb placute frana fata — 310 lei — Cod_Auto 3
Interventia 107 — 10.02.2026 — Inlocuire bec far — 90 lei — Cod_Auto 2

Calculeaza, separat pentru fiecare masina: cate interventii are si cat a platit in total pentru ele. Scrie rezultatele sub forma "ID_Auto X — N interventii — suma totala Y lei".

Vezi rezolvarea

Parcurgi lista de interventii si grupezi randurile dupa Cod_Auto, la fel ca in exemplul cu ID_Auto=1 din lectie.

ID_Auto 2 (Volkswagen Golf): Interventia 104 — 280 lei; Interventia 107 — 90 lei. Total: 280 + 90 = 370 lei.

ID_Auto 3 (Dacia Logan): Interventia 102 — 620 lei; Interventia 106 — 310 lei. Total: 620 + 310 = 930 lei.

Rezultate:

  1. ID_Auto 2 — 2 interventii — suma totala 370 lei
  2. ID_Auto 3 — 2 interventii — suma totala 930 lei

Exercitiul 3 (Nivel performanta) — Proiecteaza doua tabele legate

Atelierul vrea sa tina si evidenta pieselor de schimb folosite, cumparate de la diversi furnizori. Proiecteaza doua tabele legate, Furnizori si Piese, dupa modelul Autovehicule/Interventii din lectie. Pentru fiecare tabel: a) lista completa de campuri, cu tipul de date pentru fiecare (AutoNumber, Short Text, Number, Date/Time sau Yes/No); b) care camp e cheia primara; c) care camp din Piese este cheia externa spre Furnizori si de ce; d) pe care camp ai pune un index de tip "Yes (Duplicates OK)" si de ce tocmai pe acela.

Vezi rezolvarea

Nu-ti dau tabelele gata facute — o schita si capcanele de evitat, ca la orice exercitiu de performanta.

Pasi:

  1. Porneste de la modelul Autovehicule/Interventii: Furnizori e tabelul stabil, Piese e tabelul care se acumuleaza (piese cumparate repetat, uneori de la acelasi furnizor).
  2. La Furnizori refoloseste campurile din exercitiul 1: ID_Furnizor AutoNumber ca PK, restul Short Text.
  3. La Piese gandeste ce se repeta si ce e specific fiecarei achizitii, cum Interventii separa Cod_Auto de datele masinii.

Capcane: nu copia Denumire_Firma din Furnizori in Piese (date repetate, ca la Marca/Model); campul de legatura trebuie Number (Long Integer), nu AutoNumber; indexul cu duplicate se pune pe campul de legatura, nu pe cheia primara.

Se evalueaza: tipuri de date corecte (a), cheile primare corect identificate (b), cheia externa motivata prin analogie cu Cod_Auto (c), indexul justificat prin viteza cautarilor (d).

Ce ai invatat astazi

  • Tabel = colectie de inregistrari; Camp = coloana (o categorie de informatie); Inregistrare = rand (un obiect concret)
  • Cheia primara identifica unic fiecare inregistrare: nu se repeta niciodata, nu poate fi goala, ramane stabila in timp
  • Nu alege drept cheie primara un camp care se poate schimba (ex. numarul de inmatriculare) — foloseste un ID de tip AutoNumber
  • Doua tabele separate (Autovehicule si Interventii) evita repetarea acelorasi date si a greselilor de tastare
  • Camp de legatura / cheie externa: Cod_Auto (in Interventii) = ID_Auto (in Autovehicule) → relatie unu-la-multe
  • In Access, relatia se construieste din Database Tools → Relationships, tragand campul cheie peste campul de legatura
  • Indexul accelereaza cautarea si sortarea pe un camp cautat des; Yes (Duplicates OK) pentru campuri ca Cod_Auto, Yes (No Duplicates) pentru chei primare
  • Exemplu numeric: automobilul ID_Auto=1 are 3 interventii insumand 980 lei, gasite exclusiv prin legatura Cod_Auto → ID_Auto

Vrei mai mult?

Provocare: In Access, seteaza pe campul Marca din tabelul Autovehicule proprietatea Indexed pe Yes (Duplicates OK), apoi sorteaza tabelul dupa Marca. Elimina indexul (Indexed = No) si sorteaza din nou dupa Marca. La doar 4 randuri, rezultatul afisat e identic — dar ce anume s-a schimbat, invizibil, in modul cum Access a gasit acele randuri?

  • Intrebare: Access construieste automat un index doar pe cheia primara. De ce nu pune, din oficiu, index pe toate campurile — care ar fi pretul (in spatiu si in viteza de scriere) al unui tabel cu index pe fiecare coloana?

Deschidere: Acelasi principiu sta la baza cautarii rapide dintr-un magazin online cu mii de produse sau dintr-un catalog de biblioteca: indexul se construieste o singura data, iar fiecare cautare ulterioara il refoloseste, in loc sa parcurga tot inventarul rand cu rand.

Urmatoarea lectie

Continua cu Operatii pe tabel: adaugare, modificare, stergere, sortare, filtrare — manipularea zilnica a datelor dintr-un tabel, pas cu pas.

Continua →