Înregistrări și chei primare
Vreau să înțeleg cum identific unic fiecare înregistrare!
Obiectivul lectiei
Dupa aceasta lectie vei putea:
- Sa definesti ce este o inregistrare (record) intr-un tabel
- Sa recunosti ce problema rezolva cheia primara (inregistrari cu date identice, dar diferite in realitate)
- Sa identifici un camp potrivit ca cheie primara, respectand conditiile unic / nenul / stabil
- Sa dai exemple de chei primare din viata reala (numar matricol, cod de bare, ISBN)
- Sa explici de ce nu folosim date personale sensibile (CNP) ca si cheie primara
Incearca!
Imaginează-ți că ești profesorul clasei și trebuie să pui notă unui elev. Privește acest tabel:
| Nume | Prenume | Clasa | Nota |
|---|---|---|---|
| Popescu | Ion | 7A | 9 |
| Ionescu | Maria | 7A | 8 |
| Ionescu | Maria | 7A | ? |
| Marin | Elena | 7B | 10 |
❌ Problema:
Sunt două eleve "Ionescu Maria" din clasa 7A! Cum știi cărei Maria îi pui nota?
În viața reală, acest lucru se întâmplă des - oameni cu același nume există!
✅ Soluția - Cheia primară:
Adăugăm un ID unic pentru fiecare elev. Chiar dacă au același nume, ID-ul lor va fi diferit!
Inregistrare si cheie primara
📌 Ce este o înregistrare?
O înregistrare (record) este un rând complet dintr-un tabel care conține toate informațiile despre o singură entitate (un elev, un produs, o carte, etc.).
🔑 Ce este cheia primară?
Cheia primară (Primary Key) este un câmp special care identifică unic fiecare înregistrare. Valorile din acest câmp trebuie să fie:
- Unice - nu se pot repeta
- Non-nule - nu pot fi goale
- Stabile - nu se schimbă în timp
Exemplu cu cheie primară:
| 🔑 ID_Elev | Nume | Prenume | Clasa | Nota |
|---|---|---|---|---|
| 1 | Popescu | Ion | 7A | 9 |
| 2 | Ionescu | Maria | 7A | 8 |
| 3 | Ionescu | Maria | 7A | 10 |
| 4 | Marin | Elena | 7B | 10 |
Acum, deși avem două "Ionescu Maria", le putem distinge: eleva cu 🔑 ID 2 are nota 8, iar eleva cu 🔑 ID 3 are nota 10.
🌍 Exemple din viața reală:
- Număr matricol - Identifică unic fiecare elev în școală
- Cod de bare - Identifică unic fiecare produs
- Număr de înmatriculare - Identifică unic fiecare mașină
- ISBN - Identifică unic fiecare carte publicată
- ID generat automat - Număr unic creat de baza de date (ex: 1, 2, 3...)
⚠️ Atenție: Coduri care conțin date personale reale (CNP, număr de pașaport etc.) sunt informații sensibile protejate de lege. Nu le colectați și nu le stocați în proiectele voastre — folosiți ID-uri generate automat de baza de date!
🧪 Simulare: Ce se întâmplă dacă încerci să adaugi un ID duplicat?
💡 AutoNumber - Cel mai folosit tip de cheie primară
În Access și alte baze de date, poți seta câmpul ID ca AutoNumber. Aceasta înseamnă că:
- Baza de date generează automat un număr unic pentru fiecare înregistrare nouă
- Nu trebuie să-ți faci griji că vei introduce un ID duplicat
- Numerele cresc in ordine, dar nu sunt neaparat consecutive: dupa stergeri, secventa poate arata 1, 2, 5, 9... — comportament normal; important e ca sunt unice
Practica
Nivel Minim
Priveste tabelul urmator si raspunde: care dintre coloane ar putea fi cheie primara? De ce?
| ID_Elev | Nume | Prenume | Clasa |
|---|---|---|---|
| 1 | Popescu | Ion | 7A |
| 2 | Ionescu | Maria | 7B |
| 3 | Popescu | Ana | 7A |
Scrie raspunsul in caiet: de ce ID_Elev este potrivit ca cheie primara, iar Nume sau Clasa nu sunt?
Vezi rezolvarea
Raspuns: Coloana ID_Elev este cheia primara.
- De ce ID_Elev merge: valorile 1, 2, 3 sunt unice (nu se repeta) si nenule (fiecare elev are un numar). Respecta exact cele 3 conditii din lectie: unic, non-nul, stabil.
- De ce Nume nu merge: in tabel apare de doua ori "Popescu" (la Ion si la Ana) — nu e unic, deci nu poate identifica singur o inregistrare.
- De ce Clasa nu merge: "7A" apare de doua ori (Popescu Ion si Popescu Ana) — multi elevi pot fi in aceeasi clasa, deci nu e unic.
Concluzie: doar un camp cu valori garantat unice (ca un numar de identificare) poate fi cheie primara.
Nivel Standard
Creaza in caiet un tabel pentru o biblioteca cu 4 carti. Tabelul trebuie sa aiba:
- Un camp ID_Carte (cheie primara, AutoNumber — numere unice generate automat; in exemplu poti folosi 1, 2, 3, 4 daca nu ai sters inregistrari)
- Campurile: Titlu, Autor, An_Publicare
- Cel putin doua carti cu acelasi autor (demonstrand ca ID-ul le diferentiaza)
Verifica: toate valorile din ID_Carte sunt unice si nenule?
Vezi rezolvarea
Tabel Carti cu cheia primara ID_Carte (AutoNumber):
- ID_Carte=1, Titlu="Harry Potter si Piatra Filozofala", Autor="J.K. Rowling", An_Publicare=1997
- ID_Carte=2, Titlu="Harry Potter si Camera Secretelor", Autor="J.K. Rowling", An_Publicare=1998
- ID_Carte=3, Titlu="Ion", Autor="Liviu Rebreanu", An_Publicare=1920
- ID_Carte=4, Titlu="Padurea Spanzuratilor", Autor="Liviu Rebreanu", An_Publicare=1922
Observa: primele doua carti au acelasi autor (J.K. Rowling), ultimele doua tot acelasi autor (Liviu Rebreanu) — dar ID_Carte le diferentiaza perfect, fiindca fiecare numar (1, 2, 3, 4) apare o singura data si niciunul nu e gol.
Verificare: toate valorile ID_Carte (1,2,3,4) sunt unice si nenule — cerinta indeplinita.
Nivel Performanta
Analizeaza situatia: un magazin online stocheaza comenzile clientilor. Propune un tabel Comenzi cu:
- Campul cheie primara potrivit si justificarea alegerii
- Minim 5 campuri relevante (cu tipurile de date corecte: Text, Numar, Data, Da/Nu)
- Un exemplu de 3 inregistrari completate corect
Bonus: De ce nu se poate folosi Nume_Client ca cheie primara?
Vezi rezolvarea
Schita de rezolvare (nu raspunsul complet — completeaza tu detaliile):
- Cheia primara:
ID_Comanda, tip AutoNumber. Justificare: un numar de comanda generat automat e mereu unic si nenul, spre deosebire de orice data despre client. - Cel putin 5 campuri de gandit (foloseste doar tipurile predate — Text, Numar, Data/Ora, Da/Nu): un camp pentru numele clientului (Text), unul pentru produsul comandat (Text), unul pentru cantitate sau pret (Numar), unul pentru data comenzii (Data/Ora), unul pentru statusul "livrat?" (Da/Nu).
- 3 inregistrari exemplu: construieste-le tu, cu ID-uri 1, 2, 3 diferite, si verifica ca niciun ID nu se repeta.
- Capcana de evitat: nu pune adresa clientului ca Numar (e Text, poate contine litere/cod postal cu zero in fata) — aceeasi regula ca la NumarTelefon din lectia 3.
Bonus — de ce NU Nume_Client ca cheie: pentru ca doi clienti diferiti pot avea acelasi nume (ex: doi "Popescu Ion"), deci valoarea s-ar repeta si nu ar mai identifica unic o comanda — exact problema din exemplul cu cele doua "Ionescu Maria" din lectie.
Criterii de evaluare: cheia justificata corect (2p), minim 5 campuri cu tipuri corecte (3p), 3 inregistrari coerente cu campurile alese (3p), raspuns corect la bonus (2p).
Recapitulare
Ce am invatat:
- O inregistrare (record) este un rand complet dintr-un tabel — toate datele despre o singura entitate (elev, produs, carte etc.)
- Cheia primara (Primary Key) identifica unic fiecare inregistrare din tabel
- Valorile cheii primare trebuie sa fie unice, non-nule si stabile in timp
- AutoNumber este cel mai comun tip de cheie primara: baza de date genereaza automat numere unice — nu neaparat consecutive (dupa stergeri pot sari: 1, 2, 5, 9... — normal; important e ca sunt unice)
- Exemple din viata reala de chei unice: numar matricol, cod de bare, ISBN, ID generat automat
Vrei mai mult?
In tabelul cu chei primare din lectie, adauga in caiet o a 5-a inregistrare cu ID_Elev = 2 (acelasi ID ca Ionescu Maria), dar cu alte date: Popescu Ana, 7A. Acum incearca sa raspunzi: daca cineva cauta "elevul cu ID 2", pe care il gaseste? Ce s-a stricat?
- De gandit: In tabelul nostru mic, niciun Nume nu se repeta acum. De ce, totusi, nu e o idee buna sa folosim Numele ca si cheie primara in loc de ID_Elev?
- Deschidere: CNP-ul romanesc este o cheie primara reala: 13 cifre unice pentru fiecare cetatean, care codifica si sexul, si data nasterii. Codul de bare de pe orice produs (EAN) functioneaza la fel - un numar unic care nu se repeta niciodata pe alt produs.