Sari la conținut
EduCamp

Tematică științifică · 6.4

Modelul fizic relațional

Modelul fizic al unei baze de date relaționale: transformarea modelului conceptual în tabele, înregistrări și câmpuri, tipurile de date, cheia primară, cheia străină, constrângerile și integritatea referențială, cu modelul fizic al bibliotecii scris în SQL.

Modelul conceptual descrie datele independent de SGBD.

Modelul fizic se obține prin transformarea modelului conceptual în model fizic. Exemplele continuă baza de date a bibliotecii, al cărei model conceptual este descris în subcapitolul Modelul conceptual.

Tabele, înregistrări și câmpuri

Într-o bază de date relațională, datele se păstrează în tabele. Un tabel are un număr fix de coloane și un număr variabil de rânduri:

Crearea unui tabel înseamnă definirea structurii lui. Înregistrările se adaugă ulterior și se pot modifica sau șterge fără ca structura să se schimbe.

Transformarea modelului conceptual în model fizic

Modelul conceptualModelul fizic
entitatetabel, cu numele entității la plural: CITITOR devine cititori
atributcâmp
instanțăînregistrare
identificator uniccheie primară
atribut obligatoriucâmp care nu admite valoarea NULL
atribut opționalcâmp care admite valoarea NULL
relație unu la mai mulțicheie străină în tabelul de pe partea „mai mulți”
relație baratăcheia străină face parte și din cheia primară

Relațiile se transformă după tipul lor:

  • relația unu la mai mulți — în tabelul corespunzător entității de pe partea „mai mulți” se adaugă un câmp care preia cheia primară a tabelului de pe partea „unu”. Tabelul imprumuturi primește câmpul cod_cititor, fiindcă un împrumut aparține unui singur cititor, pe când un cititor nu poate păstra într-un singur câmp toate împrumuturile lui. Dacă relația este opțională dinspre partea „mai mulți”, cheia străină admite NULL;
  • relația unu la unu — cheia primară a unuia dintre tabele se adaugă, ca cheie străină, în celălalt tabel; alegerea depinde de datele consultate mai des, iar uneori cheia străină se pune în ambele tabele;
  • relația mai mulți la mai mulți — a fost înlocuită în modelul conceptual printr-o entitate de intersecție, care devine un tabel cu două chei străine; aici carti_autori, cu isbn și cod_autor.

Structura unui tabel se descrie printr-o diagramă de tabel, care precizează pentru fiecare câmp dacă face parte din cheia primară (PK, primary key) sau dintr-o cheie străină (FK, foreign key) și dacă este obligatoriu (*) sau opțional (o):

CâmpulCheiaOpționalitatea
cod_imprumutPK*
cod_cititorFK*
nr_inventarFK*
data_imprumut*
data_scadenta*
data_restituireo

Tipurile de date

Tipul unui câmp stabilește ce valori poate primi, ce operații se pot face cu ele și cât spațiu ocupă. Tipurile se aleg după semnificația datelor: un număr de telefon sau un ISBN se memorează ca șir de caractere, fiindcă nu se fac calcule cu el și poate începe cu cifra 0.

CategoriaMySQLMicrosoft AccessSe folosește pentru
șir de caractere cu lungime fixăCHAR(n)Short Textcoduri de lungime fixă: ISBN, CNP
șir de caractere cu lungime variabilăVARCHAR(n)Short Text, până la 255 de caracterenume, titluri, adrese
text lungTEXTLong Textdescrieri, observații
număr întregTINYINT, SMALLINT, INT, BIGINTNumber (Byte, Integer, Long Integer)cantități, coduri numerice, ani
număr realFLOAT, DOUBLE, DECIMAL(n,d)Number (Single, Double, Decimal), CurrencyFLOAT, DOUBLE: măsurători, medii; DECIMAL, Currency: valori bănești, care cer zecimale exacte
dată și orăDATE, TIME, DATETIME, YEARDate/Timedata nașterii, data împrumutului
valoare logicăBOOLEANYes/Norăspunsuri da/nu
număr generat automatINT AUTO_INCREMENTAutoNumberchei primare artificiale
valoare dintr-o listăENUM('a','b',…)Lookupcategorii cu valori fixe

La DECIMAL(n,d), n este numărul total de cifre, iar d numărul de zecimale: DECIMAL(5,2) păstrează valori între −999,99 și 999,99. În MySQL, datele calendaristice se scriu între apostrofuri, sub forma 'aaaa-ll-zz', de exemplu '2026-03-16'.

În versiunile mai vechi de Access, Short Text se numea Text, iar Long Text se numea Memo.

Valoarea NULL

