Invatare Atomica

Baza de date fata de foaia de calcul: cand devine necesara

De la un fisier Excel care creste necontrolat la un tabel cu reguli: tabel, inregistrare, camp, cheie primara si tipuri de date, aplicate pe evidenta pacientilor si a materialelor sanitare.

Progres lectie:
0%
🎯

Obiectivul lectiei

In orice cabinet, sectie sau farmacie de spital exista evidente care incep intr-un fisier Excel si, dupa cateva luni, devin greu de tinut sub control: date scrise diferit de la un rand la altul, cautari care rateaza jumatate din informatie, coloane care se schimba de la o zi la alta. Aceasta lectie iti arata exact cand acel fisier Excel nu mai este suficient si cu ce se inlocuieste: o baza de date, organizata in tabele cu reguli clare — camp, inregistrare, cheie primara si tip de date. Vei vedea aceste notiuni aplicate direct pe doua evidente din meseria ta: evidenta pacientilor si evidenta materialelor sanitare din stoc.

Dupa aceasta lectie vei putea:

  • Sa recunosti cel putin trei semne ca o evidenta tinuta in Excel are nevoie sa devina baza de date
  • Sa explici in cuvinte simple ce este un tabel, o inregistrare si un camp intr-o baza de date
  • Sa alegi tipul de date corect (Short Text, Number, Date/Time, Yes/No, AutoNumber) pentru un camp nou
  • Sa recunosti si sa alegi o cheie primara corecta pentru un tabel de evidenta
  • Sa citesti structura unui tabel Pacienti si a unui tabel Stoc_Materiale si sa identifici campurile, inregistrarile si cheia primara
  • Sa recunosti greseala de a folosi numele unei persoane sau denumirea unui produs drept cheie primara si sa o corectezi

Incearca singur!

Provocare — inainte sa citesti:

Lucrezi la farmacia unui spital si tii evidenta stocului de materiale sanitare (comprese, manusi, seringi) intr-un fisier Excel. La fiecare lot primit, cineva din tura adauga un rand nou cu denumirea materialului, cantitatea si data expirarii. Dupa un an, fisierul are cateva mii de randuri, completate de zeci de persoane diferite, in ture diferite. Noteaza mai jos cel putin doua probleme la care crezi ca te-ai lovi dupa un an de asa ceva.

💡 Ai nevoie de un indiciu?

Gandeste-te ce se intampla daca doua colege scriu acelasi material o data "Manusi latex M" si o data "manusi latex marimea M" — cand cauti "manusi", cate randuri gasesti cu adevarat? Si ce se intampla daca doua persoane deschid fisierul in acelasi timp si salveaza fiecare o versiune diferita?

Subiectul lectiei de azi raspunde exact la aceasta intrebare: cand un fisier Excel trebuie inlocuit cu o baza de date si ce structura are aceasta.

1

Cand nu mai este de ajuns o foaie de calcul

O foaie de calcul (Excel) organizeaza date in randuri si coloane, dar, in mod implicit (fara sa configurezi nimic), nu impune nicio regula asupra lor: orice celula poate primi orice text, in orice format, iar programul nu verifica daca ceva lipseste sau se repeta. Excel are, e drept, o functie de validare a datelor (Data > Data Validation), dar ea trebuie activata manual, celula cu celula sau coloana cu coloana — nu se aplica automat, ca intr-o baza de date. Cata vreme evidenta este mica si o singura persoana o completeaza, functioneaza bine. Problemele apar cand evidenta creste si o completeaza mai multi oameni, in momente diferite.
Cele patru semne ca e timpul pentru o baza de date:

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.

Ce este, de fapt, o baza de date:

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.

2

Vocabularul de baza: tabel, camp, inregistrare

O baza de date organizeaza informatia in trei niveluri, unul in altul:
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.
Analogie din activitatea medicala — dulapul cu fise:

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.

De ce conteaza aceasta distinctie:

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.

3

Tipuri de date: fiecare camp accepta doar ce trebuie

