Invatare Atomica

Vreau sa construiesc un catalog digital complet!

Progres lectie:
0%
🎯

Obiectivul lectiei

In aceasta lectie construiesti de la zero o baza de date functionala in Access - "Catalogul Clasei" - aplicand tot ce ai invatat in Lectiile 1-5.

Dupa aceasta lectie vei putea:

  • Sa construiesti de la zero o baza de date cu doua tabele legate (Elevi si Note) in Microsoft Access
  • Sa explici rolul cheii primare si al cheii straine si sa le creezi in Access
  • Sa creezi 3 interogari: sortare alfabetica, medie cu filtru, note per elev
  • Sa explici ce este GROUP BY, AVG si HAVING si cand se folosesc (concept nou, introdus in aceasta lectie)
  • Sa aplici un filtru si o sortare direct pe o tabela deschisa in Datasheet View

Incearca singur!

🔧 CONSTRUIESTE

Construieste Catalogul Clasei pas cu pas

Urmeaza fiecare pas in ordine. La final, vei avea un catalog digital complet si functional!

1
Creeaza baza de date
Fisierul care va contine totul
a
Deschide Microsoft Access. Apasa File → New → Blank database.
b
Denumeste fisierul CatalogulClasei.accdb si alege un folder unde sa-l salvezi (de ex. Desktop sau Documente).
c
Apasa Create. Access va deschide automat o tabela goala numita "Table1". O vom sterge si vom crea tabelele noastre.
2
Creeaza tabela "Elevi"
Datele personale ale elevilor
a
Du-te la Create → Table Design. Se deschide editorul de structura.
b
Adauga campurile urmatoare, exact in aceasta ordine:
Nume camp Tip date (Data Type) Rol
ID_Elev AutoNumber Cheie primara - se completeaza automat
Nume Short Text Numele de familie al elevului
Prenume Short Text Prenumele elevului
DataNasterii Date/Time Data nasterii
Clasa Short Text Clasa (ex: "8A", "8B")
c
Click dreapta pe campul ID_ElevPrimary Key. Vei vedea o cheita aparand langa camp.
d
Salveaza tabela: Ctrl+S → Scrie numele Elevi → OK.
3
Creeaza tabela "Note"
Notele elevilor la fiecare materie
a
Din nou: Create → Table Design.
b
Adauga aceste campuri:
Nume camp Tip date (Data Type) Rol
ID_Nota AutoNumber Cheie primara - se completeaza automat
ID_Elev Number Legatura catre tabela Elevi (cheie straina)
Materia Short Text Numele materiei (ex: "Matematica")
Nota Number Nota primita (1-10)
DataNotei Date/Time Cand a fost pusa nota
c
Seteaza ID_Nota ca Primary Key (click dreapta → Primary Key).
d
Salveaza tabela cu numele Note.
💡 Ce este ID_Elev in tabela Note?

Campul ID_Elev din tabela Note este o cheie straina (foreign key). El face legatura intre o nota si elevul care a primit-o. Daca un elev are ID_Elev = 3 in tabela Elevi, atunci toate notele sale vor avea ID_Elev = 3 in tabela Note. Asa stie Access "aceasta nota apartine acelui elev".

4
Introdu date in tabele
Minim 10 inregistrari in fiecare tabela
a
Dublu-click pe tabela Elevi in panoul din stanga pentru a o deschide in modul Datasheet View.
b
Introdu minim 10 elevi. Campul ID_Elev se completeaza automat! Foloseste datele de mai jos ca exemplu:
🗃 Tabela Elevi - Date exemplu
ID_Elev Nume Prenume DataNasterii Clasa
1 Popescu Andrei 15/03/2012 8A
2 Ionescu Maria 22/07/2012 8A
3 Georgescu Alexandru 01/11/2011 8A
4 Dumitrescu Elena 30/05/2012 8B
5 Stanescu Ion 14/09/2012 8A
6 Marinescu Ana 08/01/2012 8B
7 Constantinescu Mihai 19/04/2012 8A
8 Radu Cristina 25/12/2011 8B
9 Popa Stefan 11/06/2012 8A
10 Voicu Diana 03/02/2012 8B
c
Acum deschide tabela Note si introdu minim 10 note. Atentie: ID_Elev trebuie sa fie un numar care exista in tabela Elevi!
🗃 Tabela Note - Date exemplu
ID_Nota ID_Elev Materia Nota DataNotei
1 1 Matematica 9 10/09/2025
2 1 Romana 8 12/09/2025
3 2 Matematica 10 10/09/2025
4 2 Istorie 7 15/09/2025
5 3 Matematica 6 10/09/2025
6 3 Romana 9 12/09/2025
7 4 Matematica 10 10/09/2025
8 5 Matematica 5 10/09/2025
9 5 Romana 7 12/09/2025
10 6 Matematica 8 10/09/2025
11 7 Romana 9 12/09/2025
12 8 Matematica 7 10/09/2025
💡 Sfat

