Cloud și date

Bazele de date: ce sunt și cum organizează informația

Bazele de date explicate: tabele, chei, limbajul SQL, tranzacții ACID, indexuri, tipuri NoSQL și cum se alege între modelul relațional și cel flexibil.

De Redacția LumeaTehnologiei9 min de citit
Laptop cu tabel și grafice colorate pe ecran, lângă o tabletă pe birou

O bază de date este o colecție organizată de informații, păstrată astfel încât să poată fi găsită, modificată și protejată rapid, chiar și când o folosesc mii de oameni deodată. În spatele aproape oricărei aplicații stă cel puțin una: lista de contacte din telefon, catalogul unui magazin online, istoricul tranzacțiilor din aplicația băncii, mersul trenurilor sau registrul de pacienți al unei clinici.

Diferența față de un simplu fișier sau o foaie de calcul este programul care administrează datele, numit sistem de gestiune a bazelor de date. El decide cum sunt scrise informațiile pe disc, cum sunt găsite în câteva milisecunde printre milioane de rânduri și cum se evită situația în care două persoane cumpără ultimul bilet la același spectacol. Mai jos vezi cum funcționează toate acestea, fără să ai nevoie de cunoștințe de programare.

De la fișe de hârtie la sisteme de gestiune

O bază de date nu este o invenție a erei digitale; ideea de a organiza informația pentru a o regăsi rapid există de secole. Catalogul cu fișe al unei biblioteci, registrul unei primării sau cartoteca unui cabinet medical erau baze de date pe hârtie, cu reguli stricte de ordonare.

Calculatoarele au adus două schimbări mari: viteza de căutare și posibilitatea de a lega informațiile între ele automat. În loc să copiezi adresa unui client pe fiecare factură, o scrii o singură dată și fiecare factură trimite la ea. Dacă clientul se mută, schimbi adresa într-un singur loc.

Ce face un sistem de gestiune a bazelor de date

Un SGBD (sistem de gestiune a bazelor de date) este programul care stă între aplicații și date. Rolurile lui principale:

  • stochează datele pe disc într-un format optimizat;
  • răspunde la interogări, adică la întrebări de tipul „care sunt comenzile de ieri peste o anumită valoare”;
  • controlează accesul, stabilind cine poate citi și cine poate modifica;
  • gestionează scrierile simultane, astfel încât datele să nu se strice;
  • face copii de siguranță și permite recuperarea după defecțiuni.

Bazele de date relaționale: tabele care se leagă între ele

Modelul relațional organizează informația în tabele formate din rânduri și coloane, legate între ele prin identificatori comuni. Este cel mai răspândit model de peste patru decenii și se găsește în sistemele bancare, contabile, administrative și în majoritatea aplicațiilor de afaceri.

Tabele, rânduri și coloane

Fiecare tabel descrie un singur tip de lucru: clienți, produse, comenzi. Fiecare rând (numit și înregistrare) este un exemplar, de exemplu un client anume. Fiecare coloană este o proprietate, cu un tip fix: text, număr, dată calendaristică.

id_clientnumeorașdata_înscrierii
101Ana PopescuCluj-Napoca2023-03-14
102Mihai IonescuIași2024-01-09
103Elena DumitruBrașov2024-06-21

Cheile: cum se leagă tabelele

Cheia primară este coloana care identifică unic fiecare rând, cum este id_client mai sus. Cheia străină este o coloană dintr-un alt tabel care trimite la cheia primară. Tabelul de comenzi nu repetă numele și orașul clientului, ci păstrează doar id_client. Când ai nevoie de comandă împreună cu datele clientului, baza de date le unește automat printr-o operație numită join.

Această separare se numește normalizare și are un scop clar: fiecare informație stă într-un singur loc, deci nu poate apărea în două variante contradictorii.

Limbajul SQL

Bazele relaționale se interoghează cu SQL (Structured Query Language), un limbaj standardizat internațional, apropiat de engleza simplă. O cerere tipică spune ce coloane vrei, din ce tabel și cu ce condiții, de exemplu toate comenzile unui client dintr-un anumit oraș, ordonate după dată. Principalele tipuri de comenzi:

  1. SELECT citește date.
  2. INSERT adaugă rânduri noi.
  3. UPDATE modifică rânduri existente.
  4. DELETE șterge rânduri.
  5. CREATE și ALTER definesc sau schimbă structura tabelelor.

Tranzacțiile și regulile ACID

