Pe scurt
O bază de date organizează informații pentru păstrare, actualizare și regăsire. Într-o școală, putem avea date despre elevi, clase și înscrieri. Lecțiile „Entități și relații”, „Modelul relațional”, „Chei în baze de date”, „Normalizarea datelor”, „Integritatea datelor”, „Operații pe tabele” și „Interogări și rapoarte” arată cum se proiectează și folosesc aceste informații.
O entitate este un obiect despre care păstrăm date, de exemplu un elev. Un atribut este o caracteristică a sa, precum numele sau clasa. O relație leagă entități: elevul aparține unei clase. Într-un tabel Elevi, fiecare înregistrare reprezintă un elev, iar câmpurile pot fi id, nume și clasa_id. Câmpul clasa_id arată înregistrarea corespunzătoare din tabelul Clase.
În detaliu
O bază de date este o colecție organizată de date, memorată astfel încât să poată fi păstrată, actualizată și regăsită după reguli. Față de un fișier text oarecare, o bază de date oferă structură (tabele cu câmpuri și tipuri), reguli de integritate (chei, valori admise), acces controlat pentru mai mulți utilizatori și reducerea repetărilor inutile. Programul care gestionează baza se numește sistem de gestiune a bazelor de date (SGBD). Într-un tabel, o înregistrare (rând) descrie o entitate, de exemplu un elev, iar un câmp (coloană) descrie o caracteristică a ei, de exemplu nume. Structura datelor este separată de interogarea curentă, deci aceeași bază poate răspunde mai multor întrebări.
Exemplul 1 — două tabele legate. Definim clase(id, denumire) și elevi(id, nume, clasa_id), unde clasa_id trimite la clasa elevului. Adăugăm clasele 9 (IX A) și 10 (IX B) și trei elevi, dintre care doi se numesc Ana:
CREATE TABLE clase (id integer PRIMARY KEY, denumire text NOT NULL);
CREATE TABLE elevi (id integer PRIMARY KEY, nume text NOT NULL,
clasa_id integer REFERENCES clase(id));
INSERT INTO clase VALUES (9, 'IX A'), (10, 'IX B');
INSERT INTO elevi VALUES (1, 'Ana', 9), (2, 'Mihai', 9), (3, 'Ana', 10);
SELECT COUNT(*) FROM elevi WHERE clasa_id = 9;
Ultima interogare întoarce 2, nu 3. Pașii sunt: se găsește clasa cu id=9, se selectează din elevi rândurile cu clasa_id=9, apoi se numără. Numele Ana apare de două ori, dar identificatorii 1 și 3 deosebesc cele două persoane, deci numele nu poate fi folosit ca identificator.
Exemplul 2 — o modificare într-un singur loc. Denumirea clasei este memorată o singură dată, în clase, iar elevii o regăsesc printr-o legătură între tabele (JOIN):
UPDATE clase SET denumire = 'IX A matematică' WHERE id = 9;
SELECT elevi.nume, clase.denumire
FROM elevi JOIN clase ON elevi.clasa_id = clase.id
ORDER BY elevi.id;
Rezultatul are trei rânduri: (Ana, IX A matematică), (Mihai, IX A matematică) și (Ana, IX B). O singură comandă UPDATE a schimbat denumirea pentru ambii elevi ai clasei 9. Dacă denumirea ar fi fost scrisă în fiecare rând al elevilor, ar fi trebuit modificate toate rândurile, iar o omisiune ar fi lăsat date contradictorii.
Exemplul 3 — regulile de integritate la lucru. Pornim de la aceleași tabele. Încercăm trei comenzi care încalcă regulile bazei:
INSERT INTO elevi VALUES (4, 'Dan', 11);
DELETE FROM clase WHERE id = 9;
INSERT INTO elevi VALUES (1, 'Dan', 10);
Prima este respinsă, deoarece nu există nicio clasă cu id=11, deci cheia externă ar indica spre nimic. A doua este respinsă, pentru că elevii 1 și 2 încă fac referire la clasa 9. A treia este respinsă, deoarece id=1 aparține deja Anei, iar cheia primară nu admite duplicate. După cele trei încercări, tabelul elevi are tot 3 rânduri: o comandă respinsă nu schimbă nimic. Astfel baza de date împiedică apariția unor date fără sens, lucru pe care un simplu fișier text nu îl face.
Operații și performanță. O bază de date permite adăugarea, modificarea, ștergerea și regăsirea datelor, sub reguli de integritate. Timpul unei interogări nu depinde numai de numărul de rânduri, ci și de organizarea datelor: un indice pe coloana căutată poate evita parcurgerea întregului tabel. Pentru o bază cu mii de elevi, căutarea după id printr-un indice examinează doar câteva înregistrări, nu pe toate. Cheia primară id și cheia externă clasa_id sunt cele care fac posibile atât identificarea unui elev, cât și legătura lui cu clasa.
Greșeli frecvente
- Greșit: o bază de date este doar un singur fișier text fără structură.Corect: organizează datele după un model și reguli.
- Greșit: numele unui elev este întotdeauna identificator unic.Corect: persoane diferite pot avea același nume.
- Greșit: fiecare întrebare cere duplicarea datelor.Corect: interogări diferite pot folosi aceleași tabele.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 3–4, 7, clasa XII; rocnee.eu
- OMECI 5099/2009, anexa 5, Informatică, p. 3, 7, clasa XII; plan de încadrare: OMEC 7723/2024, anexa 2, tabelele 1–25, legislatie.just.ro; filiera tehnologică: OMEC 7724/2024, anexa 4, tabelul calificării, legislatie.just.ro
Documente consultate
- Programa școlară de informatică, clasa a XII-a (OMECI 5099/2009, anexa 5), CNCE, modulul Baze de date, p. 3 și 7; rocnee.eu
- OpenStax, Introduction to Computer Science, cap. 8.3 „Relational Database Management Systems”, openstax.org/books/introduction-computer-science/pages/8-3-relational-database-management-systems
Desene: Redactare proprie (desen original)