Observa ca un elev poate avea mai multe note (Popescu Andrei are note la Matematica SI la Romana). De aceea avem doua tabele separate: una pentru elevi, alta pentru note. Fiecare nota "arata" catre elevul ei prin ID_Elev.

5
Creeaza interogarile
3 interogari care extrag informatii utile
🔍 Interogare 1: Toti elevii in ordine alfabetica
a
Create → Query Design. Adauga tabela Elevi si inchide fereastra "Show Table".
b
Dublu-click pe campurile: Nume, Prenume, Clasa pentru a le adauga in grila de interogare.
c
La campul Nume, in randul Sort, alege Ascending (A → Z).
d
Apasa Run (butonul !) pentru a vedea rezultatul. Salveaza interogarea ca Elevi_Alfabetic.
SELECT Nume, Prenume, Clasa FROM Elevi ORDER BY Nume ASC;
🔍 Interogare 2: Elevii cu media peste 8
📚 Concepte noi introduse in aceasta interogare

Aceasta interogare foloseste trei tehnici pe care nu le-ai mai vazut in lectiile 1-5 — citeste explicatia de mai jos, apoi urmeaza pasii.

GROUP BY — grupeaza randurile cu acelasi elev impreuna, ca sa poti calcula o statistica per elev (ex: toate notele lui Popescu intr-un grup, toate notele lui Ionescu in altul).
AVG(Nota) — functie de agregare: calculeaza media aritmetica a notelor din grup.
HAVING — filtreaza grupurile dupa ce media a fost calculata. Este diferit de WHERE (care filtreaza randuri individuale inainte de grupare). Scrii HAVING Avg(Nota) > 8 ca sa pastrezi doar elevii cu media mai mare decat 8.

Aceste concepte sunt explicate cu exemple in Atomul 5 de mai jos. Poti citi atomul intai, apoi te intorci sa faci pasii.

a
Create → Query Design. Adauga ambele tabele: Elevi si Note.
b
Adauga campurile: Nume (din Elevi), Prenume (din Elevi), Nota (din Note).
c
In meniul Design, apasa pe Totals (sigma Σ). Apare un rand nou "Total" in grila.
d
Seteaza: Nume → Group By, Prenume → Group By, Nota → Avg (media).
e
La campul Nota (care are functia Avg), in randul Criteria, scrie: >8. Access stie ca pentru un camp cu functie de agregare (Avg, Sum, Count), criteriul din randul Criteria se aplica dupa grupare — echivalent cu clauza HAVING din SQL, nu WHERE. SQL-ul generat va fi corect automat.
f
Ruleaza si salveaza ca Elevi_Media_Peste_8.
SELECT Elevi.Nume, Elevi.Prenume, Avg(Note.Nota) AS MediaNota FROM Elevi INNER JOIN Note ON Elevi.ID_Elev = Note.ID_Elev GROUP BY Elevi.Nume, Elevi.Prenume HAVING Avg(Note.Nota) > 8;
🔍 Interogare 3: Toate notele unui elev specific
a
Create → Query Design. Adauga tabelele Elevi si Note.
b
Adauga campurile: Nume, Prenume, Materia, Nota, DataNotei.
c
La campul Nume, in randul Criteria, scrie: "Popescu" (cu ghilimele!).
d
Ruleaza si salveaza ca Note_Elev_Specific. Vei vedea doar notele lui Popescu Andrei.
SELECT Elevi.Nume, Elevi.Prenume, Note.Materia, Note.Nota, Note.DataNotei FROM Elevi INNER JOIN Note ON Elevi.ID_Elev = Note.ID_Elev WHERE Elevi.Nume = 'Popescu';
💡 Ghilimele in Access vs. SQL standard

In Access Query Design, cand scrii "Popescu" (ghilimele duble) in randul Criteria, Access accepta ambele stiluri. SQL-ul generat corect foloseste ghilimele simple ('Popescu'), conform standardului ISO SQL si al motoarelor precum MySQL sau PostgreSQL. Daca vei lucra in viitor cu alte sisteme de baze de date, foloseste intotdeauna ghilimele simple pentru siruri de caractere.

