coldwa.st
Tutte le guideProgrammazioneWebDatiStrumentiDatabaseHaskellConcettiCabal e buildToolchainCompilatorePrestazioniEditor e HLS

Programmazione · dati · database

Che cos’è un database?

Di ColdwastAggiornato il 15 giugno 20267 min di lettura#database#data#concepts
Rack di server in un data center
Rack di server in un data center — i database girano su server come questi, archiviando i dati dietro app e siti web.

Ogni app che usi — la tua banca, un negozio, un feed social — conserva le sue informazioni da qualche parte dove possono essere ritrovate, modificate e considerate affidabili. Quel «da qualche parte» è un database. È una delle idee fondanti del software. Questa guida spiega che cos’è un database, le grandi tipologie, i concetti che contano, esempi reali e il suo legame con SQL.

La definizione breve

Un database è una raccolta organizzata di dati, gestita da un software (un sistema di gestione di database, o DBMS) che permette di archiviare, recuperare, aggiornare e proteggere questi dati in modo affidabile. Anche un foglio di calcolo può contenere dati, ma un database aggiunge struttura, interrogazioni rapide su larga scala, accesso multiutente e la garanzia che i dati restino coerenti anche quando molte cose cambiano nello stesso momento.

Database vs DBMS

Due parole usate spesso come sinonimi ma che indicano cose diverse. Il database sono i dati stessi e la loro organizzazione. Il DBMS — PostgreSQL, MySQL, SQLite, MongoDB — è il software che li archivia, esegue le tue interrogazioni, applica le regole e gestisce gli accessi concorrenti. Quando si chiede «quale database usare?», di solito si parla del DBMS.

Le due grandi famiglie

  • Database relazionali (SQL): organizzano i dati in tabelle di righe e colonne, con relazioni definite tra loro, e si interrogano con SQL. Eccellono con dati strutturati e coerenza garantita. Esempi: PostgreSQL, MySQL, SQLite, SQL Server.
  • Database NoSQL: allentano la struttura rigida a tabelle per guadagnare flessibilità e scalabilità. Esistono in più forme: orientati ai documenti (MongoDB), chiave-valore (Redis), wide-column (Cassandra) e a grafo (Neo4j). Utili per grandi volumi, cache veloce o dati la cui forma cambia spesso.

La maggior parte dei sistemi reali ne usa diversi — per esempio un database relazionale per i record principali e un archivio chiave-valore per la cache.

Un laptop che mostra una dashboard di dati con grafici
Una dashboard di dati — i numeri e i grafici di un’app vengono letti da un database sottostante, di solito tramite un’interrogazione.

I concetti chiave

  • Schema — la struttura definita: quali tabelle esistono, le loro colonne e tipi e le regole. I database relazionali sono schema-first; molti NoSQL sono flessibili.
  • Interrogazione — una richiesta di dati precisi («tutti gli ordini della settimana scorsa»). Nei database relazionali si scrivono in SQL.
  • Indice — una struttura di ricerca che rende rapide le interrogazioni evitando di scorrere ogni riga, come l’indice analitico in fondo a un libro.
  • Transazione — un gruppo di modifiche che devono riuscire tutte o fallire tutte insieme (trasferire denaro tra due conti). I database relazionali lo garantiscono con le proprietà ACID.

Che cosa significa ACID

ACID descrive le garanzie che un database affidabile offre a una transazione: Atomicità (tutto o niente), Coerenza (i dati rispettano le loro regole prima e dopo), Isolamento (le transazioni concorrenti non si corrompono a vicenda) e Durabilità (una volta confermata, la modifica sopravvive a un crash). Sono queste garanzie a far sì che si affidino denaro e record a un database invece che a un semplice file.

Perché i database contano

Permettono al software di archiviare i dati una sola volta e di usarli ovunque, in sicurezza, su larga scala, con molti utenti contemporaneamente — e di ritrovarne qualunque porzione in pochi millisecondi. Quasi ogni programma non banale prima o poi ne ha bisogno. Saper scegliere il tipo giusto e interrogarlo bene è una delle competenze più durature in informatica.

I compromessi onesti

Non esiste un database universalmente «migliore». I database relazionali offrono forte coerenza e interrogazioni potenti ma richiedono uno schema definito; NoSQL offre flessibilità e scalabilità orizzontale ma spesso sacrifica alcune garanzie di coerenza. La scelta giusta dipende dalla forma dei tuoi dati, dalla tua scala e da quanta importanza dai alla coerenza stretta rispetto alla flessibilità. Molti team combinano entrambi.

FAQ

Un database è la stessa cosa di SQL? No. Un database archivia i dati; SQL è il linguaggio usato per interrogare i database relazionali. I database NoSQL usano altri metodi di interrogazione.

Un foglio di calcolo è un database? In senso lato sì, ma non davvero. Un foglio di calcolo contiene dati, ma un database aggiunge struttura imposta, interrogazioni rapide su larga scala, sicurezza multiutente e garanzie transazionali che un foglio di calcolo non ha.

Qual è la differenza tra SQL e NoSQL? I database SQL/relazionali usano tabelle strutturate e forte coerenza; i database NoSQL allentano la struttura per flessibilità e scalabilità. Nessuno sostituisce l’altro — si adattano a usi diversi. Per un confronto approfondito, vedi SQL vs NoSQL: quale database, e quando.

Quale database imparare per primo? Uno relazionale — SQLite o PostgreSQL — perché il modello relazionale e SQL si trasferiscono ovunque e insegnano con chiarezza le idee di base.

Per interrogare un database relazionale userai SQL; i dati che un database restituisce a un’app viaggiano spesso in JSON. Sfoglia altre spiegazioni chiare nel nostro indice delle guide.

Guida indipendente, curata dalla comunità. coldwa.st è un sito di risorse di programmazione; questo articolo è un testo esplicativo nuovo e originale sui database. Gli esempi riflettono sistemi ampiamente usati; verifica i dettagli specifici di ciascun sistema nella sua documentazione.