O tranzacție este un grup de operații care trebuie să reușească împreună sau să eșueze împreună. Exemplul clasic este un transfer bancar: banii trebuie scăzuți dintr-un cont și adăugați în altul; dacă sistemul cade la mijloc, nu este acceptabil ca suma să dispară sau să apară de două ori.

Bazele relaționale garantează patru proprietăți, cunoscute prin acronimul ACID:

ProprietateCe înseamnăExemplul transferului
AtomicitateTotul sau nimicFie se fac ambele mișcări, fie niciuna
ConsistențăDatele respectă mereu regulile definiteSoldul nu poate deveni negativ dacă regula o interzice
IzolareTranzacțiile simultane nu se încurcăDouă transferuri din același cont nu folosesc același sold vechi
DurabilitateCe s-a confirmat rămâne salvatDupă confirmare, transferul supraviețuiește unei pene de curent

Durabilitatea se obține prin jurnalul de tranzacții: înainte de a modifica datele, sistemul notează pe disc ce urmează să facă. Dacă se oprește brusc, la repornire citește jurnalul și termină sau anulează operațiile neîncheiate.

Sfat: Când o aplicație îți spune „operațiunea nu a putut fi finalizată, încearcă din nou”, de multe ori o tranzacție a fost anulată tocmai ca să nu lase datele pe jumătate modificate. Verifică istoricul înainte să repeți o plată.

Indexurile: cum găsește baza de date un rând printre milioane

Un index este o structură auxiliară care permite găsirea rapidă a rândurilor după valoarea unei coloane, la fel cum indexul alfabetic de la finalul unei cărți te duce direct la pagina potrivită. Fără index, sistemul ar trebui să citească tabelul rând cu rând.

Cum arată un index pe dinăuntru

Majoritatea indexurilor folosesc o structură numită arbore B (B-tree), care ține valorile sortate și împărțite pe niveluri. Căutarea coboară din nivel în nivel, eliminând la fiecare pas o mare parte din posibilități, astfel încât chiar și într-un tabel cu sute de milioane de rânduri ajunge la rezultat în câțiva pași. Alte tipuri de indexuri folosesc funcții de dispersie, asemănătoare cu cele descrise în ghidul despre funcțiile hash.

Prețul indexurilor

Indexurile nu sunt gratuite. Fiecare ocupă spațiu pe disc și trebuie actualizat la fiecare scriere. Un tabel cu prea multe indexuri citește repede, dar scrie încet. Administratorii aleg de aceea indexurile după întrebările puse cel mai des aplicației.

Fișier vechi de bibliotecă din lemn, cu sertare ordonate ca rândurile unui tabel

Bazele de date NoSQL: când tabelele nu se potrivesc

NoSQL este un nume generic pentru bazele de date care nu folosesc modelul clasic de tabele relaționale, fiind create pentru date cu structură variabilă, volume foarte mari sau viteze foarte ridicate. Numele se citește de obicei „nu doar SQL”, pentru că multe dintre ele acceptă și interogări asemănătoare.

Principalele familii

  • Baze de documente: fiecare înregistrare este un document de tip JSON, cu câmpuri care pot diferi de la un document la altul. Potrivite pentru cataloage de produse cu atribute foarte diferite.
  • Baze cheie-valoare: cel mai simplu model, ca un dicționar uriaș; dai cheia, primești valoarea. Folosite pentru sesiuni de utilizator și memorie cache.
  • Baze pe coloane largi: tabele foarte mari, distribuite pe multe servere, potrivite pentru scrieri masive, de exemplu date de la senzori.
  • Baze de grafuri: stochează noduri și relații între ele, utile pentru rețele sociale, trasee și detectarea fraudelor.
  • Baze de serii de timp: optimizate pentru măsurători ordonate în timp, ca temperaturi sau consum de energie.
  • Baze vectoriale: păstrează reprezentări numerice ale textelor și imaginilor și găsesc rapid elemente asemănătoare; sunt folosite tot mai des de aplicațiile de inteligență artificială, ca în cazul modelelor de limbaj.

Compromisul consistenței

Multe baze NoSQL distribuite pe mai multe servere renunță la o parte din garanțiile ACID în schimbul vitezei și al disponibilității. Folosesc consistența eventuală: o modificare ajunge pe toate copiile după un interval scurt, nu instantaneu. Pentru numărul de aprecieri al unei postări, asta nu contează; pentru soldul unui cont bancar, contează enorm. Același compromis apare la sincronizarea între dispozitive.

Relațional sau NoSQL: cum aleg aplicațiile