6
Aplica un filtru
Doar notele la Matematica, sortate descrescator
a
Deschide tabela Note in Datasheet View (dublu-click pe ea).
b
Click pe sageata de filtru (▼) de langa titlul coloanei Materia. Debifaeaza tot, apoi bifeaza doar Matematica. Apasa OK.
c
Acum click dreapta pe coloana NotaSort Largest to Smallest (descrescator). Vei vedea notele la Matematica de la cea mai mare la cea mai mica.
d
Pentru a elimina filtrul, apasa butonul Toggle Filter din meniul Home (sau Ctrl+Shift+L).
☑ Lista de verificare - Proiect complet
  • Fisierul CatalogulClasei.accdb a fost creat
  • Tabela "Elevi" cu 5 campuri si minim 10 inregistrari
  • Tabela "Note" cu 5 campuri si minim 10 inregistrari
  • Interogare 1: Elevi in ordine alfabetica
  • Interogare 2: Elevii cu media peste 8
  • Interogare 3: Notele unui elev specific
  • Filtru aplicat: doar Matematica, sortate descrescator
Probleme la Query 2 (medie)? Click aici

Daca Access nu leaga automat tabelele, trebuie sa creezi legatura manual: trage campul ID_Elev din tabela Elevi peste campul ID_Elev din tabela Note. Va aparea o linie intre ele.

Daca nu apare butonul Totals (Σ), cauta-l in meniul Design, sectiunea Show/Hide.

La Criteria, scrie exact >8 (mai mare decat 8). Nu pune ghilimele la numere!

Campul ID_Elev nu se completeaza automat in tabela Note? Click aici

Este normal! In tabela Note, campul ID_Elev este de tip Number, nu AutoNumber. Trebuie sa il completezi manual cu numarul elevului din tabela Elevi.

Exemplu: Daca Popescu Andrei are ID_Elev = 1 in tabela Elevi, atunci cand adaugi o nota pentru el in tabela Note, scrii 1 la campul ID_Elev.

1

Tabele si campuri (Lectia 2)

Tabele si campuri (Lectia 2)

O tabela este componenta fundamentala a oricarei baze de date. Ea stocheaza date despre un singur tip de entitate (elevi, note, produse, etc.).

Fiecare coloana din tabela se numeste camp (field) si are un tip de date specific: text, numar, data, autonumerotare.

Fiecare rand din tabela se numeste inregistrare (record) si reprezinta o entitate individuala (un elev, o nota).

Structura tabelei "Elevi" - Anatomia unei tabele
Camp Tip Date Exemplu Valoare De ce acest tip?
ID_Elev AutoNumber 1, 2, 3... Unic, automat - identificator perfect
Nume Short Text Popescu Text scurt - sub 255 caractere
Prenume Short Text Andrei Text scurt - sub 255 caractere
DataNasterii Date/Time 15/03/2012 Permite calcule cu date (varsta, etc.)
Clasa Short Text 8A Text, nu numar (contine si litera)
2

Cheia primara: ce este si de ce conteaza

Cheia primara: ce este si de ce conteaza

Cheia primara (Primary Key, prescurtat PK) este un camp care identifica unic fiecare inregistrare din tabela. Nu pot exista doua randuri cu aceeasi valoare a cheii primare.

In proiectul nostru:

  • ID_Elev este PK in tabela Elevi - fiecare elev are un numar unic
  • ID_Nota este PK in tabela Note - fiecare nota are un numar unic
🎓 Analogie: ID-ul unic (ca un CNP digital)

Cheia primara functioneaza ca un cod unic de identificare. Gandeste-te la CNP-ul (Codul Numeric Personal): fiecare persoana din Romania are un CNP diferit, deci chiar daca doua persoane se numesc "Ion Popescu", le deosebesti dupa CNP. La fel, cheia primara deosebeste inregistrarile din baza de date chiar daca au date similare.

Atentie: In aplicatii reale, CNP-ul este o data personala sensibila si nu se stocheaza fara un motiv legal justificat. In bazele de date scolare se folosesc ID-uri generate automat (AutoNumber), nu CNP-uri reale.

3

Cheie straina si relatia intre tabele

Cheie straina si relatia intre tabele

Cand un camp dintr-o tabela "arata" catre cheia primara a altei tabele, ii spunem cheie straina (Foreign Key, prescurtat FK).

In proiectul nostru, ID_Elev din tabela Note este o cheie straina care face legatura cu ID_Elev din tabela Elevi. Asa stie Access ca nota "Matematica 9" apartine lui "Popescu Andrei".

Relationship Diagram

