Structura unui tabel: Randuri si Coloane
Un tabel este elementul fundamental al unei baze de date relationale. Este format din randuri (inregistrari / records) si coloane (campuri / fields).
Fiecare coloana (camp) reprezinta un tip de informatie (ex: Nume, Varsta, Oras). Fiecare rand (inregistrare) reprezinta un obiect complet (ex: un elev, o carte, un produs).
Gandeste-te la catalogul clasei. Coloanele sunt rubricile de sus: "Nr. crt.", "Nume", "Prenume", "Nota 1", "Nota 2"... Fiecare rand este un elev. Daca dai cu degetul pe rand, vezi toate informatiile despre un singur elev. Daca dai cu degetul pe coloana, vezi aceeasi informatie pentru toti elevii (de ex. toate notele la Nota 1).
Ce defineste un camp?
Fiecare camp dintr-un tabel are mai multe proprietati pe care le setezi cand proiectezi baza de date:
| Proprietate | Ce inseamna | Exemplu |
|---|---|---|
| Nume camp | Numele coloanei in tabel | Nume, Data_Nasterii |
| Tip de date | Ce fel de valori accepta campul | Short Text, Number, Date/Time |
| Dimensiune | Cat spatiu ocupa (pentru text: nr. max de caractere) | Short Text - max 255 caractere |
| Required (Obligatoriu) | Campul trebuie completat sau nu? | Numele elevului = Da, Telefon = Nu |
| Default Value | Valoarea care apare automat daca nu scrii nimic | Oras = "Bucuresti", Activ = Da |
Ce este cheia primara si de ce e obligatorie?
Cheia primara este un camp (sau o combinatie de campuri) care identifica in mod unic fiecare inregistrare din tabel. Nu pot exista doua randuri cu aceeasi valoare in campul cheie primara.
Fara cheie primara, baza de date nu poate distinge intre doua inregistrari similare.
Doi oameni pot avea acelasi nume ("Ion Popescu"), aceeasi varsta si acelasi oras. Dar fiecare persoana are un CNP unic - un numar care o identifica fara dubii. La fel functioneaza cheia primara: este "CNP-ul" fiecarei inregistrari din tabel.
In Microsoft Access, tipul de date AutoNumber genereaza automat un numar unic pentru fiecare inregistrare noua: 1, 2, 3, 4... Nu trebuie sa-l completezi tu - Access il creeaza singur. Este cel mai frecvent folosit ca cheie primara.
Primary Key visual
| ID_Elev | Nume | Prenume |
|---|---|---|
| 1 | Popescu | Ion |
| 2 | Popescu | Maria |
| 3 | Popescu | Ion |
Doi elevi au acelasi Nume si Prenume ("Popescu Ion"), dar ID-urile lor sunt diferite (1 vs 3). Cheia primara elimina confuzia!
- Unicitate: Fiecare valoare trebuie sa fie diferita (nu se repeta)
- Nu poate fi goala: Campul cheie primara nu accepta valori NULL (lipsa)
- Nu se modifica: Odata setat, ID-ul nu trebuie schimbat
- Un singur tabel, o singura cheie primara
Alegerea tipului de date potrivit
Fiecare camp trebuie sa aiba un tip de date care spune bazei de date ce fel de informatii accepta. Alegerea corecta previne erori si economiseste spatiu.
Data type comparison table
| Camp | Tip corect | De ce? |
|---|---|---|
| Nume_Elev | Short Text | Este text, nu depaseste 255 caractere |
| Varsta | Number (Integer) | Numar intreg, nu face sens cu zecimale |
| Data_Nasterii | Date/Time | Permite calcule cu date (cat are?) si sortari corecte |
| Media | Number (Double) | Numar cu zecimale (8.75, 9.33) |
| Pret_Carte | Currency | Bani = Currency, previne erori de rotunjire |
| Are_Bursa | Yes/No | Doar doua variante posibile: Da sau Nu |
| Observatii | Long Text | Text lung, posibil mai mult de 255 caractere |
Daca stochezi varsta ca Short Text ("14" in loc de 14), Access va sorta textul alfabetic, nu numeric: "14", "2", "9" in loc de 2, 9, 14. De asemenea, nu vei putea calcula media sau suma. Regula: daca faci calcule cu acea valoare, foloseste Number sau Currency!
Cum numesti campurile corect
Numele campurilor nu sunt doar etichete - sunt identificatori pe care ii vei folosi in formulare, rapoarte si interogari. Un nume bun face baza de date usor de inteles si de intretinut.
| Regula | Gresit ❌ | Corect ✅ |
|---|---|---|
| Fara spatii | Data Nasterii | Data_Nasterii |
| Fara caractere speciale | Preţ/carte | Pret_Carte |
| Nume descriptive | x, camp1, abc | Nume_Elev, Varsta |
| Fara diacritice | Şcoală | Scoala |
| Scurt dar clar | Numele_Complet_Al_Elevului | Nume_Elev |
Foloseste underscore (_) pentru a separa cuvintele: Nume_Elev, Data_Nasterii, ID_Carte. Asta face campurile usor de citit si evita probleme in interogari.
Regula de aur: Fiecare camp = O singura informatie
Cel mai important principiu in proiectarea tabelelor: un camp trebuie sa contina o singura bucata de informatie, nu mai multe amestecate.
Bad design example
| Nume Complet | Adresa Completa | Contact |
|---|---|---|
| Popescu Ion Alexandru | Str. Libertatii 15, Bucuresti, 012345 | 0721123456, ion@email.com |
⚠ Problema: Cum sortezi dupa prenume? Cum gasesti toti elevii din Bucuresti? Cum trimiti email fara telefon?
Good design example
| Nume | Prenume | Strada | Oras | Cod_Postal | Telefon | |
|---|---|---|---|---|---|---|
| Popescu | Ion | Str. Libertatii 15 | Bucuresti | 012345 | 0721123456 | ion@email.com |
✅ Acum poti sorta dupa Nume, filtra dupa Oras, trimite email-uri - totul e posibil!
Top 5 greseli de evitat
❌ Nume: "Popescu Ion"
✅ Nume: "Popescu" + Prenume: "Ion"
Separarea permite sortare alfabetica corecta dupa nume SAU dupa prenume.
Fara un camp de identificare unica, nu poti distinge intre doi "Ion Popescu" din clasa. Adauga mereu un camp ID de tip AutoNumber.
❌ Varsta ca Short Text → sortarea da "14, 2, 9" in loc de "2, 9, 14"
❌ Data ca Short Text → "15.03.2011" se sorteaza incorect, nu poti calcula diferente
✅ Varsta = Number, Data = Date/Time
Daca ai un tabel cu note si in fiecare rand scrii iar numele, prenumele si clasa elevului, ai date redundante. Solutia: doua tabele legate (vei invata in lectiile urmatoare!).
❌ Note: "9, 7, 10, 8" (toate notele intr-un camp)
✅ Un tabel separat pentru note, cu un rand per nota