Sei sulla pagina 1di 20

SAI – Gestione e analisi di dati

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.

Rappresentazione dei dati


La tipologia di DBMS a cui facciamo riferimento sono i database relazionali, con numerosi pregi d’uso:

• 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:

(1) Una collezione di tabelle che contengono i pezzi dell’informazione disponibile


(2) Relazioni tra tabelle che descrivono il modo in cui i pezzi sono logicamente collegati

In alcuni casi tutta l’informazione può essere contenuta in una tabella, in altri è necessario suddividerla in più parti.

Base di dati o database (relazionale): collezione di tabelle

Tabella: collezione di ennuple

Ennupla: collezione di coppie “attributo-valore”, corrispondente a una riga della tabella

Attributo: la colonna della tabella, la posizione all’interno dell’ennupla/riga in cui il valore è inserito Per

rappresentare i dati occorre quindi stabilire:

• Quali tabelle si useranno


• Quali informazioni andranno in ogni tabella
• Quale tipo di valore ogni attributo potrà contenere
• Quali sono i collegamenti esistenti tra le diverse tabelle
Sapendo quali valori potrà contenere ogni attributo un DBMS può utilizzare strutture dati interne che consentono di
risparmiare spazio e/o di recuperare in minor tempo l’informazione che interessa. Conoscere i collegamenti consente
ottimizzazioni dello stesso tipo e permette di verificare per esempio che ogni esame nuovo faccia riferimento a uno
studente realmente esistente.

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.

Utilizzo dei dati


Tipicamente un database viene creato con un obiettivo specifico, che spesso richiede di interrogare il database in modo
sistematico e ricorrente, oltre a consentire sporadiche interrogazioni particolari (per statistiche per esempio).

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 selezione e insiemistiche vanno a modificare il numero di righe.

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.

La comunicazione col database avviene sempre attraverso richieste formulate in SQL.

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.

Sistemi software per basi di dati relazionali


La pervasività dei database va di pari passo con un’offerta ampia di strumenti dedicati allo scopo, offerta anche
dinamica, quindi è estremamente difficile fornire un elenco completo di sistemi ad oggi disponibili. Diremo i più diffusi
separando i prodotti commerciali (devono essere acquistati) dagli open source (senza bisogno di licenze).

Prodotti commerciali:

• Microsoft SQL Server


• Oracle 11g
• IBM DB2
• Microsoft Access: rappresenta un’alternativa leggera nel mondo dei database commerciali, una componente di
Microsoft Office, alla pari di Word e PowerPoint, cerca di fornire come loro strumenti semplici per problemi di
piccole dimensioni. Una caratteristica è vedere un database come un documento che può essere copiato,
spostato, aperto su altri computer.

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.

Prodotti Open source:

• 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.

Faremo riferimento a HSQLDB.

Breve panoramica di OpenOffice.org Base


Inizialmente, Base chiederà di specificare su quale database si vuole lavorare: se nuovo o già esistente, col motore SQL
interno o collegandosi ad un altro DBMS.

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.

Creazione e popolamento tabelle


• Lo strumento di Base per inserire comandi SQL che modificano lo schema del database si presenta come un
pannello in cui si inserisce il testo. Nel meno strumenti SQL, per esempio viene scritto “CREATE TABLE” per
aggiungere una tabella allo schema. Con il solito pannello si può inserire/modificare/cancellare ennuple in una
tabella, inserire = INSERT TO nome tabella VALUES (valori da inserire).
• Gli strumenti grafici per creare una tabella si invocano selezionando “Tabelle” nel riquadro “Attività”. Lo
strumento richiede di compilare un modulo in cui si specifica per ogni attributo della tabella quale sia il nome e il
tipo di valori. Per modificare il contenuto è sufficiente aprire la tabella cliccando due volte sul nome, e inserire
manualmente il valore. Per eliminare una o più righe, è sufficiente selezionarle cliccando sulla sinistra delle
righe, per poi cliccare col tasto destro e selezionare “elimina righe”.

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.

Creazione di tabelle e definizione di schemi relazionali

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.

Le principali forme normali sono:

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.

Sintassi SQL per la formazione di tabelle