🗃 Elevi
🔑 ID_Elev (PK)
Nume
Prenume
DataNasterii
Clasa
← 1 : N →
🗃 Note
🔑 ID_Nota (PK)
🔗 ID_Elev (FK)
Materia
Nota
DataNotei
💡 Ce inseamna "1 : N" (unu la multi)?

Un elev poate avea mai multe note (la diferite materii). Dar fiecare nota apartine unui singur elev. Aceasta relatie se numeste "unu la multi" (one-to-many) si este cel mai frecvent tip de relatie in bazele de date.

4

Cele 3 interogari din proiect

Cele 3 interogari din proiect

O interogare (query) pune o intrebare bazei de date si obtine un raspuns. In proiectul nostru am creat 3 interogari care demonstreaza diferite tehnici:

Interogare Tehnica folosita Concept din lectie
Elevi_Alfabetic ORDER BY (sortare) L5: Sortare Ascending
Elevi_Media_Peste_8 GROUP BY + AVG + HAVING Concept nou — explicat in Atomul 5 al acestei lectii
Note_Elev_Specific WHERE (filtrare) L4: Criterii de selectie + L5: Filtrare
5

Interogarea cu media (Avg) — GROUP BY, AVG, HAVING

Interogarea cu media (Avg) — GROUP BY, AVG, HAVING

Aceasta este cea mai complexa interogare din proiect si introduce trei concepte noi. Le explicam pe rand, cu exemple simple.

🎯 Situatia: vrei sa stii media notelor fiecarui elev

Tabelul Note arata asa (simplificat):

ID_ElevNota
1 (Popescu)9
1 (Popescu)8
2 (Ionescu)10
2 (Ionescu)7

Vrei rezultatul: Popescu = media 8.5, Ionescu = media 8.5. Cum?

1. GROUP BY — grupeaza randurile cu acelasi elev

GROUP BY Elevi.Nume, Elevi.Prenume instruieste Access sa adune toate notele unui elev intr-un singur grup. Astfel, in loc de 4 randuri, obtii 2 grupuri: un grup Popescu cu notele {9, 8} si un grup Ionescu cu notele {10, 7}.

2. AVG — functie de agregare: calculeaza media grupului

Avg(Note.Nota) calculeaza media aritmetica pentru fiecare grup. Pentru Popescu: (9+8)/2 = 8.5. Pentru Ionescu: (10+7)/2 = 8.5.
Alte functii de agregare pe care le vei intalni: SUM (suma), COUNT (numara), MAX (maximul), MIN (minimul).

3. HAVING — filtreaza dupa medie (diferit de WHERE!)

HAVING Avg(Note.Nota) > 8 pastreaza doar grupurile unde media depaseste 8.
De ce nu WHERE? WHERE filtreaza randuri inainte de grupare — nu poti folosi WHERE cu o valoare calculata (media nu exista inca). HAVING filtreaza dupa ce media a fost calculata pentru fiecare grup.

Rezumat: toate componentele interogarii
Componenta SQL Ce face Exemplu cu date reale
SELECT Nume, Prenume Alege coloanele de afisat Popescu, Andrei
Avg(Nota) AS MediaNota Calculeaza media si o numeste MediaNota (9+8)/2 = 8.5
INNER JOIN ... ON Leaga tabelele prin ID_Elev Elevi.ID_Elev = Note.ID_Elev
GROUP BY Nume, Prenume Grupeaza notele per elev Toate notele lui Popescu intr-un grup
HAVING Avg(Nota) > 8 Pastreaza doar grupurile cu media > 8 8.5 > 8 → Popescu apare in rezultat
6

Diferenta dintre sortare si filtrare

Diferenta dintre sortare si filtrare

Sortarea schimba ordinea in care vezi datele, dar le pastreaza pe toate. Ca si cum ai rearanja cartile dintr-un sertar dupa marime.

Filtrarea ascunde datele care nu corespund criteriului. Ca si cum ai scoate din sertar doar cartile rosii si le-ai pune pe masa.

Actiune Ce face In proiect
Sortare Ascending Ordoneaza A → Z sau 1 → 9 Elevii in ordine alfabetica
Sortare Descending Ordoneaza Z → A sau 9 → 1 Notele de la cea mai mare
Filtrare Afiseaza doar randurile care indeplinesc o conditie Doar notele la "Matematica"
Combinare Filtrare + Sortare impreuna Doar Matematica, sortate descrescator
7

Cum poti face proiectul si mai bun

Cum poti face proiectul si mai bun