NULL nu este nici zero, nici șirul vid.

O operație aritmetică sau o comparație cu un operand NULL dă rezultatul NULL: dacă la un împrumut lipsește data restituirii, expresia data_restituire - data_imprumut nu are valoare, iar comparația data_restituire = NULL nu este adevărată nici la împrumuturile nerestituite. De aceea, testul pentru NULL nu se face cu =, ci cu operatorii IS NULL și IS NOT NULL. Funcțiile de agregare SUM, AVG, MIN, MAX și COUNT(câmp) ignoră valorile NULL: media notelor existente se calculează fără notele care lipsesc.

Cheia primară

Ea provine din identificatorul unic al entității și trebuie să îndeplinească simultan următoarele condiții:

  • valorile ei sunt distincte în tot tabelul; pentru o cheie compusă, două înregistrări trebuie să difere prin cel puțin un câmp al cheii;
  • niciun câmp al cheii nu are valoarea NULL;
  • valorile ei nu se modifică în timp.

Un tabel are o singură cheie primară.

Una dintre cheile candidat se alege drept cheie primară. Perechea formată din CNP și nume identifică unic un elev, dar nu este cheie candidat, fiindcă CNP-ul singur îl identifică. Pentru celelalte chei candidat se poate cere doar ca valorile să fie distincte, printr-o cheie unică (UNIQUE): într-un tabel al elevilor, cheia primară poate fi un cod, iar CNP-ul o cheie unică.

Când entitatea nu are un atribut natural potrivit, cheia primară este un cod numeric generat automat de SGBD, cu AUTO_INCREMENT în MySQL sau cu tipul AutoNumber în Access. SGBD-ul atribuie fiecărei înregistrări noi valoarea următoare, iar cheia rămâne distinctă fără intervenția utilizatorului.

Pe lângă identificarea înregistrărilor, cheia primară permite regăsirea lor rapidă: SGBD-ul construiește pentru ea un index, în care valorile cheii sunt ordonate, deci o înregistrare se găsește printr-o căutare de tip binar, nu prin parcurgerea întregului tabel.

Cheia străină

Cheia străină poate referi și cheia primară a aceluiași tabel, la o relație recursivă: în tabelul angajati, câmpul cod_sef păstrează codul altui angajat din același tabel.

În imprumuturi, câmpul cod_cititor este cheie străină spre cititori: fiecare împrumut păstrează codul unui cititor existent.

Cheia străină are același tip ca cheia primară pe care o referă. Ea poate avea valori repetate, fiindcă mai multe înregistrări copil se pot referi la același părinte, și poate admite NULL, dacă relația este opțională.

Materialul acesta se citește pe educamp.ro și nu se tipărește.

Ce cuprinde subcapitolul

  1. Tabele, înregistrări și câmpuri
  2. Transformarea modelului conceptual în model fizic
  3. Tipurile de date
  4. Valoarea NULL
  5. Cheia primară
  6. Cheia străină
  7. Constrângerile
  8. Integritatea datelor
  9. Modelul fizic al bibliotecii
  10. Apariții la examen

Continuă lectura ca și cursant

Cel puțin un subcapitol din fiecare capitol este disponibil gratuit și integral. Pentru a citi toate celelalte subcapitole ale disciplinei, te înscrii la cursul de pregătire.

Te înscrii, alegi în cont când începe cursul și plătești prima lună prin transfer bancar. Pentru a vedea mai întâi cum este prezentată materia, poți reveni la primul subcapitol al capitolului.

Acces la suportul de curs

25 RON / lună, fără ședințe

Ce cuprinde:

  • Acces la toate lecțiile disponibile
  • Suport de curs pentru tematica științifică și metodică
  • Exemple, explicații și exerciții
  • Acces la materialele noi adăugate pe platformă
  • Posibilitatea de a adresa întrebări

Poți alege și variante cu ședințe online, în grup sau individuale. Le vezi pe pagina cursului.

Ai întrebări sau o problemă? Scrie-mi pe WhatsApp, la 0745 874 576.

Înscrie-te Alte varianteCum plătești Login

Surse (4)
  • Gremalschi, A., Corlat, S., Braicov, A., „Informatică. Manual pentru clasa a 12-a”, Editura Știința, Chișinău, 2015
  • Huțanu, V. T., Popescu, C., „Manual de informatică pentru clasa a XII-a”, Editura L&S Info-mat, București, 2007
  • Programa pentru examenul de definitivare în învățământ, disciplina Informatică, cap. 6 „Baze de date”
  • Programa pentru concursul de ocupare a posturilor didactice, disciplina Informatică, cap. 6 „Baze de date”
Actualizat: 20 octombrie 2026