In informatica una base di dati o banca dati () è una collezione organizzata di dati in forma elettronica.
La progettazione delle basi di dati è un'attività complessa, che si basa sull'applicazione di tecniche formali in congiunzione a considerazioni pratiche derivate dalla natura dei dati stessi. In fase di progettazione si affrontano quindi problemi in materia di modellazione, rappresentazione, archiviazione e accesso ai dati, oltre che della loro sicurezza, privatezza e integrità. Senza contare altre questioni di contorno che pertengono più propriamente ai DBMS..
Nel linguaggio comune, la locuzione database tende a essere utilizzata impropriamente con varie sfumature di significato, di ordine più generale rispetto a "collezione astratta di dati": database server: ovvero il sistema fisico, comprendente sia le risorse di elaborazione che di memorizzazione necessarie al funzionamento della base di dati; database management system: ovvero il sistema software necessario all'interfacciamento con la base di dati.
Storia
I modelli navigazionali
Negli anni sessanta, con la crescita della capacità elaborativa dei calcolatori e la creazione di una serie di banche dati utilizzabili per diverse applicazioni, crebbe l'interesse nel fissare uno standard. Charles W. Bachman, creatore del database navigazionale IDS, fondò il Database Task Group all'interno del gruppo CODASYL: il team di lavoro dedicato alla creazione e standardizzazione del linguaggio di programmazione COBOL. Il lavoro del gruppo venne pubblicato nel 1971 e lo standard risultante prese il nome di "Approccio CODASYL", varie implementazioni commerciali apparvero sul mercato dopo poco tempo.
L'approccio CODASYL era basato sulla navigazione manuale in un insieme di dati disposti sotto forma di rete. Alla prima apertura del programma questo si trovava sul primo dato disponibile contenente, tra le altre cose, un puntatore ai dati successivi. Per trovare un dato il programma attraversava la serie di puntatori fino a trovare il dato corretto. Delle semplici query come "Trova tutte le persone nate in Svezia" richiedevano l'attraversamento dell'intero set di dati. Non esisteva alcuna funzione di ricerca; oggi questo potrebbe sembrare una limitazione, ma all'epoca, essendo i dati archiviati su nastro magnetico, operazioni come quelle evidenziate sopra peggioravano ulteriormente il tempo di ricerca.
Nel 1968 IBM sviluppò un proprio DBMS chiamato IMS. IMS era lo sviluppo di un programma utilizzato nelle missioni Apollo sui calcolatori IBM System/360 e utilizzava un sistema simile all'approccio CODASYL, con l'unica differenza di utilizzare un modello gerarchico anziché a rete.
Ambedue le soluzioni presero poi il nome di "banche dati navigazionali" a causa del metodo di consultazione che era stato previsto. Inoltre Charles Bachman, in occasione della premiazione nel 1973 in cui gli venne conferito il Premio Turing, presentò un lavoro intitolato Il programmatore come navigatore. IMS è abitualmente classificato come una banca dati gerarchica, mentre IDS e IDMS (ambedue banche dati CODASYL), CINCOMs e TOTAL sono classificati come banche dati reticolari.
Il modello relazionale
Edgar F. Codd lavorava nella sede californiana di IBM come ricercatore sull'allora nascente tecnologia dei dischi rigidi quando osservò l'inefficienza dell'approccio CODASYL con la nuova modalità di memorizzazione dei dati, inefficienza principalmente dovuta all'assenza di una funzione di ricerca. Nel 1970 cominciò a produrre diversi documenti schematizzanti un nuovo approccio alla costruzione delle basi di dati, culminati nell'articolo "A Relational Model of Data for Large Shared Data Banks" (). In questo articolo descrisse un nuovo sistema per archiviare e modificare grandi quantità di dati, basato su collezioni di tuple di dimensione fissata (relazioni) invece che alberi di record..
IBM cominciò a implementare questo modello in alcuni prototipi all'inizio degli anni settanta, a cominciare dal System R. Agli inizi degli anni '80 il sistema aveva ormai dimostrato la sua superiorità rispetto a CODASYL e quindi IBM passò a sviluppare una versione commerciale di System R, che prese il nome di "SQL/DS" prima e "DB2" infine. Parallelamente il lavoro di Codd era stato ripreso dal mondo accademico attraverso il progetto INGRES, dal quale nacquero numerosi spin-off commerciali che andarono a concorrere con IBM. Nello stesso periodo venne anche standardizzato il linguaggio SQL.
Il movimento NoSQL
Il termine NoSQL fu usato per la prima volta nel 1998 per descrivere una base di dati relazionale open source che non usava un'interfaccia SQL. L'autore Carlo Strozzi dichiarò che "come movimento, NoSQL diparte in modo radicale dal modello relazionale, e quindi andrebbe chiamato in modo più appropriato NoREL, o qualcosa di simile".
All'opposto di quanto si potrebbe pensare il movimento NoSQL non è contrario all'utilizzo di database relazionali. Il termine NoSQL infatti è acronimo di Not Only SQL, a significare che esistono diversi casi d'uso per i quali il modello relazionale rappresenta una forzatura, ma tanti altri per i quali tale modello è ancora la soluzione migliore.
Il termine fu riutilizzato nel 2009 da un dipendente di Rackspace, Eric Evans, quando Johan Oskarsson di Last.fm volle organizzare un evento per discutere di basi di dati distribuite open source. Il nome era un tentativo di etichettare il crescente numero di database non relazionali e distribuiti che spesso non garantivano le classiche proprietà ACID, a causa di vari compromessi formulati sulla base del teorema CAP.
Caratteristiche
Gestione delle informazioni La banca dati deve contenere anche le informazioni sulle loro rappresentazioni e sulle relazioni che li legano. Spesso, ma non necessariamente, una base dati contiene le seguenti informazioni:
Strutture dati che velocizzano le operazioni frequenti, di solito a spese di operazioni meno frequenti. Collegamenti con dati esterni, cioè riferimenti a file locali o remoti non facenti parte della banca dati. Informazioni di sicurezza che autorizzano solo alcuni profili utente a eseguire alcune operazioni su alcuni tipi di dati. Programmi che vengono eseguiti, automaticamente o su richiesta di utenti autorizzati, per eseguire elaborazioni sui dati. Un tipico automatismo consiste nell'eseguire un programma ogni volta che viene modificato un dato di un certo tipo.
In un sistema informatico una banca dati può essere usata direttamente dai programmi applicativi, interfacciandosi con il supporto di memorizzazione agendo direttamente sui file. Questa strategia era adottata universalmente fino agli anni sessanta, ed è tuttora impiegata quando i dati hanno una struttura molto semplice o quando sono elaborati da un solo programma applicativo.
Tuttavia dalla fine degli anni sessanta, per gestire banche dati complesse condivise da più applicazioni, si sono utilizzati appositi sistemi software detti "sistemi per la gestione di basi di dati" (in inglese "database management system" o "DBMS"). Uno dei vantaggi di questi sistemi è la possibilità di non agire direttamente sui dati, ma di vederne una rappresentazione concettuale.
La ricerca nel campo delle banche dati studia le seguenti problematiche: Progettazione di banche dati. Progettazione e implementazione di DBMS. Interpretazione (analisi) di dati contenuti nelle banche dati.
Le banche dati spesso fanno uso di tecnologie derivate da altre branche dell'informatica. È usuale utilizzare tecniche derivate dall'intelligenza artificiale, come ad esempio il data mining, per cercare di estrarre relazioni o più in generale informazioni presenti nelle banche dati, ma non immediatamente visibili.
Struttura e modello logico
Le informazioni contenute in una banca dati sono strutturate e collegate tra loro secondo un particolare modello logico scelto dal progettista, per esempio relazionale, gerarchico, reticolare o a oggetti. Gli utenti si interfacciano con le banche dati attraverso i cosiddetti linguaggi di interrogazione e grazie a particolari applicazioni software dedicati (DBMS).
Di solito le banche dati possono avere varie strutture, in ordine cronologico di comparsa e diffusione:
gerarchico (anni sessanta) rappresentabile tramite un albero, ovvero con strutture simili ai file system gerarchici, reticolare (anni sessanta) rappresentabile tramite un grafo, relazionale (anni settanta) attualmente il più diffuso, rappresentabile mediante tabelle e relazioni tra esse, a oggetti (anni ottanta) estensione alle basi di dati del paradigma "Object Oriented", tipico della programmazione a oggetti, Document-oriented (NoSQL), Key-Value Store (NoSQL), Graph-based (NoSQL), Colonnari (NoSQL), semantica (inizio anni duemila) rappresentabile con un grafo relazionale.
Il formato XML, oltre che per scambi di dati in rete, si sta diffondendo per la definizione di vere e proprie basi di dati. XML ha una struttura gerarchica, pare quindi un "ritorno alle origini" dei modelli di dati.
Un requisito importante di una buona banca dati consiste nel non duplicare inutilmente le informazioni in essa contenute: questo è reso possibile dai gestori di banche dati relazionali, teorizzati da Edgar F. Codd, che consentono di salvare i dati in tabelle che possono essere collegate.
La funzionalità di una banca dati dipende in modo essenziale dalla sua progettazione: la corretta individuazione degli scopi della banca dati stessa e quindi delle tabelle, da definire attraverso i loro campi e le relazioni che le legano, permette poi una estrazione dei dati più veloce e in generale una gestione più efficiente.
Proprietà ACID
Una qualunque modifica allo stato del database tramite operazioni varie è detta transazione, la quale deve rispettare le cosiddette regole o proprietà ACID. Le operazioni più tipiche in un DB sono quelle riassunte dall'acronimo CRUD.
Efficienza e sicurezza
Sicurezza significa impedire che la base dati venga danneggiata da interventi accidentali o non autorizzati, per esempio un attacco ai database, e mantenerne l'integrità ovvero garantire che le operazioni effettuate sulla base di dati da utenti autorizzati non provochino una perdita consistente di dati, garantendone al contempo l'affidabilità. La protezione da accessi non autorizzati è un tema importante nella gestione delle basi di dati che si rivelano vulnerabili nei seguenti punti:
Sicurezza dei server Connessioni tra database Controllo sugli accessi al database Data warehouse Data mining
Classificazione
Secondo il modello dei dati
Base di dati navigazionale
Le basi di dati navigazionali sono orientate alla navigazione manuale in un insieme di dati disposti sotto forma di rete o albero. Alla prima apertura del programma questo si trovava sul primo dato disponibile contenente, tra le altre cose, un puntatore ai dati successivi. Per trovare un dato il programma attraversava la serie di puntatori fino a trovare il dato corretto.
Questi modelli non brillano particolarmente in prestazioni. Delle semplici query come "Trova tutte le persone nate in Svezia" richiedono l'attraversamento dell'intero set di dati. Non è prevista alcuna funzione di ricerca; oggi questo potrebbe sembrare una limitazione, ma all'epoca, essendo i dati archiviati su nastro magnetico, operazioni come quelle evidenziate sopra peggioravano ulteriormente il tempo di ricerca.
Alcuni esempi di DBMS basati su modelli navigazionali sono: IDS, IDMS, CINCOM, TOTAL e IMS.
Base di dati relazionale