Una parte di SQL (Data Definition Language) è dedicata ai costrutti che permettono di creare nuove tabelle. Il costrutto
fondamentale è la CREATE TABLE di cui la sintassi:

CREATE TABLE nome_tabella (

Attributo_1 tipo_dati_1 PRIMAR KEY,

Attributo_2 tipo_dati_2,

Attributo_n tipo_dati_n,

PRIMAR KEY (attributo_i, …, attributo_k)

);
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.

Definizione dei tipi di attributo


Gli attributi possono assumere valori appartenenti a una varietà di tipi, resa più ampia da sotto-tipi specifici.

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.

Relazioni tra tabelle


Le relazioni tra coppie di tabelle possono essere classificate in base al numero di ennuple che sono coinvolte da
entrambi i casi, ci sono tre casi:

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.

CREATE TABLE Testi (

CodiceTesi INTEGER PRIMARY KEY,

StudenteINTEGER REFERENCES Studenti(Matricola),

Titolo VARCHAR(60) NOT NULL

);

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.

CREATE TABLE Esami (

Studente INTEGER REFERENCES Studenti(Matricola),

Voto INTEGER NOT NULL,

Corso INTEGER,

PRIMAR KEY(Studente, Corso)


);

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.

CREATE TABLE CorsiAule (

Corso INTEGER REFERENCES Corsi(Codice),

Aula INTEGER REFERENCES Aule(Codice),

PRIMAR KEY (Corso, Aula)

);

la tabella elenca tutte le coppie corso-lezione che sussistono.

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).

Popolare una tabella


Una volta create le tabelle sono vuote, occorre scegliere il modo per inserire i dati.

Inserimento manuale
È utile se vogliamo inserire una singola ennupla.

La sintassi è:

INSERT INTO “nome_tabella” VALUES (“valore_1”, “valore_2”, …, “valore_n”);

indica che vogliamo inserire una ennupla composta dai valori indicati.

Inserimento da interrogazione

La sintassi è simile con la differenza che VALUES viene rimpiazzata dall’interrogazione.

INSERT INTO “nome_tabella” SELECT… FROM… WHERE… ;

Importare dati dall’esterno


Se capita di aver memorizzato altrove dei dati che vogliamo portare nel database ci sono due strade percorribili con il
sistema OpenOffice.org Base:

• 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”

Il file dovrà contenere l’intestazione.

Interrogazione di una base di dati

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.

• A AND B = “true” se sia A che B hanno valore “true”; “false”, altrimenti


• A OR B = “true” se A o B, oppure entrambi hanno valore “true”; “false” altrimenti
• NOT A = “true” se A ha valore “false”, e viceversa.
Ognuna può essere riscritta in tante forme alternative equivalenti.

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 è:

SELECT <lista attributi> FROM

<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:

SELECT <lista attributi>

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)

SELECT cognome, nome

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).

Una sintassi simile anche nelle interrogazioni SQL:

SELECT DISTINCT*

FROM Studenti

Combinare gli operatori base


• Nell’algebra per tabelle, si procede per progressiva applicazione degli operandi.
σciclo=”laurea tr.”(Studenti)
Essa rappresenta una tabella identica alla tabella “Studenti” ma contenente solo le righe che ci riferiscono a
studenti iscritti nel ciclo triennale. Su questa potremmo essere interessati solo all’elenco di nomi e cognomi:
Πcognome,nome(ciclo=”laurea tr.”(Studenti))
La scrittura riflette l’ordine inverso di applicazione degli operandi, l’operando per primo è infatti quello più
interno nella gerarchia della parentesi: l’elemento più interno è sempre una tabella poiché rappresenta la fonte
principale dei dati.
Utilizzando anche l’operatore distinct:
DISTINCT(Πcognome,nome(ciclo=”laurea tr.”(Studenti)))
• Nel linguaggio SQL, l’equivalente avviene per composizione dei pezzi già sovra esposti, non è necessario
preoccuparsi dell’ordine degli operandi ma solo rispettare la posizione sintattica prevista dal linguaggio:
SELECT DISTINCT cognome, nome
FROM Studenti
WHERE ciclo=”laurea tr.”

Operazioni su più tabelle

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.

L’equivalente interrogazione SQL è:

SELECT*

FROM Professori, Numeri

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))

L’equivalente interrogazione SQL è:

SELECT cognome, nome, numero

FROM Professori, Numeri

WHERE cod = professore

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.

L’operatore join è rappresentato, per due tabelle generiche R e S: R►◄condizione S.

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*

FROM Professori JOIN Numeri

ON Professori.cod = Numeri.professore

Selezioni su relazioni multiple


1. Specificare condizioni complesse sulle operazioni di selezione: cosa succederebbe se non volessimo tutti
gli studenti iscritti alla triennale ma solo quelli che hanno già un relatore e anche tutti gli iscritti al primo
anno? Occorre combinare insieme le condizioni differenti.
2. La nostra richiesta informale può essere espressa: σciclo = ”laurea tr.” AND NOT (relatore=NULL)) OR anno =1 (Studenti) 3.
L’equivalente in SQL: SELECT*
FROM Studenti
WHERE (ciclo = “laurea tr.” AND NOT (relatore = NULL)) OR anno = 1

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*

FROM Studenti, Professori, Corsi

WHERE Professori.cod = Studenti.relatore AND Corsi.docente = Professori.cod

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à:

SELECT <elenco attributi>

FROM <tabelle o join/prodotti cartesiani>

WHERE <condizioni>

UNION

SELECT <elenco attributi>

FROM <tabelle o join/prodotti cartesiani>

WHERE <condizioni>

In modo analogo per quanto riguarda intersezione e differenza. Non è possibile utilizzarli direttamente nelle clausole
della SELECT.

Interrogazioni in OpenOffice.org Base


Come eseguire le operazioni algebriche su tabelle attraverso l’interfaccia grafica del Software Base.

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:

• Modificare l’opzione “Studenti.*” sostituendola con “Studenti.cognome”


• Aggiungiamo in una terza colonna l’opzione “Studenti.nome”
• Premendo F5 possiamo verificare come sono state eliminate le colonne ad eccezione del cognome e nome
dello studente Prodotto cartesiano:

• “Ricerca (Vista struttura)”, aggiungiamo due tabelle: Professori e Numeri


• Selezionare come campi “Numeri.*” nella prima colonna e “Professori.*” nella seconda.

• Utilizzare il tasto F5.

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.

Creazione di campi calcolati


Le informazioni presenti nelle ennuple che compongono una tabella sono a volte espresse in termini troppo grezzi per il
tipo di analisi che vogliamo eseguire. Sarebbe quindi utile manipolare i valori di un attributo allo scopo di portarli alla
forma più comoda. In SQL ciò è reso semplice dal fatto che la clausola SELECT consente di specificare non solo gli
attributi presenti nelle tabelle coinvolte nell’interrogazione ma anche attributi artificiali risultati da qualche calcolo.
SELECT Larghezza, Lunghezza (Larghezza* Lunghezza) AS AREA

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:

SELECT COUNT (Matricola)


