Database management system: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Database multidimensionali: La precedente era completamente sbagliata.
 
(135 versioni intermedie di 72 utenti non mostrate)
Riga 1:
{{F|basi di dati|ottobre 2012}}
[[File:Applications-database.svg|thumb|Il simbolo tipicamente utilizzato per rappresentare database o DBMS]]
In [[informatica]], un '''''Database Management System''''', abbreviato in '''DBMS''' o '''Sistema di gestione di basi di dati''' è un [[sistema software]] progettato per consentire la creazione e la manipolazione (da parte di un amministratore) e l'interrogazione efficiente (da parte di uno o più utenti) di [[database]] (ovvero di collezioni di [[Dato|dati]] strutturati), per questo detto anche "gestore o motore del database", e ospitato su architettura [[hardware]] [[special purpose|dedicata]] oppure su semplice [[computer]]. I DBMS svolgono un ruolo fondamentale in numerose applicazioni informatiche, dalla [[contabilità]], alla gestione delle [[risorse umane (economia)|risorse umane]] e alla [[finanza]] fino a contesti tecnici come la [[gestione di rete]] o la [[telefonia]].
 
Un '''database management system''' (in acronimo '''DBMS''', {{lett|sistema di gestione della base di dati|lingua=it}})<ref>{{Treccani|dbms|DBMS}}</ref> è un [[sistema software]] progettato per consentire la creazione, la manipolazione e l'interrogazione di una o più [[base di dati|basi di dati]] in modo corretto ed efficiente.
Se in passato i DBMS erano diffusi principalmente presso le grandi [[azienda|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.
Talvolta ci si riferisce ai DBMS utilizzando impropriamente il termine ''[[database]]''<ref>{{treccani|data-base|Database|v=1}}</ref> (o "base di dati" in italiano), a causa dell'[[accoppiamento (informatica)|accoppiamento]] tipicamente stretto tra l'archivio dati e il software di gestione.
 
La teoria dei database, e dei DBMS, rappresenta da sempre uno dei filoni più solidi e importanti dell'[[informatica]].
 
Un DBMS è differente dal concetto generale di [[applicazione (informatica)|applicazione]] sulle [[banche dati]], in quanto è progettato per sistemi multi-utente. A tale scopo, i DBMS si appoggiano a [[kernel]] che supportano nativamente il [[multitasking]] e il collegamento in [[Reti di calcolatori|rete]]. Una tipica applicazione per la gestione dei database non includerebbe, infatti, tali funzionalità, ma si appoggerebbe al [[sistema operativo]] per consentire all'utente di fruirne dei vantaggi.
 
== Descrizione ==
[[File:Screenshot-mysql-client-text-debian.png|thumb|[[Client]] [[MySQL]] a [[riga di comando]]]]
[[File:Turbobird_screenshot.png|thumb|[[Screenshot]] [[Firebird SQL]]]]
[[File:MSAccess2019.png|thumb|[[Microsoft Access]]]]
 
Se in passato i DBMS erano diffusi principalmente presso le grandi [[azienda|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 può essere costituito da un insieme complesso di programmi [[software]] che controllano l'organizzazione, la memorizzazione e il reperimento dei dati ([[Campo (informatica)|campi]], [[Record (informatica)|record]] e archivi) in un database. Un DBMS controlla anche la sicurezza e l'integrità del database. Il DBMS accetta richieste di dati da parte del programma [[applicazione (informatica)|applicativo]] e "istruisce" il [[sistema operativo]] per il trasferimento dei dati appropriati.
 
Un DBMS è differente dal concetto generale di [[applicazione (informatica)|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 [[Reti di calcolatori|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.
=== Autorizzazioni ===
 
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 ([[Campo (informatica)|campi]], [[record (database)|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 [[autorizzazione (informatica)|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 rigurdanti un singolo soggetto, ma 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.
 
=== IntegritàFunzionalità tipiche ===
 
==== Controllo degli accessi ====
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"). L'insieme di regole che determinano l'integrità e la consistenza di una [[base di dati]] prendono il nome di [[vincoli di integrità]] referenziale. A tale proposito si vedano le cosiddette proprietà "[[ACID]]".
{{vedi anche|Controllo degli accessi}}
 
Il sistema di sicurezza dei dati impedisce agli utenti non [[autorizzazione (informatica)|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.
=== Interrogazioni e modifiche ===
 
==== Mantenimento dell'integrità ====
I [[Query language|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.
{{vedi anche|ACID|Vincoli di integrità}}
 
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]]").
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 sono appositamente costruiti per gestire e coordinare ciascuna funzione di immissione o modifica dei dati.
 
==== DBMSGestione edelle sistemi informativitransazioni ====
{{vedi anche|Transazione (basi di dati)}}
 
I [[Query language|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.
Un [[sistema informativo]] commerciale è costituito da soggetti (clienti, impiegati, venditori) e attività (ordini, pagamenti, acquisti, ecc.). La [[progettazione]] del [[database]] (''[[database design]]'') è il processo decisionale su come organizzare questi dati in tipi di record e su come ciascun tipo di record si relaziona con gli altri. Il DBMS dovrebbe rispecchiare la struttura dei dati dell'organizzazione e gestire in maniera efficiente le varie [[transazione (basi di dati)|transazioni]].
 
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.
Quando si usa un DBMS i sistemi informativi possono essere adeguati molto facilmente al cambiamento delle richieste informative dell'organizzazione. Possono essere aggiunte al database nuove categorie di dati senza dover stravolgere il sistema esistente.
 
==== ArchitetturaOttimizzazione edelle organizzazioneinterrogazioni ====
{{...|informatica}}
 
==== Astrazione della base 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.
{{vedi anche|progettazione di basi di dati}}
{{...|informatica}}
 
== Architettura ==
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'''[[ODBC|Open Database Connectivity]]'' (ODBC) o ''[[JDBC|Java Database Connectivity]]'' (JDBC, lo standard per [[Java (linguaggio)|Java]]), che forniscono ai programmatori strumenti standardizzati per l'accesso ai database.
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 (linguaggio di programmazione)|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 [[disco rigido|dischi fissi]] configurati in modalità [[RAID]] per una [[memoria (informatica)|memorizzazione]] stabile e affidabile dei dati che garantisca 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]].
 
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 [[disco rigido|dischi fissi]] configurati in modalità [[RAID]] per una [[memoria (informatica)|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, disponibili per il pubblico, 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]].
 
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]].
== Storia ==
 
=== Servizi implementati ===
I [[database]] sono stati utilizzati fin dall'inizio della [[storia dell'informatica]], ma la grande maggioranza di questi erano programmi specializzati per l'accesso a un singolo database. Oggi, invece, i moderni sistemi possono essere utilizzati per compiere operazioni su un gran numero di basi di dati differenti. Questa "specializzazione" era dovuta alla necessità di guadagnare in velocità di esecuzione pur perdendo in flessibilità.
 
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:
=== Database Navigazionali ===
* ''Persistent storage'': come un [[file system]], un DBMS permette la memorizzazione di grandi quantità di dati, ma garantisce una flessibilità molto più elevata
Con la crescita della capacità elaborativa dei calcolatori questo contrasto con la flessibilità andò attenuandosi, con la creazione negli [[anni 1960|anni sessanta]] di una serie di database utilizzabili per diverse applicazioni. L'interesse nel fissare uno standard crebbe, e [[Charles W. Bachman]], creatore di uno di questi prodotti, (IDS), fondò il ''Database Task Group'', all'interno del gruppo ''Codasyl'', ossia il team di lavoro dedicato alla creazione e standardizzazione del [[linguaggio di programmazione]] [[COBOL]].
Nel [[1971]] tale standard fu prodotto e prese il nome di "Approccio Codasyl"; presto furono disponibili sul [[mercato]] una serie di prodotti basati su tale approccio.
 
Questo approccio era basato sulla navigazione manuale in un insieme di dati disposti sotto forma di rete. Alla prima apertura del programma, il programma si apriva sul primo dato disponibile, contenente, tra le altre cose, un [[puntatore (input/output)|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.<br />
Non esisteva, dunque, 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 non erano particolarmente costose in termini di tempo.
 
Nel [[1968]], la [[IBM]] sviluppò un proprio sistema [[DBMS]], chiamato [[Information Management System|IMS]]. IMS era uno sviluppo di un programma utilizzato nelle [[Programma Apollo|missioni Apollo]] sui Sistemi /360 e utilizzava un sistema simile all'approccio ''Codasyl'', con l'unica differenza di avere un sistema gerarchico anziché a rete.
 
Ambedue le soluzioni presero poi il nome di "database 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 un database [[Modello gerarchico|gerarchico]], mentre IDS e IDMS (ambedue database ''CODASYL''), CINCOMs e [[TOTAL]] sono classificati come database a rete (o [[Modello reticolare|reticolari]]).
 
=== Database Relazionali ===
{{vedi anche|RDBMS}}
I DBMS relazionali sono detti anche RDBMS (''Relational DBMS'').
 
[[Edgar F. Codd]] lavorava alla sede [[california]]na della [[IBM]] come ricercatore sulla nascente tecnologia degli [[hard disk]] 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 nel "[[Modello relazionale]] per Basi di dati condivise" (''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. Invece di utilizzare delle "righe" (in [[Lingua inglese|inglese]], ma anche molto usato in [[lingua italiana|italiano]]: ''"[[record (informatica)|record]]"'' o anche "[[tupla|tuple]]") collegate tra di loro attraverso un qualche tipo di struttura "ad albero", come in ''Codasyl'', ritenne di utilizzare una "tabella" di righe a lunghezza fissa. Questo sistema sarebbe stato molto inefficiente nell'archiviazione di dati "sparsi", in cui la tabella avrebbe potuto avere diverse "celle" vuote; tale errore di impostazione fu corretto dividendo i dati in diverse tabelle, in cui gli elementi opzionali venivano spostati, anziché sprecare spazio nella tabella principale.
 
Ad esempio, un utilizzo comune delle [[database|basi di dati]] è quello di registrare delle informazioni sugli utenti: il loro nome, informazioni di accesso, indirizzo e numeri di telefono. In un database navigazionale tutti questi dati sarebbero stati memorizzati in un unico ''"[[record (informatica)|record]]"'', e gli elementi non presenti (ad esempio un utente di cui non sia noto l'indirizzo) sarebbero stati semplicemente omessi. Al contrario, in un database relazionale, le informazioni vengono divise, ad esempio, nelle tabelle "utente", "indirizzi", "numeri di telefono" e solo se i dati sono presenti viene creata, nella rispettiva tabella, una ''tupla''.
 
Uno degli aspetti interessanti introdotti nei database relazionali sta nel collegamento delle tabelle: nel modello relazionale, per ogni ''"[[record (informatica)|record]]"'' viene definita una "chiave", ovvero un identificatore univoco della ''tupla''. Nella ricostruzione delle relazioni, l'elemento di riferimento, che distingue una riga da un'altra è proprio questa "chiave" e viene richiamata nella definizione della relazione. La chiave può essere uno dei dati stessi che vengono memorizzati (ad esempio, per la tabella utenti, il "Codice Fiscale" della persona), o un campo che viene aggiunto specificatamente per questo scopo (spesso chiamato ''"OID"'' - ''"Object IDentifier"''), o una combinazione di più campi (chiave composta).
 
Questa operazione di "riunificazione" dei dati non è prevista nei linguaggi di programmazione tradizionali: mentre l'approccio navigazionale richiede semplicemente di ''"ciclare"'' per raccogliere i diversi ''"[[record (informatica)|record]]"'', l'approccio relazionale richiede al programma di "ciclare" per raccogliere le informazioni riguardanti ogni record. Codd, propose, come soluzione, la creazione di un linguaggio dedicato a questo problema. Tale linguaggio, più tardi, si è sviluppato nella codifica che oggi è universalmente adottata e che è il mattone fondamentale delle basi di dati: '''[[SQL]]'''.
 
Utilizzando una branca della [[matematica]] chiamata "calcolo delle ''tuple''", dimostrò che questo sistema era in grado di compiere tutte le normali operazioni di amministrazione dei database (inserimento, cancellazione, etc.) e che inoltre consentiva di disporre di uno strumento semplice per trovare e visualizzare gruppi di dati tramite un'unica operazione.
 
LA [[IBM]] cominciò a implementare questa teoria in alcuni prototipi all'inizio degli [[anni 1970|anni settanta]], come nel ''"System R"''. La prima versione fu realizzata nel [[1974]]/[[1975|75]] con uno strumento "monotabella"; negli anni successivi furono studiati i primi sistemi che potessero supportare la suddivisione dei dati in tabelle separate, utile, come abbiamo visto, per la separazione dei dati opzionali in tabelle diverse da quella principale. Versioni "multiutente" furono realizzate nel [[1978]] e nel [[1979]]; negli stessi anni fu standardizzato il linguaggio [[SQL]]. La superiorità di questo sistema rispetto a ''Codasyl'' fu quindi evidente e la IBM passò a sviluppare una versione commerciale di ''"System R"'', che prese il nome di "SQL/DS" prima e di "Database 2" (DB2) infine.
 
Il lavoro di Codd venne proseguito presso l'[[Università di Berkeley]] da [[Eugene Wong]] e [[Michael Stonebraker]]. Il loro progetto, chiamato [[INGRES]] e finanziato con fondi destinati alla creazione di un database [[geografia|geografico]], vide la luce nel [[1973]] e produsse i primi risultati nel [[1974]] anche grazie all'opera di numerosi [[studente|studenti]] che si prestarono quali programmatori (quasi 30 persone lavorarono al progetto). [[INGRES]] era assai simile a ''"System R"'' e prevedeva un linguaggio alternativo a [[SQL]], chiamato [[QUEL]].
 
Molte delle persone coinvolte nel progetto si convinsero della fattibilità commerciale dello stesso e fondarono imprese per entrare nel mercato con questo prodotto. Sybase, Informix, NonStop SQL e alla fine Ingres stessa nacquero quali ''"spin-off"'' per la diffusione di [[INGRES]] all'inizio degli [[anni 1980|anni ottanta]]. Perfino [[Microsoft]] SQL Server è, per certi versi, una derivazione di ''"Sybase"'' e, quindi, di [[INGRES]]. Solamente la [[Oracle]] di [[Larry Ellison]] partì utilizzando un approccio diverso, basato sul ''"System R"'' della IBM, e alla fine prevalse sulle altre compagnie con il suo prodotto, lanciato nel [[1978]].
 
In [[Svezia]] il lavoro di Codd venne sviluppato nella [[Università di Uppsala]] che sviluppò un diverso prodotto, ''"[[Mimer SQL]]"'', commercializzato nel [[1984]]. Una particolarità di questa soluzione sta nell'introduzione del concetto di [[Transazione (basi di dati)|transazione]], successivamente importata in quasi tutti i DBMS.
 
=== Database multidimensionali ===
I database multidimensionali sono un paradigma definito ancora una volta da Codd per sopperire alle scarse performance offerte dai database relazionali nel caso di utilizzo delle basi di dati stesse per processi di analisi (on line analitical process, OLAP). Tali sistemi consentono di effettuare analisi su enormi quantità di dati con efficenza, cosa non possibile su database relazionali più adatti a gestire transazioni (on line transaction process, OLTP).
 
Da fine anni '90 pressoché ogni database relazionale commerciale ha al suo interno un motore multidimensionale per effettuare analisi.
 
=== DBMS a oggetti ===
I DBMS a oggetti sono detti anche [[ODBMS]] (Object DBMS).
 
I database multidimensionali ebbero comunque un ruolo importante sul mercato: portarono alla creazione di basi di dati a oggetti. Basata sugli stessi concetti generali, questa nuova tipologia di sistemi, consente agli utenti di memorizzare direttamente "oggetti" all'interno delle basi di dati. Ovvero, gli stessi principi della [[Linguaggio di programmazione|programmazione a oggetti]], invece di dover effettuare un adattamento di metodi e variabili.
 
Questo può avvenire grazie al particolare concetto di proprietà dei database multidimensionali. Nella programmazione a oggetti, ognuno di questi "oggetti" tipicamente ne conterrà altri. Ad esempio, l'oggetto contenente il Signor Rossi, conterrà un riferimento all'oggetto "Indirizzo". Contenendo il supporto per molti linguaggi di programmazione a oggetti, i database che sfruttano la medesima tecnologia stanno avendo un periodo di forte sviluppo di questi tempi.
 
Oggi molti DBMS applicano in realtà un misto tra il modello relazionale e il modello a oggetti. Si parla quindi di ORDBMS (''Object Relational DBMS'').
 
== Architettura di un DBMS ==
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:
* ''Persistent storage'': come un file system, un DBMS permette la memorizzazione di grandi quantità di dati, ma garantisce una flessibilità molto più elevata
* ''Programming interface'': permette agli utenti di accedere e modificare i dati attraverso un potente linguaggio di interrogazione
* ''Transaction management'': supporta l'accesso concorrente ai dati evitando conseguenze indesiderate dovute a crash del sistema o dell'applicazione
Riga 115 ⟶ 71:
# Logging/recovery
# Transaction manager
# Recovery management
 
Una suddivisione alternativa semplificata (ma parziale), utile a comprendere per linee generali il comportamento di un DBMS, potrebbe essere questa:
Riga 121 ⟶ 78:
# Gestore del buffer (Buffer manager)
 
=== Il gestoreGestore delle interrogazioni ===
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.
 
=== Il gestoreGestore del metodo di accesso ===
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:
 
# se salvano contemporaneamente il loro lavoro, sorge un conflitto di edizione;
# se salvano le modifiche in momenti diversi, chi pubblica per ultimo sovrascrive il lavoro dell'utente precedente.
 
Il DBMS può includere delle ''[[utility]]'' per fare dei ''[[merge (informatica)|merge]]'' fra versioni differenti della stessa risorsa.
 
=== Il gestoreGestore del buffer ===
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:
Riga 145 ⟶ 102:
** Non esiste la possibilità di liberare memoria perché occupata tutta da transizioni ancora in corso. In questo caso il gestore del buffer può lavorare in 2 modalità: nella prima modalità (STEAL) il gestore del buffer libera della memoria occupata da una transizione già attiva, salvando eventualmente le modifiche sul disco; nella seconda modalità (NOT STEAL) la transizione che ha richiesto il blocco viene fatta attendere finché non si libera memoria.
* SET DIRTY: richiamando questo comando si contrassegna un blocco in memoria come modificato.
Prima di introdurre gli ultimi 2 comandi si deve anticipare che il DMBSDBMS 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.
* FORCE: Con questo comando si forza il gestore del buffer a effettuare la scrittura in modo sincrono con la conclusione (commit) della transazione
* FLUSH: Con questo comando si forza il gestore del buffer a eseguire il salvataggio, quando ci si trova in modalità NOT FORCE.
 
=== Gestore delle operazioni di ripristino ===
== Lista di DBMS comuni ==
 
{{Div col|cols=2|small=no}}
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:
* guasti di sistema;
* guasti di memoria secondaria o di un dispositivo di memorizzazione.
 
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.
 
==== Strategie ====
 
Per risolvere il problema dei guasti un DBMS può utilizzare diverse strategie:
* ''system log'': file sequenziale scritto in memoria sicura che registra tutte le attività svolte dalle transazioni e gli eventi del sistema quali checkpoint o dump;
* ''dump'': copia della memoria secondaria su una memoria dislocata in un punto differente geografico;
* ''checkpoint'': evento di sistema che permette di fotografare lo stato del DBMS al momento dell'esecuzione delle transazioni.
 
Per ripristinare situazioni non congruenti derivate da crash del sistema, il DBMS ha a 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.
 
== Principali sistemi esistenti ==
{{vedi categoria|Software per basi di dati}}
{{colonne}}
* [[Software]] proprietario
** [[4th Dimension]]
** [[CUBRID]]
** [[DB2dBase]] ([[IBM]])
** [[IBM DB2|IBM DB1/2]]
** [[Caché]] ([[InterSystems]])
** [[Dataphor]] un [[RDBMS]] "''veramente''-relazionale" che rispetta tutte le [[12 regole di Codd|regole di Codd]].
** [[FileMaker Pro]] ([[FileMaker, Inc.]], posseduta da [[Apple]])
** [[IMS/DBFileMaker Pro]] ([[IBMFileMaker Inc.]], posseduta da [[Apple]])
** [[IBM Informix|Informix]] ([[IBM]])
** [[INGRES]] ([[Computer Associates]])
** [[InterBase]] ([[Borland]])
Riga 165 ⟶ 150:
** [[mSQL]]
** [[Netezza]]
** [[Oracle Database|Oracle]] ([[Oracle Corporation]])
** [[Paradox (database)|Paradox]] (Borland)
** [[SQL Anywhere Studio]]
** [[Sybase SQL Server]]
** [[Teradata]] ([[NCR Corporation]])
** [[TimesTen]] (TimesTen, Inc.)
{{colonne spezza}}
* [[Open source]] o [[free software]]
** [[Apache Derby]]
** [[Berkeley DB]] ([[Sleepycat Software]])
** [[DBM]]
** [[Drizzle]]
** [[Firebird SQL]] ([[The FirebirdSQL Foundation]]; derivato da [[InterBase]])
Riga 184 ⟶ 170:
** [[MariaDB]] (MariaDB Foundation)
** [[Percona Server]] (Percona)
** [[OzoneOrient ODBMS]]
** [[PicoSQL]] (un DbmsDBMS italiano)
** [[PostgreSQL]], (in precedenza ''Postgres'') (PostgreSQL Global Development Group)
** [[SQLite]] (di pubblico dominio)
** [[Visual FoxPro]] (FoxBase)
** [[ZODB]]
** [[SADAS]]
{{Div col end}}
{{colonne fine}}
 
 
== Note ==
<references/>
 
== Bibliografia ==
* {{cita libro|autore = Paolo Atzeni|autore2 = Stefano Ceri|autore3 = Piero Fraternali|autore4 = Stefano Paraboschi|autore5 = Riccardo Torlone|titolo = Basi di dati|editore = McGraw-Hill|anno = 2018|edizione = 5|città = Milano|ISBN = 978-88-386-9445-5|cid = Atzeni 2018}}
* {{Cita libro|nome=Abraham|cognome=Silberschatz|nome2=Henry F.|cognome2=Korth|nome3=S.|cognome3=Sudarshan|titolo=Database system concepts|edizione=Seventh edition|data=2020|editore=McGraw-Hill|ISBN=978-0-07-802215-9}}
 
== Voci correlate ==
* [[DatabaseBase di dati]]
* [[Sistema informativo]]
* [[Customer Information Control System]]
* [[Data warehouse]]
* [[Modello relazionale]]
* [[Persistenza (informatica)]]
* [[ISAM]]
* [[VSAM]]
* [[JDBC]]
* [[ODBC]]
* [[OLAP]]
* [[XML]]
* [[DBMS e sicurezza]]
 
== Altri progetti ==
{{interprogetto|v=Materia: Basi di dati 2|preposizione=sul}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* [http://geekplace.org/index.php?m=news&titolo=DBMS_a_Confronto&id=90 DBMS a confronto - Articolo con slide + relazione]
* {{FOLDOC}}
* [http://geekplace.org/download/DBMS%20a%20confronto%20-%20NeCoSi%2001.pdf DBMS a confronto - File PDF - Versione 0.1]
* [{{cita web|url=http://www.methack.it/devblog/2008/07/07/introduzione-ai-dbms/ |titolo=Introduzione ai DBMS]|accesso=8 luglio 2008|urlarchivio=https://web.archive.org/web/20191017070643/http://www.methack.it/devblog/2008/07/07/introduzione-ai-dbms/|urlmorto=sì}}
 
{{Database management system}}
{{Portale|Informatica|Sicurezza informatica}}
{{Portale|sicurezza informatica}}
 
[[Categoria:SoftwareDatabase permanagement basisystem| di dati]]