Con il termine “file system” indichiamo la struttura secondo cui file, cartelle e partizioni vengono organizzati all’interno di un dispositivo elettronico. É compito del sistema operativo gestire il file system.
Questo particolare metodo risulta inefficace quando ci troviamo a lavorare con grandi quantità di dati, per cui introduciamo i database.
I database sono utili anche nella gestione degli accessi ad un sito, cosa che risulterebbe impraticabile se effettuata con il file system.
Nel linguaggio naturale (quello usato colloquialmente tutti i giorni) non c’è differenza tra dato e informazione, nel linguaggio scientifico invece sono termini con significati diversi:
i DATI sono la descrizione elementare di un elemento (volgarmente potremmo dire che sono una misurazione di una determinata caratteristica di qualcosa);
l'INFORMAZIONE è l’incremento di conoscenza che posso ottenere dal dato (ovvero “ciò che il dato mi dice” se so leggerlo).
Prendiamo ad esempio un esame del sangue: vengono effettuate misure sul campione prelevato e vengono raccolti dati (numeri con unità di misura sostanzialmente). Quando noi leggiamo il report abbiamo una sorta di tabella in cui compaiono il nome della caratteristica, il rispettivo dato emerso dalle analisi e il range di dati “standard” (ovvero frutto di una valutazione ponderata su un ampio campione della popolazione).
Grazie alle informazioni contenute nel report posso prendere decisioni. Per fare un esempio di informazione possiamo considerare l’asterisco che compare vicino ai valori fuori range.
Sapendo elaborare i dati si ottiene l'informazione, ma se non si sa interpretare il dato se ne diventa vittime e si crea il caos. Per comprendere l’enorme potere e l’enorme “delicatezza” dei dati e delle informazioni possiamo considerare che anche avendo tanti dati, questi risultano inutili se portano ad informazioni contrastanti.
Prendiamo per esempio un grande magazzino con molti carrelli elevatori. Noi sappiamo che quando un carrello elevatore procede in retromarcia si attiva un cicalino (il suono prodotto è il dato) che permette agli operai nelle vicinanze di ricevere l’informazione “ATTENZIONE: pericolo!!”. Quando però si ha un gran numero di carrelli elevatori, è ragionevole presupporre che che ci sarà sempre un cicalino acceso. Gli operai ricavano quindi l’informazione “Attenzione!!” sempre, e ciò non può essere considerato un metodo funzionante. Per schematizzare, possiamo scrivere che
tante informazioni > tanti livelli di analisi > l’analisi è dispendiosa > l'informazione ha un valore > l'informazione ha un costo.
Ecco, quando ci troviamo a lavorare con enormi quantità di dati provenienti da molteplici fonti (i big data) ci troviamo in una situazione in cui occorre abbandonare il file system per ricorrere al più funzionale database (in italiano “basi di dati”).
Per prima cosa vediamo un po’ di definizioni:
definiamo sistema informativo di una determinata realtà l’insieme di tutti i dati campionati e di tutte le informazioni;
definiamo sistema informatico gli automatismi che gestiscono i dati;
con DBMS intendiamo un insieme di strumenti software capaci di gestire dati strutturati secondo le specifiche dell’utente;
alcuni dati di un sistema informativo possono essere gestiti con sistemi informatici, i DBMS (DataBase Management System);
la gerarchia è: sistema informativo > sistema informatico > DBMS > dati.
Esistono moltissime tipologie di database in base alle rispettive caratteristiche, quelle comuni a tutti sono:
gestione grandi quantità di file (se ho due file non uso un database);
strutture con dati persistenti (ovvero dati che non hanno tempo di vita limitato alla singola esecuzione del programma), ciò ci porterebbe a parlare anche delle buone regole dei backup;
dati integri (non parziali);
dati consistenti, ovvero dati che vengono effettivamente utilizzati;
non ridondanti (occupano spazio inutilmente e in fase di aggiornamento possono creare confusione;
il database deve essere scalabile, deve mantenere costanti le proprie performance all’aumentare della mole di dati (e non deve porre limiti all’inserimento di nuovi dati);
una struttura logica, noi ci occuperemo in particolare dei database relazionali ma ne esistono molte tipologie.
I database relazionali si basano sullo schema relazionale elaborato da Edgar Frank Codd nel 1970. Si basa sul concetto di insiemi di tabelle (chiamate record) e le relazioni tra le informazioni derivano dalla corrispondenza di alcuni campi appartenenti a tabelle diverse.
Definiamo questo tipo di schema con approccio dichiarativo in quanto è sufficiente specificare cosa trovare, poiché del reperimento dei percorsi si occuperà il sistema.
Un giorno Pippo va in biblioteca e prende un libro in prestito: la relazione utile in questo caso è tra Pippo (nome, cognome e i vari dati utili) e il libro (nome, data di uscita e i vari dati utili). Grazie a questi dati e queste relazioni creo la struttura del mio database.
Il modo in cui verranno richieste e scritte le informazioni nel database ne influenzerà la progettazione.
Come tutti i processi, anche questo può essere suddiviso in fasi, per la precisione sono tre.
In questa fase viene definito il diagramma ER (entity and relationship/entità associazione) seguendo accuratamente le specifiche formali (derivanti dalle necessità dell’ambiente e del committente).
Si parte da una realtà specifica e si costruisce una rappresentazione grafica che la rappresenti.
Le entità permettono di descrivere una classe di oggetti (eventi, persone, cose, ecc.) appartenenti a una realtà e che presentano:
proprietà comuni;
esistenza autonoma;
un interesse per l’applicazione.
Definiamo istanza di entità (o occorrenza di entità) ogni singolo oggetto appartenente a un’entità. Ogni istanza di entità deve avere un attributo (detto chiave primaria o superchiave) che la renda inconfondibile.
Per rappresentazione grafica utilizziamo un rettangolo:
Per descrivere un’entità sfruttiamo gli attributi (le proprietà di un’entità). Ogni attributo è composto da:
un nome;
un formato, che indica il tipo di valori che l’attributo può assumere (stringa, reale,intero, booleano, data);
una dimensione, (non vale per tipi booleani e data) ovvero la quantità massima di cifre/caratteri da inserire;
un valore, i differenti valori di un attributo identificano le diverse istanze dell’entità;
un dominio, ovvero l’insieme di valori che un attributo può assumere.
Per rappresentare un attributo usiamo una linea terminante con pallino vuoto, se l’attributo è una chiave primaria il pallino è pieno:
Le associazioni sono legami logici tra due o più entità rilevanti nella realtà considerata. Anche le associazioni possono avere degli attributi, ma al contrario dell’entità, non hanno bisogno obbligatoriamente di una chiave primaria. Vengono rappresentate mediante rombi:
Qua razionalizziamo il diagramma ER, passiamo dalla rappresentazione astratta ad uno schema logico efficiente rispetto alle strutture di gestione del sistema (potremmo ad esempio trasformare il diagramma ER in tabelle, liste e/o matrici).
I database possono portare a diversi output durante la fase di progettazione logica (ad esempio, i database gerarchici producono diagrammi ad alberi). Da qua in avanti ci riferiremo solo a database di tipo relazionale.
Da un'associazione con cardinalità molti a molti otterremo sempre tre tabelle: una per ciascuna entità e una per l’associazione (ci riferiamo ancora al nostro esempio E1 - A - E2).
Ogni tabella sarà composta da due parti:
parte intensionale (le intestazioni delle colonne), che identifica gli attributi dell’entità;
parte estensionale, la parte che conterrà i valori degli attributi delle varie istanze.
I due termini derivano dai termini “intensive” ed “estensive” (riferiti a grandezze fisiche).
Definiamo mapping il processo di traduzione del diagramma ER in tabelle. Si va letteralmente a mappare la situazione. Quando un’entità viene tradotta in una tabella diventa necessario definire i nomi delle colonne (le intestazioni), esse coincideranno con i nomi degli attributi.
Se riprendiamo il nostro amato esempio (di cui abbiamo parlato nel dettaglio più avanti):
l’entità Studente sarà la tabella 1, l’entità Materia sarà la tabella 2 e l’associazione Verifica sarà verifica sarà la tabella 3.
In particolare, l’associazione Verifica (di cui data e voto sono attributi) necessità anche delle chiavi primarie delle singole entità. Quando una chiave primaria è inserita in un contesto esterno alla propria tabella di origine prende il nome di chiave esterna. Due chiavi esterne, insieme, formano la chiave primaria di una associazione (super chiave o chiave composta).
Come si esegue l’operazione di mapping? Quali caratteristiche dovrà avere? Ebbene, il diagramma ER e le tabelle devono essere equivalenti, ovvero devono avere lo stesso contenuto sotto una diversa forma.
A questo punto è bene far notare due livelli che emergono durante la progettazione e il popolamento di un database:
struttura, dobbiamo prestare attenzione alla coerenza tra diagramma ER e le tabelle della fase logica;
contenuto, dobbiamo assicurarci che i dati inseriti abbiano un senso (non è logico che nel campo “Giorno” venga inserito il termine “ipotalamo”) imponendo determinati vincoli.
Siamo nel livello in cui viene implementato lo schema logico, andando a definire tutti i dettagli fisici di memorizzazione e rappresentazione delle memorie di massa. La macchina fisica influisce la potenza e la possibilità di soddisfare certe prestazioni hardware e va scelta con cura in base alle interrogazioni per secondo che ci attendiamo.