FROM Studenti
Se vogliamo contare gli studenti che hanno superato almeno un esame
SELECT COUNT (DISTINCT Studente)
FROM Esami
2. MIN(attributo) MAX(attributo): utili per estrarre il valore minimo e massimo assunto da un attributo, utilizzate
nel trattare attributi numerici, ma applicabili anche a date/stringhe di caratteri. Per esempio per sapere lo
studente più giovane del nostro database:
SELECT MAX (Data di nascita)
FROM Studenti
3. SUM ([DISTINCT] attributo) AVU ([DISTINCT attributo): dedicati agli attributi numerici e servono a calcolare
somma/media dei valori di un determiato attributo su tutta la tabella. Per il voto medio degli esami sostenuti:
SELECT AVG (Voto)
FROM Esami
Riconoscono e scartano i valori NULL.

I diversi operatori possono essere utilizzati in combinazione in una stessa interrogazione come per calcolare
contemporaneamente voto minimo, massimo e medio agli esami:

SELECT MIN(Voto), MAX(Voto), AVG(Voto)

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:

SELECT COUNT(*), AVG(Esami.Voto)

FROM Studenti JOIN Esami ON Studenti.Matricola = Esami.Studente

WHERE Studenti.”Data di nascita” > ‘31/12/1976’ Raggruppamento

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.

SELECT attributo_1, …, attributo_n, aggregato_1, …, aggregato_n

FROM tabella

WHERE …

GROUP BY attributo_1, …, attributo_n

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.

SELECT attributo_1, …, attributo_n, aggregato_1, …, aggregato_m

FROM tabella

WHERE …

GROUP BY attributo_1, …, attributo_n


HAVING condizione

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.

Ordinamento, ridenominazione e taglio del risultato

Esistono funzionalità in SQL aventi lo scopo di rendere il risultato di un’interrogazione più leggibile per l’utente:

• Riorganizzare le ennuple che risultano da un’interrogazione in un ordine particolare


• Assegnare agli attributi del risultato dei nomi significativi e comprensibili
• Mostrare solo una piccola porzione del risultato

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:

SELECT attributo_1, attributo_2, …, attributo_n FROM

tabella

ORDER BY attr_ord_1, …, attr_ord_k

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

ORDER BY Studenti.”Data di nascita”

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:

SELECT Esami.Studente AS Studente, COUNT(*) AS NumeroEsami, AVG(Esami, Voto) AS VotoMedio, MIN


(Esami.Voto) AS VotoMinimo

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.

Taglio del risultato


Per controllare la correttezza di una interrogazione SQL risulta utile poter fermare l’esecuzione di un’interrogazione non
appena un sottoinsieme di risultati sufficientemente grande è stato calcolato. Il costrutto LIMIT n, ispezionando la tabella
Esami chiedendo di vederne le prime 10 ennuple:

SELECT*

FROM Esami
LIMIT 10

Introduzione del foglio di calcolo


Sul mercato sono disponibili diverse versioni di prodotti che includono la gestione di un foglio di calcolo come Microsoft
Office, Lotus Smartsuite e OpenOffice.

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.

Rappresentazione tabellare dei dati


Il foglio di calcolo è un’applicazione che permette di eseguire calcoli/analisi su un insieme di dati in tabelle. I software per
gestire i fogli organizzano ogni file (cartella) come un insieme di fogli, dove ognuno contiene una tabella. Ogni tabella è
l’insieme di celle organizzate in righe (identificate da lettere o combinazioni di lettere) e colonne (identificate da numeri
progressivi). La combinazione delle coordinate permette di identificare una cella.

Valori, formule e funzioni, riferimenti


Ogni cella può contenere valori di diverso tipo, la presentazione della cella può essere diversa e alcuni tipi di dati
possono avere formattazioni aggiuntive.

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 “:”.

L’inserimento di una funzione ha due modi:

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.

OCalc dalla suit OpenOffice


I diversi pacchetti software hanno funzioni base comuni a tutti ma ogni prodotto differisce per funzionalità molto
specifiche. Uno degli strumenti avanzati di analisi di dati è la funzionalità di esplorazione e analisi di un cubo OLAP. Ogni
pacchetto usa una propria interfaccia per la gestione dei dati nel cubo.

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.

Statistica di base su foglio elettronico


Gli indicatori statistici permettono di misurare alcune grandezze caratteristiche dei dati per poter valutare il
comportamento del fenomeno osservato.

Introduzione ai concetti statistici


Lo studio di un fenomeno statistico si basa sulla raccolta delle osservazioni del fenomeno, la totalità di queste è la
popolazione statistica. Le valutazioni si basano sull’osservazione di diverse popolazioni, che possono contenere
oggetti/persone reali e virtuali. In Italia l’ISTAT si occupa di analizzare i dati di diverse sorgenti per scoprire evoluzione e
tendenze. Nel caso in cui la popolazione sia troppo grande si ricorre a un sottoinsieme (campione statistico) estratto in
modo casuale o con tecniche mirate di selezione. Ogni elemento della popolazione è un’unità statistica, o
osservazione o caso, associato a un insieme di attributi, o variabili o campi che ne descrivono le proprietà rilevanti.
La popolazione può essere rappresentata in forma tabellare con le variabili rappresentate nelle colonne, le osservazioni
nelle righe e i valori delle variabili nelle celle.

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).

Varianza e deviazione sandard


