Invatare Atomica

Vreau sa proiectez tabele perfecte!

Progres lectie:
0%
🎯

Obiectivul lectiei

Ai o lista cu elevii clasei: nume, prenume, data nasterii, note, absente. Cum organizezi aceste date intr-un tabel bine structurat?

Dupa aceasta lectie vei putea:

  • Sa analizezi structura unui tabel: randuri si coloane
  • Sa explici ce defineste un camp
  • Sa aplici ce este cheia primara si de ce e obligatorie
  • Sa evaluezi alegerea tIPului de date potrivit
  • Sa aplici cum numesti campurile corect

Incearca singur!

🎯 INCEARCA

Proiecteaza un tabel!

Nu trebuie sa stii raspunsurile perfecte. Gandeste-te logic si vezi ce decizii iei.

Misiunea ta: Tabelul "Biblioteca Scolii"

Profesorul de romana te roaga sa creezi un tabel in care sa tina evidenta cartilor din biblioteca scolii. Iata informatiile pe care le are despre fiecare carte:

📚 "Amintiri din copilarie" de Ion Creanga, publicata in 1892, are 156 pagini, 3 exemplare disponibile, costa 25.50 lei, este de tip "Proza" si este disponibila pentru imprumut.

1
Ce campuri (coloane) ai pune in tabel? Gandeste-te: fiecare "bucata" de informatie separata ar trebui sa fie un camp distinct. Scrie pe o foaie lista ta de campuri.
2
Ce tip de date ar avea fiecare camp? Gandeste-te: titlul este text, anul este numar, pretul are zecimale, "disponibila" este da/nu. Scrie langa fiecare camp tipul potrivit.
3
Care camp ar fi cheia primara? Cheia primara trebuie sa fie unica pentru fiecare carte. Poate fi titlul? Dar daca ai doua editii ale aceleasi carti? Ce altceva ai putea folosi?
4
Ce greseli ai putea face? De exemplu: ai pus "Ion Creanga" intr-un singur camp Autor, sau l-ai separat in Nume_Autor si Prenume_Autor? Care varianta e mai buna si de ce?
🌟 BONUS: Mai adauga 2-3 carti imaginare in tabelul tau si verifica daca structura functioneaza bine pentru toate.
Blocat la pasul 1? Click aici pentru un indiciu

Descompune propozitia in bucati: titlu, autor, an publicare, numar pagini, exemplare, pret, gen literar, disponibilitate. Fiecare "bucata" = un camp.

Nu uita: ar fi bine sa adaugi si un camp special de identificare (un numar unic pentru fiecare carte).

Blocat la pasul 2? Click aici

Gandeste-te la fiecare camp: textul se scrie cu litere (Short Text), anul si numarul de pagini sunt numere intregi (Number), pretul are zecimale (Currency), iar disponibilitatea este Da sau Nu (Yes/No).

Blocat la pasul 3? Click aici

Titlul NU e o cheie primara buna - doua carti pot avea acelasi titlu (editii diferite). Autorul, la fel nu - un autor poate avea mai multe carti.

Solutia: un camp special ID_Carte care se incrementeaza automat (AutoNumber in Access). Fiecare carte primeste un numar unic: 1, 2, 3...

1

Structura unui tabel: Randuri si Coloane

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).

📋 Analogie: Catalogul clasei

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).

2

Ce defineste un camp?

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
3

Ce este cheia primara si de ce e obligatorie?

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.

💳 Analogie: CNP-ul persoanei

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.

💡 AutoNumber - Cheia primara automata

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

🔑 Cheie Primara in actiune
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!

⚠ Reguli pentru cheia primara
  • 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
4

Alegerea tipului de date potrivit

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.

💬
Short Text
Text scurt, maxim 255 caractere. Pentru nume, adrese, coduri.
"Popescu", "8A"
📜
Long Text
Text lung, fara limita practica. Pentru descrieri, comentarii, note.
"Elev silitor, participare activa..."
🔢
Number
Numere intregi sau cu zecimale. Pentru cantitati, varste, scoruri.
14, 156, 8.75
📅
Date/Time
Date calendaristice si ore. Access le stocheaza special.
15.03.2011, 14:30
💰
Currency
Sume de bani, cu exactitate de 4 zecimale. Previne erori de rotunjire.
25.50 lei, 149.99 lei
Yes/No
Valori logice: Da sau Nu, Adevarat sau Fals. Apare ca un checkbox.
Disponibil: Da/Nu
📎
Attachment
Fisiere atasate: poze, documente PDF, etc.
poza_elev.jpg
😊
AutoNumber
Numar generat automat, unic. Ideal pentru cheia primara (ID).
1, 2, 3, 4...

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
⚠ Greseala clasica: Numar stocat ca Text

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!