Cand proiectezi un tabel, alegi doua lucruri pentru fiecare camp: numele lui si tipul de date pe care il accepta. Tipul de date corect evita erorile — de exemplu, cantitatea de materiale trebuie sa fie Number, nu Text, ca sa poti aduna si compara cantitatile intre ele.
Cele mai folosite tipuri de date, cu exemple din activitatea medicala:
CampTip de dateCe retine
ID_PacientAutoNumberCheia primara — generata automat de Access, 1, 2, 3...
Nume, PrenumeShort TextPopescu, Maria...
Data_InternareDate/TimeData la care pacientul a fost internat
CantitateNumberNumarul de bucati dintr-un material sanitar
In_Stoc_MinimYes/NoMarcheaza daca stocul acelui material a scazut sub pragul de reaprovizionare
Cum alegi tipul de date in Access:

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.

4

Cheia primara — identificatorul care nu se repeta niciodata

Cheia primara (Primary Key) este campul 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 lipsa). In tabelul Pacienti, ID_Pacient joaca acest rol.
Cum se seteaza in Access:

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.

Greseala frecventa: cheia primara = numele pacientului sau denumirea materialului

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.

5

Structura unei evidente de pacienti

Un tabel Pacienti, folosit strict pentru evidenta administrativa (cine este internat, unde, de cand), are nevoie doar de campurile de identificare si de localizare in sectie — nu de informatii clinice. Iata o structura minimala si datele pentru patru pacienti:
Tabelul Pacienti — date reale:
ID_PacientNumePrenumeData_NasteriiData_InternareSalon
1PopescuMaria12.05.198803.02.2026Salon 4
2IonescuVasile27.11.197505.02.2026Salon 2
3PopescuMaria03.09.199406.02.2026Salon 4
4GeorgescuAna19.02.200107.02.2026Salon 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.

⚠ Protectia datelor pacientilor

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.

6

Structura unei evidente de materiale sanitare

La fel ca la Pacienti, un tabel Stoc_Materiale are un camp de identificare (cheia primara), campuri repetate pentru fiecare lot primit si un tip de date potrivit pentru fiecare. De data aceasta, fiecare inregistrare este un lot receptionat la o data anume, nu un material in general — de aceea acelasi material poate aparea pe mai multe randuri.
Tabelul Stoc_Materiale — date reale:
ID_InregistrareDenumire_MaterialCantitateUMData_ReceptieData_Expirare
1Manusi latex M500buc05.01.202605.01.2028
2Seringi 5ml300buc05.01.202601.06.2027
3Manusi latex M200buc20.01.202620.01.2028
4Comprese sterile150buc10.01.202610.01.2027
5Manusi latex M150buc02.02.202602.02.2028
Exemplu numeric complet, dus pana la rezultat:

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.

De ce fiecare lot e o inregistrare separata, nu o linie adaugata la un total:

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.

7

Recapitulare si conexiuni

O evidenta trece de la foaia de calcul la baza de date atunci cand datele scrise inconsecvent, lipsa regulilor automate, editarea simultana si volumul mare de randuri incep sa produca erori greu de depistat. Solutia este un tabel structurat, cu campuri de tip potrivit si o cheie primara stabila.
Rezumat vizual al relatiilor:

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)

Conexiune cu urmatoarea lectie:

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.

De retinut pentru activitatile practice:

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.

Exercitii practice

Exercitiul 1 (Nivel minim) — Tabelul Pacienti

Ai un tabel Pacienti cu coloanele: ID_Pacient, Nume, Prenume, Data_Nasterii, Data_Internare, Salon. Raspunde: a) Care dintre aceste 6 coloane sunt campuri? b) Ce reprezinta o inregistrare in acest tabel? c) Ce tip de date (Short Text, Number, Date/Time sau AutoNumber) ar trebui sa aiba fiecare dintre cele 6 campuri? Motiveaza pe scurt alegerea pentru Data_Nasterii si pentru ID_Pacient.

Vezi rezolvarea

a) Toate cele 6 coloane sunt campuri: ID_Pacient, Nume, Prenume, Data_Nasterii, Data_Internare, Salon.

