Un database management system (in acronimo DBMS, lett. "sistema di gestione della base di dati" in italiano)[1] è un sistema software progettato per consentire la creazione, la manipolazione e l'interrogazione di una o più basi di dati in modo corretto ed efficiente. Talvolta ci si riferisce ai DBMS utilizzando impropriamente il termine database[2] (o "base di dati" in italiano), a causa dell'accoppiamento tipicamente stretto tra l'archivio dati e il software di gestione.
Se in passato i DBMS erano diffusi principalmente presso le grandi aziende e istituzioni che potevano permettersi l'impegno economico derivante dall'acquisto delle grandi infrastrutture hardware necessarie per realizzare un sistema di database efficiente, oggi il loro utilizzo è diffuso praticamente in ogni contesto. L'espressione applicazione enterprise, che nel gergo informatico si riferisce ad applicazioni legate al business delle aziende che le utilizzano, implica quasi "per definizione" la presenza di una o più basi di dati amministrate da uno o più DBMS.
Un DBMS è differente dal concetto generale di applicazione sulle banche dati in quanto è progettato per sistemi multi-utente: i DBMS si appoggiano a kernel che supportano nativamente il multitasking e il collegamento in rete, infatti una tipica applicazione per la gestione dei database non includerebbe queste funzionalità, ma si appoggerebbe al sistema operativo per consentire all'utente di usufruirne.
Un DBMS controlla anche la sicurezza e l'integrità del database e può essere costituito da un insieme complesso di programmi software che controllano l'organizzazione, la memorizzazione e il reperimento dei dati (campi, record e archivi) in un database. Il DBMS accetta richieste di dati da parte del programma applicativo e "istruisce" il sistema operativo per il trasferimento dei dati appropriati, svolgendo un ruolo fondamentale in applicazioni informatiche di ogni genere, dalla contabilità, alla gestione delle risorse umane e alla finanza fino a contesti tecnici come la gestione di rete o la telefonia.
Il sistema di sicurezza dei dati impedisce agli utenti non autorizzati di visualizzare o aggiornare il database. Mediante l'uso di password (parole d'ordine) agli utenti è permesso l'accesso all'intero database o a un suo sottoinsieme: in questo secondo caso si parla di subschema. Per esempio, un database di impiegati può contenere tutti i dati riguardanti un singolo soggetto e un gruppo di utenti può essere autorizzato a vedere solamente i dati riguardanti lo stipendio, mentre altri utenti possono essere autorizzati a vedere solamente le informazioni che riguardano la sua storia lavorativa e la situazione sanitaria.
Il DBMS può mantenere l'integrità del database non consentendo a più utenti di modificare lo stesso record contemporaneamente (blocco del record). Il database può impedire l'immissione di due record duplicati; per esempio può essere impedita l'immissione nel database di due clienti con lo stesso numero identificativo ("campi chiave"). Le regole che determinano l'integrità e la consistenza di una base di dati prendono il nome di vincoli di integrità referenziale (proprietà "ACID").
I linguaggi di interrogazione del database mediante query (interrogazioni) e i generatori di report permettono agli utenti di interrogare in maniera interattiva il database e di analizzarne i dati.
Se il DBMS fornisce un modo per aggiornare e immettere nuovi dati nel database, oltre che per interrogarlo, questa capacità permette di gestire database personali. Comunque queste funzionalità non danno la possibilità di mantenere traccia delle revisioni e non forniscono gli strumenti necessari alla gestione di una organizzazione multi-utente. Questi controlli sono disponibili solamente quando un insieme di programmi applicativi è appositamente costruito per gestire e coordinare ciascuna funzione di immissione o modifica dei dati.
Le organizzazioni possono usare un DBMS per gestire il normale processo quotidiano delle transazioni e in un secondo tempo spostare il dettaglio in un altro computer che usa un altro DBMS più adatto per gestire interrogazioni casuali e l'attività di analisi. Le decisioni globali circa l'architettura dei sistemi informativi sono gestite dagli analisti di sistema e dagli amministratori dei dati. La progettazione di dettaglio del database è demandata agli amministratori del database stesso.
I tre tipi di organizzazione più comuni sono il modello gerarchico, il modello reticolare e il modello relazionale. Il modello dominante oggi è quello relazionale, normalmente utilizzato con il linguaggio di interrogazione SQL. Molti DBMS supportano le API (Application programming interface) dell'Open Database Connectivity (ODBC) o Java DataBase Connectivity (JDBC, lo standard per Java), che forniscono ai programmatori strumenti standardizzati per l'accesso ai database.
I database server sono computer ottimizzati per ospitare i programmi che costituiscono il database reale e sui quali girano solo il DBMS e il software a esso correlato, nelle situazioni reali spesso questi computer svolgono anche altre funzioni non correlate con la gestione del database. Di solito si tratta di macchine multiprocessore e con dischi fissi configurati in modalità RAID per una memorizzazione stabile e affidabile dei dati per garantire la continuità del servizio anche in caso di guasto a un componente (sistemi fault tolerant o ad alta affidabilità e disponibilità). In ambienti dove vengono processate transazioni con moli di dati particolarmente elevate vengono utilizzati anche componenti hardware che hanno la funzione specifica di acceleratori di database e che sono collegati a uno o più server attraverso canali preferenziali ad alta velocità di trasmissione.
Sempre più frequentemente si assiste alla integrazione delle basi di dati e di Internet: una vasta classe di applicazioni della Rete fa uso di informazioni presenti su basi di dati; esempi di questo tipo di applicazioni vanno dai cataloghi delle imprese alle edizioni on-line dei giornali e dei quotidiani. Per garantire un linguaggio di modellizzazione che consenta di passare dalla visualizzazione dei dati in un formato compatibile con le basi di dati a una "vista" concettuale del futuro sito web esiste un linguaggio specifico chiamato WebML.
Un DBMS è uno strumento per la creazione e la gestione efficiente di grandi quantità di dati che consente di conservarli in modo sicuro per lunghi periodi di tempo. Un DBMS fornisce agli utenti questi servizi:
Si considerano due diversi tipi di utenti:
Nell'architettura di un DBMS abbiamo le seguenti sezioni:
Una suddivisione alternativa semplificata (ma parziale), utile a comprendere per linee generali il comportamento di un DBMS, potrebbe essere questa:
Si occupa di elaborare le richieste dell'utente, di solito espresse in SQL, quindi in un linguaggio di tipo dichiarativo (un tipo di linguaggio in cui si descrivono i dati che si vogliono ottenere), e di tradurle in un insieme di operazioni (una procedura), che saranno poi effettivamente eseguite. Di solito vi sono più modi diversi di tradurre un'interrogazione e la funzione principale del gestore delle interrogazioni è quella di scegliere fra le varie alternative quella migliore, quella cioè che richiede un minor tempo di elaborazione e una minore occupazione di memoria. Ad esempio, un'ottimizzazione in grandi database consiste nell'anticipare sempre le operazioni di selezione, in modo da diminuire fin dall'inizio il numero di record da elaborare, con ovvi miglioramenti nell'occupazione di memoria e nella velocità. Un'altra ottimizzazione è nel caso di un database piccolo, all'esecuzione delle istruzioni SQL un puntatore scorrerà e selezionerà le righe di dati della tabella interessati, e stamperà i risultati della ricerca su una nuova tabella, senza la creazione di una tabella temporanea. Altre ottimizzazioni sono sempre fatte basandosi su criteri di tipo statistico: la grandezza di una tabella, come le tabelle sono fisicamente memorizzate, ecc. Alla fine dell'elaborazione il gestore delle interrogazioni darà delle direttive al gestore dei metodi di accesso per trovare le tuple.
Si occupa di individuare il blocco in cui è presente la tupla di interesse.
Un utente con privilegi di amministratore dichiara al sistema come gestire gli accessi, tramite una tavola CRUD.
Il DBMS dovrebbe consentire l'accesso in scrittura a una generica risorsa informatica, a un solo utente alla volta. Se due utenze accedono alla stessa risorsa, apportando modifiche, si hanno due casi:
Il DBMS può includere delle utility per fare dei merge fra versioni differenti della stessa risorsa.
Un DBMS deve gestire una grossa mole di dati, e nel corso delle elaborazioni lo spazio richiesto per i blocchi di dati sarà spesso maggiore dello spazio di memoria disponibile. Per questo vi è la necessità di gestire un'area di memoria in cui caricare e scaricare i blocchi. Il gestore del buffer si occupa principalmente di gestire le operazioni inerenti al salvataggio e il caricamento dei blocchi. In effetti, le operazioni che mette a disposizione il gestore del buffer sono queste:
Prima di introdurre gli ultimi 2 comandi si deve anticipare che il DBMS può operare in 2 modalità: FORCE e NOT FORCE. Quando lavora in modalità FORCE, il salvataggio su disco avviene in modalità sincrona con il commit di una transazione. Quando lavora in modalità NOT FORCE il salvataggio viene effettuato di tanto in tanto in maniera asincrona. In genere i database commerciali operano in modalità NOT FORCE perché ciò consente un aumento delle prestazioni: il blocco può subire più modifiche in memoria prima di essere salvato, poi è possibile scegliere di effettuare i salvataggi quando il sistema è più scarico.
Il recovery manager è responsabile di garantire la coerenza l'atomicità, la persistenza e di realizzare i comandi transazionali fondamentali quali begin transaction, end transaction, commit work, rollback work. L'obiettivo del recovery manager è quello di gestire il rollback di una transazione, ricostruire uno stato consistente del DB e che ne rispetti la semantica delle transazioni, in seguito ad un guasto del DBMS.
Un DBMS deve essere in grado di fronteggiare diverse tipologie di guasti:
Un guasto di sistema può essere un system crash dovuto ad un errore software o hardware, un errore di sistema di applicativo, dovuto ad esempio ad una divisione per zero, un errore generato dalle condizioni logiche durante l'esecuzione di una transazione. Questo tipo di guasto causa la perdita dei dati contenuti nel buffer ma la memoria di massa rimane comunque valida.
Un guasto di memoria secondaria è più complesso da gestire e può essere causato da eventi catastrofici che non permettono di avere una memoria ancora valida. Questo tipo di guasto causa una perdita fisica dei dati memorizzati ma non dei log che vengono salvati in una memoria stabile.
Per risolvere il problema dei guasti un DBMS può utilizzare diverse strategie:
Per ripristinare situazioni non congruenti derivate da crash del sistema, il DBMS ha disposizione l'operazione di redo e l'operazione di undo da utilizzare tramite la lettura del log.
Per le transazioni che al momento di un guasto sono nello stato di committed, dato che bisogna garantire la proprietà di persistenza, sarà necessario rifare le azioni che sono state salvate nel log tramite l'istruzione redo.
Per le transazioni che invece si trovano nello stato di uncommitted è necessario annullare le operazioni che stavano facendo tramite l'operazione di undo.