Baza de date pe care ai construit-o poate fi extinsa cu:

💡 Tabela "Absente"

Campuri: ID_Absenta (AutoNumber, PK), ID_Elev (Number, FK), DataAbsenta (Date), Motivata (Yes/No). Apoi poti face o interogare care numara absentele nemotivate ale fiecarui elev!

💡 Rapoarte (Reports)

Access poate genera rapoarte printabile bazate pe interogari. Imaginati-va un raport "Situatia scolara" cu numele elevului, media la fiecare materie si numarul de absente - totul formatat frumos pentru print!

💡 Formulare (Forms)

In loc sa introduci datele direct in tabela, poti crea un formular cu campuri frumos aranjate, etichete clare si butoane. E ca diferenta intre a scrie intr-un Excel vs. a completa un formular web.

Exercitii practice

Exercitiul 1 (Nivel minim) - Adauga tabela "Absente"

Cerinta: Extinde baza de date CatalogulClasei cu o noua tabela pentru inregistrarea absentelor.

  1. Creeaza tabela Absente cu campurile: ID_Absenta (AutoNumber, PK), ID_Elev (Number, FK), DataAbsenta (Date/Time), Motivata (Yes/No)
  2. Introdu minim 8 absente pentru diferiti elevi (unele motivate, altele nemotivate)
  3. Creeaza o interogare care afiseaza numele elevilor si numarul total de absente nemotivate (foloseste COUNT si WHERE Motivata = False)
  4. Cum se leaga aceasta tabela de tabela Elevi? Deseneaza diagrama pe hartie.

Indicii:

  • Campul Motivata de tip Yes/No apare ca o casuta de bifat in Datasheet View
  • In Criteria pentru filtrarea dupa Motivata, scrie False (fara ghilimele)
  • Foloseste COUNT(ID_Absenta) si GROUP BY Nume in interogare

Salveaza baza de date dupa ce adaugi tabela si interogarea.

Exercitiul 2 (Nivel standard) - Creeaza un raport

Cerinta: Genereaza un raport printabil "Situatia Scolara" bazat pe datele din proiect.

  1. Du-te la Create → Report Wizard
  2. Selecteaza interogarea Elevi_Media_Peste_8 ca sursa de date
  3. Adauga campurile Nume, Prenume si media notelor
  4. Alege un layout (Tabular sau Columnar) si un stil
  5. Salveaza raportul si deschide-l in Print Preview. Cum arata?

Indicii:

  • Report Wizard te ghideaza pas cu pas - nu trebuie sa stii totul dinainte
  • Poti modifica raportul dupa generare in Design View (culori, fonturi, titlu)
  • Raportul se bazeaza pe o interogare existenta - nu trebuie sa rescrii datele

Exercitiul 3 (Nivel performanta) - Proiecteaza o baza de date pentru o biblioteca

Cerinta: Gandeste-te cum ai proiecta o baza de date pentru biblioteca scolii. Raspunde la urmatoarele intrebari:

  1. Ce tabele ai crea? (minim 2 tabele) Ce campuri ar avea fiecare tabela?
  2. Care ar fi cheia primara in fiecare tabela?
  3. Cum ar fi legate tabelele intre ele? (ce camp ar fi cheie straina?)
  4. Scrie 3 interogari utile pe care le-ai crea (in cuvinte, nu SQL). Exemplu: "Toate cartile imprumutate de elevul X"
  5. Ce filtre ar fi utile? Exemplu: "Doar cartile nerreturnate"

Indicii:

  • Gandeste-te la: Carti (titlu, autor, gen, an), Imprumuturi (cine, ce carte, cand, returnat?)
  • Relatia Carti-Imprumuturi este similara cu Elevi-Note: o carte poate fi imprumutata de mai multe ori
  • Ai putea avea si o tabela Elevi (reutilizata din catalogul clasei!)

Cuvinte cheie de folosit: tabela, camp, cheie primara, cheie straina, relatie 1:N, interogare, filtrare, sortare, tip de date

Ce ai invatat astazi

  • Ai construit de la zero o baza de date cu doua tabele legate (Elevi si Note) in Microsoft Access
  • Stii rolul cheii primare si al cheii straine si cum le creezi in Access
  • Ai creat 3 interogari: sortare alfabetica, medie cu filtru si note per elev
  • Ai invatat GROUP BY, AVG si HAVING — concepte noi, introduse in aceasta lectie
  • Stii diferenta dintre sortare si filtrare si cum le aplici in Datasheet View
  • Stii cum poti extinde proiectul cu tabele noi, rapoarte si formulare

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →