Introduzione
La raccolta di consistenti moli di dati e informazioni di vario tipo avviene in ambiti economico-aziendali e tecnicoscientifici
come:
• ISTAT: istituto di ricerca sperimentale, i dati sono l’obiettivo primario della loro attività;
• GDO: grande distribuzione organizzata, la raccolta dei dati è funzionale agli obiettivi commerciali;
• Log: sequenza cronologica di eventi che si sono verificati in un sistema informatico (come web log), in siti web,
la raccolta di questi dati è secondario, solo per memoria storica;
Per rispondere a domande quali “quali sono i prodotti più venduti?” e altre di questo genere, è necessario disporre di
strumenti. Nella maggior parte dei casi si usano strumenti dedicati alla memorizzazione e al recupero di informazioni:
DBMS.
DBMS: Data Base Management System, sistema per la gestione di basi di dati. Sistema software che fornisce le
funzionalità necessarie per la creazione di un database, la sua gestione, il controllo degli accessi, il recupero delle
informazioni in esso contenute.
• Semplicità d’uso
• Flessibilità: applicabilità a un enorme gamma di problemi e applicazioni
• Buone prestazioni
• Robustezza: buona resistenza a eventi critici e imprevisti
• Compatibilità tra piattaforme software differenti
Modello dei dati: modo in cui le informazioni vengono rappresentati. Quello adottato dai database relazionali è il
modello relazionale, riassumibile in:
In alcuni casi tutta l’informazione può essere contenuta in una tabella, in altri è necessario suddividerla in più parti.
Attributo: la colonna della tabella, la posizione all’interno dell’ennupla/riga in cui il valore è inserito Per
Tutti i dettagli detti più altri vanno a confluire nello schema del database, che descrive quello che un database può
contenere e il modo in cui le informazioni sono organizzate. Ogni DBMS fornisce uno o più modi per definire lo schema
di un database. Lo schema di un database deve obbligatoriamente essere definito prima di inserire i dati.
Le operazioni di base che è possibile effettuare su una o più tabelle di un database sono principalmente:
• Selezione: permette di prelevare da una tabella tutte le ennuple (righe) che soddisfano alcune condizioni da
noi specificate.
• Proiezione: permette di selezionare da una tabella alcune colonne scartando le altre.
• Join: consiste nel combinare due tabelle, essenzialmente accoppiando le ennuple della prima tabella con le
ennuple della seconda. Il risultato è una tabella le cui ennuple hanno gli attributi di entrambe le tabelle.
L’operazione richiede di indicare un attributo per ognuna delle due tabelle, e tali attributi fanno da collegamento
tra le due tabelle (tra le possibili coppie di ennuple A-B, dove A una qualunque ennupla della prima tabella e B
una qualunque ennupla della seconda, verranno selezionate solo quelle in cui i corrispondenti attributi di
collegamento hanno ugual valore). Può accadere che la corrispondenza sia multipla o che per alcune ennuple
non vi sia corrispondenza, nel primo caso il risultato conterrà tante ennuple quante sono le corrispondenze
esistenti, nel secondo la ennupla senza corrispettivi non comparirà nel risultato.
• Operazioni insiemistiche: unione, intersezione e differenza. La funzione è mettere insieme ennuple
provenienti da tabelle diverse ma aventi lo stesso schema, ovvero composte dagli stessi attributi. Le tre
operazioni insiemistiche possono essere utilizzate così:
Unione per esempio tra “residenti Pisa” e “fuori corso” → tabella che contiene tutti gli studenti che fanno parte
dei residenti a Pisa (1° tabella), gli studenti fuori corso (2° tabella), oltre a quelli che fanno parte di entrambi i
gruppi.
Intersezione tra “residenti Pisa” e “fuori corso” contiene solo gli studenti contemporaneamente appartenenti ad
entrambi i gruppi.
Differenza contiene i residenti a Pisa che non sono fuori corso: seleziona tutte le ennuple della prima tabella
che non compaiono nella seconda.
Le operazioni di proiezione e join vanno a modificare principalmente, ma non solo, il numero di colonne.
Queste operazioni vanno a formare l’algebra relazionale: insieme di operatori che permettono di manipolare un dato
insieme di tabelle. Il risultato di una qualunque operazione effettuata su delle tabelle, è sempre una tabella.
L’algebra relazionale definisce un insieme di operatori applicabili a uno/due tabelle che restituiscono come risultato una
nuova tabella:
• Selezione σcond(A): seleziona dalla tabella A le ennuple che soddisfano la condizione “cond”.
• Proiezione πattr(A): proietta la tabella A rispetto agli attributi elencati in “attr” gli altri sono eliminati •
Prodotto Cartesiano AxB: accoppia ogni ennupla di A con ogni ennupla di B.
• Join A►◄condB: accoppia ogni ennupla di A con ogni ennupla di B, selezionando solo le coppie che soddisfano
“cond”, composta da una serie di uguaglianze tra attributi (attr1=attr2…). È una combinazione di prodotto
cartesiano e selezione.
• Ridenominazione ρriden(A): modifica i nomi degli attributi A secondo quanto indicato in “riden”.
Introduzione a SQL
Gestire un database relazionale richiede poter effettuare un certo insieme di operazioni: interrogare il database. Lo
strumento base per questo è di tipo linguistico, consente di formulare richieste al database relative a tutte le operazioni
menzionate.
SQL = Structury Query Language, letto come sequel, uno dei primi linguaggi per database apparsi sul mercato
dedicati al modello relazionale dei dati, introdotto da Edgar F. Codd, all’inizio degli anni Sessanta. I DBMS basati su SQL
rappresentano una realizzazione pratica del modello relazionale, discostandosi dalla formulazione concepita da Codd
stesso. Le richieste che SQL permette di esprimere sono di tre tipologie:
1. Data Definition Language DDL: riguarda la definizione degli schemi del database, la composizione di ogni
tabella e le relazioni tra esse.
2. Data Manipulation Language DML: dedicate all’inserimento, modifica e interrogazione delle informazioni
contenute nel database.
3. Data Control Language DCL: dedicata alla gestione e controllo degli utenti e degli accessi alle informazioni,
serve a specificare chi può accedere a quali informazioni, e cosa può farci. La gestione di questi aspetti
riguarda principalmente la figura dell’amministratore del database.
Molti strumenti forniscono all’utente agevolazioni (es: interfaccia grafica) che consentono di non dover scrivere
manualmente l’intera richiesta o nemmeno richiedono l’uso di SQL → lo strumento fa quindi da intermediario tra
l’utente e il database, traducendo le azioni e le richieste dell’utente in richieste corrispondenti in SQL.
Due esempi di uso del linguaggio SQL:
1. Frammento di DDL
CREATE TABLE Studenti( Matricola INTEGER,
Cognome VARCHAR(20),
Nome VARCHAR(20),
“Data di nascita” DATE);
Si richiede che l’attributo “matricola” contenga numeri interi, “cognome” e “nome” stringhe di caratteri di al
massimo 20 caratteri, “data di nascita” è una data.
2. Frammento di DML SELECT Cognome, Nome
FROM Studenti
WHERE Matricola < 7000
In questo modo si sono selezionati gli studenti con numero di matricola inferiore a 7000.
Prodotti commerciali:
Oracle 11g e IBM DB2 hanno fatto la storia dei database relazionali, ma i costi e la complessità della configurazione e
dell’utilizzo li rendono poco attraenti.
• MySQL: fa parte della piattaforma LAMP una delle più diffuse piattaforme per lo sviluppo di applicazioni web,
come siti di e-commerce, portali, blog ecc.
• PostgreSQL: un altro DBMS open source molto diffuso, noto per l’affidabilità e apprezzato dove è necessario
un certo livello di programmabilità.
• OpenOffice.org Base: fa parte della suite OpenOffice.org che si propone come alternativa alla suite di Microsoft.
La componente principale di ognuno di questi sta nel motore del database (back-end del sistema), quello che
si
occupa di gestire i dati e rispondere alle richieste formulate in SQL. Di solito viene corredato di
un’interfaccia
utente per facilitarne l’uso, ma questa è indipendente dalla
prima.
Il modo più diretto per utilizzare PostgreSQL è un’interfaccia completamente testuale, ma esiste anche un’app grafica
standard, e tra commerciali e open source almeno altre 50 applicazioni sono in grado di utilizzarlo come motore
attraverso opportune componenti software per l’interscambio dei dati (driver).
Lo strumento che useremo (Base) fa parte di essi e pur possedendo un motore interno, consente di accedere ad altri
sistemi inclusi MySQL e PostgreSQL.
OpenOffice.org Base
Questo è la soluzione software per tre ragioni:
(1) Fornisce strumenti ben integrati i quali includono la gestione dei database e di fogli elettronici
(2) Funziona su numerosi sistemi operativi (Windows, MacOS)
(3) È open source quindi gratuito
Lo strumento utilizzato è “Base”, un front-end che consente di gestire database su motori SQL di diverso tipo:
• HSQLDB: HyperSQL Database, il motore SQL interno di Base, quello che viene utilizzato dallo strumento in
mancanza di diversa configurazione da parte dell’utente.
• MySQL: grazie ad alcune estensioni, questo DBMS è accessibile in modo semplice. Si richiede che sia
installato e in funzione sullo stesso computer o su un altro accessibile da Base.
• PostgreSQL e altri: utilizzabili grazie ad alcuni driver che forniscono metodi di accesso standardizzati a
qualunque DBMS che accetti tali metodi.
Che si tratti di database interno (HSQLDB) o esterno (MySQL e altri), Base creerà un documento che rappresenta il
database in “.odb” nel quale saranno registrate le configurazioni del database e nel caso di HSQLDB anche dati veri e
propri.
Ci viene mostrato il quadro principale di Base, in cui è possibile organizzare i contenuti in 4 sezioni, selezionabili sulla
sinistra nel riquadro “database”.
1. Tabelle: una volta selezionata l’icona verranno mostrate le tabelle definite oltre ad un elenco di operazioni
eseguibili e un’anteprima del contenuto della tabella selezionata.
2. Ricerche: interrogazioni il cui codice SQL è memorizzato e possono quindi essere rieseguite quando serve.
Sono chiamate anche viste (modi alternativi e specifici per guardare le tabelle presenti nel database, e
corrisponde a una interrogazione SQL). È presente anche qui un elenco di operazioni eseguibili e un’anteprima
dei risultati.
3. Formulari: si possono creare moduli che l’utente può compilare allo scopo di popolare il database.
4. Rapporti: si compongono rapporti in cui si raccolgono dati dal database allo scopo di ottenere una variazione
più efficace per l’utente finale.
Tabelle e ricerche sono le due sezioni fondamentali corrispondenti alla fase di creazione e di interrogazione
del
database, Base mette a disposizione per questo due strumenti, SQL e mezzi
grafici.
Interfacce SQL e interfacce grafiche di Base
Base separa le operazioni creazione/interrogazione delle tabelle in due sezioni, e ogni operazione può essere effettuata
con comandi SQL scritti o usando strumenti grafici. Nell’interfaccia di Base risulta immediato far partire gli strumenti
grafici, la modalità di inserimento manuale dei comandi SQL è nascosta.
Interrogazione di tabelle
• Selezionando “ricerche” è possibile richiedere di creare una nuova interrogazione o modificarne una esistente.
Per crearne una nuova occorre selezionare una delle attività elencate, per modificarne una esistente occorre
cliccare cl tasto destro sulla ricerca da modificare e selezionare “modifica in vista SQL…”
• Lo strumento grafico equivalente: se l’interfaccia testuale è aperta, è sufficiente attivare l’icona “vista struttura
sì/no”, altrimenti selezionare “crea ricerca in vista struttura”, o per modificare “modifica”. La differenza
sostanziale rispetto all’inserimento manuale consiste nel fatto che il pannello per digitare il testo sparisce e al
suo posto compaiono due riquadri, uno per indicare le tabelle da utilizzare, uno per indicare gli attributi da
selezionare.
Solitamente la fase di creazione di un database inizia con una fase di studio preliminare il cui obiettivo è
capire quali sono gli elementi che andranno a costituire il database e quali relazioni vigono tra essi. Si passa
a tradurre questa mappa in un database vero e proprio attraverso gli strumenti che SQL mette a
disposizione. La prima fase si chiama anche progettazione concettuale, la seconda progettazione logica.
Progettazione concettuale
Il primo passo consiste nel rispondere dettagliatamente a tre quesiti fondametali:
1. Quali sono i tipi di entità che vogliamo rappresentare nel database? Ogni entità verrà chiamata classe.
2. Quali sono le proprietà che descrivono ognuna delle classi individuate?
3. Come sono tra loro collegate le diverse classi? I collegamenti sono le associazioni.
Ogni entità diventerà una tabella e le sue proprietà si tradurranno in attributi. Per quanto riguarda
le
associazioni, ne esistono di diversi tipi a seconda di quante possono essere le .
entità
La progettazione concettuale mira a determinare i punti elencati facendo uso di strumenti ad hoc per la creazione dei
modelli (linguaggio UML o modelli Entità-Relazioni), per i quali esistono diversi strumenti software che ne facilitano il
disegno. In contesti complessi può essere difficile mettere a fuoco i diversi punti richiesti, per facilitare questo esistono
strumenti di supporto che forniscono metafore grafiche per rappresentare gli elementi che dobbiamo definire che sono il
linguaggio UML e i modelli Entità Relazioni. Rappresentano entrambi graficamente lo schema concettuale
attraverso blocchi che rappresentano le entità, etichette che rappresentano le loro proprietà, e linee che
collegano i blocchi/entità associati.
Progettazione logica
A questo punto occorre definire i dettagli progettuali: quali tipi di dati conterrà ogni attributo, come realizzare le
associazioni tra tabelle. Bisogna assicurarsi che ogni tabella abbia una chiave primaria: insieme di attributi che
identificano univocamente ogni ennupla della tabella. Nei casi in cui non sia identificabile è opportuno aggiungere un
attributo artificiale ad hoc (codice o simili).
La realizzazione potrebbe essere scomoda per grande ridondanza di dati e conseguente troppo spreco di spazio per la
memorizzazione e per il dovere di aggiornare tutte le ennuple che riguardano un dato o un corso che deve essere
modificato. → è bene spezzare l’informazione in alcuni nuclei indivisibili con lo scopo di ridurne la ridondanza.
A seconda del grado di frammentazione delle tabelle raggiunto, si realizza una normalizzazione del database, per la
quale sono definiti in letteratura diversi gradi.
La normalizzazione di un database consiste nel ridurre la ridondanza nei suoi dati. Esistono diversi livelli di
normalizzazione detti forme normali e rappresentano una certificazione di qualità del database stesso. Un database
può essere promosso a una forma normale aggiungendo attributi ad hoc o decomponendo le sue tabelle in modo che
rispondano a alcuni requisiti.
1. Prima forma normale 1NF: richiede che per ogni tabella siano soddisfatti due vincoli: deve contenere una
chiave primaria, e ogni attributo contiene valori semplici.
2. Seconda forma normale 2NF: richiede che se la tabella contiene chiavi primarie composte da più attributi, non
deve contenere attributi il cui valore è univocamente determinato da solo un pezzo della chiave primaria.
3. Terza forma normale 3NF: richiede di essere in seconda forma normale e vieta che i valori di qualunque
attributo siano univocamente determinati dai valori di un attributo che non fa parte della chiave.
Attributo_2 tipo_dati_2,
Attributo_n tipo_dati_n,
);
questo chiede al DBMS di creare una tabella chiamarla nome_tabella, indica che le ennuple saranno formate da n
attributi, il primo si chiama attributo_1, eccetera. Gli attributi dopo PRIMAR KEY formano la chiave primaria della tabella,
spesso formata da un solo attributo, nel qual caso si usa la sintassi più breve evidenziata in giallo.
I tipi fondamentali:
• Stringhe di caratteri: nomi o codici non numerici che possono essere a dimensione fissa ideale per codici
fiscali, ISBN-10 e altri. La SQL per questo tipo è CHAR(n), dove n è la lunghezza. E possono essere anche a
dimensione variabile utile in nomi di persona vie e altro, la sintassi è VARCHAR(n), dove n è la massima
attesa.
• Numeri: possono essere numeri interi (INTEGER) o numeri con cifre decimali (FLOAT)
• Date: possono indicare il giorno (DATE, come 2011-08-13), l’ora (TIME, come 15:10:20), o il giorno + ora
(TIMESTAMP, come 2011-08-13 15:10:20).
• Valori booleani: sono per esempio vero/falso, uomo/donna, 1/0. Indicati con BOOLEAN.
Tutti i tipi di attributo possiedono normalmente un valore comune corrispondente alla situazione in cui in realtà il valore
per l’attributo manca, non è noto → può essere necessario inserirlo ugualmente nel database lasciando “vuoto”
l’attributo, il valore da utilizzare è NULL. Non occorre specificarlo, viene dato per scontato, mentre se vogliamo impedire
che accada possiamo specificare NOT NULL.
1. Relazioni uno-a-uno: ogni ennupla della prima tabella è associata a una ennupla della seconda, ma non vale
viceversa;
2. Relazioni uno-a-molti: ogni ennupla della prima tabella può essere associata a tante ennuple della seconda, e
viceversa;
3. Relazioni molti-a-molti: ogni ennupla della prima tabella può essere associata a tante ennuple della seconda
e viceversa.
Relazioni uno-a-uno
È sufficiente indicare in una sola delle tabelle coinvolte il fatto che la relazione sussiste, e il modo in cui capire quali siano
le ennuple da associare. In SQL usando la parola “REFERENCES” e indicando gli attributi che mettono in
corrispondenza le due tabelle.
);
ogni ennupla di tesi fa riferimento alla ennupla di studenti il cui valore matricola è uguale al valore di studente. Poiché
studente fa riferimento alla chiave primaria di un’altra tabella, esso viene anche detto chiave esterna. Relazioni
uno-a-molti
È sufficiente inserire un riferimento che faccia da ponte tra le due tabelle coinvolte. L’unica differenza è che qui la tabella
in cui inserire il riferimento va scelta con un criterio, che consiste nello scegliere la tabella le cui ennuple sono associate
ad una sola ennupla dell’altra.
Corso INTEGER,
ogni esame corrisponde a un solo studente ma non viceversa, per cui sarà la tabella esami ad ospitare il riferimento.
Relazioni molti-a-molti
In nessuna delle due tabelle coinvolte le ennuple sono associate a una sola ennupla dell’altra tabella.
Questo significa che nessuna può ospitare la REFERENCES: si crea una nuova tabella ausiliaria che serva all’unico
scopo di collegare le due tabelle di partenza. Ogni tabella descriverà una coppia di ennuple delle tabelle di partenza che
sono associate.
);
Controlli e vincoli
È possibile richiedere che le istanze delle tabelle (valori associati agli attributi), rispettino vincoli aggiuntivi.
• Vincoli di chiave: PRIMAR KEY rende esplicito che uno o più attributo rappresentano una chiave e indica al
DBMS di segnalare un errore ogni qualvolta l’inserimento di nuovi dati violi questo stato.
• Vincoli referenziali: REFERENCES esplicita le relazioni tra tabelle e attributi e indica al DBMS di controllare
che non ci siano riferimento a vuoto, se la chiave esterna di una ennupla contiene un valore, nella tabella riferita
deve esistere una ennupla avente tale valore come chiave.
• Vincoli di attributo: è possibile indicare un insieme di condizioni che fa uso degli attributi della tabella e il
sistema controllerà che ogni nuova ennupla verifichi tutte le condizioni. Possono essere specificati al termine
della CREATE TABLE con la sintassi CHECK(condizione).
Inserimento manuale
È utile se vogliamo inserire una singola ennupla.
La sintassi è:
indica che vogliamo inserire una ennupla composta dai valori indicati.
Inserimento da interrogazione
• Importare dati da un foglio elettronico: lo strumento per foglio elettronico è chiamato “Calc”. Selezioniamo
nel foglio elettronico la porzione di tabella che vogliamo trasportare sul database e la copiamo (Control+C o
Copia) facendo attenzione ad includere anche l’intestazione della tabella. Quindi ci spostiamo sul pannello
“Tabelle” e incolliamo. Scegliere un nome per la tabella e selezionare l’opzione “Definizione e dati”, quindi
premere “Avanti”. Scegliere quali attributi portare nel database. Controllare e modificare i nomi e i tipi degli
attributi che si stanno per importare. Al termine viene chiesto se aggiungere una chiave primaria, cosa che può
essere fatta successivamente.
• Importare dati da un file di testo CVS: il formato più comune è CSV, valori separati da virgole. Base consente
di utilizzare il contenuto come se fosse una tabella come le altre, prima bisogna chiedere di creare una tabella
vuota con gli stessi attributi e collegarla al file CSV. Entrambe le operazioni richiedono di utilizzare l’interfaccia
SQL di Base, per cui menù principale → strumenti → SQL…
Si crea una tabella vuota con gli stessi attributi con la sintassi:
CREATE TEXT TABLE “temporanea” (“id” integer, “nome” varchar(20);
Collegare la tabella al fine che contiene i dati con la sintassi:
SET TABLE temporanea SOURCE “tabella.csv”
Una volta che abbiamo i nostri dati all’interno del sistema il prossimo passo è estrarli per poter iniziare le analisi. Il caso
base è quello in cui una tabella contiene già tutti gli attributi di cui si necessita, è necessario selezionare solo le righe di
cui siamo interessati e proiettare solo gli attributi necessari per l’analisi.
Le operazioni necessarie portano il nome di selezione e proiezione. Introdurremo il concetto di distinct (operazione SQL
utile in casi di selezione/proiezione combinata su campi che non contengono identificativi unici). Passeremo alla
combinazione di più tabelle con prodotto cartesiano e join. Operatori base
Parallelismo con algebra: la somma è un operatore ce viene applicato su numeri e restituisce altri numeri, un’ipotetica
somma di tabelle può essere applicata a due tabelle con gli stessi attributi rispettivamente contenenti due e tre righe e
ritornare ad un’unica tabella estesa in cinque righe.
Come nell’algebra aritmetica è possibile definire un insieme di operazioni in sequenza (espressione), anche gli operatori
dell’algebra per tabelle possono essere combinati in sequenze di espressioni più complesse. L’algebra per tabelle è un
insieme di operatori dotati di una sintassi e semantica astratta proprie. La sintassi e la semantica che andremo a
presentare non vanno confuse con i corrispondenti comandi SQL che saranno riportati in parallelo, SQL è dotato della
propria sintassi a cui fa corrispondere risultati equivalenti a quelli degli operatori dell’algebra per tabelle.
Selezione
La funzione della selezione è selezionare alcune ennuple di una tabella che soddisfano una condizione scartando le
altre. L’operatore di selezione è monadico o unario: permette di agire su una sola tabella. Data una tabella e una
condizione, l’operatore di selezione restituisce una tabella popolata da tutte e sole le ennuple della tabella originale che
soddisfano la condizione (questa è un’espressione booleana, in quanto ha due risultati: vero se la combinazione di
condizioni è positiva, falso altrimenti).
Espressioni booleane: producono come risultato un valore booleano (vero o falso). I più comuni in ambito di database
sono AND, OR, NOT, ma ne esistono tanti altri come XOR, NOR, NAND ecc.
Il simbolo con cui nell’algebra per tabelle si indica l’operatore di selezione è σ. La sintassi prevede che la condizione
venga scritta come pendice dell’operatore, mentre la tabella su cui viene applicato l’operatore viene racchiusa tra
parentesi.
StudentiTriennio = σciclo=’laurea tr.’Studenti → sintassi dell’operazione che seleziona tutti gli studenti del triennio dalla
sabella Studenti. Alla sintassi astratta dell’algebra per tabelle corrispondono precise operazioni SQL in genere
chiamate interrogazioni. L’interrogazione base è detta SELECT, questa non necessariamente opera una selezione
dei dati. Utilizzando una SELECT è possibile anche eseguire altre operazioni come una proiezione.
La forma base è:
<tabella>
Dove lista attributi è un elenco di attributi di una tabella, e tabella è la tabella su cui intendiamo applicare gli operatori.
L’elenco può essere sostituito dal simbolo * che simboleggia tutti gli attributi della tabella.
Qui nessun operatore selezione è stato applicato, è necessario aggiungere alla SELECT la condizione mediante
l’operatore SQL WHERE:
FROM <tabella>
WHERE <condizione>
Proiezione
È la seconda operazione base, la sua funzione è estrarre alcune colonne dalla tabella in esame. È anche questa un
operatore monadico. La sua sintassi è più semplice della selezione, in quanto non prevede la definizione di
un’espressione booleana e non prevede anzi nessuna espressione. Definire la lista degli attributi rilevanti per l’analisi e
elencarla è l’unico requisito dell’operatore.
Il simbolo con cui si indica è π. La sintassi prevede che la lista di attributi che si intende proiettare venga scritta nella
stessa posizione dell’espressione booleana per la selezione mentre la tabella su cui viene applicato l’operatore è
racchiusa tra parentesi.
ElencoNomi = πcognome,nome (Studenti) → sintassi che selezione il cognome e il nome di tutti gli studenti.
L’operazione di proiezione viene eseguita all’interno dell’operatore SELECT (il simbolo * detto wildcard è una forma
contratta per indicare al database di non effettuare alcuna proiezione)
FROM Studenti
Distinct
Se fosse necessario evitare di ottenere ennuple duplicate, l’operazione distinct serve a questo. È anch’essa un operatore
monadico, e non è necessario per l’operazione distinct né una condizione né una lista di attributi.
La sua sintassi nell’algebra per tabelle: viene rappresentato dal proprio nome DISTINCT(R).
SELECT DISTINCT*
FROM Studenti
Sono stati ideati degli operatori la cui funzione è quella di combinare insieme più tabelle restituendo un’unica tabella sulla
quale è poi possibile applicare gli applicatori di base in una logica simile a divide et impera → metodologia generale per
realizzare un calcolo complesso che consiste nel dividere il calcolo in tanti problemi di calcolo più piccoli le cui soluzioni
possono essere facilmente combinate per ottenere il risultato del problema iniziale. Prodotto cartesiano
L’operatore più semplice tra quelli il cui scopo è unire i dati provenienti da più tabelle. Date due tabelle restituisce una
tabella nota come istanza del risultato composta da tutte le possibili combinazioni delle righe di una tabella con le righe
dell’altra. Data una tabella con le righe A e B e una con le righe C e D, il risultato è una tabella con le righe: AC, AD, BC,
BD.
È un operatore diadico o binario: richiede due tabelle per poter essere seguito.
La sintassi con cui nell’algebra per tabelle si indica è, date le ipotetiche tabelle R e S: R x S.
Le due tabelle possono avere una lista di attributi diversa: non solo il numero di righe della tabella risultato sarà
equivalente al prodotto del numero di righe delle due tabelle, ma anche la lista di attributi del risultato sarà diverso. →
equivalente alla somma del numero di attributi delle tabelle.
SELECT*
Il risultato tuttavia può essere sbagliato per la maggior parte degli scopi, e occuperebbe una quantità di spazio non
richiesta. Dobbiamo quindi raffinare l’operazione, dato che il risultato del prodotto cartesiano è una nuova singola tabella,
possiamo applicare le operazioni precedenti.
La selezione per conservare solo le righe che associano il professore al suo numero → garantito dalle righe che
presentano lo stesso valore negli attributi “cod” (chiave primaria) e “professore” (chiave esterna).
σcod=professore(Professori x Numeri)
La proiezione per ottenere solo le informazioni rilevanti per i nostri scopi, ci interessano solo nome e numero:
Πcognome,nome,numero(σcod=professore(Professori x Numeri))
E non necessita di distinct in quanto nessun professore omonimo condivide lo stesso numero.
Join
Durante l’esecuzione di un comando join, la condizione della selezione viene verificata contestualmente durante la
combinazione del prodotto cartesiano. È un operatore diadico o binario. In aggiunta alle due tabelle bisogna specificare
anche una determinata condizione: espressione booleana come la condizione di una selezione, ma generalmente
accettata come una verifica di uguaglianza tra due attributi delle tabelle oggetto dell’operazione di join, che serve a
verificare l’integrità del risultato che si vuole ottenere permettendo di unire le ennuple che sono davvero corrispondenti
tra di loro. È necessario inoltre che gli attributi confrontati siano dello stesso tipo.
La traduzione della sintassi algebrica in SQL è naturale, una buona abitudine (best practice): può capitare che due
tabelle condividano alcuni attributi con lo stesso nome ma non necessariamente con gli stessi valori: è bene anteporre
sempre all’attributo a cui ci si riferisce anche il nome della tabella a cui appartiene seguito da un punto.
SELECT*
ON Professori.cod = Numeri.professore
Inoltre combinare complesse espressioni booleane è utile anche quando si rivela necessario effettuare join complesse:
join è un prodotto cartesiano seguito da una selezione, è possibile combinare in congiunzione tutte le condizioni delle
join da effettuare.
Unire tabelle “Studenti” “Professori” e “Corsi”. → la risultante interrogazione assume la complessa relazione multipla che
segue: Studenti ►◄Studenti.relatore= Professori.cod Professori ►◄Corsi.docente= Professori.cod Corsi. In SQL:
SELECT*
FROM (Studenti JOIN Professori ON Professori.cod = Studenti.relatore) JOIN Corsi ON Corsi.docente = Professori.cod o
SELECT*
Operatori insiemistici
Si rappresentano in algebra relazionale con i simboli classici matematici:
Unione AUB, Intersezione A∩B, Differenza A – B. Si possono applicare solo a quei casi in cui A e B sono due tabelle
aventi lo stesso schema, gli stessi attributi o lo stesso numero di attributi i quali hanno ordinatamente gli stessi tipi. Nel
caso dell’unione, il risultato conterrà tutte le ennuple che appartengono ad A e B. Nell’intersezione, solo le ennuple che
compaiono in entrambe le tabelle. La differenza, conterrà solo le ennuple di A che non compaiono in B.
Il corrispettivo in SQL è UNION, INTERSECT e EXCEPT o MINUS. Questi sono utilizzabili esclusivamente per
combinare i risultati di due SELECT quindi la sintassi base sarà:
WHERE <condizioni>
UNION
WHERE <condizioni>
In modo analogo per quanto riguarda intersezione e differenza. Non è possibile utilizzarli direttamente nelle clausole
della SELECT.
Selezione:
• Aprire lo strumento che permette di agire sulle tabelle Inserisci → Ricerca (Vista struttura).
• Apparirà una finestra con l’elenco delle tabelle, selezioniamo la tabella “Studenti” premendo su “Aggiungi” e su
“Chiudi”.
• Selezioniamo dal menù la tendina “Campo” → “Studenti.ciclo”.
• Togliamo il segno di spunta dall’opzione visibile e inseriamo come criterio la stringa “laurea triennale”.
• Selezioniamo “Studenti.*” dall’opzione “Campo”.
• Utilizzando il tasto F5, si esegue l’interrogazione.
Proiezione:
Join:
• Selezionare l’attributo primario su cui vogliamo definire la join e trascinarlo sopra l’attributo destinazione della
tabella oggetto della join.
• La relazione tra le due tabelle adesso è definita e basta usare F5.
• Per eliminare la relazione basta selezionare la linea tra le due tabelle e premere il tasto Canc.
Possiamo salvare l’interrogazione premendo “File”. Con un doppio click otteniamo il suo risultato, è possibile modificarla
con il tasto destro selezionando Modifica. Le viste sono utilizzabili nel comporre interrogazioni esattamente allo stesso
modo delle tabelle. Gli operatori insiemistici non sono supportati dall’interfaccia grafica di Base, per comporre
un’interrogazione in cui sono necessari si dovrà ricorrere alla “Vista SQL”. Analisi di una base di dati
Analizzare una base di dati significa estrarre dai dati a disposizione dei riassunti che ne mettono in evidenza alcuni
aspetti interessanti. Si può tradurre nell’estrazione di semplici statistiche che descrivono i valori di alcuni attributi, oppure
di vere e proprie distribuzioni dei dati.
FROM MisureTerreni
Assumiamo che la tabella “MisureTerreni” contenga almeno gli attributi “Larghezza” e “Lunghezza” relativi ad
appezzamenti di terreno. È sufficiente inserire un’espressione matematica tra l’elenco degli attributi selezionati. “AS
nome_attributo” per assegnare all’attributo calcolato un nome.
Lo stesso procedimento si può applicare al caso in cui gli attributi da combinare siano collocati in diverse tabelle tra loro
collegate. L’interrogazione dovrà preoccuparsi di congiungere tramite join le tabelle in questione, per poi costruire gli
attributi calcolati in modo analogo a quanto fatto da una sola tabella.
Un attributo calcolato può essere ottenuto facendo uso di diversi possibili operatori:
• Attributi numerici: la maggior parte delle funzioni matematiche standard sono disponibili in SQL.
• Attributi booleani: i valori possono essere combinati con i connettivi logici standard già visti per le condizioni
delle clausole WHERE: AND, OR, NOT. Un valore booleano può essere calcolato anche a partire da attributi
non booleani tramite gli operatori di confronto es <.
• Attributi di tipo data: sono definite diverse funzioni sventi scopo di estrarre parti di data o confrontarle.
EXTRACT (part FROM attributo_data) consente di estrarre da “attributo_data” la componente “part”, che può
essere YEAR, MONTH, DAY, HOUR, MINUTE, SECOND. DATEDIFF (“time_unit”, data_1, data_2) che
estrae la differenza tra data_2 e data_1 con l’unità di misura indicata in time_unit che può essere secondi ss,
minuti mi, ore hh, giorni dd, mesi mm, anni yy.
• Attributi di tipo stringa: complicate e usate in casi particolari. La più semplice SUBSTRING(stringa,n,1),
estrae dalla stringa la sequenza di caratteri che parte dal n-esimo carattere ed è lunga 1 caratteri.
Operatori di aggregazione
Se le operazioni viste precedentemente consentivano di combinare i valori della tabella in modo orizzontale, quelle che
vediamo ora consentono una combinazione verticale: colonna per colonna. La sintassi generica: SELECT operatore
(attributo)
FROM …
WHERE …
Possiamo contare tre tipologie di aggregazione:
1. COUNT ([DISTINCT] attributo): conta il numero di valori incontrati nella tabella per uno specifico attributo. Se
vogliamo contare il numero di studenti del database possiamo farlo contando le matricole:
I diversi operatori possono essere utilizzati in combinazione in una stessa interrogazione come per calcolare
contemporaneamente voto minimo, massimo e medio agli esami:
FROM Esami
Potremmo essere interessati a calcolare il numero di esami sostenuti e il voto medio complessivo ottenuto da tutti gli
studenti nati dal 1977 in poi:
e filtraggio
Raggruppamento
SQL consente di suddividere le ennuple di una tabella in gruppi e calcolare per ognuno gli aggregati che ci interessano.
Calcolare il voto medio di ogni studente richiede di raggruppare le ennuple di “Esami” in base allo studente, e su ogni
gruppo calcolare la media.
FROM tabella
WHERE …
Gli attributi sono detti di aggregazione. Il risultato conterrà una ennupla per ogni combinazione di valori degli attributi di
aggregazione. I valori saranno quelli degli attributi di aggregazione più il risultato degli aggregati calcolati sul gruppo di
ennuple che gli corrispondono.
Filtraggio
Può essere utile filtrare i risultati dell’aggregazione, nello stesso modo in cui la clausola WHERE consente di filtrare le
ennuple della tabella.
FROM tabella
WHERE …
Condizione andrà a descrivere quali valori degli attributi e degli aggregati sono interessanti e quindi devono essere
selezionati. Aggiungendo la clausola HAVING AVG(Esami.Voto) > 25, selezioniamo solo le coppie studente, voto_medio
maggiore di 25.
Esistono funzionalità in SQL aventi lo scopo di rendere il risultato di un’interrogazione più leggibile per l’utente:
Ordinamento
L’intero linguaggio SQL è definito per essere indipendente dall’ordine, ma l’utente che voglia ispezionare il risultato di
un’interrogazione si trova spesso disorientato. SQL prevede un costrutto che permette di specificare l’ordine in cui il
risultato verrà presentato all’utente:
tabella
Il significato è che le ennuple dovranno essere ordinate in ordine crescente rispetto ad attr_ord_1. Tutti gli attributi nella
clausola ORDER BY devono essere presenti in tabella, non è indispensabile che siano presenti nella clausola SELECT.
Possiamo quindi selezionare il nome e cognome degli studenti e ordinarli per data di nascita senza che questa compaia
nel risultato.
SELECT Studenti.Cognome,Studenti.Nome
FROM Studenti
Di base l’ordinamento avviene in senso crescente, per essere invertito si aggiunge “DESC” dopo il nome dell’attributo
interessato.
Ridenominazione
La clausola SELECT consente di effettuare ance la ridenominazione degli attributi: assegnare ad ogni attributo un
nome a piacimento che andrà a sostituire quello precedentemente assegnato.
Esempio:
FROM Esami
GROUP BY Esami.Studente
HAVING COUNT (*) >10 AND AVG (Esami.Voto) >= 27 AND MIN (Esami.Voto) >= 25
Le ridenominazioni agiscono al termine ultimo della valutazione dell’interrogazione, quindi i nuovi nomi non possono
essere utilizzati nel resto dell’interrogazione, inclusa la clausola HAVING. Lo stesso vale per la clausola WHERE.
SELECT*
FROM Esami
LIMIT 10
Una delle caratteristiche più importanti del foglio di calcolo è la possibilità di organizzare i dati in tabelle per effettuare
calcoli o estrarre informazioni implicite, statistiche e aggregati. Un esempio in cui il foglio elettronico può contribuire
efficacemente alla soluzione di problemi:
• L’amministratore di una catena di supermercati riceve periodicamente un report con le vendite e gli incassi dei
suoi punti vendita. Dalle analisi di questi vuole determinare quali sono i primi 10 punti vendita con incassi
maggiori, quali sono le regioni in cui le vendite dei prodotti alimentari sono aumentati rispetto a quelli per la
pulizia per la casa e determinare i punti vendita con il tasso di crescita sulle vendite più alto rispetto a tutti gli
altri.
La prima riga contenente i nomi degli attributi della tabella, è differenziata dalle altre tramite uso di un font in grassetto e
una riga inferiore usata per separare le celle seguenti. Le celle per esempio che contengono numeri superiori alle
migliaia sono formattate per inserire il punto automaticamente come separatore delle migliaia. La rappresentazione del
separatore decimale e di quello delle migliaia avviene con un punto per quest’ultimo e una virgola per il primo, se si usa
un programma con interfaccia in italiano, ma accade esattamente il contrario con interfaccia inglese.
Il contenuto di una cella può essere un valore semplice (si seleziona la cella e si inserisce con la tastiera), o un valore
calcolato, che si distingue dall’inserimento di “=” come primo carattere. Con il foglio di calcolo è possibile fare
riferimento al valore di altre celle del foglio per eseguire calcoli e funzioni complesse. Al contenuto di altre celle nel foglio
di calcolo, attraverso un metodo di riferimento basato sulla coppia [lettera colonna, numero di riga].
Supponiamo di aver definito una formula che fa riferimento a una cella del foglio, se è copiata orizzontalmente il
riferimento della colonna viene incrementato o diminuito a seconda della direzione. Nella copia lungo la direzione
verticale viene mantenuto invariato il riferimento alla colonna e incrementato solo il numero della riga. Questo
riferimento viene detto riferimento relativo perché dipende dalla posizione in cui viene utilizzato. Quando un riferimento
viene copiato da una cella all’altra, il foglio elettronico ricalcola la cella da riferire utilizzando le coordinate determinando
così la nuova posizione. La formula è definita su valori di una singola riga. Per ripetere il calcolo per tutti i valori della
seconda colonna è sufficiente cliccare sul quadratino in basso a destra della cella con la formula appena inserita e
trascinarlo in basso fino all’ultima riga di interesse. → estensione di una cella. A volte è necessario far riferimento a
una cella con valore assoluto: che non viene aggiornato durante la copia o il riposizionamento di una formula. Una delle
motivazioni più comuni per questo è l’uso di un valore unico per tutto il foglio. Si usa il simbolo $ davanti a una o
entrambe le coordinate di riferimento della cella. Per ritrovare velocemente le celle riferite all’interno di una formula è
possibile utilizzare un sistema di evidenziazione visuale: cliccando sull’area di testo per modificare la formula le cellule
riferite vengono colorate con colori distinti per una più veloce individuazione.
Esistono anche funzioni che operano su un insieme di valori come le funzioni di aggregazione, per fare riferimento a un
range di celle si sfrutta la rappresentazione tabellare per indicare un rettangolo che contiene tutti i valori, definito dal
riferimento della cella in alto a sinistra e dal riferimento della cella in basso a destra separati da “:”.
1. Se si conosce la sintassi si può scrivere direttamente all’interno della cella iniziando l’inserimento con il simbolo
=, “=MEDIA(B2:B118).
2. Se non si conosce la sintassi si utilizza una configurazione guidata basata su una finestra di dialogo. Si
seleziona l’intervallo di celle su cui applicare e poi si avvia il processo dall’apposito bottone Fx.
Strumenti software per il foglio elettronico
Gli strumenti software disponibili sul mercato offrono tutte le funzionalità basilari del foglio. Uno dei principali è Microsoft
Excel, all’interno della suite Microsoft Office. OpenOffice si è dimostrato subito un valido strumento capace di offrire le
funzionalità comparabili a quelle dei prodotti software commerciali.
Interfaccia grafica
La finestra di un foglio elettronico adotta uno stile che si integra con gli altri strumenti della suite OpenOffice. La barra
degli strumenti contiene una serie di bottoni che permettono accesso veloce alle funzionalità più usate:
• Il primo gruppo di bottoni è per la gestione del file, aprire/salvare un file/spedirlo via mail. Il primo bottone
permette di creare un nuovo file.
• Il gruppo successivo contiene le funzionalità per esportare il file su PDF o stamparlo in una stampante.
• Il gruppo di modifica dei contenuti offre le funzionalità di base per copiare/tagliare/incollare e gestire eventuali
errori.
• Il gruppo di bottoni di integrazione con OpenOffice offrono diverse funzionalità per esportare il documento verso
altre applicazioni della suite.
• Il gruppo per la formattazione del testo offre le funzionalità di base per scegliere il tipo di carattere, dimensione,
allineamento.
• I gruppi dedicati alle funzioni del foglio di calcolo sono evidenziati in verde: il primo contiene i bottoni per le
funzioni di ordinamento veloce e il bottone per la creazione guidata dei grafici. L’altro i bottoni utili per la
formattazione delle celle.
L’area di lavoro è la parte che contiene l’insieme delle celle del foglio elettronico e la barra di modifica delle formule.
Nella parte superiore sinistra è presente la selezione del nome della cella. Ogni cella può essere riferita attraverso un
indirizzo ottenuto dalla concatenazione della lettera della colonna e del numero di riga corrispondente. Quest’area
mostra il riferimento alla cella o all’insieme di celle selezionate. Il nome dell’area può essere modificato per assegnare
un’etichetta mnemonica a una selezione per poterla più facilmente riferire in seguito. La barra di inserimento presenta un
bottone per avviare la creazione guidata di una funzione. La casella di testo contiene la formula o il valore della cella
selezionata. Quest’area permette anche di esplorare visivamente le funzioni e formule più complesse attraverso una
evidenziazione delle celle coinvolte: ogni riferimento all’interno della formula viene associato a un colore distinto che
viene riportato sulla cella corrispondenti sul foglio di calcolo. La parte inferiore dell’area di lavoro contiene i selettori per i
fogli elettronici contenuti nella cartella di lavoro.
La barra di stato contiene una serie di aree con informazioni sullo stato corrente della cartella di lavoro. L’area con le
statistiche per esempio, offre di default la visualizzazione della funzione stile formula. Quest’area applica la funzione
all’insieme di celle selezionate. È anche possibile modificare la funzione scegliendone una da un elenco.
Grafici e diagrammi
Uno degli obiettivi dell’analisi dei dati è la comprensione di fenomeno, tendenze, correlazioni. Un’opportuna
formattazione e visualizzazione dei dati può fornire un punto di vista che metta in evidenza proprietà nascoste.
OCalc supporta una libreria di grafici che permettono di rappresentare graficamente un insieme di valori. La creazione di
un grafico è strutturata con un processo che comincia con la selezione dei dati da visualizzare, scelta del formato grafico
da utilizzar e visualizzazione/aggiustamento dei parametri grafici. La scelta del tipo di grafico dipende dal contesto e
dagli obiettivi.
Le variabili sono:
Variabili numeriche (quantitative) Variabili categoriche (qualitative)
Discrete: se i valori distinti sono limitati (numero figli) Ordinali: se esiste un ordinamento naturale sui valori
(giudizi scolastici)
Continue: se sono il risultato di una misura continua Nominali: nel caso in cui l’ordinamento non esista
(guadagno lordo per anno)
Operatore di ordinamento
Nel foglio elettronico è molto semplice da utilizzare. Per ordinare secondo un solo attributo è sufficiente selezionare una
cella qualunque nella colonna da utilizzare come criterio di ordinamento e premere il pulsante “Ordina in modo
crescente”, o decrescente, dalla barra degli strumenti OCalc. Invece per effettuare un ordinamento annidato su più
attributi occorre utilizzare la finestra di dialogo per l’ordinamento (Dati → Ordina), e qui è possibile scegliere la sequenza
di attributi da utilizzare per l’ordinamento e, per ogni attributo, il verso di ordinamento.
Indicatori di centralità
Media aritmetica
Utilizzata per riassumere in modo approssimato un insieme di valori distinti, in campi molto diversi. In OCalc la media per
un insieme di valori viene calcolata dalla funzione MEDIA(valori), i valori passati alla funzione devono essere ovviamente
numerici, quelli non numerici vengono ignorati.
Mediana
È il valore centrale del campione, calcolata ordinando tutti i valori e prendendo l’elemento centrale se la distribuzione è
dispari, o se è pari, la mediana sarà la media dei due valori centrali. In OCalc la funzione per il calcolo è
MEDIANA(valori), la funzione prende in input l’insieme di valori anche non ordinati. È meno sensibile della media, ai
valori anomali del campione.
Moda
La moda fornisce il valore con frequenza più alta nel campione (ripetuto il maggior numero di volte). In OCalc la funzione
per il calcolo è MODA(valori).
Indicatori di variabilità
Gli indicatori di variabilità danno una stima di quanto sia estesa la scala considerata, quanto ampia è la gamma di valori
presenti nel campione.
Massimo e minimo
Forniscono il range di variabilità di un attributo, coincidono con l’equivalente espressione utilizzata nel linguaggio comune
per identificare il più alto e il più basso valore di un insieme. In OCalc vengono calcolati da MAX(valori) e MIN(valori).
Quantili e percentili
Il quantile è un valore che divide una popolazione statistica in due parti, le cui cardinalità sono proporzionali a un fattore
q nell’intervallo. Una partizione contiene tutti i valori minori del q-esimo elemento in ordine crescente, l’altra contiene tutti
gli altri valori. Nel caso in cui il fattore di partizionamento si esprime in percentuale, l’ordine di partizione viene detto
percentile.
Alcuni quantili assumono nomi particolari, è il caso della mediana, e dei quartili, una famiglia di quantili che si basano
sulla divisione del campione statistico in quarti.
Misure di frequenza di attributi
Una tabella di frequenze è una rappresentazione aggregata dei valori di una variabile con una serie di categorie
ordinate. Per determinarla è necessario avere una variabile discreta, nel caso sia continua è possibile applicare la
procedura di discretizzazione (valori originali → range di valori detti bin), intervalli. OCalc fornisce una funzione per
calcolare una tabella di frequenza: FREQUENZA(Dati, Classi)* dove Dati è il riferimento di valori input e Classi è un
insieme ordinato di valori che descrivono il massimo per ogni intervallo dei bin desiderati. Questo tipo di tabella viene in
genere visualizzata per mezzo di un diagramma a barre.
• Ignorare le righe incomplete: eliminazione dell’intera riga con l’errore, quando i valori non congrui sono molto
minori rispetto alle dimensioni della tabella.
• Ripristinare manualmente il valore: quando i mancanti sono pochi l’analista può ripristinare i mancanti sulla
base dell’esperienza.
• Sostituire il valore con una costante: lasciare vuoto il campo mancante attraverso l’annotazione esplicita con
una costante.
• Sostituire il valore con il valore medio: in caso di variabile numerica, valori mancanti possono essere
sostituiti con la media dei rimanenti valori.
• Registrare il database su OpenOffice: processo effettuato una sola volta, successivamente anche se viene
modificato non è necessario aggiornare.
• Importare i dati da un database registrato: i dati contenuti possono essere importati in un foglio elettronico
trasformando la tabella relazionale in una tabella del foglio automaticamente.
Registrazione di una base di dati
Una volta aperto il foglio, accedere alle opzioni attraverso la voce di menu Strumenti → Opzioni. Da qui selezionare
“OpenOffice.org Base” → “Database”. Poi “Nuovo”, da qui inizia un percorso per individuare la posizione del file e la
scelta di un nome mnemonico. Una volta confermata la registrazione, il database verrà aggiunto alla lista della finestra
precedente.
Per importare i dati da un database registrato a un foglio elettronico, accedere alla base di dati del foglio elettronico.
“Visualizza” → “Sorgenti Dati”. Il box sulla sinistra mostra i database disponibili, ad ogni selezione degli oggetti nella
parte destra si visualizza un’anteprima. Selezionata una tabella si trascina l’icona o il titolo sopra il foglio di calcolo.
Analisi avanzate: il datawarehouse
È uno strumento che permette di integrare e memorizzare in modo efficiente diverse sorgenti di dati in un unico servizio.
I dati vengono trasformati e consolidati in modo da fornire risposte efficienti su enormi quantità di dati. Si basa su una
finestra temporale di elaborazione che copre diversi anni, è quindi necessario ridurre le informazioni mantenendo solo le
informazioni necessarie alle aggregazioni e analisi. Nel datawarehouse non importa il dato di per sé come lo specifico
prodotto venduto in un negozio, quanto la quantità totale di quel prodotto venduta in un punto vendita.
Il primo passo per la progettazione e creazione di un datawarehouse è individuare le sorgenti informative. L’integrazione
non riguarda la semplice aggregazione dei dati ma richiede passaggi intermedi. I dati individuati come sorgente,
vengono trasformati, ripuliti delle informazioni superflue o non utili. A volte può essere utile modificare il formato dei dati
o mettere i dati in correlazione quelli provenienti da altre sorgenti.
L’entità centrale è una tabella di fatti, un fatto è diverso da un record di una tabella perché è necessario che non
contenga dettagli di una singola osservazione ma solo le proprietà generali. Dall’insieme dei fatti è possibile determinare
un sottogruppo con caratteristiche comuni per analizzarlo. Il datawarehouse permette di definire una dimensione, uno o
più attributi del singolo fatto organizzati in modo da rendere possibile un’aggregazione specifica di insieme di fatti.
Questo raggruppamento sarebbe troppo limitativo per le reali analisi, per questo nasce l’esigenza di definire le gerarchie
sulle dimensioni, in modo da avere delle aggregazioni differenziate per livelli per ogni dimensione. Questa gerarchia
permette di utilizzare l’aggregazione più opportuna rispetto alla porzione in analisi. Una delle caratteristiche potenti delle
gerarchie è la possibilità di combinare diversi livelli di dimensioni diverse durante la stessa interrogazione. Una volta
aggregati i fatti che si vogliono analizzare è necessario definire delle misure statistiche per comprenderne le proprietà e
le tendenze.
Per ottimizzare le prestazioni il datawarehouse può precalcolare le misure utilizzate più spesso mantenendo degli
aggregati intermedi che possono essere utilizzati per calcolare un aggregato di dimensione più grande.
Per esempio, l’informazione temporale identifica uno specifico piano del cubo, la selezione del prodotto seleziona una
colonna, la selezione del negozio una facciata.
Il cubo permette di definire delle trasformazioni su porzioni del cubo stesso per aggregare o dettagliare meglio alcune
parti:
• Roll up: i dati di una dimensione vengono aggregati e riassunti utilizzando un livello della gerarchia di una
dimensione più generale. Nella rappresentazione del cubo, questa operazione consiste nell’aggregare più
cubetti della stessa colonna in un box più alto che copre i sette giorni della settimana.
• Drill down: si passa da un livello di una dimensione generale a uno più dettagliato. Corrisponde a dividere un
singolo cubetto in tanti box più piccoli: esempio uno per ogni ora del giorno.
• Slice and dice: selezionare delle porzioni più piccole del cubo specificando opportunatamente alcuni intervalli
di valori per ogni dimensione. Equivale a scegliere un insieme di colonne o righe contigue ignorando le altre.
Tabelle DataPilot
Esistono tanti sistemi per la gestione di un datawarehouse che supportano le operazioni sul cubo OLAP. Gli strumenti di
analisi forniti dalla navigazione OLAP permettono di effettuare analisi complicate anche con pochi click. OCalc permette
la creazione del cubo OLAP chiamato DataPilot in OCalc o tabella Pivot in Excel. A partire da una tabella, l’utente può
scegliere quali attributi mappare in quali dimensioni e le funzioni di aggregazione per i fatti. Le funzioni per le misure
sono le solite per gli insiemi di celle. La tabella DataPilot organizza il cubo o le misure su di esso, in una tabella a due
dimensioni formattata per descrivere la gerarchia di dimensioni che ogni cella rappresenta. La zona “Campi della pagina”
della finestra di composizione della tabella permette di specificare dei campi da inserire nel cubo ma che non vengono
utilizzati: possono essere utilizzati come filtri, selettori per le operazioni slice and dice.
Una volta aperta la tabella, selezionare il menu Dati → DataPilot → Avvia. Selezionare la sorgente dati per il cubo, dato
che abbiamo già caricato la tabella utilizziamo la selezione corrente. Il passo successivo è l’organizzazione degli attributi
nelle opportune dimensioni. Il processo è semplice si basa sulla composizione degli attributi tramite selezione con il
mouse, trascinando i box degli attributi nelle opportune posizioni. La tabella viene inserita automaticamente in un nuovo
foglio di lavoro. Una volta creata la tabella è possibile modificare composizione degli attributi per aggiungere modificare o
rimuovere le dimensioni. Cliccando con il tasto destro su una qualunque cella della tabella per aprire la finestra di
composizione delle dimensioni.