5

Cum numesti campurile corect

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
💡 Conventie recomandata

Foloseste underscore (_) pentru a separa cuvintele: Nume_Elev, Data_Nasterii, ID_Carte. Asta face campurile usor de citit si evita probleme in interogari.

6

Regula de aur: Fiecare camp = O singura informatie

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

❌ GRESIT - Date amestecate
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

✅ CORECT - Fiecare camp are o singura informatie
Nume Prenume Strada Oras Cod_Postal Telefon Email
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!

7

Top 5 greseli de evitat

Top 5 greseli de evitat
1. Un singur camp "Nume" in loc de Nume + Prenume

Nume: "Popescu Ion"
Nume: "Popescu" + Prenume: "Ion"
Separarea permite sortare alfabetica corecta dupa nume SAU dupa prenume.

2. Fara cheie primara

Fara un camp de identificare unica, nu poti distinge intre doi "Ion Popescu" din clasa. Adauga mereu un camp ID de tip AutoNumber.

3. Tip de date gresit

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

4. Date redundante (duplicate)

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!).

5. Mai multe valori intr-un singur camp

Note: "9, 7, 10, 8" (toate notele intr-un camp)
Un tabel separat pentru note, cu un rand per nota

Exercitii practice

Exercitiul 1 (Nivel minim) - Proiecteaza tabelul "Produse Magazin"

Un magazin online vinde produse electronice. Fiecare produs are: denumire, marca, pret, cantitate in stoc, categorie (telefoane, laptopuri, accesorii), greutate, data adaugarii in catalog si daca este in promotie sau nu.

  1. Creeaza lista completa de campuri pentru tabelul Produse. Nu uita cheia primara!
  2. Pentru fiecare camp, specifica: tipul de date, daca este obligatoriu si o eventuala valoare implicita.
  3. Explica de ce ai ales Currency pentru pret si nu Number. Ce probleme ar aparea cu Number?

Raspunde intr-un tabel: Camp | Tip Date | Obligatoriu | Valoare Implicita

Exercitiul 2 (Nivel standard) - Gaseste greselile

Analizeaza urmatorul tabel si gaseste toate greselile de proiectare:

Nume Elev Data nasterii nota Adresa Completa telefon parinte
Popescu Ion 15 martie 2011 9, 8, 10, 7 Str. Rozelor 5, Bl. A2, Sc. 1, Ap. 15, Bucuresti 0721.123.456
  1. Identifica minimum 6 greseli in acest tabel.
  2. Reproiecteaza tabelul corect: scrie lista de campuri cu nume corecte si tipuri de date potrivite.
  3. Ce cheie primara ai folosi si de ce?

Indicii:

  • Verifica: spatii in numele campurilor? Diacritice? Consistenta?
  • Verifica: Nume+Prenume separat? Note separate? Adresa descompusa?
  • Verifica: exista cheie primara? Tipurile de date sunt potrivite?

Exercitiul 3 (Nivel performanta) - Proiecteaza de la zero

Alege UNUL dintre scenariile de mai jos si proiecteaza tabelul complet:

  1. Biblioteca scolii: Evidenta cartilor disponibile (titlu, autor, gen, an, pret, stoc, disponibilitate)
  2. Veterinar: Evidenta animalelor de companie (proprietar, animal, rasa, varsta, vaccinari, greutate)
  3. Turneu sportiv: Evidenta echipelor participante (nume echipa, oras, antrenor, numar jucatori, punctaj, calificata da/nu)

Pentru scenariul ales, specifica:

  • Numele tabelului
  • Lista campurilor cu tipul de date si proprietatile
  • Cheia primara si justificarea alegerii
  • 3 exemple de inregistrari (randuri cu date fictive)

Cuvinte cheie de folosit: tabel, camp, inregistrare, cheie primara, AutoNumber, tip de date, Short Text, Number, Date/Time, Currency, Yes/No, proprietati

Ce ai invatat astazi

  • Ai invatat structura unui tabel: randuri si coloane
  • Acum stii ce defineste un camp
  • Ai descoperit ce este cheia primara si de ce e obligatorie
  • Ai explorat alegerea tipului de date potrivit
  • Ai inteles cum numesti campurile corect
  • Ai invatat regula de aur: fiecare camp = o singura informatie
  • Acum stii top 5 greseli de evitat

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →