Didaxis
lecție · Informatică

Modelul relațional

Tabele, înregistrări, câmpuri și chei.

Se face în:
Clasa a XII-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Modelul relațional organizează datele în tabele. Coloanele descriu atribute, iar rândurile sunt înregistrări. În tabelul Elevi(id, nume, clasa_id), un rând poate fi și altul . Identificatorul clasei leagă aceste rânduri de tabelul claselor.

Desen la lecția „Modelul relațional”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

În modelul relațional, datele sunt organizate în tabele (relații). Un tabel are câmpuri (coloane, atribute), fiecare cu un nume și un tip de date, și înregistrări (rânduri, tupluri). Numărul câmpurilor este gradul tabelului, iar numărul înregistrărilor este cardinalitatea lui. Structura tabelului (numele, câmpurile și tipurile) se numește schemă, iar rândurile existente la un moment dat sunt conținutul tabelului. Un tabel trebuie proiectat astfel încât fiecare coloană să aibă sens clar și fiecare rând să poată fi identificat. Cheia primară identifică unic fiecare înregistrare, iar o cheie externă trimite la cheia primară a altui tabel. Ordinea fizică a rândurilor nu face parte din semnificația tabelului: pentru un rezultat ordonat se cere explicit sortare.

Exemplul 1 — schema și conținutul. Tabelul elevi(id, nume, clasa_id) are gradul 3. Cu clasele 9 (9A) și 10 (9B), cheia primară id și cheia externă clasa_id:

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, '9A'), (10, '9B');
INSERT INTO elevi VALUES (1, 'Ana', 9), (2, 'Dan', 9), (3, 'Mara', 10);
SELECT nume FROM elevi ORDER BY nume DESC;

Tabelul elevi are acum cardinalitatea 3. Interogarea cu ORDER BY nume DESC întoarce Mara, Dan, Ana: ordinea rezultatului este cerută explicit, nu depinde de ordinea în care au fost introduse rândurile. Valoarea clasa_id=9 nu este numele clasei, ci un identificator care trimite la rândul din clase cu id=9.

Exemplul 2 — combinarea tabelelor. O interogare poate combina tabelele după egalitatea cheilor, ca să afle în ce clasă este fiecare elev:

SELECT elevi.nume, clase.denumire
FROM elevi JOIN clase ON elevi.clasa_id = clase.id
ORDER BY elevi.id;

Rezultatul este (Ana, 9A), (Dan, 9A), (Mara, 9B). Fiecare rând din elevi este asociat cu rândul din clase care are cheia egală cu clasa_id. Datele despre clasă nu sunt copiate în elevi: fiecare tabel păstrează date despre entitățile lui și se leagă de celelalte prin chei. Dacă clasa_id ar avea o valoare fără clasă corespunzătoare, de exemplu 99, ar fi respinsă de cheia externă, iar JOIN nu ar putea asocia rândul.

Exemplul 3 — cheie primară compusă și legătura unu-la-mulți. Tabelul note păstrează notele elevilor:

CREATE TABLE note (elev_id integer REFERENCES elevi(id), disciplina text,
                   data text, nota integer,
                   PRIMARY KEY (elev_id, disciplina, data));
INSERT INTO note VALUES (1, 'informatica', '2026-10-05', 9),
                        (1, 'informatica', '2026-10-12', 10),
                        (2, 'informatica', '2026-10-05', 8);

Niciun câmp luat singur nu identifică un rând: Ana are două note la aceeași disciplină, iar la data de 5 octombrie notele sunt ale unor elevi diferiți. De aceea cheia primară este formată din trei câmpuri (cheie compusă). A doua notă a Anei la informatică din aceeași zi ar fi respinsă ca duplicat de cheie. Câmpul elev_id este și cheie externă spre elevi, iar o notă pentru elevul 99, care nu există, ar fi respinsă. Legătura dintre elevi și note este de tip unu-la-mulți: un elev are mai multe note, iar fiecare notă aparține unui singur elev. Terminologie. Tabelul clase(id, denumire) din exemplu are gradul 2 și cardinalitatea 2, iar elevi(id, nume, clasa_id) are gradul 3 și cardinalitatea 3. Un tabel este o mulțime de înregistrări: două rânduri identice în toate câmpurile nu au sens, de aceea fiecare tabel are o cheie primară. Valorile unui câmp aparțin aceluiași domeniu: id este număr întreg, nume este text, iar o valoare de alt tip este respinsă. Valoarea NULL marchează o informație lipsă și nu este nici zero, nici șir vid.

Greșeli frecvente

  • Greșit: clasa_id=9 este numele clasei.
    Corect: este un identificator care trimite la rândul clasei.
  • Greșit: rândurile unui tabel au întotdeauna o ordine garantată.
    Corect: ordinea rezultatului cere o regulă explicită.
  • Greșit: fiecare atribut al elevului trebuie copiat și în tabelul claselor.
    Corect: tabelele păstrează date despre entitățile lor și se leagă prin chei.
în contul tăuPremium

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), conform OMECI 5099/2009, anexa 5, Informatică XII; informatica.isj-db.ro

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.