Elaborazione delle transazioni in linea e supporto decisionale
Esistono due categorie principali di applicazioni di database:
Applicazioni per l'elaborazione delle transazioni in linea (OLTP, Online Transaction Processing)
Applicazioni per il supporto decisionale
Le caratteristiche di questi tipi di applicazioni hanno un effetto determinante sulla progettazione di un database.
Applicazioni per l'elaborazione delle transazioni in linea (OLTP)
Le applicazioni di database per l'elaborazione delle transazioni in linea sono particolarmente utili per la gestione dei dati soggetti a modifiche e in genere supportano un numero elevato di utenti che eseguono simultaneamente più transazioni per la modifica dei dati in tempo reale. Benché le singole richieste di dati facciano in genere riferimento a un numero limitato di record, molte richieste vengono eseguite simultaneamente. Esempi comuni di questi tipi di database sono rappresentati dai sistemi di biglietteria aerea e dai sistemi di transazione bancaria. Gli aspetti più importanti da considerare per questo tipo di applicazioni sono la concorrenza e l'atomicità.
I controlli della concorrenza in un sistema di database assicurano che gli stessi dati non vengano modificati da due utenti simultaneamente oppure che un utente non modifichi dati specifici prima che un altro utente abbia terminato di modificarli. Ad esempio, se un cliente chiede all'impiegato di una biglietteria aerea di prenotare l'ultimo posto disponibile su un volo e l'impiegato inizia il processo di prenotazione del posto a nome del cliente, un altro impiegato non dovrebbe essere in grado di trovare tale posto disponibile per assegnarlo a un altro passeggero.
L'atomicità assicura che tutti i passaggi di una transazione vengano completati solo se considerati come un unico gruppo. Se un passaggio ha esito negativo, non sarà possibile completare gli altri passaggi. Ad esempio, una transazione bancaria può comportare due passaggi, ovvero il prelievo di fondi da un conto corrente e il deposito su un conto di risparmio. Se il passaggio durante il quale vengono prelevati i fondi dal conto corrente ha esito positivo, è necessario verificare che l'importo venga depositato sul conto di risparmio o ridepositato sul conto corrente.
Considerazioni sulla progettazione di database per l'elaborazione delle transazioni in linea
È consigliabile progettare i database per i sistemi di elaborazione delle transazioni in modo da garantire quanto segue:
Il posizionamento corretto dei dati.
I colli di bottiglia delle operazioni di I/O rappresentano un problema rilevante per i sistemi OLTP, a causa del numero di utenti che modificano i dati in tutto il database. Quando si progetta un database, è consigliabile determinare quali saranno le modalità di accesso ai dati più probabili e raggruppare i dati a cui si accede più di frequente. A tale scopo, utilizzare i filegroup e i sistemi RAID (Redundant Array of Independent Disks).
Transazioni brevi che consentono di ridurre al minimo i blocchi a lungo termine e di ottimizzare la concorrenza.
Evitare l'interazione dell'utente durante le transazioni. Quando possibile, eseguire una singola stored procedure per elaborare l'intera transazione. L'ordine con cui si fa riferimento alle tabelle nelle transazioni può avere effetti sulla concorrenza. Inserire nella parte finale della transazione i riferimenti alle tabelle a cui si accede di frequente per ridurre al minimo la durata del mantenimento dei blocchi.
Backup in linea.
I sistemi OLTP sono spesso caratterizzati da operazioni continue con periodi di inattività minimi, ovvero sono operativi 24 ore al giorno, sette giorni alla settimana. Benché in Motore di database di SQL Server sia consentita l'esecuzione del backup di un database mentre è in uso, è consigliabile pianificare il processo di backup in modo che venga eseguito durante i periodi di minore attività per ridurre al minimo gli effetti sugli utenti.
Elevata normalizzazione del database.
Ridurre il più possibile le informazioni ridondanti per aumentare la velocità degli aggiornamenti e ottimizzare la concorrenza. La riduzione dei dati aumenta inoltre la velocità di esecuzione dei backup perché è necessario eseguire il backup di una minore quantità di dati.
Assenza o riduzione al minimo dei dati cronologici o dei dati aggregati.
I dati a cui si fa riferimento solo raramente possono essere archiviati in altri database oppure spostati dalle tabelle aggiornate più frequentemente alle tabelle che includono unicamente dati cronologici. In questo modo, le dimensioni delle tabelle vengono limitate al massimo e vengono pertanto ottimizzati i tempi di esecuzione dei backup e le prestazioni delle query.
Utilizzo accurato degli indici.
È necessario aggiornare gli indici ogni volta che viene aggiunta o modificata una riga. Per evitare un'indicizzazione eccessiva delle tabelle aggiornate con maggiore frequenza, mantenere basso il numero di colonne degli indici. Per la progettazione degli indici, utilizzare Ottimizzazione guidata motore di database.
Configurazione hardware di alto livello per gestire un numero elevato di utenti simultanei e tempi di risposta veloci, necessari in un sistema OLTP.
Applicazioni per il supporto decisionale
Le applicazioni di database per il supporto decisionale sono indicate per le query che non modificano i dati. Ad esempio, un'azienda può riepilogare periodicamente i dati di vendita per data, area di vendita o prodotto e archiviare queste informazioni in un database distinto che viene utilizzato per le analisi dai responsabili. Per prendere decisioni strategiche, gli utenti devono essere in grado di determinare rapidamente le tendenze delle vendite eseguendo query sui dati in base a diversi criteri, ma non è necessario che modifichino questi dati. Le tabelle di un database per il supporto decisionale sono intensamente indicizzate e i dati non elaborati vengono frequentemente pre-elaborati e organizzati per supportare i diversi tipi di query da utilizzare. Poiché gli utenti non modificano i dati, la concorrenza e l'atomicità non rappresentano un problema. I dati vengono modificati solo in occasione di aggiornamenti bulk periodici eseguiti durante gli orari di minore attività del database.
Considerazioni sulla progettazione di database per il supporto decisionale
È consigliabile progettare i database dei sistemi per il supporto decisionale in modo da garantire quanto segue:
Un'intensa indicizzazione.
I sistemi per il supporto decisionale gestiscono una quantità di aggiornamenti limitata ma volumi di dati estesi. Utilizzare numerosi indici per ottimizzare le prestazioni delle query.
Denormalizzazione del database.
Introdurre dati preaggregati o riepilogati per rispettare i requisiti comuni delle query e ottimizzare i tempi di risposta delle query stesse.
Utilizzare uno schema star o snowflake per organizzare i dati all'interno del database.