Ce e o bază de date?
O bază de date e un sistem organizat de stocare si gestionare a datelor. Sistemele de gestionare a bazelor de date (DBMS) oferă operatii sigure (ACID), căutare eficientă, si acces concurent.
Baze de date relaționale (SQL)
Principiul de bază
Datele sunt organizate în tabele (relații) cu rânduri (tupluri) si coloane (atribute). Relațiile între tabele se fac prin chei externe (foreign keys).
ACID — garanțiile unei baze relaționale
| Proprietate | Ce înseamnă | |---|---| | Atomicitate | O tranzacție se execută complet sau deloc | | Consistență | Datele respectă toate regulile și constrângerile | | Izolare | Tranzacțiile concurente nu se afectează între ele | | Durabilitate | Odată comisă, o tranzacție persistă chiar și la căderea sistemului |
Normalizarea
Procesul de organizare a datelor pentru a elimina redundanța:
1NF: Fiecare coloană conține o singură valoare atomică 2NF: 1NF + fiecare coloană ne-cheie depinde de întreaga cheie primară 3NF: 2NF + fiecare coloană ne-cheie depinde doar de cheia primară
De ce normalizăm: Evităm anomalii la inserare, ștergere, actualizare.
Când alegi SQL
- Datele au relații clare (clienți → comenzi → produse)
- Ai nevoie de integritate și consistență strictă
- Tranzacțiile implică mai multe tabele
- Ai nevoie de interogări complexe cu JOIN-uri
- Exemple: banking, ERP, sisteme de rezervări
Baze de date NoSQL
NoSQL = "Not Only SQL". Cuprinde mai multe paradigme diferite.
Tipuri de baze NoSQL
| Tip | Exemple | Cel mai bun pentru | |---|---|---| | Document | MongoDB, CouchDB | Date JSON flexibile, cataloguri | | Key-Value | Redis, DynamoDB, Riak | Cache, sesiuni, configurări | | Column-family | Cassandra, HBase | Date la scară mare, timp real | | Graf | Neo4j, ArangoDB | Relații complexe, recomandări |
Teorema CAP în practică
Bazele NoSQL fac alegeri explicite între consistență și disponibilitate:
| Sistem | Alege | Înseamnă | |---|---|---| | MongoDB | CP | Consistență puternică, dar poate refuza scrieri | | Cassandra | AP | Disponibilitate maximă, consistență eventuală | | Redis | CP | În mod implicit, dar poate fi configurat |
BASE — în loc de ACID
Bazele NoSQL folosesc BASE (Basically Available, Soft state, Eventual consistency):
- Basically Available: Sistemul răspunde mereu, chiar cu date vechi
- Soft state: Starea sistemului se poate schimba fără input extern
- Eventual consistency: În timp, toate nodurile vor ajunge la aceeași stare
Schema vs Schemaless
Schema (SQL)
Avantaje:
- Validarea datelor la nivelul bazei — nu poți insera date invalide
- Performanță mai bună — baza știe exact tipul fiecărei coloane
- Documentație implicită — structura e clară din definiția tabelei
- Tooling mai bun — ORM-uri, generare cod, migrări automate
Dezavantaje:
- Migrările sunt costisitoare (ALTER TABLE poate bloca tabelul)
- Date semi-structurate sunt greu de mapat
- Modificările de structură necesită downtime sau migrări complexe
Schemaless (NoSQL)
Avantaje:
- Flexibilitate maximă — fiecare document poate avea câmpuri diferite
- Dezvoltare rapidă — adaugi câmpuri fără migrări
- Potrivește bine cu date JSON din API-uri externe
- Scaling orizontal mai ușor (sharding, replicare)
Dezavantaje:
- Validarea trebuie făcută în aplicație — risc de date corupte
- Fără garanții de integritate — poți avea referințe invalide
- Interogări complexe sunt limitate (fără JOIN-uri native)
- Tooling mai slab, debugging mai dificil
Abordarea hibridă
Cele mai bune sisteme moderne combină ambele abordări:
- PostgreSQL + JSONB: Coloane JSON cu indexare GIN — ai validare SQL + flexibilitate JSON
- MongoDB + Schema Validation: Validare opțională la nivel de document
- SQL + GraphQL: Expui date prin GraphQL, care abstractizează complexitatea interogărilor
Cum alegi
| Ai nevoie de | Alege | |---|---| | Tranzacții bancare, date strict structurate | SQL (PostgreSQL, MySQL) | | Cache, sesiuni, date temporare | Redis (Key-Value) | | Catalog de produse cu câmpuri variabile | MongoDB (Document) | | Social graph, recomandări | Neo4j (Graf) | | Date la scară petabyte, timp real | Cassandra (Column-family) | | Full-text search + analytics | Elasticsearch | | Hibrid: relații + flexibilitate | PostgreSQL + JSONB |
Nu alege tehnologia după hype. Alege după natura datelor tale.