Alegerea depinde de forma datelor, de cât de importantă este consistența strictă și de cât de mult trebuie să crească sistemul. Nu există un model superior în general, iar multe aplicații mari folosesc ambele tipuri, fiecare pentru ce face mai bine.

CriteriuRelaționalNoSQL
Structura datelorFixă, definită dinainteFlexibilă, poate varia
Garanții la tranzacțiiACID completVariabile, adesea consistență eventuală
ScalareDe regulă pe un server mai puternicPe mai multe servere obișnuite
Interogări complexe cu legăturiFoarte buneMai limitate, depinde de tip
Exemple tipiceContabilitate, bănci, stocuriCataloage, jurnale, rețele sociale, senzori

Când volumele cresc foarte mult și datele vin din surse diverse, intri în zona numită big data, unde se folosesc instrumente speciale de procesare distribuită.

Bazele de date în cloud și protecția datelor

Tot mai multe baze de date rulează la furnizori de cloud, sub formă de serviciu administrat: nu instalezi nimic, ci primești direct o bază de date, cu backup, actualizări și replicare gestionate de furnizor. Acest model face parte din categoria PaaS, explicată în IaaS, PaaS și SaaS: diferențele explicate simplu, iar contextul general îl găsești în ghidul despre cloud computing.

Copiile de siguranță și replicarea

  • Backupul complet salvează toată baza la un moment dat.
  • Backupul incremental salvează doar ce s-a schimbat de la copia anterioară.
  • Recuperarea la un moment dat folosește jurnalul de tranzacții ca să readucă baza exact la starea de la o anumită oră.
  • Replicarea ține una sau mai multe copii sincronizate pe alte servere, gata să preia funcția dacă serverul principal cade.

Atenție: Replicarea nu înlocuiește backupul. Dacă cineva șterge din greșeală un tabel, ștergerea se copiază imediat și pe replici. Doar un backup separat, cu istoric, te salvează.

Datele personale

Bazele de date care conțin nume, adrese, CNP-uri sau date de sănătate intră sub incidența GDPR. Bunele practici includ criptarea datelor, accesul limitat strict la cine are nevoie, jurnale de acces și ștergerea datelor care nu mai sunt necesare. Ghidurile oficiale pentru operatorii din România sunt publicate de ANSPDCP; pentru situații concrete, consultă un specialist în protecția datelor. Pentru protecția conturilor care au acces la baze de date, vezi și Parolele puternice și managerele de parole explicate.

Ideile principale despre bazele de date

O bază de date este informație organizată plus un program care o administrează, o caută rapid și o protejează. Modelul relațional folosește tabele legate prin chei, limbajul SQL și tranzacții ACID, fiind alegerea firească pentru date în care exactitatea contează. Modelele NoSQL oferă flexibilitate și scalare pe multe servere, uneori cu prețul unei consistențe mai relaxate.

De reținut:

  • cheia primară identifică unic un rând, cheia străină leagă tabelele;
  • SQL este limbajul standard pentru interogarea bazelor relaționale;
  • ACID garantează că tranzacțiile se fac complet, corect și durabil;
  • indexurile accelerează citirea, dar încetinesc scrierea;
  • replicarea asigură continuitatea, backupul te protejează de greșeli.

Întrebări frecvente

Este o foaie de calcul o bază de date?

Nu în sens strict. O foaie de calcul organizează date în tabele, dar nu are garanții la scrieri simultane, legături automate între tabele sau interogări rapide pe volume mari, așa cum oferă un sistem de gestiune a bazelor de date.

Ce înseamnă SQL?

SQL înseamnă Structured Query Language, adică limbaj structurat de interogare. Este limbajul standard prin care se citesc, se adaugă, se modifică și se șterg date în bazele de date relaționale.

Care este diferența dintre o bază relațională și una NoSQL?

Baza relațională folosește tabele cu structură fixă, legate prin chei, și garanții stricte la tranzacții. Bazele NoSQL folosesc modele mai flexibile, ca documente sau grafuri, și sunt gândite pentru a se extinde ușor pe multe servere.

De ce este importantă cheia primară?

Pentru că identifică fără echivoc fiecare înregistrare. Fără ea, ar fi imposibil să deosebești doi clienți cu același nume sau să legi corect o comandă de persoana care a făcut-o.

Cât de des trebuie făcut backup unei baze de date?

Depinde de câte date îți permiți să pierzi. O bază care se schimbă constant are nevoie de backup automat frecvent și de jurnal de tranzacții, pe când una modificată rar poate fi salvată mai rar.

↑