b) O inregistrare este un rand complet, cu toate cele 6 campuri completate pentru UN singur pacient (de exemplu ID_Pacient=1, Popescu, Maria, 12.05.1988, 03.02.2026, Salon 4).

  1. ID_Pacient - AutoNumber
  2. Nume - Short Text
  3. Prenume - Short Text
  4. Data_Nasterii - Date/Time
  5. Data_Internare - Date/Time
  6. Salon - Short Text

Motivatie: Data_Nasterii e Date/Time pentru ca permite sortare corecta si calcule (varsta), nu Short Text. ID_Pacient e AutoNumber pentru ca e cheia primara: Access il genereaza automat, unic si niciodata gol - nu se poate repeta la doi pacienti, spre deosebire de Nume.

Exercitiul 2 (Nivel standard) — Proiecteaza tabelul Stoc_Materiale

Asistentul sef vrea sa inlocuiasca fisierul Excel de evidenta a stocului de materiale sanitare cu un tabel de baza de date. Din fisierul vechi sunt disponibile urmatoarele informatii pentru fiecare lot receptionat: denumirea materialului, cantitatea, unitatea de masura, data receptiei si data expirarii. Proiecteaza tabelul: a) lista completa de campuri, inclusiv campul necesar pentru cheia primara, chiar daca el nu exista in fisierul vechi; b) tipul de date pentru fiecare camp; c) explica de ce niciunul dintre campurile din fisierul vechi (denumire, cantitate, unitate de masura, cele doua date) nu ar fi o alegere buna pentru cheia primara.

Vezi rezolvarea

a) si b) Structura tabelului Stoc_Materiale:

  1. ID_Lot - AutoNumber (cheia primara, generata automat de Access, nu exista in Excelul vechi)
  2. Denumire_Material - Short Text
  3. Cantitate - Number
  4. UM - Short Text
  5. Data_Receptie - Date/Time
  6. Data_Expirare - Date/Time

c) Niciun camp din fisierul vechi nu e bun pentru cheia primara pentru ca niciunul nu e garantat unic: acelasi Denumire_Material (ex. Manusi latex M) apare la mai multe loturi diferite; mai multe loturi pot avea aceeasi Cantitate sau aceeasi UM (buc); doua loturi diferite pot fi receptionate sau pot expira in aceeasi zi. Cheia primara trebuie sa fie diferita la fiecare inregistrare si niciodata goala - doar un camp generat automat (AutoNumber) garanteaza asta.

Exercitiul 3 (Nivel performanta) — Diagnosticheaza greseala, corecteaz-o si calculeaza stocul

Un coleg a proiectat tabelul Stoc_Materiale alegand drept cheie primara campul Denumire_Material (in loc de un ID generat automat) si a incercat sa introduca urmatoarele loturi (numerotarea de mai jos e doar ordinea in care a incercat sa le introduca, nu un camp din tabel): Lot 1 — Comprese sterile — 200 buc — 05.01.2026; Lot 2 — Manusi latex M — 300 buc — 08.01.2026; Lot 3 — Comprese sterile — 150 buc — 15.01.2026; Lot 4 — Seringi 5ml — 400 buc — 20.01.2026; Lot 5 — Manusi latex M — 250 buc — 02.02.2026; Lot 6 — Comprese sterile — 100 buc — 10.02.2026. a) Explica de ce alegerea Denumire_Material ca cheie primara ar fi blocat incercarea de a introduce loturile 3, 5 si 6 asa cum sunt listate mai sus, si propune campul potrivit pentru cheia primara. b) Redeseneaza tabelul Stoc_Materiale cu structura corectata: lista completa de campuri (inclusiv noua cheie primara) si tipul de date pentru fiecare, apoi rescrie cele 6 inregistrari asa cum ar aparea corect in tabel, fiecare cu propriul identificator unic. c) Calculeaza cantitatea totala aflata in stoc pentru fiecare dintre cele 3 materiale (Comprese sterile, Manusi latex M, Seringi 5ml), aratand calculul pentru fiecare.

Vezi rezolvarea

