Didaxis
lecție · Informatică

Integritatea datelor

Reguli de validare și consistența relațiilor.

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

Pe scurt

Integritatea datelor înseamnă respectarea regulilor care păstrează informațiile coerente. O cheie primară nu se repetă; o cheie externă trebuie să indice o înregistrare permisă; o notă poate fi restrânsă la intervalul 1–10. Regulile se pot declara în baza de date, nu doar în interfața aplicației.

Desen la lecția „Integritatea datelor”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Integritatea datelor înseamnă respectarea regulilor care păstrează informațiile coerente. Integritatea entității cere ca cheia primară să fie unică și nenulă. Integritatea referențială cere ca o cheie externă, precum Elevi.clasa_id, să indice o înregistrare existentă din tabelul referit (sau să fie nulă, dacă schema permite). Regulile de validare limitează valorile admise: NOT NULL interzice absența valorii, UNIQUE interzice duplicatele, iar CHECK impune o condiție, de exemplu . Aceste reguli se declară în baza de date, nu doar în interfața aplicației, ca să protejeze datele indiferent de calea prin care sunt scrise. Datele lipsă se reprezintă prin NULL în SQL: o regulă CHECK nu interzice automat NULL, deoarece condiția nu este evaluată ca falsă; absența valorii se interzice cu NOT NULL.

Exemplul 1 — cheia externă și CHECK. Tabelul clase conține doar clasa cu id=9. Tabelul note impune ca nota să fie între 1 și 10:

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));
CREATE TABLE note (id integer PRIMARY KEY,
                   elev_id integer NOT NULL REFERENCES elevi(id),
                   nota integer CHECK (nota BETWEEN 1 AND 10));
INSERT INTO clase VALUES (9, 'IX A');
INSERT INTO elevi VALUES (1, 'Ana', 9);
INSERT INTO elevi VALUES (2, 'Dan', 99);
INSERT INTO note VALUES (1, 1, 9);
INSERT INTO note VALUES (2, 1, 12);
INSERT INTO note VALUES (1, 1, 8);
SELECT COUNT(*) FROM note;

Inserarea elevului cu clasa_id=99 este respinsă, deoarece nu există clasa 99. Nota 12 este respinsă de constrângerea CHECK. A doua inserare cu id=1 în note este respinsă de cheia primară. Au rămas valabile doar inserările corecte, deci note conține un singur rând și interogarea întoarce 1.

Exemplul 2 — valoarea NULL și ștergerea unei înregistrări referite. Valoarea NULL trece de CHECK; pentru a o interzice, coloana se declară NOT NULL. Ștergerea unei clase referite de elevi este respinsă de cheia externă:

INSERT INTO note VALUES (3, 1, NULL);
SELECT COUNT(*) AS randuri, COUNT(nota) AS cu_nota FROM note;
DELETE FROM note WHERE nota IS NULL;
ALTER TABLE note ALTER COLUMN nota SET NOT NULL;
INSERT INTO note VALUES (4, 1, NULL);
DELETE FROM clase WHERE id = 9;

Prima inserare reușește, deoarece CHECK nu interzice NULL; interogarea următoare întoarce 2 rânduri și o singură notă completată. După ștergerea rândului fără notă și declararea coloanei NOT NULL, o nouă inserare cu NULL este respinsă. Ultima comandă este respinsă, deoarece elevul 1 referă clasa 9: clasa nu poate dispărea cât timp există înregistrări care o folosesc. Dacă ar exista numai clasa 9, inserarea unui elev cu clasa_id=10 ar fi la fel respinsă de cheia externă.

Exemplul 3 — UNIQUE și ștergerea în cascadă. Adresa de e-mail a unui elev trebuie să fie unică, iar la ștergerea clasei se pot șterge automat și elevii ei, dacă cheia externă se declară cu ON DELETE CASCADE:

CREATE TABLE clase (id integer PRIMARY KEY, denumire text NOT NULL);
CREATE TABLE elevi (id integer PRIMARY KEY, email text UNIQUE,
                    clasa_id integer REFERENCES clase(id) ON DELETE CASCADE);
INSERT INTO clase VALUES (9, 'IX A');
INSERT INTO elevi VALUES (1, 'ana@ex.ro', 9);
INSERT INTO elevi VALUES (2, 'ana@ex.ro', 9);
INSERT INTO elevi VALUES (3, NULL, 9);
INSERT INTO elevi VALUES (4, NULL, 9);
SELECT COUNT(*) FROM elevi;
DELETE FROM clase WHERE id = 9;
SELECT COUNT(*) FROM elevi;

A doua inserare este respinsă, deoarece e-mailul ana@ex.ro există deja. Inserările cu NULL reușesc amândouă: UNIQUE compară doar valorile prezente, iar NULL nu este egal cu NULL. Prima interogare întoarce 3. Ștergerea clasei 9 reușește acum, pentru că regula ON DELETE CASCADE șterge și elevii care o refereau, deci ultima interogare întoarce 0. Fără acea clauză, aceeași ștergere ar fi fost respinsă, ca în exemplul 2. Cascada se alege cu grijă: ea poate șterge mai multe înregistrări decât se aștepta autorul comenzii.

Cheia primară compusă. Uneori un singur câmp nu identifică un rând. Într-un tabel absente(elev_id, data, motivat) cu PRIMARY KEY (elev_id, data) perechile (1, '2026-10-05'), (1, '2026-10-06') și (2, '2026-10-05') sunt acceptate, deoarece fiecare pereche este diferită. A patra inserare, (1, '2026-10-05'), este respinsă: unicitatea se verifică pe combinația celor două coloane, nu pe fiecare în parte.

Greșeli frecvente

  • Greșit: validarea în formular este suficientă pentru orice scriere în bază.
    Corect: constrângerile bazei protejează și alte căi de acces.
  • Greșit: o cheie externă poate indica orice identificator inexistent.
    Corect: referința trebuie să respecte constrângerea declarată.
  • Greșit: CHECK (nota BETWEEN 1 AND 10) interzice singur NULL.
    Corect: pentru obligatoriu se declară și NOT NULL.
î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
  • PostgreSQL, Documentation 18, cap. 5.5 „Constraints”, postgresql.org/docs/18/ddl-constraints.html

Desene: Redactare proprie (desen original), conform OMECI 5099/2009, Informatică XII; informatica.isj-db.ro

lecțiile sunt gratuite

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