La varianza fornisce un’indicazione di quanto i valori dell’insieme si allontanino dalla media. Se i valori sono vicini a
questa, lo scostamento sarà piccolo. Lo scostamento è definibile come la differenza, al quadrato, tra ogni elemento e la
media stessa ed è detto anche scarto quadratico. In altre parole rappresenta la media degli scarti quadratici dei valori di
un campione. La deviazione standard è la radice quadrata della varianza. In OCalc si indicano VAR(valori), e
DEV.ST(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.

Preparazione e pulizia dei dati


Le basi di dati spesso presentano difetti e imprecisioni, le cause sono molteplici, ci sono tre grandi categorie di problemi:

• Dati incompleti: valori di una variabile mancano, o manca un attributo


• Presenza di rumore: una variabile presenta valori con errori o outliers
• Inconsistenze: i valori presentano codici o nomi diversi per le stesse entità

Introduzione integrazione dei dati mancanti


Le cause sono molteplici, nel caso in cui i dati vengono inseriti manualmente l’operatore può omettere qualche valore per
incomprensione dei dati o sottovalutazione dell’importanza. Le strategie per ripristinare dei valori mancanti sono diverse
e ognuna dipende dalla gravità delle mancanze e dal contesto:

• 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.

Riduzione del rumore


La presenza di valori non corretti può rovinare il risultato finale dell’analisi. Possono aiutare le analisi statistiche. L’uso
dell’operatore ordinamento, analisi e confronto tra media, mediana e frequenza permettono di identificare il valore errato.

Discretizzazione di una variabile


Il ripristino dei valori errati o mancanti può introdurre alterazioni alle distribuzioni. Un insieme di dati dove il margine di
errore per ogni valore è alto possono essere fuorvianti per i risultati dell’analisi. È utile in questo caso ricorrere a
operazioni di discretizzazione, dove un insieme di valori continui viene trasformato in valori discreti. Può essere fatto
manualmente se i dati da convertire non sono tanti, o automaticamente. Dato che la trasformazione si basa su
un’operazione di confronto dei singoli valori con i valori di riferimento degli intervalli, è possibile utilizzare la funzione SE
del foglio elettronico: SE(Test;SeVero;SeFalso), dove Test è una condizione e i due valori sono restituiti dalla funzione in
base all’esito del test. La discretizzazione si basa sulla codifica degli opportuni confronti utilizzando una serie di valori
come soglie per distinguere un gruppo da un altro. Per ottimizzare il processo si possono utilizzare riferimenti assoluti a
un gruppo di celle contenenti le soglie e poi eseguire la discretizzazione.

Determinare le soglie di discretizzazione


La discretizzazione si basa sulla scelta delle soglie che permettono di distinguere un gruppo di valori da un altro. Per
scegliere opportunamente si possono utilizzare gli indicatori di variabilità, se l’obiettivo è quello di ottenere gruppi con
una cardinalità fissa, è possibile utilizzare i percentili.

Strumenti software per il foglio elettronico


Tutte le operazioni del foglio elettronico finora hanno utilizzato file, formato corretto e direttamente apribili dalla suite. Una
delle funzioni più potenti dei moderni fogli elettronici è la possibilità di connettersi direttamente a una base di dati per
importare e analizzare i dati, senza la necessità di esportarli. L’importazione di una base di dati creata con Base consiste
in due passi:

• 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.

Importazione di una tabella dal database

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.

Fatti, dimensioni, misure


Per individuare le informazioni da inserire nel datawarehouse è necessario effettuare una progettazione. Devono essere
individuate le informazioni elementari, le modalità di aggregazione e le funzioni che forniscono una misura numerica
delle aggregazioni.

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.

Cubo OLAP e operazioni tipiche


Per comprendere meglio il ruolo di ogni dimensione e di ogni gerarchia è possibile immaginare i fatti del datawarehouse
organizzati in un cubo a diverse dimensioni. Considerando tre dimensioni per semplicità, possiamo assegnare ognuna
delle tre a un’asse del cubo. Ogni cubetto rappresenta una singola aggregazione dei fatti. Sugli aggregati si applicano le
funzioni di misura. Possiamo pensare alle misure come delle funzioni statistiche applicate a una colonna o riga del cubo.

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.

Costruzione di una tabella DataPilot in OCalc

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.

Potrebbero piacerti anche