Schita de rezolvare (nivel performanta - drumul, nu rezultatul de-a gata):

a) Denumire_Material ca cheie primara blocheaza Loturile 3, 5 si 6 pentru ca fiecare ar incerca sa foloseasca o valoare deja folosita in tabel (Lot 3 repeta "Comprese sterile" din Lot 1, Lot 5 repeta "Manusi latex M" din Lot 2, Lot 6 repeta iar "Comprese sterile") - cheia primara nu accepta valori repetate. Campul potrivit: un ID_Lot de tip AutoNumber, diferit la fiecare lot chiar daca materialul e acelasi.

b) Structura corectata: ID_Lot (AutoNumber, cheie primara), Denumire_Material (Short Text), Cantitate (Number), UM (Short Text), Data_Receptie (Date/Time). Renumeroteaza tu cele 6 loturi cu ID_Lot de la 1 la 6, in ordinea din enunt - capcana: nu sari peste vreun numar si nu repeta un ID.

c) Metoda: grupeaza loturile dupa Denumire_Material, apoi aduna Cantitate doar pentru loturile din acelasi grup (Comprese sterile = Loturile 1+3+6; Manusi latex M = Loturile 2+5; Seringi 5ml = Lotul 4). Fa tu adunarile pentru fiecare grup.

Criterii de evaluare: ai explicat corect de ce blocheaza cheia gresita, ai ales tipul de date corect pentru fiecare camp nou, ai identificat toate loturile din fiecare grup fara sa scapi vreunul.

Ce ai invatat astazi

  • O foaie de calcul (Excel) nu impune reguli in mod implicit (decat daca le configurezi manual, celula cu celula) — datele scrise inconsecvent, editarea simultana necontrolata si volumul mare de randuri sunt semnale ca e nevoie de o baza de date
  • O baza de date este o colectie de tabele cu structura fixa, gestionata printr-un SGBD (ex. Microsoft Access)
  • Tabel = colectie de inregistrari; Camp = coloana (o categorie de informatie); Inregistrare = rand (un element concret)
  • Fiecare camp are un tip de date fix: Short Text, Number, Date/Time, Yes/No, AutoNumber
  • Cheia primara identifica unic fiecare inregistrare: nu se repeta niciodata, nu poate fi goala, ramane stabila in timp
  • Nu alege drept cheie primara un nume de persoana sau o denumire de produs — foloseste un camp de tip AutoNumber
  • Tabelul Pacienti contine date cu caracter personal — acces limitat la personalul care are nevoie de el
  • Exemplu numeric: in tabelul Stoc_Materiale, "Manusi latex M" insumeaza 500 + 200 + 150 = 850 buc pe 3 loturi separate

Vrei mai mult?

Proiecteaza un tabel nou, Alergii_Pacienti, pentru evidenta alergiilor cunoscute la internare. Alege minim 4 campuri cu tipul de date potrivit (gandeste-te ce tip merge la "reactie severa: da/nu" si la "data confirmarii alergiei") si stabileste cheia primara. Testeaza alegerea pe un caz limita: doi pacienti diferiti, aceeasi alergie (Penicilina) - tabelul trebuie sa accepte ambele randuri, fara niciun conflict.

De ce crezi ca, dupa ce o inregistrare e salvata, Access nu iti mai permite sa editezi manual valoarea unui camp AutoNumber? Ce s-ar putea strica intr-un alt tabel daca acea valoare s-ar schimba dupa ce a fost deja folosita in alta parte?

Codul Numeric Personal functioneaza in evidenta medicala reala exact ca o cheie primara: unic, stabil, nu se repeta niciodata la doi oameni diferiti. In lectia urmatoare vei lega doua tabele, Pacienti si Consultatii, printr-un camp comun - la fel cum CNP-ul leaga, in spate, fisele aceluiasi pacient intre locuri diferite.

Urmatoarea lectie

Continua cu Operatii pe tabel si incarcarea bazei — introducerea datelor printr-un formular, validari care opresc greselile la intrare, importul dintr-o foaie de calcul si corectarea duplicatelor.

Continua →