Cand nu mai este de ajuns o foaie de calcul
1. Date scrise inconsecvent — acelasi lucru apare scris in feluri diferite ("Ibuprofen 400mg" / "ibuprofen" / "IBUPROFEN 400 MG"), iar o cautare simpla nu le gaseste pe toate.
2. Nicio regula impusa implicit — daca nimeni nu configureaza manual o validare pe fiecare coloana, nimic nu opreste pe cineva sa introduca o cantitate negativa sau o data de expirare anterioara datei de receptie; greseala trece neobservata pana o descopera altcineva, mai tarziu.
3. Editare simultana necontrolata — daca fisierul nu este pus in coautorat (Excel 365 pe OneDrive/SharePoint), doua persoane care il modifica separat, in acelasi timp, si il salveaza fiecare pe cont propriu obtin versiuni concurente ("Stoc_final.xlsx", "Stoc_final_2.xlsx") si nu mai este clar care e cea corecta.
4. Cautarea si numararea devin greoaie — cu mii de randuri introduse de zeci de persoane, gasirea rapida si sigura a unei informatii sau numararea corecta a stocului devine tot mai greu de facut manual sau cu formule simple.
O baza de date este o colectie de date organizata in tabele cu structura fixa, gestionata printr-un program specializat numit SGBD (Sistem de Gestiune a Bazelor de Date) — de exemplu Microsoft Access. Spre deosebire de o foaie de calcul, un SGBD impune reguli: fiecare coloana accepta un singur tip de date, unele campuri nu pot lipsi, iar fiecare inregistrare este identificata fara echivoc printr-o cheie primara. Aceste reguli sunt exact subiectul restului lectiei.
Vocabularul de baza: tabel, camp, inregistrare
Tabel — o colectie de informatii despre acelasi fel de lucru (de exemplu, toti pacientii internati). Seamana cu o foaie de calcul intreaga, dar cu reguli.
Camp — o categorie de informatie care se repeta identic la fiecare element (numele, data nasterii, salonul). Corespunde unei coloane.
Inregistrare — toate informatiile despre UN singur element concret, cu toate campurile completate (un pacient anume, cu toate datele lui). Corespunde unui rand.
Gandeste-te la un dulap cu fise de pacienti, ordonate una dupa alta. Dulapul intreg, cu toate fisele din el, este tabelul Pacienti. O singura fisa, cea a unui pacient anume, este o inregistrare. Rubrica "Data nasterii", care apare identic, in acelasi loc, pe toate fisele, este un camp.
Cand cineva iti spune "adauga o inregistrare noua in Pacienti", inseamna sa adaugi un pacient nou (un rand nou), nu o coloana noua. Cand cineva iti spune "adauga un camp nou", inseamna ca vrei sa retii o informatie noua despre toti pacientii deodata (de exemplu, salonul) — asta se face o singura data, la nivel de tabel, nu pentru fiecare pacient in parte.
Tipuri de date: fiecare camp accepta doar ce trebuie
| Camp | Tip de date | Ce retine |
|---|---|---|
| ID_Pacient | AutoNumber | Cheia primara — generata automat de Access, 1, 2, 3... |
| Nume, Prenume | Short Text | Popescu, Maria... |
| Data_Internare | Date/Time | Data la care pacientul a fost internat |
| Cantitate | Number | Numarul de bucati dintr-un material sanitar |
| In_Stoc_Minim | Yes/No | Marcheaza daca stocul acelui material a scazut sub pragul de reaprovizionare |
Deschizi tabelul in Design View (clic-dreapta pe numele tabelului din panoul din stanga → Design View). Pentru fiecare camp, in coloana Data Type alegi din lista tipul potrivit: Short Text pentru nume si text scurt, Number pentru cantitati, Date/Time pentru date calendaristice, Yes/No pentru un flag adevarat/fals, AutoNumber pentru un identificator generat automat.
Cheia primara — identificatorul care nu se repeta niciodata
Deschizi tabelul in Design View. Dai clic pe randul campului dorit (ID_Pacient), 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.
Multi incepatori aleg Nume_Prenume drept cheie primara pentru tabelul Pacienti, pentru ca pare sa identifice pacientul. Problema apare cand vin doi pacienti diferiti cu acelasi nume si prenume — Access ar refuza a doua inregistrare, sau ar obliga la scrierea numelui cu o mica variatie artificiala, ceea ce strica evidenta. Aceeasi greseala apare si la un tabel de materiale, daca alegi Denumire_Material drept cheie primara: nu mai poti introduce doua loturi diferite din acelasi material (de exemplu doua loturi de "Manusi latex M", primite in date diferite). Reparatia: foloseste un camp de tip AutoNumber (ID_Pacient sau ID_Inregistrare) ca si cheie primara, iar numele sau denumirea materialului raman campuri normale, editabile oricand, fara sa afecteze unicitatea randului.
Structura unei evidente de pacienti
| ID_Pacient | Nume | Prenume | Data_Nasterii | Data_Internare | Salon |
|---|---|---|---|---|---|
| 1 | Popescu | Maria | 12.05.1988 | 03.02.2026 | Salon 4 |
| 2 | Ionescu | Vasile | 27.11.1975 | 05.02.2026 | Salon 2 |
| 3 | Popescu | Maria | 03.09.1994 | 06.02.2026 | Salon 4 |
| 4 | Georgescu | Ana | 19.02.2001 | 07.02.2026 | Salon 1 |
Observa inregistrarile 1 si 3: acelasi nume, aceeasi prenume, dar cu ID_Pacient si data nasterii diferite — deci doi pacienti distincti, fara nicio confuzie intre fisele lor.
Tabelul de mai sus contine date cu caracter personal (nume, data nasterii). Un asemenea tabel nu se lasa deschis pe un calculator la care are acces oricine si nu se trimite prin canale neprotejate — accesul se limiteaza la personalul care chiar are nevoie de el pentru activitatea de zi cu zi. Informatiile clinice (diagnostic, tratament) nu apar in aceasta lectie, pentru ca aici discutam exclusiv structura tehnica a tabelului, nu continutul medical.
Structura unei evidente de materiale sanitare
| ID_Inregistrare | Denumire_Material | Cantitate | UM | Data_Receptie | Data_Expirare |
|---|---|---|---|---|---|
| 1 | Manusi latex M | 500 | buc | 05.01.2026 | 05.01.2028 |
| 2 | Seringi 5ml | 300 | buc | 05.01.2026 | 01.06.2027 |
| 3 | Manusi latex M | 200 | buc | 20.01.2026 | 20.01.2028 |
| 4 | Comprese sterile | 150 | buc | 10.01.2026 | 10.01.2027 |
| 5 | Manusi latex M | 150 | buc | 02.02.2026 | 02.02.2028 |
Intrebare: cate bucati de "Manusi latex M" sunt in total in stoc, insumand toate loturile?
Rezolvare: parcurgi tabelul si retii doar randurile unde Denumire_Material = "Manusi latex M":
ID_Inregistrare 1 — 500 buc
ID_Inregistrare 3 — 200 buc
ID_Inregistrare 5 — 150 buc
Rezultat: 500 + 200 + 150 = 850 buc de "Manusi latex M" in stoc, distribuite pe 3 loturi cu date de expirare diferite. Cheia primara (ID_Inregistrare) este cea care iti permite sa pastrezi loturile separat, chiar daca denumirea materialului se repeta.
Daca ai pastra un singur rand pe material, cu o cantitate care se modifica la fiecare receptie, ai pierde data de expirare a fiecarui lot in parte — informatie esentiala cand loturi din acelasi material expira in momente diferite. De aceea fiecare receptie primeste propria inregistrare, cu propriul ID_Inregistrare.
Recapitulare si conexiuni
Foaie de calcul (fara reguli) → creste → date inconsecvente, cautari nesigure
↓ se inlocuieste cu
Tabel (colectie de inregistrari) → format din campuri (coloane) si inregistrari (randuri)
fiecare camp are un tip de date fix (Short Text, Number, Date/Time, Yes/No, AutoNumber)
fiecare inregistrare identificata unic de cheia primara (ex. ID_Pacient, ID_Inregistrare)
Acum ca stii cum arata structura unui tabel, in lectia urmatoare vei invata sa incarci efectiv date in el: introducerea prin formular, validarile care opresc datele gresite la intrare, importul dintr-o foaie de calcul deja existenta si corectarea duplicatelor care apar la incarcare.
Tabel = colectie · Camp = coloana · Inregistrare = rand.
Semnale ca ai nevoie de baza de date: date inconsecvente, fara reguli automate, editare simultana, volum mare de randuri.
Tip de date pe camp: Short Text (text scurt), Number (numere), Date/Time (date calendaristice), Yes/No (adevarat/fals), AutoNumber (identificator automat).
Cheia primara = unica, niciodata goala, stabila in timp (nu folosi numele unei persoane sau denumirea unui produs).
Fiecare lot sau vizita primeste propria inregistrare, chiar daca denumirea sau numele se repeta.