Pe scurt
O bază de date organizează informații și legăturile dintre ele. În modelul ierarhic, înregistrările formează un arbore: fiecare copil are un singur părinte în structura de bază. În modelul rețea, legăturile pot fi multiple și o înregistrare poate participa la mai multe relații. În modelul relațional, datele sunt organizate logic în tabele, cu rânduri și coloane; cheile leagă rândurile din tabele diferite.
Pentru o bibliotecă, poți avea tabelele Carti(id_carte, titlu) și Imprumuturi(id_imprumut, id_carte, cititor). Câmpul id_carte din împrumuturi indică o carte. Dacă o carte apare în mai multe împrumuturi, nu trebuie rescris de fiecare dată titlul ei.
În detaliu
Un model de baze de date stabilește cum se organizează datele și legăturile dintre ele. În modelul ierarhic, înregistrările formează un arbore: fiecare înregistrare-copil are un singur părinte în structura de bază, iar accesul se face prin navigare pe relații părinte–copil. În modelul rețea, o înregistrare poate participa la mai multe relații, deci poate avea mai mulți părinți, legați prin legături explicite. În modelul relațional, datele sunt organizate în tabele cu rânduri și coloane, iar cheile leagă rândurile din tabele diferite. Modelul relațional permite interogări declarative: se cere ce date sunt necesare, fără a preciza fiecare pas de navigare.
Exemplul 1 — modelul relațional pentru o bibliotecă. Cartea cu id_carte=12 este împrumutată de doi cititori, iar cartea 15 de unul singur. Titlul fiecărei cărți apare o singură dată, în carti:
CREATE TABLE carti (id_carte integer PRIMARY KEY, titlu text NOT NULL);
CREATE TABLE imprumuturi (id_imprumut integer PRIMARY KEY,
id_carte integer NOT NULL REFERENCES carti(id_carte),
cititor text NOT NULL);
INSERT INTO carti VALUES (12, 'Enigma Otiliei'), (15, 'Amintiri din copilărie');
INSERT INTO imprumuturi VALUES (1, 12, 'Ana'), (2, 12, 'Dan'), (3, 15, 'Ana');
SELECT titlu, COUNT(*) AS nr FROM carti JOIN imprumuturi USING (id_carte)
GROUP BY titlu ORDER BY titlu;
SELECT cititor FROM imprumuturi WHERE id_carte = 12 ORDER BY cititor;
INSERT INTO imprumuturi VALUES (4, 99, 'Dan');
Prima interogare întoarce (Amintiri din copilărie, 1) și (Enigma Otiliei, 2); a doua întoarce Ana și Dan. Ultima comandă este respinsă: cartea 99 nu există în carti, iar cheia externă id_carte împiedică un împrumut către o carte inexistentă. Tabelul carti păstrează un singur rând pentru cartea 12, iar imprumuturi două rânduri care o referă.
Exemplul 2 — aceleași date în modelul ierarhic. Dacă arborele are ca rădăcini cititorii și drept copii cărțile împrumutate, Ana are copiii „Enigma Otiliei” și „Amintiri din copilărie”, iar Dan are copilul „Enigma Otiliei”. Fiecare copil are un singur părinte, deci informația despre cartea 12 trebuie scrisă de două ori, o dată sub Ana și o dată sub Dan: sunt 3 înregistrări de carte în arbore, față de 2 rânduri în carti. Dacă titlul se corectează într-un loc și rămâne neschimbat în celălalt, datele devin contradictorii. Aceeași problemă apare și la întrebarea inversă („cine a împrumutat cartea 12?”), care cere parcurgerea tuturor cititorilor. Modelul rețea evită repetarea prin legături multiple, dar navigarea depinde de legăturile definite în structură.
Exemplul 3 — corectarea și ștergerea în cele două modele. Titlul „Enigma Otiliei” se corectează cu o singură comandă în modelul relațional, UPDATE carti SET titlu = '…' WHERE id_carte = 12, care modifică un rând, iar ambele împrumuturi ale cărții 12 arată apoi titlul nou. În arborele ierarhic titlul apare sub Ana și sub Dan, deci trebuie schimbat în două locuri. La ștergerea cititorului Ana situația diferă și mai mult. În arbore dispare tot subarborele ei, inclusiv „Amintiri din copilărie”, care nu mai apare nicăieri: informația despre carte s-a pierdut. În modelul relațional se șterg din imprumuturi cele două rânduri cu cititor = 'Ana', dar carti păstrează ambele cărți, deoarece o carte există independent de împrumuturi.
Relația dintre modelul conceptual și implementarea concretă trebuie păstrată: un tabel al modelului relațional nu este același lucru cu un fișier text oarecare.
Greșeli frecvente
- Greșit: modelul ierarhic permite oricărui copil oricâți părinți în același arbore.Corect: în structura de bază are un singur părinte.
- Greșit: într-o bază relațională legăturile dintre tabele nu au nevoie de chei.Corect: cheile identifică și referă rândurile.
- Greșit: o bază de date este doar o listă de valori fără relații.Corect: modelul precizează organizarea și legăturile datelor.
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, p. 3, 7; rocnee.eu
- Programa școlară de informatică, clasa a XII-a (OMECI 5099/2009, anexa 5), CNCE, p. 3–4, 7; rocnee.eu
- IBM, „What is a Database?”, secțiunea „Database models”; ibm.com
- IBM IMS 15.6, „Comparison of hierarchical and relational databases”; ibm.com
Desene: Redactare proprie (desen original)
