Gestione delle informazioni e basi di dati
Gestire le informazioni è sempre stata un’attività fondamentale in numerosi contesti applicativi. Oggi questo problema è stato affrontato mediante strumenti informatici con la creazione di basi di dati, originariamente nate per gestire l’archiviazione di grandi moli di dati ma adesso diffuse ovunque, anche a scopi predittivi. Alcuni posti in cui è possibile trovare basi di dati sono le banche, i siti web, uno smartphone...
Sistema informativo e sistema informatico
Il sistema informativo è l’insieme degli strumenti, risorse e procedure che consentono la gestione delle informazioni aziendali.
Il sistema informatico include le risorse hardware e software presenti in un’azienda. Anche se originariamente la gestione delle informazioni non era necessariamente basata su sistemi informatici, oggi è sempre più raro avvalersi di supporti diversi per generare, elaborare, far circolare e memorizzare l’informazione.
Compiti della tecnologia dell'informazione
- Immissione, memorizzazione e cancellazione dei dati
- Accesso, elaborazione e trasferimento dei dati
- Presentazione e visualizzazione dell’informazione
Nei sistemi informatici le informazioni vengono rappresentate per mezzo di dati.
Definizione di dato e informazione
Il dato è l’unità elementare (grezza) di informazione. Sono valori che non hanno un significato a priori e per essere utilizzati devono essere interpretati. L’informazione è l’elaborazione dei dati per rispondere a esigenze specifiche dell’attività o dell’applicazione. L’informazione è estratta associando una semantica alla struttura con cui i dati sono memorizzati.
Esempio di dato e informazione
Dato
Alice Rossi, Basi di Dati, 30 settembre 2018, 30
Roberto Bianchi, Fondamenti di Informatica, 15 marzo 2018, 20
Informazione
Quali esami ha dato Alice Rossi? Basi di Dati
Quanto ha preso Roberto Bianchi a Fondamenti di Informatica? 30
L’interpretazione non è sempre scontata. Supponendo che il file contenga i dati relativi alla disponibilità di prodotti nel magazzino di una società di vendita di televisori, riusciamo a interpretarli?
Estrarre l’informazione
Per estrarre l’informazione è essenziale conoscere la semantica associata alla struttura con cui sono memorizzati i dati:
- Il carattere : è usato per separare dati diversi
- Il primo dato rappresenta il numero di prodotti disponibili
- Il secondo dato rappresenta la marca del prodotto
- Il terzo dato rappresenta il modello del prodotto
- Il quarto dato rappresenta il tipo di prodotto (1: LCD, 2: plasma, 3: CRT)
- Il quinto dato rappresenta il costo del prodotto
Processo aziendale e database
Un processo è una procedura aziendale che risponde a un particolare compito applicativo. Realizzare un sistema informativo come nell’esempio appena visto porta ad avere un grande accoppiamento tra dati e processi, e quindi una bassa flessibilità nel sistema.
È possibile disaccoppiare i dati dai processi introducendo un database che operi da intermediario tra i processi (le applicazioni) e i dati: un Database Management System (DBMS). Questo componente risponde alle esigenze base comuni a tutti i sistemi che devono gestire dati (e.g. solidità, privilegi, ...). Ci consente di progettare e gestire un sistema informativo (partendo dai dati o dai processi) garantendo la stabilità dei dati e rispondendo alle criticità viste fino ad ora.
Caratteristiche di un DBMS
Un database è quindi un insieme di dati gestito da un DBMS. Un DBMS è un sistema (software) in grado di gestire collezioni di dati che siano (anche) grandi (non è detto che tutti i dati stiano in memoria); persistenti (sempre accessibili al di là della durata dell’applicazione); garantendo al tempo stesso affidabilità (resiste a crash, mancanza di corrente, o altri eventi imprevisti); privatezza (più utenti con privilegi potenzialmente diversi); condivisione (può essere usato da più entità, anche in maniera concorrente); efficienza (offre alte prestazioni di accesso); efficacia (garantisce l’accesso ai dati).
Un’architettura con DBMS permette una gestione dei dati unitaria, ovvero offrendo un’unica interfaccia di accesso, e a più alto livello, ovvero che nasconde i dettagli di implementazione.
Livelli di astrazione in un DBMS
Vedremo nel corso come vengono ottenute le caratteristiche principali di un DBMS:
- Condivisione dei dati (assenza di replicazione dei dati, concorrenza)
- Qualità dei dati (vincoli di integrità)
- Efficienza (caricamento, query, sort)
Ogni organizzazione (specie se è grande) è divisa in settori o comunque svolge diverse attività. A ciascun settore o attività corrisponde un (sotto)sistema informativo. I dati di interesse dei vari settori possono avere sovrapposizioni.
Ridondanza e vantaggi del DBMS
Potremmo pensare di copiare i dati (tutti o in parte), ma questo porta alla proliferazione di versioni diverse e non sincronizzate tra loro. La ridondanza è un fenomeno da evitare che si ha quando le informazioni sono ripetute. Questo porta a uno spreco di memoria e a un rischio di incoerenza: aggiornare un’informazione richiede una modifica di tutte le repliche del dato; in caso contrario, le repliche possono non coincidere.
Usando un unico database al posto di più archivi si elimina il problema. Un DBMS semplifica le operazioni di accesso ai dati attraverso diversi livelli di astrazione nella rappresentazione dei dati. Grazie a questi meccanismi, l’applicazione non si deve preoccupare dei dettagli implementativi. Il concetto è simile a quello già visto nel paradigma orientato a oggetti.
Come conseguenza le applicazioni sono più semplici perché il DBMS si occupa al loro posto di gestire i dati. I programmi e utenti possono fare riferimento unicamente alla rappresentazione a più alto livello.
Modelli dei dati
La rappresentazione a diversi livelli di astrazione è resa possibile attraverso il ricorso a dei modelli dei dati.
Modelli logici
I modelli logici sono usati nei DBMS per l’organizzazione dei dati. Ne esistono di diversi tipi (gerarchico, reticolare, relazionale, a oggetti). Questi modelli descrivono come i dati sono organizzati dentro un DBMS, così da specificare come i programmi possono estrarli. Rendono i dati indipendenti dalle strutture fisiche di memorizzazione.
Modelli concettuali
I modelli concettuali sono utilizzati nella prima fase della progettazione e non fanno riferimento a uno specifico modello logico. Permettono di rappresentare i dati in modo indipendente da ogni DBMS, e cercano di descrivere i concetti del mondo reale.
Modello relazionale
Il modello logico più diffuso è quello relazionale, in cui le informazioni sono organizzate in una o più relazioni (o tabelle). Ogni relazione è un insieme di record a struttura fissa. Poco flessibile poiché non posso aggiungere informazioni. I dati nella tabella sono rappresentate dalle righe (istanze). La trasformazione da dati a informazione è consentita dall’intestazione (schema), che attribuisce un’interpretazione alle righe.
L’intestazione (che definisce la struttura generale dei dati) è relativamente stabile durante la vita del database, mentre il corpo (i dati contenuti) possono cambiare anche molto velocemente. Questo è simile a quanto avviene in un sistema software a oggetti: le classi (una volta progettato il sistema) sono statiche, mentre gli oggetti vengono creati, modificati e distrutti varie volte durante l’esecuzione dell’applicazione.
Livelli di astrazione del database
Un database tipico è organizzato su più livelli di astrazione.
- Schema esterno (livello esterno): descrive i dati dal punto di vista dell’utilizzatore (singola applicazione).
- Schema logico (livello logico): descrive i dati dal punto di vista globale della base di dati.
- Schema interno (livello fisico): descrive i dati dal punto di vista di come questi sono effettivamente memorizzati.
Avere (almeno) questi livelli garantisce l’indipendenza dei dati: consente, ad utenti e programmi applicativi di interagire con i dati ad un livello di astrazione che prescinde dai dettagli realizzativi del DBMS. Si parla di indipendenza fisica per indicare la capacità di astrarre completamente dai meccanismi di gestione dei dati. In questo modo la rappresentazione logica (tabelle) è indipendente dalla rappresentazione a livello fisico.
Si parla di indipendenza logica per indicare la capacità di offrire una visione dei dati differente a utenti differenti. Questo consente anche di modificare lo schema logico in un secondo momento mantenendo lo stesso schema esterno.
Interfacce e linguaggi per i DBMS
Un contributo fondamentale all’efficacia dei DBMS è dato dalla disponibilità di vari linguaggi e interfacce per la loro gestione:
- Comandi testuali interattivi SQL
- Comandi SQL immersi in un linguaggio ospite (e.g. Python)
- Comandi SQL immersi in un linguaggio ad hoc
- Interfacce grafiche di gestione
Esempio
SELECT Marca, Modello, Costo
FROM Televisori
WHERE Costo < 800
Vantaggi del modello relazionale
- Dati come risorsa comune, base di dati come modello della realtà.
- Gestione centralizzata con possibilità di standardizzazione ed “economia di scala”.
- Disponibilità di servizi integrati.
- Riduzione di ridondanze e inconsistenze.
- Indipendenza dei dati (favorisce lo sviluppo e la manutenzione delle applicazioni).
Relazioni, domini e prodotto cartesiano
Si basa su uno sviluppo del concetto matematico di relazione derivante dalla teoria degli insiemi, con alcune differenze. In questo modello le relazioni vengono rappresentate da tabelle.
Un dominio D è un qualunque insieme di valori. Dati n domini D1,...,Dn (anche non distinti), il prodotto cartesiano D1 × D2 × ... × Dn è l’insieme di tutte le n-uple (tuple) (d1,d2,...,dn) con di ∈ Di, 1 ≤ i ≤ n.
Proprietà delle relazioni
Una relazione R su D1 × D2 × ... × Dn è un qualunque sottoinsieme R ⊆ D1 × D2 × ... × Dn.
- Grado di R: Data una relazione R = {r1,...,rc} ⊆ D1 × ... × Dn, il numero di domini n è detto grado di R.
- Cardinalità di R: Il numero di tuple c è detto cardinalità di R.
Esempio
D1 = {1,2}
D2 = {x,y,z}
D1×D2 = {(1,x),(1,y),(1,z),(2,x),(2,y),(2,z)}
R1 = {(2,x),(1,y)}
R2 = {(1,z),(2,x),(2,z)}
R3 = {}
R4 = {(1,x),(1,y),(1,z),(2,x),(2,y),(2,z)}
Il grado di tutte le relazioni è 2.
Relazione matematica
Una relazione matematica è un insieme di n-uple (d1,d2,...,dn) tali che di ∈ Di, 1 ≤ i ≤ n.
- Ciascuna n-upla è ordinata: l’i-esimo valore proviene dall’i-esimo dominio.
- Non c’è ordinamento tra le n-uple: una relazione non è un insieme ordinato di n-uple.
- Le n-uple sono distinte: non possono esserci due elementi identici in una relazione.
Struttura posizionale e non posizionale
Questa definizione di relazione porta ad avere una struttura posizionale: ciascuno dei domini ha ruoli diversi, distinguibili attraverso la loro posizione all’interno del prodotto cartesiano. Il legame tra posizione e semantica è un’informazione esterna che non fa parte di questa rappresentazione.
Il problema appena esposto può essere superato adottando una struttura non posizionale. In questa estensione del concetto di relazione, a ciascun dominio si associa un nome, detto attributo, che ne descrive la semantica. In questo modo l’ordine dei domini diventa ininfluente, in quanto è sempre possibile risalire al ruolo di ogni valore in base all’attributo a cui è associato.
Schema di una relazione
Lo schema di una relazione R(A1 , . . . , AN ) è definito dal nome della relazione R e dall’insieme dei suoi attributi X = {A1 , . . . , AN}, ciascuno identificato da un nome distinto, un dominio, e un insieme di operatori di confronto.
Tupla e istanza di relazione
Una tupla su un insieme di attributi X è una funzione che associa a ciascun attributo A ∈ X un valore del dominio di A. Si indica con t[A] il valore della tupla t sull’attributo A di relazione.
Un’istanza di relazione su uno schema R(X) è un insieme r di tuple su X.
Un’istanza di dati su uno schema R = {R1(X1), . . . , RN(XN)} è un insieme di tuple r = {r1, . . . , rn} (con ri istanza di relazione su Ri(Xi)). I nomi delle relazioni devono essere tutti distinti tra loro.
Record e campi
La struttura dati usata per memorizzare una tupla è il record. I valori di una tupla su ciascun attributo corrispondono ai campi del record.
Esempio di relazione e tabella
Esempio r1 = {(a,1),(b,3)}
r2 = {(c,1),(b,3),(a,2)}
r = {r1,r2}
Presa la tupla t1 = (b, 3) ∈ r1, i valori dei suoi attributi sono t1[A] = b, t1[B] = 3
Presa la tupla t2 = (b, 3) ∈ r2, i valori dei suoi attributi sono t2[A] = b, t2[C] = 3
Una tabella rappresenta una relazione (nel modello relazionale) se:
- I valori di ogni colonna sono fra loro omogenei
- Le righe sono diverse fra loro
- Le intestazioni delle colonne sono diverse tra loro
In una tabella sono irrilevanti sia l’ordinamento tra le righe, che quello tra le colonne. Nei database reali il vincolo di unicità delle righe viene meno, anche se vedremo che non è comunque una buona idea avere righe duplicate.
Modello relazionale e riferimenti
Nel modello relazionale, i dati sono distribuiti su più tabelle, ciascuna delle quali con i suoi attributi. Sorge quindi il problema di come fare a esplicitare il legame tra dati appartenenti a tabelle diverse. Il modello relazionale è un modello basato sui valori: i riferimenti fra dati in relazioni diverse sono rappresentati per mezzo di valori del dominio di alcuni attributi.
Esempio di organizzazione delle informazioni
Supponiamo di voler organizzare le informazioni relative agli studenti di un ateneo:
- Nome, città, e corso di laurea di ciascuno studente
- Nome dei corsi del corso di laurea e relativi docenti
- Esami superati da ciascuno studente e relativi voti
Un approccio ingenuo potrebbe portare alla creazione di un’unica tabella contenente tutti i dati. Questo tuttavia porta a molti elementi duplicati, con conseguente spreco di spazio e rischio di incoerenze. Inoltre, ogni volta che l’alunno da un nuovo esame bisognerebbe aggiornare tutto. Inoltre, come possiamo gestire gli studenti che non hanno ancora sostenuto esami?
È più conveniente fare tabelle diverse per ridurre la duplicazione e non avere il problema dei dati in cui non so cosa mettere. Questa soluzione introduce però il problema di riferimenti tra tabelle. Come si può sapere, per esempio, a quale studente corrisponde l’esito di un esame? In questo caso non ho tabelle collegate tra loro e non so chi ha dato quale esame e quando. Ho bisogno di un modo per collegare tra loro le tabelle introduce dati aggiuntivi (dei codici).
Vantaggi del collegamento tra tabelle
Questo modo di collegare tra loro le tabelle presenta numerosi vantaggi:
- È indipendente dalle strutture fisiche con cui sono memorizzate le informazioni
- Si rappresentano solo dati rilevanti dal punto di vista dell’applicazione
- L’utente finale vede gli stessi dati dei programmatori
- I dati sono portabili più facilmente da un sistema a un altro
- I riferimenti sono bidirezionali
Le definizioni non limitano il numero di attributi di una relazione. Ha senso considerare relazioni definite su un solo attributo?
Nelle relazioni uno-a-uno (e.g. un paese con la sua capitale) e uno-a-molti (e.g. un docente con i suoi insegnamenti) è semplice inserire dei codici aggiuntivi alle tabelle per consentire di metterle in relazione tra loro.
Relazioni molti-a-molti
Come possiamo fare quando vogliamo creare una relazione molti-a-molti?
Esempio: Supponiamo di voler poter rappresentare gli studenti e i corsi su Moodle, consentendo di rispondere alle seguenti domande:
- Quali studenti sono iscritti a un corso?
- A quali corsi è iscritto uno studente?
Con questa struttura non è possibile mettere in relazione le due tabelle. Per farlo, occorre che Matricola e CodiceCorso compaiano all’interno di una stessa relazione. Aggiungendo CodiceCorso a Studenti si consente a un corso di avere un numero arbitrario di studenti, ma l’unico modo di consentire l’iscrizione di uno studente a più corsi sarà quello di duplicare le righe. Aggiungendo Matricola a Insegnamenti si ottiene il problema inverso: gli studenti possono iscriversi a un qualunque numero di corsi, ma l’iscrizione di più studenti allo stesso corso comporta una duplicazione dei dati.
Gestione delle ricevute fiscali
Supponiamo di voler rappresentare nel modello relazionale le ricevute fiscali rilasciate da un ristorante. I dati sono già rappresentati, in qualche modo, da una tabella. Un primo approccio può prevedere la creazione di un’unica tabella in cui ogni riga rappresenta una ricevuta. In questo modo non c’è duplicazione di dati ed è facile gestire le portate mancanti impostando per esse numero e costo a zero. Tuttavia, questo modello è scarso in termini di flessibilità e gestione delle informazioni.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.