Conectează-te Înregistrare gratuită
Informatică Liceu (9-12)

Baze de date (SQL, interogari, normalizare)

Pe scurt

O bază de date relațională stochează date în tabele interconectate prin chei, iar SQL este limbajul standard pentru interogarea și manipularea acestor date. Normalizarea este procesul de proiectare a tabelelor pentru a reduce redundanța și a evita anomaliile la actualizare, urmând formele normale 1NF, 2NF și 3NF. Pentru Bacalaureat, se cere rezolvarea de interogări SQL cu JOIN-uri, funcții de grup și subinterogări, precum și identificarea formelor normale.

Comenzi SQL de bază

Principalele comenzi SQL sunt

  • SELECT – pentru interogări
  • INSERT, UPDATE, DELETE – pentru manipularea datelor
  • CREATE, ALTER, DROP – pentru definirea structurii

Interogările pot fi simple (SELECT * FROM tabel) sau complexe, utilizând:

  • JOIN – pentru a combina tabele
  • GROUP BY – pentru agregări
  • HAVING – pentru filtrarea grupelor
  • Subinterogări – interogări imbricate

Interogări SQL – exemple practice

Exemplul 1: Tabele: *Elevi (id_elev, nume, clasa)* și *Note (id_nota, id_elev, materie, nota)*. Se cere lista elevilor din clasa '10A' cu media notelor > 8.

Rezolvare

``sql

SELECT e.nume, AVG(n.nota) AS medie

FROM Elevi e

JOIN Note n ON e.id_elev = n.id_elev

WHERE e.clasa = '10A'

GROUP BY e.id_elev, e.nume

HAVING AVG(n.nota) > 8;

`

Se folosește GROUP BY pentru agregare și HAVING pentru filtrarea grupelor.

Exemplul 2: Se cere numele elevilor care au luat nota maximă la o materie dată (de ex. 'Matematica').

Rezolvare

`sql

SELECT e.nume

FROM Elevi e

JOIN Note n ON e.id_elev = n.id_elev

WHERE n.materie = 'Matematica'

AND n.nota = (SELECT MAX(nota) FROM Note WHERE materie = 'Matematica');

`

Aceasta este o subinterogare necorelată. Alternativ, se poate folosi ORDER BY și LIMIT 1, dar subinterogarea este mai didactică.

Normalizarea bazelor de date

Normalizarea este procesul de proiectare a tabelelor pentru a reduce redundanța și a evita anomalii la actualizare.

Formele normale principale:

  • 1NF – fiecare câmp atomic, fără liste
  • 2NF – 1NF plus dependență funcțională completă față de cheia primară
  • 3NF – 2NF plus nicio dependență tranzitivă

Exemplul 3: Tabel inițial: *Vanzari (id_vanzare, nume_client, telefon, produs, cantitate, pret_unitar)*. Observăm că *nume_client* și *telefon* se repetă pentru același client.

Dependențe funcționale: id_vanzare → toate, nume_client → telefon` (dar nu invers).

Pași de normalizare

  1. Se separă în: Clienti (id_client, nume, telefon) și Vanzari (id_vanzare, id_client, produs, cantitate, pret_unitar). Se atinge 2NF prin eliminarea dependenței parțiale (telefon depinde doar de client, nu de întreaga cheie).
  2. Dacă *pret_unitar* depinde doar de *produs*, se separă și Produse (id_produs, nume_produs, pret_unitar), iar *Vanzari* devine (id_vanzare, id_client, id_produs, cantitate). Astfel se atinge 3NF.

Concepte cheie pentru Bacalaureat

  • SELECT, JOIN, GROUP BY, HAVING, ORDER BY
  • Subinterogări corelate și necorelate
  • Funcții de grup: COUNT, SUM, AVG, MAX, MIN
  • Cheie primară, cheie străină, integritate referențială
  • Forme normale: 1NF, 2NF, 3NF
  • Dependențe funcționale și eliminarea redundanței

Atenție la greșeli frecvente:

  • Omiterea condiției de JOIN duce la produs cartezian
  • La normalizare, elevii trebuie să recunoască dependențele funcționale din enunț și să aplice pașii până la 3NF
  • Este esențial să se exerseze scrierea manuală a interogărilor pe hârtie, respectând sintaxa SQL standard (fără dialecte)

Verifică-te!

  1. Ce comandă SQL se folosește pentru a combina date din două tabele și care este principala greșeală frecventă la utilizarea acesteia?

  1. Care sunt cele trei forme normale principale și ce problemă rezolvă fiecare dintre ele?

  1. În exemplul cu tabelul Vanzari, ce dependență funcțională justifică separarea tabelului în Clienti și Vanzari pentru a atinge 2NF?

Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.

Creează cont