Sei sulla pagina 1di 309

Dipartimento di

Scienze Umanistiche e Sociali

Corso di Informatica Umanistica

docente: Bilò Davide

e-mail: davidebilo@uniss.it

Telefono ufficio: 079-229664


Contatto skype: davidebilo
Ricevimento studenti
giovedì dalle 10:00 alle 12:00
(secondo piano palazzo Ciancilla)

Ufficio docente
Corsi di laurea associati


Lettere, Filologia Moderna e Industria Culturale (LM14)


Lingue e Letterature Straniere per la Mediazione Culturale
e la Valorizzazione del Territorio (LM38)


Servizio Sociale e Politiche Sociali (LM87)
Informazioni sul corso

Semestre: primo
Ore di didattica: 40
Numero CFU: 6
Obbligo di frequenza: NO

Numero e durata della lezioni: 20 lezioni, ciascuna da 2 ore


Orario delle lezioni

Le lezioni si svolgeranno presso l’aula Proust

Martedì dalle 13.00 alle 14.30


Giovedì dalle 13.00 alle 14.30
Programma del corso (ad alto livello)


Basi di dati (linguaggio SQL)


Linguaggi di marcatura HTML (+ CSS) e XML
Libri di testo consigliati

Basi di dati
Silvana Castano, Alfio Ferrara e Stefano Montanelli
Informazione, conoscenza e Web (per le scienze umanistiche)
Pearson
(capitoli 1, 3, 4 e 5)


Linguaggi di marcatura

XML
Elena Pierazzo
La codifica dei testi (un'introduzione)
Carocci editore
(capitoli da 1 a 4 più appendici)
Tutorial su web


Tutorial linguaggio SQL
http://www.w3schools.com/sql/default.asp

Tutorial linguaggio HTML
http://www.w3schools.com/html/default.asp

Tutorial linguaggio CSS
http://www.w3schools.com/css/default.asp

Tutorial linguaggio XML
http://www.w3schools.com/xml/default.asp
Programmi utilizzati


LibreOffice Base (richiede JRE)
http://it.libreoffice.org/download/libreoffice-still/

Notepad++ con il plugin XML tools
https://notepad-plus-plus.org/download/v7.html
Modalità d’esame
La prova d'esame consiste nel realizzare:

un progetto di basi di dati,

un progetto sui linguaggi di marcatura che consiste in:

creazione di un sito web in HTML con formattazione tramite CSS,

creazione di una grammatica XML.

Ciascun candidato può realizzare i due progetti da solo oppure in gruppo (max 3 persone). I dettagli dei
progetti da realizzare vengono forniti dal docente previa richiesta per e-mail e indicando i nominativi
delle persone coinvolte. I file relativi ai progetti devono essere consegnati al docente per e-mail entro
e non oltre 14 giorni dalla data di assegnazione degli stessi. La presentazione dei progetti si svolge
presso l'ufficio del docente il giorno dell'appello d'esame.

N.B.: La richiesta dei progetti può avvenire in qualunque periodo dell’anno, indipendentemente dalle
date degli appelli d’esame.

Modalità di superamento della prova d’esame e calcolo del voto d’esame

A ciascun progetto viene attribuita una valutazione in trentesimi. L'esame è superato solo se il voto di
ciascuno dei due progetti è pari o superiore a 18/30 (diciotto/trentesimi). Il voto d'esame viene
calcolato utilizzando la media aritmetica dei voti dei due progetti.
Programma del corso (ad alto livello)


Basi di dati (linguaggio SQL)


Linguaggi di marcatura HTML (+ CSS) e XML
Avram Noam Chomsky
(Philadelphia, 7-12-1928)

linguista, filosofo e teorico della
comunicazione statunitense

professore emerito di linguistica al MIT

creatore della grammatiche trasformazionali
(considerate il contributo più rilevante della
linguistica teorica del XX secolo)
Gerarchia di Chomsky

Insieme dei linguaggi


Avram Noam Chomsky
(Philadelphia, 7-12-1928)

linguista, filosofo e teorico della
comunicazione statunitense

professore emerito di linguistica al MIT

creatore della grammatiche trasformazionali
(considerate il contributo più rilevante della
linguistica teorica del XX secolo)

L'influenza del pensiero di Chomsky va ben al


di là della stessa linguistica, fornendo
interessanti e fecondi spunti di riflessione
anche nell'ambito della filosofia, della
psicologia, delle teorie evoluzionistiche, della
neurologia e della scienza dell'informazione.
Alonzo Church
(Washington, 14-6-1903 – Hudson, 11-8-1995)

matematico e logico statunitense

professore di matematica a Princeton

fondatore delle logiche modali e temporali
Alonzo Church
(Washington, 14-6-1903 – Hudson, 11-8-1995)

matematico e logico statunitense

professore di matematica a Princeton

fondatore delle logiche modali e temporali

Church è considerato uno dei padri fondatori


dell'informatica teorica. Le logiche modali e
temporali hanno aperto nuovi orizzonti ai
modelli dei linguaggi di programmazione e alla
elaborazione della conoscenza.
Padre Roberto Busa
(Vicenza, 28-11-1913 – Gallarate, 9-8-2011)

gesuita, linguista e informatico italiano

laurea in Filosofia alla Pontificia Università
Gregoriana

pioniere nell'uso dell'informatica nella
linguistica (Linguistica Computazionale)

realizzatore dell'Index Thomisticus
(lemmatizzazione dell'opera omnia di
Tommaso d'Aquino)
Motivazioni per l'informatica umanistica

“L'informatica umanistica costituisce il punto di contatto


tra scienze umane e scienze esatte: ragionando sui
caratteri comuni delle diverse discipline umanistiche e
formalizzando le procedure necessarie per condurre la
ricerca nei diversi ambiti, propone l'integrazione dei due
mondi superando la semplice applicazione di tecnologie
avanzate a settori delle scienze umane.″

Testo tratto da Informatica umanistica: una disciplina di confine, A. Celentano et al.


http://www.dsi.unive.it/~cortesi/paperi/MondoDigitale.pdf
Programma del corso (ad alto livello)


Basi di dati (linguaggio SQL)


Linguaggi di marcatura HTML (+ CSS) e XML
Cos'è una base di dati?


Struttura di memorizzazione dati che permette di

organizzare grandi quantità di informazioni

ricercare informazioni in maniera rapida

Alcuni esempi

dizionari (dizionari on-line)

cataloghi biblioteche

conti corrente

carriere degli studenti universitari di un ateneo

piccole basi di dati da scrivania per memorizzare dati derivanti da
ricerche personali (linguistica, letteratura, cultura in genere)
Cos'è un linguaggio di marcatura?

un linguaggio che

individua ed evidenzia la struttura e/o i contenuti di un
testo (codifica del testo)
Cos'è HTML?

Linguaggio di marcatura per creare pagine web

Cos’è CSS?
Linguaggio per formattare pagine web
(e anche file realizzati con altri linguaggi di marcatura)
Cos'è XML?

meta-linguaggio di marcatura
L'informatica nelle discipline umanistiche


Archeologia e cultura materiale

tecniche di remote sensing

basi di dati

sistemi GIS (Geographical Information System)

applicazioni software

modellazione 3D (CAD)

navigazione in ambienti virtuali (VRML, ecc.)

analisi multivariate, seriazione, clustering e analisi di
corrispondenze applicato a dati archeologici

Testo tratto da Informatica umanistica: una disciplina di confine , A. Celentano et al.


http://www.dsi.unive.it/~cortesi/paperi/MondoDigitale.pdf
L'informatica nelle discipline umanistiche


Biblioteconomia

basi di dati

Unicode

strumenti per realizzare biblioteche digitali

servizi di digital document delivery

Filologia

banche dati e sistemi di interrogazione (documentaria)

rappresentazione dei testi su media (editoriale)

relazione tra testo e sue interpretazioni (ermeneutica)
Testo tratto da Informatica umanistica: una disciplina di confine , A. Celentano et al.
http://www.dsi.unive.it/~cortesi/paperi/MondoDigitale.pdf
L'informatica nelle discipline umanistiche


Linguistica

Linguistica Computazionale

trattamento del testo, correttori ortografici e sintattici,
riconoscimento vocale, riassunti automatici

automatizzare la ricerca di

relazioni linguistiche presenti in un testo

strutture sintattiche

attribuire tratti semantici pertinenti

individuare le espressioni relative a un medesimo referente

marcatura semi-automatica delle strutture morfo-sintattiche e
sviluppo di sistemi di interrogazione

Testo tratto da Informatica umanistica: una disciplina di confine , A. Celentano et al.


http://www.dsi.unive.it/~cortesi/paperi/MondoDigitale.pdf
L'informatica nelle discipline umanistiche


Musicologia

banche dati

programmi

di videoscrittura

per sintetizzare opere musicali

Testo tratto da Informatica umanistica: una disciplina di confine , A. Celentano et al.


http://www.dsi.unive.it/~cortesi/paperi/MondoDigitale.pdf
Basi di dati
Base di dati (Database o DB)
Collezione di dati correlati per
rappresentare e memorizzare le informazioni
relative ad una realtà d'interesse

Caratteristiche di una base di dati



Grandi

dimensioni maggiori della memoria centrale dei sistemi di calcolo utilizzati

Persistenti

periodo di vita indipendente da quello delle applicazioni che lo utilizzano

Condivise

utilizzate da diversi soggetti (utenti e applicazioni)
Sistema di gestione di basi di dati
(Database Management System o DBMS)
Sistema software per la creazione e
la manipolazione delle basi di dati

Caratteristiche di un DBMS

Affidabilità

funzionalità di salvataggio e ripristino

assicura la coerenza dei dati

Privatezza

ciascun utente, autenticandosi, è abilitato a svolgere solo determinate azioni

Efficienza

utilizzare al meglio le risorse del sistema

Efficacia

rendere produttive le attività dei suoi utilizzatori
Modello dei dati di un DBMS
Ogni DBMS è basato su un modello di dati

Modello di dati: insieme di costrutti per descrivere

lo schema logico, cioè la struttura e le caratteristiche
dei dati della realtà d'interesse


le operazioni da effettuare sui dati

inserimenti, cancellazioni, modifiche

interrogazioni (o query)
Struttura di una base di dati
Utente Utente
Applicazione Applicazione

ESTERNO Vista Vista

Software per la creazione Software per la gestione


LOGICO
dello schema logico delle operazioni sul DB

Software per la
FISICO
DBMS gestione di dati su file

Dati (memorizzati in binario)


Struttura di una base di dati
Utente Utente
Applicazione Applicazione

ESTERNO Vista Vista

Software per la creazione Software per la gestione


LOGICO
dello schema logico delle operazioni sul DB

Software per la
FISICO
DBMS gestione di dati su file

Dati (memorizzati in binario)


Modello dei dati di un DBMS
Ogni DBMS è basato su un modello di dati

Modello di dati: insieme di costrutti per descrivere

lo schema logico, cioè la struttura e le caratteristiche
dei dati della realtà d'interesse

rappresentazione di entità (insiemi di oggetti) del mondo reale,
delle relazioni (legami) fra tali oggetti e
degli attributi (caratteristiche) comuni ai vari oggetti/relazioni

le operazioni da effettuare sui dati

inserimenti, cancellazioni, modifiche

interrogazioni (o query)
Un esempio
Esempi di oggetti, relazioni e attributi di una base di dati per
la gestione della segreteria studenti di una università
Informazione Descrizione Esempio
Elementi individuali e particolari
Lo studente Pinco Pallino,
Oggetti della realtà, a cui riconosciamo
Il corso di Informatica
un'esistenza
Raggruppamento di oggetti dotati L'insieme degli studenti,
Entità
di caratteristiche comuni L'insieme dei corsi
Pinco Pallino ha superato l'esame di
Relazioni Legami logici fra oggetti
Informatica
Caratteristiche secondarie comuni

a tutti gli oggetti di una entità ●
Il nome di uno studente,
Attributi Il numero di crediti di un corso

alle relazioni ●
Il voto d’esame di Informatica
sostenuto da Pinco Pallino è 30
Separazione tra dati e loro struttura

Lo schema logico di un DB costituisce la
componente intensionale del DB

viene definito una sola volta, indipendentemente
dalla numerosità dei dati che saranno archiviati

I dati veri e propri contenuti in un certo
momento nella base di dati costituiscono
l'insieme delle istanze della base di dati,
ossia la componente estensionale
La progettazione di una base di dati
Requisiti della base di dati

Descrizione, a parole, delle


caratteristiche della base di dati
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Basi di dati
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
Requisiti della base di dati

Insieme di documenti che forniscono una


descrizione della base di dati.
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
La progettazione concettuale
Il modello Entità-Relazione (ER)

modello concettuale di dati costituito da un


insieme di costrutti e di elementi grafici che,
combinati opportunamente, consentono di
documentare l'attività di concettualizzazione
della realtà d'interesse tramite uno schema ER
Costrutti fondamentali del modello ER

Entità

Attributo di entità

Relazione

Attributo di relazione

Vincolo di cardinalità

Identificatore
Entità
Insieme di oggetti (fatti, persone, cose) che

sono di interesse per l'applicazione

hanno esistenza autonoma

hanno proprietà comuni

Ogni entità ha un nome che


NOME ENTITÀ la identifica in modo univoco nello schema ER
ed è rappresentata tramite un rettangolo
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università

STUDENTE DOCENTE CORSO

Progettazione di una base di dati per la gestione magazzino di


un centro commerciale
ATTIVITÀ
FORNITORE PRODOTTO
COMMERCIALE
Attributo di entità
Proprietà di una entità

di interesse ai fini dell'applicazione

elementare (non decomponibile)

locale (dipende solo dall'entità considerata e non da altre entità)

NOME ATTRIBUTO
Ogni attributo di entità ha un nome
che lo identifica in modo univoco
nell'ambito della entità
NOME ENTITÀ
ed è rappresentato tramite un cerchio
collegato all'entità di appartenenza
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME COGNOME TELEFONO NOME CREDITI

STUDENTE DOCENTE CORSO

Progettazione di una base di dati per la gestione magazzino di


un centro commerciale
PARTITA IVA NOME TELEFONO CODICE NOME CODICE NOME TELEFONO

ATTIVITÀ
FORNITORE PRODOTTO
COMMERCIALE
Relazione
Rappresenta un legame logico fra due o più entità.

Ogni relazione ha un nome che la identifica in modo univoco nello schema ER


ed è rappresentata tramite un rombo collegato alle entità poste in relazione

ENTITÀ 2
...
NOME
ENTITÀ 1 ENTITÀ N
RELAZIONE
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI

STUDENTE ESAME CORSO

NOME COGNOME TELEFONO

DOCENTE RESPONSABILE
Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI

STUDENTE ESAME CORSO

Lo studente X ha sostenuto gli esami dei corsi Y1,..., Yn


Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI

STUDENTE ESAME CORSO

L'esame del corso Y è stato sostenuto dagli studenti X1, …, Xn


Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
NOME COGNOME TELEFONO NOME CREDITI

DOCENTE RESPONSABILE CORSO

Il docente X è responsabile dei corsi Y1, …, Yn


Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
NOME COGNOME TELEFONO NOME CREDITI

DOCENTE RESPONSABILE CORSO

La responsabilità del corso Y è del docente X


Alcuni esempi
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE

PARTITA IVA NOME TELEFONO CODICE NOME

FORNITORE ORDINE PRODOTTO


Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE

PARTITA IVA NOME TELEFONO CODICE NOME

FORNITORE ORDINE PRODOTTO

L'attività commerciale X ha ordinato i prodotti Y1, ..., Yn


rispettivamente ai fornitori Z1, …, Zn
Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE

PARTITA IVA NOME TELEFONO CODICE NOME

FORNITORE ORDINE PRODOTTO

Il prodotto Y è stato ordinato dalle attività commerciali X 1, …, Xn


rispettivamente ai fornitori Z1, …., Zn
Alcuni esempi
(come interpretare una relazione)
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE

PARTITA IVA NOME TELEFONO CODICE NOME

FORNITORE ORDINE PRODOTTO

Il fornitore Z ha evaso gli ordini dei prodotti Y1,...,Yn richiesti


rispettivamente dalle attività commerciali X1, …, Xn
Alcuni esempi
Progettazione di una base di dati per la gestione personale di
un'azienda sparsa sul territorio

RESIDENZA

IMPIEGATO CITTÀ

SEDE DI LAVORO

Osservazione: due o più entità possono essere


coinvolte in più relazioni
Alcuni esempi
Progettazione di una base di dati per la gestione dei rapporti di
discendenza tra la varie persone
per distinguere le due
figlio/a direzioni si annotano le
DISCENDENZA
linee che connettono la
relazione all'entità con
genitore due termini che
PERSONA qualificano il ruolo svolto
da ciascuno dei due
oggetti correlati

Osservazione: una entità può essere in relazione con


se stessa (relazione ricorsiva)
Attributo di relazione
Proprietà di una relazione

di interesse ai fini dell'applicazione

elementare (non decomponibile)

locale (dipende solo dalla relazione e non da una delle entità coinvolte)

NOME ATTRIBUTO

Ogni attributo di relazione ha un nome che


lo identifica in modo univoco
NOME RELAZIONE nell'ambito della relazione
ed è rappresentato tramite un cerchio
collegato alla relazione di appartenenza
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI
VOTO DATA

STUDENTE ESAME CORSO

ANNO ACCADEMICO
NOME COGNOME TELEFONO NOME CREDITI

DOCENTE RESPONSABILE CORSO


Alcuni esempi
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE

PARTITA IVA NOME TELEFONO CODICE NOME


QUANTITÀ DATA

FORNITORE ORDINE PRODOTTO


Vincolo di cardinalità
(sulle relazioni)
Numero minimo e numero massimo di istanze
della relazione a cui può partecipare ogni
oggetto di una entità in uno specifico ruolo.

Ad ogni ruolo U di una relazione è associato un vincolo di cardinalità (x,y),


dove x e y indicano, rispettivamente, il numero minimo e massimo di istanze
della relazione R a cui può partecipare ciascun oggetto dell'entità E

(x,y) U
E R
Un esempio generico
Supponiamo che esista una relazione R tra due entità E1 e E2

E1 R E2

Per determinare i vincoli di cardinalità di R dobbiamo rispondere a:


1. Quanti oggetti di E2 possono corrispondere ad un generico oggetto di E1
come minimo e come massimo rispetto a R?

Supponiamo che la risposta sia x come minimo e y come massimo
2. Quanti oggetti di E1 possono corrispondere ad un generico oggetto di E2
come minimo e come massimo rispetto a R?

Supponiamo che la risposta sia x' come minimo e y' come massimo

(x,y) (x',y')
E1 R E2
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI
VOTO DATA

(0,N)
STUDENTE ESAME CORSO

Quanti esami ha superato uno studente generico (come minimo e massimo)?


Uno studente generico ha superato 0 o più (N) esami

N indica un numero indefinito che può assumere un valore arbitrariamente grande


Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME NOME CREDITI
VOTO DATA

(0,N) (0,N)
STUDENTE ESAME CORSO

Quanti esami ha superato uno studente generico (come minimo e massimo)?


Uno studente generico ha superato 0 o più (N) esami

Quanti studenti hanno superato l'esame di un corso generico?


L'esame di un corso generico è stato superato da 0 o più (N) studenti
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
ANNO ACCADEMICO
NOME COGNOME TELEFONO NOME CREDITI

(0,N) (1,1)
DOCENTE RESPONSABILE CORSO

Di quanti corsi è responsabile un docente generico (come minimo e massimo)?


Un docente generico è responsabile di 0 o più (N) corsi

Quanti docenti sono responsabili di un corso generico (come minimo e massimo)?


Un corso generico è di responsabilità di uno ed un solo docente
Alcuni esempi
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale CODICE NOME TELEFONO

ATTIVITÀ
COMMERCIALE
(0,N)
PARTITA IVA NOME TELEFONO CODICE NOME
QUANTITÀ DATA

(0,N) (0,N)
FORNITORE ORDINE PRODOTTO
Identificatore (di una entità E)
Collezione di attributi e/o relazioni connesse a
E che permettono di identificare univocamente
ciascun oggetto di E

(quando l'identificatore è un solo attributo)

NOME ATTRIBUTO
(identificatore) L'identificatore viene rappresentato nello
schema colorando di nero il cerchio
NOME ENTITÀ di ciascun attributo
che fa parte dell'identificatore
Identificatore interno. L'entità è detta forte
Alcuni esempi
Progettazione di una base di dati per la gestione della
segreteria studenti di una università
MATRICOLA NOME COGNOME ANNO ACCADEMICO CLASSE NOME

CORSO DI
STUDENTE
LAUREA
Progettazione di una base di dati per la gestione magazzino di
un centro commerciale
PARTITA IVA NOME TELEFONO CODICE NOME CODICE NOME

ATTIVITÀ
FORNITORE PRODOTTO
COMMERCIALE
Identificatore (di una entità E)
Collezione di attributi e/o relazioni connesse a
E che permettono di identificare univocamente
ciascun oggetto di E

(quando l'identificatore è una collezione di attributi e relazioni connesse a E)

L'identificatore viene rappresentato nello


schema con un cerchio nero collegato, tramite
una linea, a tutti gli attributi e relazioni che
E
formano l'identificatore

Identificatore esterno. L'entità è detta debole


Alcuni esempi
Progettazione di una base di dati per la gestione dell'intero
sistema universitario italiano
COGNOME NOME MATRICOLA NOME

(1,1)
STUDENTE ISCRIZIONE UNIVERSITÀ

Nell'intero sistema universitario italiano, uno studente – inteso non come


persona fisica ma come “qualcuno iscritto ad una università” – non può essere
identificato univocamente per mezzo del solo numero di matricola, ma può
essere identificato dalla coppia formata dal proprio numero di matricola e
dal nome dell'università di appartenenza
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
Tipologie di DBMS

Gerarchico
Tipologie di DBMS

Relazionale

Gerarchico
Tipologie di DBMS

Reticolare

Relazionale

Gerarchico
Tipologie di DBMS
A oggetti

Reticolare

Relazionale

Gerarchico
Tipologie di DBMS
A oggetti

Reticolare

Relazionale

Gerarchico
Tipologie di DBMS

Gerarchico

basato su strutture ad albero


Relazionale

basato sul costrutto di relazione (rappresentato tramite una tabella)


Reticolare

basato sull'uso di grafi


Oggetti

evoluzione del modello relazionale. Vengono estesi i concetti della
programmazione a oggetti alle basi di dati
Il modello di dati
nei DBMS relazionali
DBMS relazionale
Fornisce un insieme di costrutti per

definire una base di dati

modello (di dati) relazionale

interrogare una base di dati

algebra relazionale
Il modello relazionale

Idea: i singoli dati acquistano valore di informazione


quando vengono messi in relazione tra loro


“Estende” il concetto matematico di relazione

rappresentabile con tabelle

Ogni classe di oggetti ha una rappresentazione in
una tabella corrispondente

Il modello è “basato sui valori”

le associazioni tra dati contenuti in relazioni (tabelle)
diverse sono rappresentate per mezzo dei dati stessi
Un esempio di DBMS relazionale:
la gestione di una segreteria studenti universitaria

STUDENTE INSEGNAMENTO
MATRICOLA COGNOME NOME CODICE NOME CFU

30022222 DEI TALI TAL INF-1 INFORMATICA 6


30011111 PALLINO PINCO LI-1 LINGUA INGLESE 1 12

ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

Informazione ricavata incrociando i dati delle tre tabelle


Lo STUDENTE TAL DEI TALI, il cui numero di MATRICOLA è 30022222, ha verbalizzato l'ESAME di
LINGUA INGLESE 1 da 12 CREDITI in DATA 20-09-2013, riportando un VOTO pari a 27/30.
Relazione (matematica)
Siano A e B due insiemi

Il prodotto cartesiano AB è


l'insieme di tutte le coppie ordinate (a,b) dove
a è un elemento di A e b è un elemento di B

Una relazione matematica su A, B è


un sottoinsieme del prodotto cartesiano AB
Un esempio
COGNOME NOME

BILÒ DAVIDE
MARIOTTI GAVINO

ROBERTO RELAZIONE
(DOCENTI DUMAS)
COGNOME´NOME

(BILÒ, GAVINO) rappresentazione tabellare


(MARIOTTI, ROBERTO)

(BILÒ, DAVIDE)
BILÒ DAVIDE
(MARIOTTI, GAVINO)
MARIOTTI GAVINO
(MARIOTTI, DAVIDE)

(BILÒ, ROBERTO)
Estensione di relazione (matematica):
le relazioni (o tabelle)
Definiamo le relazioni (o tabelle) nel modello
relazionale “estendendo” il concetto di
relazione matematica

Quindi, le relazioni (o tabelle) nel modello


relazionale sono relazioni matematiche con
“alcune proprietà strutturali in più”
Relazione (o Tabella)
Attributo
NOME_TABELLA

ATTRIBUTO 1 ... ATTRIBUTO i ... ATTRIBUTO N


VALORE1,1 ... VALORE1,i ... VALORE1,N

... ... ... ... ...


VALOREj,1 ... VALOREj,i ... VALOREj,N

... ... ... ... ...


VALOREM,1 ... VALOREM,i ... VALOREM,N

Tupla (o record) Campo (o valore)


(dati da memorizzare)

● a ciascun ATTRIBUTOi è associato un dominio Di (un insieme di valori ammissibili)


● ciascun VALOREj,iDi

l'insieme di tutte le tuple presenti in una tabella è detto istanza della relazione
DBMS relazionale
Fornisce un insieme di costrutti per

definire una base di dati

modello (di dati) relazionale

interrogare una base di dati

algebra relazionale
Come definire (la struttura di) una relazione (tabella)
NOME_TABELLA

ATTRIBUTO 1 ... ATTRIBUTO i ... ATTRIBUTO N


VALORE1,1 ... VALORE1,i ... VALORE1,N

... ... ... ... ...


VALOREj,1 ... VALOREj,i ... VALOREj,N

... ... ... ... ...


VALOREM,1 ... VALOREM,i ... VALOREM,N

Per definire una relazione (o tabella) occorre specificare

lo schema della relazione (tabella):

NOME_TABELLA
ATTRIBUTO 1
...
ATTRIBUTO N

➢ il dominio Di di ciascun ATTRIBUTO i


Un esempio
DOCENTE
COGNOME NOME

BILÒ DAVIDE
MARIOTTI GAVINO

DOCENTE
Lo schema della relazione è COGNOME
NOME


Il dominio dell'attributo COGNOME è una sequenza di caratteri alfanumerici

Il dominio dell'attributo NOME è una sequenza di caratteri alfanumerici
Osservazione

possiamo far riferimento ad ogni colonna utilizzando


il nome dell'attributo che la identifica, prescindendo
dall'ordine in cui le colonne compaiono nella relazione

DOCENTE DOCENTE
COGNOME NOME NOME COGNOME

BILÒ DAVIDE è uguale a DAVIDE BILÒ


MARIOTTI GAVINO GAVINO MARIOTTI
Osservazione
l'ordine delle tuple è irrilevante perché ogni tupla contiene
i dati riferiti allo stesso oggetto della realtà di riferimento

DOCENTE DOCENTE
COGNOME NOME COGNOME NOME

BILÒ DAVIDE è uguale a MARIOTTI GAVINO


MARIOTTI GAVINO BILÒ DAVIDE
Base di dati relazionale

Insieme di relazioni (tabelle)


ognuna delle quali descrive
una classe di oggetti
della realtà di riferimento
“Legami” tra tabelle

nella basi di dati relazionali, ogni classe di
oggetti ha una rappresentazione in una
tabella corrispondente
Un esempio
STUDENTE INSEGNAMENTO
MATRICOLA COGNOME NOME CODICE NOME CFU

30022222 DEI TALI TAL INF-1 INFORMATICA 6


30011111 PALLINO PINCO LI-1 LINGUA INGLESE 1 12

ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013
Alcune questioni tecniche

Valori nulli

Vincoli

chiave

integrità referenziale

dominio
Valori nulli: esempio e motivazioni
DOCENTE
CODICE_FISCALE COGNOME NOME TELEFONO

BLIDVD78E11X987W BILÒ DAVIDE 079/229664

MRTGVN60A10Y789I MARIOTTI GAVINO ?????????????

MRCALD55F09G765A MORACE ALDO ?????????????

MNTMRC70A11A111B MANOTTA MARCO ????????????


Il dominio associato a TELEFONO è l'insieme di tutti i numeri di telefono

Il numero di telefono di BILÒ DAVIDE è 079/229664

MARIOTTI GAVINO non ha il telefono

Il numero di telefono di MORACE ALDO è sconosciuto (ma sappiamo che
MORACE ALDO ha il telefono)

Non sappiamo se MANOTTA MARCO ha il telefono oppure no
Valori nulli: motivazioni
Problema pratico: nella realtà può accadere che il valore
associato ad un attributo di una tupla non sia
disponibile

dato inesistente

MARIOTTI GAVINO non ha il telefono

dato sconosciuto

Il numero di telefono di MORACE ALDO è sconosciuto (ma sappiamo
che MORACE ALDO ha il telefono)

dato senza informazione

Non sappiamo se MANOTTA MARCO ha il telefono oppure no
Rappresentazione dei valori nulli
Problema pratico: il valore associato ad un attributo di una tupla
non è sempre disponibile (dato sconosciuto,
inesistente o senza informazione)

Soluzione: ogni dominio (nel modello relazionale) viene esteso


con il valore NULL, detto valore nullo, che viene
utilizzato per rappresentare un dato sconosciuto,
inesistente, o senza informazione
Valori nulli: esempio con soluzione
DOCENTE
CODICE_FISCALE COGNOME NOME TELEFONO

BLIDVD78E11X987W BILÒ DAVIDE 079/229664

MRTGVN60A10Y789I MARIOTTI GAVINO NULL

MRCALD55F09G765A MORACE ALDO NULL

MNTMRC70A11A111B MANOTTA MARCO NULL


Il dominio associato a TELEFONO è l'insieme di tutti i numeri di telefono
più l'elemento NULL

Il numero di telefono di BILÒ DAVIDE è 079/229664

MARIOTTI GAVINO non ha il telefono

Il numero di telefono di MORACE ALDO è sconosciuto (ma sappiamo che
MORACE ALDO ha il telefono)

Non sappiamo se MANOTTA MARCO ha il telefono oppure no
Vincoli di chiave: motivazioni
Problema pratico: l'istanza di una relazione (tabella) deve
contenere tuple distinte

Soluzione: definire un insieme di attributi che permetta di


identificare ogni tupla in maniera univoca
(superchiave)

Osservazione: per definizione, tutti gli attributi di una relazione


(tabella) sono una superchiave

Chiave: una superchiave minimale (ovvero una superchiave che


non contiene altre superchiavi)
Vincoli di chiave: esempio e soluzione
STUDENTE
MATRICOLA COGNOME NOME

30022222 DEI TALI TAL


30011111 PALLINO PINCO
300333333 PALLINO PINCO


{COGNOME, NOME} non è una superchiave

{MATRICOLA, COGNOME, NOME} è una superchiave ma non è una chiave

{MATRICOLA} è una chiave

I due studenti omonimi possono essere distinti


rispetto al solo numero di MATRICOLA
Vincoli di chiave: esempio e soluzione
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013

30022222 LI-1 27 FALSO 20-09-2013


{STUDENTE} non è una chiave

{STUDENTE, INSEGNAMENTO, VOTO} è una superchiave ma non è una chiave

{STUDENTE, INSEGNAMENTO} è una chiave

I verbali degli esami possono essere distinti


rispetto alla coppia di dati matricole dello STUDENTE e codice del CORSO
Chiave primaria (primary key) di una
relazione (tabella)
E' una chiave che non ammette valori nulli

Il DBMS verifica e garantisce che

i valori degli attributi della chiave primaria di una tupla siano sempre
NOT NULL

tuple distinte abbiano valori distinti per almeno un attributo della chiave
primaria

tutti gli attributi della chiave primaria di una relazione


(tabella) sono sottolineati sia nello schema di relazione, sia
nella rappresentazione grafica della relazione tramite tabella
Alcuni esempi
STUDENTE
MATRICOLA COGNOME NOME STUDENTE

30022222 DEI TALI TAL MATRICOLA

30011111 PALLINO PINCO COGNOME

300333333 PALLINO PINCO NOME

Sono relazioni
ESAME ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA STUDENTE

30011111 INF-1 30 VERO 25-10-2012 INSEGNAMENTO

30011111 LI-1 25 FALSO 15-06-2013 VOTO

30022222 LI-1 27 FALSO 20-09-2013 LODE

DATA
Alcuni esempi
STUDENTE
MATRICOLA COGNOME NOME

30022222 DEI TALI TAL


30011111 PALLINO PINCO
NULL PALLINO PINCO

Non è una relazione



Il DBMS verifica e garantisce che

i valori degli attributi della chiave primaria di una tupla siano sempre
NOT NULL
Alcuni esempi
STUDENTE
MATRICOLA COGNOME NOME

30011111 DEI TALI TAL


30011111 PALLINO PINCO
30033333 PALLINO PINCO

Non è una relazione



Il DBMS verifica e garantisce che

tuple distinte abbiano valori distinti per almeno un attributo della
chiave primaria
Vincoli di integrità referenziale:
esempio e motivazioni
STUDENTE INSEGNAMENTO
MATRICOLA COGNOME NOME CODICE NOME CFU

30022222 DEI TALI TAL INF-1 INFORMATICA 6


30011111 PALLINO PINCO LI-1 LINGUA INGLESE 1 12

ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30033333 INF-1 30 VERO 25-10-2012


30011111 MAT-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

Mancano i dati dello STUDENTE con numero di MATRICOLA 30033333

Mancano i dati dell’INSEGNAMENTO con codice MAT-1
Vincoli di integrità referenziale: motivazioni
Problema pratico: coerenza tra i legami logici di due o più
relazioni (tabelle), ossia, la possibilità di
risalire ai dati di altre tabelle legate
logicamente ad un dato di partenza
Soluzione: utilizzare chiavi esterne (foreign key), ossia insiemi
di attributi che memorizzano valori di chiavi (di
solito chiavi primarie) di altre relazioni (tabelle)

Il DBMS verifica e garantisce che i valori degli attributi di ciascuna
chiave esterna di ogni tupla siano valori di una e una sola tupla della
relazione (tabella) a cui la chiave esterna fa riferimento
Tutti gli attributi di una chiave esterna di una relazione (tabella) sono
formattati con il carattere corsivo sia nello schema della relazione, sia nella
rappresentazione grafica della relazione tramite tabella. Inoltre, negli schemi
delle relazioni, ciascun attributo di una chiave esterna è collegato all'attributo
corrispondente della relazione (tabella) corrispondente tramite una freccia.
Vincoli di integrità referenziale:
esempio con soluzione
STUDENTE INSEGNAMENTO
MATRICOLA COGNOME NOME CODICE NOME CFU

30022222 DEI TALI TAL INF-1 INFORMATICA 6


30011111 PALLINO PINCO LI-1 LINGUA INGLESE 1 12
collegamento collegamento
chiave esternaESAME chiave esterna

STUDENTE INSEGNAMENTO VOTO LODE DATA


30033333 INF-1 30 VERO 25-10-2012
30011111 MAT-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

ESAME non è una relazione



Mancano i dati dello STUDENTE con numero di MATRICOLA 30033333

Mancano i dati dell’INSEGNAMENTO con codice MAT-1
Vincoli di integrità referenziale:
soluzione
STUDENTE ESAME
INSEGNAMENTO
MATRICOLA STUDENTE
CODICE
COGNOME collegamento
INSEGNAMENTO NOME
chiave collegamento
NOME esterna VOTO chiave CFU
esterna
LODE

DATA

definire l'attributo STUDENTE della relazione (tabella) ESAME come chiave esterna
dell'attributo MATRICOLA della relazione (tabella) STUDENTE

il DBMS verifica e garantisce che una tupla della relazione (tabella) ESAME contenga nel campo
STUDENTE un numero di MATRICOLA di uno studente già presente nella relazione (tabella)
STUDENTE

definire l'attributo INSEGNAMENTO della relazione (tabella) ESAME come chiave
esterna dell'attributo CODICE della relazione (tabella) INSEGNAMENTO

il DBMS verifica e garantisce che una tupla della relazione (tabella) ESAME contenga nel campo
INSEGNAMENTO un CODICE di un insegnamento già presente nella relazione (tabella)
INSEGNAMENTO
Vincoli di integrità referenziale:
esempio con soluzione
STUDENTE INSEGNAMENTO
MATRICOLA COGNOME NOME CODICE NOME CFU

30022222 DEI TALI TAL INF-1 INFORMATICA 6


30011111 PALLINO PINCO LI-1 LINGUA INGLESE 1 12
collegamento
collegamento
chiave esterna
chiave esterna ESAME

STUDENTE INSEGNAMENTO VOTO LODE DATA


30011111 INF-1 30 VERO 25-10-2012
30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013
ESAME è una relazione
Vincoli di dominio: esempio e motivazioni
VOLO
CODICE COMPAGNIA DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

XYZ RYANAIR 75 AHO BGY


E112 ALITALIA 60 FCO GOA
ZYX RYANAIR 30 NAP NAP

L'AEROPORTO di PARTENZA coincide all'aeroporto di ARRIVO

ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA
30011111 INF-1 32 VERO NULL
30011111 LI-1 25 VERO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

la DATA di verbalizzazione di un ESAME è NULL

il VOTO di un ESAME è 32

il VOTO di un ESAME è 25 e LODE
Vincoli di dominio: motivazioni
Problema pratico: i valori di un insieme di uno o più attributi di
una tupla devono soddisfare una proprietà P
(solitamente esprimibile tramite una formula
di logica proposizionale)

Soluzione: aggiungere un vincolo di dominio, ovvero una formula


di logica proposizionale, che permetta di scartare le
tuple che non soddisfano la proprietà P

Il DBMS verifica e garantisce che ogni


tupla rispetti i vincoli di dominio
Vincoli di dominio: un esempio con soluzione

VOLO
CODICE COMPAGNIA DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

XYZ RYANAIR 75 AHO BGY


E112 ALITALIA 60 FCO GOA
ZYX RYANAIR 30 NAP NAP

Non è una relazione

Vincolo di dominio
L'AEROPORTO di PARTENZA di un VOLO è diverso da quello di ARRIVO
Vincoli di dominio: un esempio con soluzione

VOLO
CODICE COMPAGNIA DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

XYZ RYANAIR 75 AHO BGY


E112 ALITALIA 60 FCO GOA
ZYX RYANAIR 30 NAP FCO

È una relazione

Vincolo di dominio
L'AEROPORTO di PARTENZA di un VOLO è diverso da quello di ARRIVO
Vincoli di dominio: esempio con soluzione
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA
30011111 INF-1 32 VERO NULL
30011111 LI-1 25 VERO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

Non è una relazione

Vincolo di dominio
la DATA di verbalizzazione di un ESAME non può essere NULL
Vincoli di dominio: esempio con soluzione
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA
30011111 INF-1 32 VERO NULL
30011111 LI-1 25 VERO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

Non è una relazione

Vincoli di dominio
il VOTO di un ESAME è un numero intero compreso tra 18 e 30

il VOTO di un ESAME o è senza LODE, oppure (se contiene la LODE) è pari a 30


Vincoli di dominio: esempio con soluzione
ESAME
STUDENTE CORSO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

È una relazione

Vincoli di dominio
la DATA di verbalizzazione di un ESAME non può essere NULL

il VOTO di un ESAME è un numero intero compreso tra 18 e 30

il VOTO di un ESAME o è senza LODE, oppure (se contiene la LODE) è pari a 30


DBMS relazionale
Fornisce un insieme di costrutti per

definire una base di dati

modello (di dati) relazionale

interrogare una base di dati

algebra relazionale
L'algebra relazionale
Funzione dell'algebra relazionale

Linguaggio per manipolare relazioni (tabelle)

insieme di operazioni che applicate a una o più relazioni
(tabelle) di input producono come risultato un'altra
relazione (tabella)

Permette di esplicitare il legame logico tra dati
contenuti in relazioni (tabelle) diverse
Alcuni operatori nell'algebra relazionale


Operazioni di decomposizione

Proiezione

Selezione

Operazioni insiemistiche

Unione

Intersezione

Differenza

Prodotto cartesiano

Join
Proiezione: idea intuitiva


La proiezione consiste nel “sezionare” verticalmente una relazione (tabella)

Serve a scartare colonne di dati “poco interessanti” da una relazione (tabella)
Un esempio
INSEGNAMENTO
CODICE NOME CFU

INF-1 INFORMATICA 6
LI-1 LINGUA INGLESE 1 12
Gli studenti visualizzano l'elenco dei corsi
con i rispettivi CFU (agli studenti non
interessa conoscere il codice di un corso)

NOME CFU

INFORMATICA 6
LINGUA INGLESE 1 12
Selezione: idea intuitiva


La selezione consiste nel “sezionare” orizzontalmente una relazione (tabella)

Serve a selezionare solo le tuple di “interesse” da una relazione (tabella)
Alcuni esempi
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013

30022222 LI-1 27 FALSO 20-09-2013

Il professore del corso LI-1 vuole


visualizzare l'elenco dei suoi verbali

STUDENTE INSEGNAMENTO VOTO LODE DATA


30011111 LI-1 25 FALSO 15-06-2013

30022222 LI-1 27 FALSO 20-09-2013


Alcuni esempi
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013

30022222 LI-1 27 FALSO 20-09-2013

Il professore del corso MAT-1 vuole


visualizzare l'elenco dei suoi verbali

STUDENTE INSEGNAMENTO VOTO LODE DATA

Osservazione: una selezione può generare una relazione (tabella) contenente 0 tuple
Alcuni esempi: proiezione della selezione
ESAME
STUDENTE INSEGNAMENTO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013

30022222 LI-1 27 FALSO 20-09-2013

La segreteria studenti controlla la


carriera dello studente 30011111

VOTO LODE

30 VERO

25 FALSO
Alcuni esempi: proiezione della selezione
VOLO
CODICE COMPAGNIA DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

XYZ RYANAIR 75 AHO BGY


E112 ALITALIA 60 FCO GOA
ZYX RYANAIR 30 NAP FCO
E507 ALITALIA 85 NAP BGY

Un utente che ha diritto ad un VOLO


gratuito con ALITALIA cerca solo le
tratte e la durata dei voli di interesse

DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

60 FCO GOA
85 NAP BGY
Unione: idea intuitiva

XÈY

Y
X Y

L'unione consiste nel “fondere insieme” due o più relazioni (tabelle)


Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO

Un dipendente che lavora per le due


compagnie aeree ALITALIA e
RYANAIR vuole conoscere l'elenco
degli AEROPORTI in cui lavorerà
AEROPORTO_SERVITO

ALGHERO-FERTILIA
NAPOLI-CAPODICHINO
ROMA-FIUMICINO
Intersezione: idea intuitiva

XÇY

Y
X Y

L'intersezione consiste nel prendere tuple comuni a due o più relazioni (tabelle)
Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO
Le compagnie RYANAIR e ALITALIA
hanno deciso di fondere le società e, al
fine di ottimizzare i costi, vogliono
capire quali sono gli aeroporti serviti
da entrambe le compagnie aeree
AEROPORTO_SERVITO

NAPOLI-CAPODICHINO
Differenza: idea intuitiva

X-Y

Y
X Y

La differenza tra due relazioni (tabelle) consiste nel prendere le


tuple contenute nella prima relazione (tabella) ma non nella seconda
Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO
La compagnia aerea ALITALIA, che
ha deciso di fare concorrenza alla
compagnia aerea RYANAIR, vuole
conoscere l'elenco degli aeroporti in
cui non presta servizio che però sono
serviti dalla compagnia RYANAIR

AEROPORTO_SERVITO

ALGHERO-FERTILIA
Prodotto cartesiano: idea intuitiva
x 1 y1
x1 y2
x1 ...
x2 x1 yn
... x 2 y1
xm
x2 y2
...
x2 yn
y1 ...
y2 xm y1
... xm y2
yn ...
xm yn

Il prodotto cartesiano tra due relazioni (tabelle) consiste nel combinare ogni tupla
della prima relazione (tabella) con ogni tupla della seconda relazione (tabella)
Un esempio
STUDENTE ESAME

MATRICOLA COGNOME NOME STUDENTE INSEGNAMENTO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013
N.B.: Il prodotto cartesiano contiene alcune
informazioni utili (quelle contenute nel box rosso)
e alcune informazioni prive di senso (tutte le STUDENTE  ESAME
altre) che, eventualmente, possono essere
scartate utilizzando l'operatore di selezione.
MATRICOLA COGNOME NOME STUDENTE INSEGNAMENTO VOTO LODE DATA
30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30022222 DEI TALI TAL 30011111 LI-1 25 FALSO 15-06-2013
30022222 DEI TALI TAL 30022222 LI-1 27 FALSO 20-09-2013
30011111 PALLINO PINCO 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30011111 PALLINO PINCO 30022222 LI-1 27 FALSO 20-09-2013
Un esempio di utilità del prodotto cartesiano:
selezione dal prodotto cartesiano (noto anche come join di tabelle)
STUDENTE ESAME

MATRICOLA COGNOME NOME STUDENTE INSEGNAMENTO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

Il Rettore vuole premiare gli studenti


meritevoli e, pertanto, ha bisogno dei dati
anagrafici e della carriera di ogni
STUDENTE

MATRICOLA COGNOME NOME STUDENTE INSEGNAMENTO VOTO LODE DATA


30022222 DEI TALI TAL 30022222 LI-1 27 FALSO 20-09-2013
30011111 PALLINO PINCO 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013

IL JOIN DI TABELLE PERMETTE DI COMBINARE I DATI CONTENUTI IN DUE O


PIÙ TABELLE AL FINE DI RICAVARE NUOVI DATI UTILI!!!
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
La progettazione logica

(utilizzare le diapositive delle basi di dati


realizzate a lezione come esempi)
Come passare dallo schema ER allo schema logico

1. Tradurre le entità in tabelle


2. Tradurre le relazioni in tabelle
Come passare dallo schema ER allo schema logico

1. Tradurre le entità in tabelle


2. Tradurre le relazioni in tabelle
Tradurre le entità in tabelle

Nella fasi di traduzione delle entità in


tabelle bisogna considerare prima le entità
forti e poi quelle deboli
Tradurre le entità in tabelle:
caso di un'entità forte

ATT n
NOME_ENTITA
...

ATT i+1 ATT 1


ATT i ...
...

Identificatore
ATT i
ATT 1
ATT i+1

NOME_ENTITA ...

ATT n
Tradurre le entità in tabelle:
caso di un'entità debole
Identificatore

ATT n ATT KEY m Nota: in informatica, un alias

...
di un qualche oggetto X è un
...

ATT i+1 ATT KEY j+1 nome alternativo a X.


ATT i ATT KEY j

...
...

ATT KEY 1
ENTITA_1
ATT 1
ATT 1
ENTITA_1 ENTITA_2
...

ENTITA_2 ATT i

ATT KEY 1 ALIAS ATT KEY 1


Nota: la tabella di ...
...
ENTITA_2 è già
ATT KEY j ALIAS ATT KEY j
definita perché
ENTITA_2 è ATT KEY j+1 ATT i+1
un'entità forte. ...
...
ATT KEY m ATT n
Come passare dallo schema ER allo schema logico

1. Tradurre le entità in tabelle


2. Tradurre le relazioni in tabelle
Tradurre le relazioni in tabelle:
caso di relazione 1 a 1 e 1 a molti (N a N)
ATT k
La tabella ENTITA_1 permetterà

...
ATT 1
di associare, a ciascun oggetto di
ENTITA_1, al più un solo oggetto
(?,1) di ENTITA_2.
ENTITA_1 RELAZIONE ENTITA_2

ENTITA_1
Nota: se un oggetto di ENTITA_1 è in
...
ENTITA_2 relazione con al più x oggetti di
ATT 1 ENTITA_2, dove x è un numero
Y1
... piccolo, allora ENTITA_1 contiene,
... rispettivamente, x alias di ognuno
ATT n
Yj degli attributi Y1, …, Yj.
ALIAS Y1
...
...
Ym
ALIAS Yj
Tradurre le relazioni in tabelle:
caso di relazione molti a molti (N a N)
ATT k
La tabella RELAZIONE

...
permetterà di associare, a
ATT 1 ciascun oggetto di ENTITA_1,
un numero arbitrariamente
(?,N) (?,N)
ENTITA_1 RELAZIONE ENTITA_2 grande di oggetti distinti di
ENTITA_2 (e viceversa).

RELAZIONE

ENTITA_1 ATT 1

X1 ... Nota: a volte bisogna


ATT k aggiungere uno o più
...
ENTITA_2 attributi tra ATT 1, …,
ALIAS X1
Xi ATT k alla chiave
... Y1
... primaria della tabella
ALIAS Xi ... RELAZIONE
Xn
ALIAS Y1 Yj
... ...
ALIAS Yj Ym
Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
Progettazione fisica:
(un po' di) linguaggio HSQL

Per ulteriori approfondimenti consultare

linguaggio SQL (livello facile): http://www.w3schools.com/sql/default.asp

manuale HSQL (livello difficile): http://hsqldb.org/doc/guide/


Linguaggi delle basi di dati

Linguaggi testuali

i comandi per la definizione e la manipolazione dei dati si
specificano in modo testuale

Linguaggi grafici

i comandi per la definizione e la manipolazione dei dati
vengono espressi mediante interfacce grafiche amichevoli
(user-friendly)

si appoggia ad un linguaggio testuale
I linguaggi di un DBMS relazionale

Data Definition Language (o DDL)

insieme di costrutti che permettono la definizione delle
relazioni (tabelle) e le autorizzazioni per l'accesso

costruzione

modifica

cancellazione

Data Manipulation Language (o DML)

insieme di costrutti che permettono di manipolare i dati
memorizzati nelle relazioni (tabelle)

inserimento

modifica

cancellazione

interrogazioni (query)
Il linguaggio SQL

Structured Query Language (o SQL)

linguaggio dichiarativo

i costrutti forniti consentono all'utente di dichiarare le proprietà
del risultato desiderato, piuttosto che la sequenza di operazioni
necessarie per ottenerlo

standard di riferimento per le basi di dati relazionali

utilizzato all'interno di tutti i principali DBMS

portabilità della basi di dati tra i vari DBMS

fornisce il DDL e il DML

HSQL è un linguaggio basato su SQL ma più semplice


Il DDL di HSQL
Prima di iniziare...

HSQL è case sensitive, ossia fa distinzione tra le lettere maiuscole e minuscole
(quindi Nome_tabella e NOME_TABELLA sono due nomi diversi).

i nomi degli attributi/tabelle possono essere scritti tra virgolette oppure no
(esempio “Nome_tabella” oppure Nome_tabella). Se si utilizzano le
virgolette, allora il nome dell'attributo/tabella coincide esattamente con quello
specificato tra virgolette (quindi “Nome_tabella” fa riferimento ad una
tabella dal nome Nome_tabella). Se non si utilizzano le virgolette, allora il
nome dell'attributo/tabella viene interpretato in HSQL come se fosse scritto
in maiuscolo (quindi Nome_tabella fa riferimento ad una tabella dal nome
NOME_TABELLA). Inoltre, se non si utilizzano le virgolette, allora i nomi degli
attributi/tabelle non possono contenere spazi.

Per semplicità, i nomi degli attributi/tabelle saranno scritti utilizzando

le sole lettere maiuscole, non accentate, e senza utilizzare le virgolette

(ogni spazio sarà sostituito dal carattere _ )


Per comprendere il linguaggio
HSQL, si consiglia di guardare il
codice HSQL delle basi di dati
realizzate a lezione
congiuntamente alle diapositive
che seguono.
Creazione di tabelle
CREATE TABLE NOME_TABELLA
(
ATTRIBUTO_1 DOMINIO [DEFAULT VALORE] [NOT NULL/PRIMARY KEY],
ATTRIBUTO_2 DOMINIO [DEFAULT VALORE] [NOT NULL/PRIMARY KEY],

ATTRIBUTO_N DOMINIO [DEFAULT VALORE] [NOT NULL/PRIMARY KEY],
[ELENCO_VINCOLI_SEPARATI_DALLA_VIRGOLA]
);

Crea una tabella dal nome NOME_TABELLA con N attrbuti. Per ciascun
ATTRIBUTO è specificato il DOMINIO, il valore predefinito (opzionale) , il
vincolo di NOT NULL (opzionale) o chiave primaria (opzionale). Infine, è possibile
specificare un elenco di vincoli (di chiave primaria, di dominio e di integrità
referenziale)

In informatica, una componente grammaticale posta dentro le parentesi quadre []


indica che la componente è opzionale, ossia non deve essere necessariamente
inserita.
Alcuni domini HSQL

Carattere

CHAR(N): sequenza di (esattamente) N caratteri (lunghezza fissa)

VARCHAR(N): sequenza da 0 a N caratteri (lunghezza variabile)

VARCHAR_IGNORECASE(N): come VARCHAR ma il dato è case insensitive

Numerici

INTEGER: numeri interi

NUMERIC(N): numeri interi di al più N cifre

NUMERIC(N,P): numeri di al più N cifre con al più P cifre decimali

DOUBLE: numeri reali


DATE: data (formato YYYY-MM-DD)

TIME: ora (formato HH.MM.SS)

BOOLEAN: dominio binario (a due valori) i cui valori sono TRUE e FALSE

LONGVARBINARY: sequenze di bit (utilizzato in generale per file di testo,
immagini, video, mp3, eccetera)
Vincoli


PRIMARY KEY(): di chiave primaria

FOREIGN KEY … REFERENCES: di integrità referenziale

CHECK(), UNIQUE(): di dominio
Rappresentazione dei valori costanti in HSQL
In informatica, una costante indica
un dato (numerico o di testo) invariabile

Numero

scrivere il numero (esempio 3)

Booleano

TRUE per vero e FALSE per falso

ora

{T 'HH:MM:SS'} (esempio {T '10:45:30'})

data

{D 'YYYY-MM-DD'} (esempio {D '2012-10-27'})

testo

scritto tra apici '' (esempio, 'Ciao')
Come specificare la chiave primaria di una tabella
quando la chiave è costituita da 2 o più attributi

Supponiamo di voler creare una tabella TAB la cui chiave primaria sia la coppia
di attributi X e Y.
CREATE TABLE TAB
(
X DOMINIO_X,
Y DOMINIO_Y,

PRIMARY KEY(X,Y)
);
Come specificare un
vincolo di dominio CHECK

Supponiamo di voler creare una tabella TAB che contenga il vincolo di dominio
X > 0.
CREATE TABLE TAB
(

X DOMINIO_X,

[CONSTRAINT NOME_VINCOLO]
CHECK(X > 0)
);
Come specificare
il vincolo di dominio UNIQUE

Supponiamo di voler creare una tabella TAB che contenga il vincolo di unique
sulla coppia di attributi X e Y.
CREATE TABLE TAB
(
X DOMINIO_X,
Y DOMINIO_Y,

UNIQUE(X,Y)
);
Come specificare un vincolo di
integrità referenziale

Supponiamo di voler creare un vincolo di integrità referenziale tra l'attributo


Y della tabella TAB2 e l'attributo X della tabella TAB1. Per creare tale vincolo,
bisogna necessariamente aver già creato la tabella TAB1.
CREATE TABLE TAB2
(
Y DOMINIO_Y,

FOREIGN KEY(Y) REFERENCES TAB1(X) [ON UPDATE CASCADE/NO
ACTION/SET NULL] [ON DELETE CASCADE/NO ACTION/SET NULL]
);

NOTA: Se la clausola ON UPDATE manca, allora è come se essa fosse


impostata a NO ACTION. Stessa cosa vale per la clausola ON DELETE.
Esempio del vincolo di integrità referenziale
senza parti opzionali (NO ACTION)
Supponiamo di aver creato la tabella
CREATE TABLE TAB2 (
...
FOREIGN KEY(Y) REFERENCES TAB1(X)
);
e di aver inserito le seguenti tuple
TAB1 TAB2

X Y
1 1
2


non è possibile modificare il valore 1 dell'attributo X di TAB1

è possibile eliminare una tupla T da TAB1, ma solo dopo aver eliminato manualmente tutte
le tuple di TAB2 collegate a T
Esempio del vincolo di integrità
referenziale con ON UPDATE CASCADE
Supponiamo di aver creato la tabella
CREATE TABLE TAB2 (
...
FOREIGN KEY(Y) REFERENCES TAB1(X) ON UPDATE CASCADE
);
e di aver inserito le seguenti tuple

TAB1 TAB2

X Y
1 1
2


è possibile modificare il valore 1 dell'attributo X della prima tupla di TAB1. La modifica
si ripercuote automaticamente (a cascata) sull'attributo Y di tutte le tuple di TAB2
collegate alla tupla di TAB1 modificata. (Quindi, se il valore 1 in TAB1 viene modificato in
3, allora il DBMS modifica il valore 1 in TAB2 automaticamente aggiornandolo a 3.)

è possibile eliminare una tupla T da TAB1 ma solo dopo aver eliminato manualmente tutte
le tuple di TAB2 collegate a T
Esempio del vincolo di integrità
referenziale con ON UPDATE SET NULL
Supponiamo di aver creato la tabella
CREATE TABLE TAB2 (
...
FOREIGN KEY(Y) REFERENCES TAB1(X) ON UPDATE SET NULL
);
e di aver inserito le seguenti tuple

TAB1 TAB2

X Y
1 1
2


è possibile modificare il valore 1 dell'attributo X della prima tupla di TAB1. Il valore
dell'attributo Y di tutte le tuple di TAB2 collegate alla tupla di TAB1 che è stata
modificata viene impostato automaticamente a NULL

è possibile eliminare una tupla T da TAB1 ma solo dopo aver eliminato manualmente tutte
le tuple di TAB2 collegate a T
Esempio del vincolo di integrità
referenziale con ON DELETE CASCADE
Supponiamo di aver creato la tabella
CREATE TABLE TAB2 (
...
FOREIGN KEY(Y) REFERENCES TAB1(X) ON DELETE CASCADE
);
e di aver inserito le seguenti tuple
TAB1 TAB2

X Y
1 1
2


non è possibile modificare il valore 1 dell'attributo X di TAB1

è possibile eliminare una tupla T da TAB1. Tutte le tuple di TAB2 collegate a T vengono
eliminate automaticamente
Esempio del vincolo di integrità
referenziale con ON DELETE SET NULL
Supponiamo di aver creato la tabella
CREATE TABLE TAB2 (
...
FOREIGN KEY(Y) REFERENCES TAB1(X) ON DELETE SET NULL
);
e di aver inserito le seguenti tuple
TAB1 TAB2

X Y
1 1
2


non è possibile modificare il valore 1 dell'attributo X di TAB1

è possibile eliminare una tupl T da TAB1. Il valore dell'attributo Y di tutte le tuple di
TAB2 collegate a T viene impostato automaticamente a NULL
Per altri comandi del DDL di HSQL
(modifica struttura delle tabelle,
aggiungere/cancellare vincoli, ecc.) si
consiglia di consultare
linguaggio SQL (livello facile): http://www.w3schools.com/sql/default.asp

manuale HSQL (livello difficile): http://hsqldb.org/doc/guide/


Il DML di SQL
Prima di iniziare...


In HSQL, il nome “completo” di un attributo
NOME_ATTRIBUTO di una tabella NOME_TABELLA è
NOME_TABELLA.NOME_ATTRIBUTO. Tuttavia, è possibile
indicare l'attributo utilizzando solo NOME_ATTRIBUTO
ogniqualvolta la tabella di riferimento è esplicita e non vi è
possibilità di confondere l'attributo con un attributo
“omonimo” di qualche altra tabella.
Proiezione
Lista_attributi

SELECT [DISTINCT]
NOME_ATTRIBUTO_1 [AS ALIAS_ATTRIBUTO_1],
NOME_ATTRIBUTO_2 [AS ALIAS_ATTRIBUTO_2],

NOME_ATTRIBUTO_N [AS ALIAS_ATTRIBUTO_N]
FROM TABELLA [AS ALIAS_TABELLA]


DISTINCT serve a eliminare tuple ripetute

ALIAS_ATTRIBUTO_J è il nome associato a NOME_ATTRIBUTO_J nella
tabella ottenuta come risultato della query

utilizzare il simbolo * in Lista attributi per proiettare (selezionare)
tutti gli attributi di una tabella evitando così di elencare tutti gli attributi
Esempio di proiezione
CORSO
CODICE NOME CFU

INF-1 INFORMATICA 6
LI-1 LINGUA INGLESE 1 12

SELECT NOME, CFU FROM CORSO

Gli studenti visualizzano l'elenco dei corsi


con i rispettivi CFU (agli studenti non
interessa conoscere il codice di un corso)

NOME CFU

INFORMATICA 6
LINGUA INGLESE 1 12
Esempio di proiezione con alias
CORSO
CODICE NOME CFU

INF-1 INFORMATICA 6
LI-1 LINGUA INGLESE 1 12

SELECT NOME AS NOME_CORSO, CFU FROM CORSO

Gli studenti visualizzano l'elenco dei corsi


con i rispettivi CFU (agli studenti non
interessa conoscere il codice di un corso)

NOME_CORSO CFU

INFORMATICA 6
LINGUA INGLESE 1 12
Esempio di proiezione
STUDENTE
MATRICOLA COGNOME NOME

30022222 DEI TALI TAL


30011111 PALLINO PINCO
300333333 PALLINO PINCO

SELECT COGNOME, NOME FROM STUDENTE

COGNOME NOME

DEI TALI TAL

PALLINO PINCO
tuple ripetute
PALLINO PINCO
Esempio di proiezione
STUDENTE
MATRICOLA COGNOME NOME

30022222 DEI TALI TAL


30011111 PALLINO PINCO
300333333 PALLINO PINCO

SELECT DISTINCT COGNOME, NOME FROM STUDENTE

COGNOME NOME

La parola chiave DISTINCT DEI TALI TAL


serve ad eliminare eventuali
PALLINO PINCO
tuple ripetute.
Esempio di proiezione
STUDENTE
MATRICOLA COGNOME NOME

30022222 DEI TALI TAL


30011111 PALLINO PINCO
300333333 PALLINO PINCO

SELECT * FROM STUDENTE

MATRICOLA COGNOME NOME


L'asterisco (*) 30022222 DEI TALI TAL
proietta tutti gli
attributi della
30011111 PALLINO PINCO
tabella. 300333333 PALLINO PINCO
Selezione

SELECT [DISTINCT] *
FROM TABELLA [AS ALIAS_TABELLA]
WHERE Condizione_di_selezione


Condizione_di_selezione è una formula logica che permette di
selezionare solo le tuple di interesse
Esempio di selezione
ESAME
STUDENTE CORSO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT * FROM ESAME WHERE CORSO='LI-1'

Il professore del corso LI-1 vuole


visualizzare l'elenco dei suoi verbali

STUDENTE CORSO VOTO LODE DATA

30011111 LI-1 25 FALSO 15-06-2013


30022222 LI-1 27 FALSO 20-09-2013
Esempio di selezione
ESAME
STUDENTE CORSO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT * FROM ESAME WHERE CORSO='MAT-1'

Il professore del corso MAT-1 vuole


visualizzare l'elenco dei suoi verbali

STUDENTE CORSO VOTO LODE DATA


Esempi di proiezione di selezione
ESAME
STUDENTE CORSO VOTO LODE DATA

30011111 INF-1 30 VERO 25-10-2012


30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013
SELECT VOTO, LODE FROM ESAME WHERE STUDENTE=30011111

La segreteria studenti controlla la


carriera dello studente 30011111

VOTO LODE

30 VERO

25 FALSO
Alcuni esempi: proiezione di selezione
VOLO
CODICE COMPAGNIA DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO

XYZ RYANAIR 75 AHO BGY


E112 ALITALIA 60 FCO GOA
ZYX RYANAIR 30 NAP FCO
E507 ALITALIA 85 NAP BGY
SELECT DURATA, AEROPORTO_PARTENZA, AEROPORTO_ARRIVO
FROM VOLO WHERE COMPAGNIA='ALITALIA'

Un utente che ha diritto ad un VOLO


gratuito con ALITALIA cerca solo le
tratte e la durata dei voli di interesse

DURATA AEROPORTO_PARTENZA AEROPORTO_ARRIVO


60 FCO GOA
85 NAP BGY
Unione

SELECT * FROM TABELLA_1 [AS ALIAS_TABELLA_1]


UNION
SELECT * FROM TABELLA_2 [AS ALIAS_TABELLA_2]
Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO

SELECT * FROM RYANAIR UNION SELECT * FROM ALITALIA


Un dipendente che lavora per le due
compagnie aeree ALITALIA e
RYANAIR vuole conoscere l'elenco
degli AEROPORTI in cui lavorerà

AEROPORTO_SERVITO

ALGHERO-FERTILIA
NAPOLI-CAPODICHINO
tuple ripetute
NAPOLI-CAPODICHINO
ROMA-FIUMICINO
Intersezione

SELECT * FROM TABELLA_1 [AS ALIAS_TABELLA_1]


INTERSECT
SELECT * FROM TABELLA_2 [AS ALIAS_TABELLA_2]
Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO

SELECT * FROM RYANAIR INTERSECT SELECT * FROM ALITALIA

Le compagnie RYANAIR e ALITALIA


hanno deciso di fondere le società e, al
fine di ridurre il personale, vogliono
capire quali sono gli aeroporti serviti
da entrambe le compagnie aeree
AEROPORTO_SERVITO

NAPOLI-CAPODICHINO
Differenza

SELECT * FROM TABELLA_1 [AS ALIAS_TABELLA_1]


MINUS
SELECT * FROM TABELLA_2 [AS ALIAS_TABELLA_2]
Un esempio
RYANAIR ALITALIA
AEROPORTO_SERVITO AEROPORTO_SERVITO

ALGHERO-FERTILIA NAPOLI-CAPODICHINO
NAPOLI-CAPODICHINO ROMA-FIUMICINO

SELECT * FROM RYANAIR MINUS SELECT * FROM ALITALIA


La compagnia aerea ALITALIA, che
ha deciso di fare concorrenza alla
compagnia aerea RYANAIR, vuole
conoscere l'elenco degli aeroporti in
cui non presta servizio che però sono
serviti dalla compagnia RYANAIR
AEROPORTO_SERVITO

ALGHERO-FERTILIA
Prodotto cartesiano

SELECT *
FROM TABELLA_1 [AS ALIAS_TABELLA_1],
TABELLA_2 [AS ALIAS_TABELLA_2]
Un esempio
STUDENTE ESAME

MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT * FROM STUDENTE, ESAME

MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30022222 DEI TALI TAL 30011111 LI-1 25 FALSO 15-06-2013
30022222 DEI TALI TAL 30022222 LI-1 27 FALSO 20-09-2013
30011111 PALLINO PINCO 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30011111 PALLINO PINCO 30022222 LI-1 27 FALSO 20-09-2013
Un esempio: selezione di prodotto cartesiano
STUDENTE ESAME

MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT * FROM STUDENTE, ESAME WHERE MATRICOLA=STUDENTE

Il Rettore vuole premiare gli studenti


meritevoli e, pertanto, ha bisogno dei dati
anagrafici e della carriera di ogni
STUDENTE
MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA
30022222 DEI TALI TAL 30022222 LI-1 27 FALSO 20-09-2013
30011111 PALLINO PINCO 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
Un esempio: join di tabelle
STUDENTE ESAME

MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA


30022222 DEI TALI TAL 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT * FROM STUDENTE JOIN ESAME ON MATRICOLA = STUDENTE

Il Rettore vuole premiare gli studenti


meritevoli e, pertanto, ha bisogno dei dati
anagrafici e della carriera di ogni
STUDENTE
MATRICOLA COGNOME NOME STUDENTE CORSO VOTO LODE DATA
30022222 DEI TALI TAL 30022222 LI-1 27 FALSO 20-09-2013
30011111 PALLINO PINCO 30011111 INF-1 30 VERO 25-10-2012
30011111 PALLINO PINCO 30011111 LI-1 25 FALSO 15-06-2013
Alcune funzioni aggregate
● COUNT(*)

conta le tuple di una tabella
● SUM(NOME_ATTRIBUTO)

calcola la somma dei valori dei campi relativi a NOME_ATTRIBUTO
● MIN(NOME_ATTRIBUTO)

calcola il minimo tra i valori dei campi relativi a NOME_ATTRIBUTO
● MAX(NOME_ATTRIBUTO)

calcola il massimo tra i valori dei campi relativi a NOME_ATTRIBUTO
● AVG(NOME_ATTRIBUTO)

calcola la media dei valori dei campi relativi a NOME_ATTRIBUTO
Esempio di funzioni aggregate
ACQUISTI
BENE COSTO
Pesce 10,00
Carne 5,50
Pane 3,20

SELECT COUNT(*) AS NUMERO_ACQUISTI FROM ACQUISTI

Un supermercato vuole contare il


numero di acquisti effettuati

NUMERO_ACQUISTI
3
Esempio di funzioni aggregate
ACQUISTI
BENE COSTO
Pesce 10,00
Carne 5,50
Pane 3,20

SELECT SUM(COSTO) AS TOTALE FROM ACQUISTI

Un supermercato vuole calcolare il


totale complessivo degli acquisti

TOTALE
18,70
Esempio di funzioni aggregate
ESAME

STUDENTE CORSO VOTO LODE DATA


30011111 INF-1 30 VERO 25-10-2012
30011111 LI-1 26 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT AVG(VOTO) AS MEDIA FROM ESAME WHERE STUDENTE=30011111

La segreteria studenti calcola la media


aritmetica dei voti degli esami sostenuti
dallo studente 30011111

MEDIA
28
La clausola GROUP BY

La clausola GROUP BY permette di partizionare


le tuple di una tabella secondo i criteri
specificati. La clausola GROUP BY viene
solitamente utilizzata insieme ad una funzione
aggregata per partizionare una tabella in gruppi
e applicare la funzione aggregata a ciascun
gruppo
Esempio di clausola GROUP BY
ESAME

STUDENTE CORSO VOTO LODE DATA


30011111 INF-1 30 VERO 25-10-2012
30011111 LI-1 26 FALSO 15-06-2013
30022222 LI-1 27 FALSO 20-09-2013

SELECT STUDENTE, AVG(VOTO) AS MEDIA FROM ESAME GROUP BY STUDENTE

La segreteria studenti calcola la media


aritmetica dei voti degli esami sostenuti
da tutti gli studenti

STUDENTE MEDIA
30011111 28
30022222 27
Le tuple della tabella vengono partizionate in tanti gruppi quanti sono gli studenti
presenti nella tabella. Ciascun gruppo contiene tutte le tuple relative ad uno
specifico studente.
Ordinamento tuple
Supponiamo di avere una tabella STUDENTE
con gli attributi COGNOME e NOME

SELECT * FROM STUDENTE


ORDER BY COGNOME, NOME

Ordina la tuple della tabella STUDENTE


alfabeticamente per COGNOME e, a parità di
cognome, alfabeticamente per NOME
Ordinamento tuple
Supponiamo di avere una tabella NOTEBOOK
con gli attributi MODELLO e PREZZO

SELECT * FROM NOTEBOOK


ORDER BY PREZZO DESC,

Ordina la tuple della tabella NOTEBOOK rispetto


al PREZZO, a partire dal modello più costoso
fino a quello meno costoso
Per altri comandi del DML di HSQL
(inserimento/modifica/cancellazione
dati, altre funzioni aggregate, ecc.) si
consiglia di consultare
linguaggio SQL (livello facile): http://www.w3schools.com/sql/default.asp

manuale HSQL (livello difficile): http://hsqldb.org/doc/guide/


Fasi per la progettazione di un DB
Requisiti della base di dati

COSA
Progettazione
concettuale
Schema concettuale

Scelta di un DBMS

Progettazione
logica
COME
Schema logico
Progettazione
fisica/tuning

Basi di dati
Introduzione ai
linguaggi di marcatura
La codifica informatica di un testo

Rappresentazione di un testo su un supporto


digitale in un formato comprensibile da un
elaboratore elettronico
Testo
significato associato alla
successione di monemi rappresentabili
graficamente tramite dei grafemi

Supporto
supporto fisico in cui il testo viene conservato
La codifica

Rappresentazione di una informazione


per mezzo di un codice

Codice
Insieme di simboli e di regole usati nei
sistemi di comunicazione per rappresentare i
simboli di un altro sistema di comunicazione
Machine Readable Form (MRF)

Codifica di un testo in un documento digitale che non


disperde nessuno dei livelli di informazione del modello
di codifica adottato

Caratteristiche del documento digitale



fruibile da un numero indefinito di destinatari senza limiti di
spazio e tempo

standardizzato

portabile
Portabilità

Indipendenza dall'hardware

architetture elaborative fisiche

supporti digitali

periferiche

Indipendenza dal software

sistemi operativi e applicazioni

Indipendenza dai sistemi di codifica dei caratteri

per evitare problemi di obsolescenza

Indipendenza logica dalle tipologia di elaborazione

utilizzabile per diversi fini e in diversi ambiti applicativi
Standard e standardizzazione

Insieme di norme relative a una particolare


tecnologia emesse da un ente istituzionale
nazionale o internazionale deputato a tale scopo

L'ente internazionale deputato alla definizione


degli standard formali è la International
Standardization Organization (ISO)
Primo livello di standardizzazione:
il set dei caratteri

ASCII (ISO 646) (American Standard Code for Information Interchange)

utilizza 7 bit (27=128 simboli)

supportato in tutte le piattaforme

ISO 8859-1 (ISO Latin 1)

utilizza 8 bit (28=256 simboli)

Unicode (ISO 10646)

utilizza 16 bit (216=65536 simboli)

UTF-8

versione compressa dell'Unicode che usa 8 bit

I primi 128 simboli di ISO 8859-1, Unicode, UTF-8 coincidono con il codice ASCII
Il codice ASCII
Linguaggi di codifica (di testi)

Prima dell'avvento dei computer

Caratterizzazione (markup) dei dattiloscritti

insieme di annotazioni a margine (tag)

Dopo l'avvento dei computer

Applicazioni WYSIWYG (What You See Is What You Get)

Linguaggi di markup

procedurali (orientati alla visualizzazione)

dichiarativi (orientati al testo)
Linguaggi di markup procedurali

LaTeX 2nd edition


Linguaggi di markup dichiarativi

<html>
<head>
<title> Pagina HTML </title>
</head>
<body>
<h1> Introduzione </h1>
<p> Questo è un esempio di documento HTML </p>
</body>
</html>
HTML
HyperText Markup Language


Linguaggio per la realizzazione di pagine web

La versione HTML 5.0 è stata sviluppata dal W3C (World
Wide Web Consortium)

Grammatica

standard formata da circa cento elementi

non modificabile dall'utente

Standard e portabile
Esempio di un documento HTML
<html>
<head>
<title> My web page </title>
</head>
<body>
<h1> Title of my web page </h1>
<p> This is a paragraph. </p>
<p> This is another paragraph. </p>
</body>
</html>
Struttura di un documento HTML
<html>
<head>
<title> My web page </title>
</head>
<body>
<h1> Title of my web page </h1>
<p> This is a paragraph. </p>
<p> This is another paragraph. </p>
</body>
</html>

html

head body

title h1 p p
eXtensible Markup Language

Sviluppato dal W3C (World Wide Web Consortium)

Metalinguaggio per la creazione di linguaggi di
markup (l'utente può definire anche la grammatica)

Autoesplicativo e intuitivo per

la creazione di documenti text-oriented

l'interscambio di dati di tipo

numerico

grafico

multimediale
Linguaggi basati su XML

XLink

connettere diversi documenti XML e non

XPointer

specificare le aree a cui si punta all'interno di un documento

XPath, XQuery

costruire espressioni e interrogazioni per localizzare informazioni
all'interno di un documento XML

XSL e XSLT

costruire fogli di stile per la visualizzazione di documenti XML e per
la trasformazione di documenti XML in altri documenti (XML, HTML,
XHTML, solo testo, ecc.)

XHTML

implementazione di HTML basata su XML
XML in ambito applicativo

XML ha trovato una delle sue applicazioni più


interessanti nell'ambito dell'Informatica
umanistica e in particolare nel settore della
codifica dei testi essendo stato adottato come
base del sistema di codifica TEI (Text
Encoding Initiative)
Esempio di un documento XML
<email>
<from> davide.bilo@uniss.it </from>
<to> george@mit.us </to>
<cc> george.matt@gmail.com </cc>
<date> 3rd December 2013 </date>
<time> 12:14 </time>
<subject> Meeting </subject>
<body>
Hi George, let's meet this afternoon at 4:30.

Davide
</body>
</email>

Stessa struttura di un documento HTML!


Proprietà comuni dei linguaggi di
marcatura HTML e XML
Elemento
struttura di base di un documento HTML/XML
(unità testuale considerata in quanto componente
strutturale di un documento)


ogni elemento ha un nome (generic identifier o GI)
elemento

<nome_elemento> contenuto </nome_elemento>


tag di apertura tag di chiusura
Elementi vuoti
<nome_elemento/>
Alcuni esempi

<citazione>Questa è una citazione</citazione>

<paragrafo>Questo è un paragrafo</paragrafo>

<elemento_vuoto/>
Relazioni tra due elementi A e B (1 di 2)
rappresentazione HTML/XML

Gerarchica <A>…<B>…</B>…</A>
rappresentazione grafica

A contiene B
A

B è contenuto in A

B

Ordinale rappresentazione HTML/XML


A precede B <A>…</A>…<B>…</B>
rappresentazione grafica

B segue A
A B
Relazioni tra due elementi A e B (2 di 2)

<A> … <B> … </A> … </B>

Due elementi non possono sovrapporsi!!!


Elemento radice (root element)

racchiude tutti gli elementi di un documento HTML/XML
(ogni elemento è contenuto nell'elemento radice)

L'elemento radice di HTML è <html>

<elemento_radice>
tutti gli altri elementi sono qui
</elemento_radice>
La struttura gerarchica ad albero
root

<root> A B
<A>…</A>
<B>…<C>…</C>…<B>
</root> C

Struttura gerarchica
ad albero rovesciato
Esempio struttura di un documento XML
testo

introduzione frontespizio corpo appendice

titolo paragrafo titolo capitolo indice glossario

Struttura gerarchica
ad albero rovesciato titolo paragrafo
Esempio struttura di un documento HTML
<html>
<head>
<title> My web page </title>
</head>
<body>
<h1> Title of my web page </h1>
<p> This is a paragraph. </p>
<p> This is another paragraph. </p>
</body>
</html>

html

head body

title h1 p p
Attributo

Serve a descrivere un particolare status di un


elemento o dare maggiori informazioni relative
all'elemento stesso


deve essere dichiarato all'interno del tag di apertura dopo il
nome dell'elemento

nome=“valore” oppure nome='valore'
Alcuni esempi

<p allineato=“centro”>Questo è un paragrafo


centrato</p>

<p allineato='sinistra'>Questo è un paragrafo


allineato a sinistra</p>

<p allineato=“sinistra” n='1'>Questo è il primo


paragrafo allineato a sinistra</p>

Osservazione: un tag di apertura può contenere zero o più attributi


Commento
Serve per annotare qualche caratteristica non
strutturale, per ricordare qualcosa, o per
escludere alcune parti di testo o interi elementi
dall'elaborazione XML

Sintassi

può apparire ovunque in un documento ma non dentro i tag

inizia con <!-- e termina con -->

non è possibile riutilizzare -- all'interno del commento
Alcuni esempi

<!-- Questo è un commento -->

<!-- Questo non -- è un commento -->


Leggibilità del documento
Osservazione: in HTML/XML, sequenze di invii, tabulazioni e
spazi equivalgono ad un singolo spazio.

<p>L'elemento <gi>foreign</gi> può essere usato per marcare una parola


in lingua straniera. Ad esempio: <quote>Noi andiamo spesso in vacanza
in un <foreign lang='eng'>camping</foreign>.</quote></p>

è equivalente a
<p>
L'elemento <gi>foreign</gi> può essere usato per marcare una parola
in lingua straniera. Ad esempio
<quote>
Noi andiamo spesso in vacanza in un
<foreign lang='eng'>camping</foreign>.
</quote>
</p>

Suggerimento: utilizzare invii, tabulazioni e spazi per migliorare la


leggibilità del documento.
Documento ben formato
Un documento HTML/XML è ben formato se e solo se:
1. tutti gli elementi sono racchiusi in un unico elemento radice
2. non ci sono due elementi sovrapposti
3. tutti gli elementi non vuoti hanno un tag di apertura e uno di
chiusura
4. gli elementi vuoti sono formattati correttamente
5. tutti gli attributi sono racchiusi tra apici (o semplici o doppi)
6. i commenti non contengono la sequenza di caratteri --

I parser sintattici controllano se un documento HTML/XML è ben formato.


Un esempio di documento XML ben formato
<antologia>
<poesia>
<titolo>
I
</titolo>
<stanza>
<verso>
Voi ch'ascoltate in rime sparse il suono
</verso>
<verso>
di quei sospiri ond'io nudriva 'l core
</verso>

<!-- altri versi -->

</stanza>

<!-- altre stanze -->


<!-- altre poesie -->

</antologia>
Un esempio di documento XML non ben formato

<biblio>
<article
title=Il MultiThreading in C
argomento="Programmazione Concorrente"
year='2008'>
<article>
</article
title="JDBC'
Argomento='Database"
year="2007">
</article>
</biblio>
<biblio>
</biblio>
Documento HTML/XML valido

Un documento HTML/XML è valido se e solo se è
coerente rispetto alla propria DTD

I parser validanti controllano se un documento HTML/XML è valido oppure no.


Differenze tra HTML e XML

HTML è un linguaggio per la creazione di pagine web

La grammatica HTML è definita dal W3C (World
Wide Web Consortium).

XML è un linguaggio per la creazione di linguaggi di
marcatura utili all'interscambio di dati tra le varie
applicazioni e le varie piattaforme

La grammatica di un file XML è definita dall'utente
I linguaggi HTML e CSS

Si consiglia di utilizzare i tutorial online HTML e CSS ai link seguenti:


http://www.w3schools.com/html/
http://www.w3schools.com/css/default.asp
Il linguaggio HTML
(HyperText Multimedia Language)
Struttura di un documento HTML
<!-- Dichiarazione della grammatica HTML -->
<!DOCTYPE HTML>
<html>
<!-- Intestazione -->
<head>
<title> Titolo pagina HTML </title>
<head>
<!-- Corpo -->
<body>
Corpo della pagina HTML
<body>
</html>
Tag per la formattazione del testo

<h1>,<h2>,<h3>,<h4>,<h5>,<h6> per le intestazioni o titoli
(il numero indica “l'importanza” dell'intestazione. Minore è il
numero, maggiore è l'importanza dell'intestazione)

<p> per i paragrafi

<b> per il testo in grassetto

<i> per il testo in corsivo

<em> per il testo enfatizzato

<blockquote> per le citazioni in un blocco separato

<q> per le citazioni inline (inserisce automaticamente le
virgolette)

<br/> per le interruzioni di linea (ricorda che l'invio equivale a
uno spazio e non può quindi essere usato in HTML per andare a
capo)
Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 1</h1>
<h2>La Divina Commedia</h2>
<p>
I primi versi del primo canto dell'
<i>Inferno</i> di <b>Dante</b> sono:
<blockquote>
<em>Nel mezzo del cammin di nostra vita<br/>
mi ritrovai per una selva oscura<br/>
ché la diritta via era smarrita.</em>
</blockquote>
</p>
<h2>Intervista a Steve Jobs</h2>
<p>
In una famosa intervista <b>Steve Jobs</b> disse:
<q>Stay hungry! Stay foolish!</q>
</p>
</body>
</html>
Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 1</h1>
<h2>La Divina Commedia</h2>
<p>
I primi versi del primo canto dell'
<i>Inferno</i> di <b>Dante</b> sono:
<blockquote>
<em>Nel mezzo del cammin di nostra vita<br/>
mi ritrovai per una selva oscura<br/>
ché la diritta via era smarrita.</em>
</blockquote>
</p>
<h2>Intervista a Steve Jobs</h2>
<p>
In una famosa intervista <b>Steve Jobs</b> disse:
<q>Stay hungry! Stay foolish!</q>
</p>
</body>
</html>
Altri tag per la formattazione del testo


<small> per il testo di dimensioni inferiori al normale

<strong> per il testo importante

<sub> per il testo a pedice

<sup> per il testo a apice

<del> per il testo cancellato

<mark> per il testo sottolineato

<abbr> per le abbreviazioni

<address> per gli indirizzi

<dfn> per le definizioni

<cite> per i titoli di lavori come libri, canzoni, filmati, ecc.
Un esempio

<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 2</h1>
<p>
<small>Testo a caratteri piccoli.</small><br/>
<strong>Testo importante.</strong><br/>
3<sup>2</sup>=9.<br/>
La formula chimica dell'acqua è H<sub>2</sub>O.<br/>
<del>Testo cancellato</del><br/>
<mark>Testo sottolineato</mark><br/>
<abbr>WWF</abbr></br>
<address>Bilò Davide, Via Roma 151, 07100 Sassari (SS)</address></br>
<dfn>
Un rettangolo è un quadrilatero avente tutti gli angoli interni
retti.
</dfn><br/>
Dante Alighieri ha scritto <cite>La Divina Commedia</cite>.
</p>
</body>
</html>
Inserire una immagine

<img src=“file_immagine” alt=“testo_alternativo”/>


file_immagine indica la posizione del file dell'immagine di
riferimento (percorso relativo o assoluto su disco oppure url)

testo_alternativo indica il testo da visualizzare al posto
dell'immagine qualora l'immagine non venisse visualizzata

è possibile inserire gli attributi height e width per
specificare, rispettivamente, l'altezza e la larghezza
dell'immagine in pixel
Un esempio

<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 3</h1>
<!-- Immagine di dimensioni come da file -->
<img src="./immagini/smile.png" alt="Smile"/>
<!-- Immagine di altezza pari a 100 pixel che mantiene le proporzioni
dell'originale -->
<img src="./immagini/smile.png" alt="Smile scalato" height="100"/>
<!-- Immagine di altezza pari a 100 pixel e larghezza pari a 200 pixel -->
<img src="./immagini/smile.png" alt="allungato" height="100" width="200"/>
</body>
</html>
Link ipertestuale

<a href=”risorsa_collegata”>contenuto_link</a>


risorsa_collegata indica la posizione della risorsa (url,
file, indirizzo email, segnalibro) collegata al link

contenuto_link indica il testo o l'immagine cliccabile che
forma il link

è possibile inserire gli attributi target e type per
specificare, rispettivamente, le modalità di apertura del link
e il tipo MIME di risorsa collegata
Alcuni tipi MIME

text/css per i fogli di stile (CSS)

text/txt per i file di testo in formato txt

application/pdf per i file in formato pdf

image/bmp per le immagini in formato bitmap

image/png per le immagini in formato png

image/jpg per le immagini in formato jpeg

audio/mp3 per i file audio in formato mp3

video/mp4 per i file video in formato mp4

video/avi per i file video in formato avi

Elenco tipi MIME http://www.iana.org/assignments/media-types/media-types.xhtml#video


Un esempio

<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 4</h1>
<a href="./pagina.html">
Cliccare qui per aprire la pagina nella stessa scheda
</a><br/><br/>
<a href="http://www.google.it" target="_blank">
Apre la pagina di Google in una nuova scheda
</a><br/><br/>
<a href="./file/file.pdf" type="application/pdf">
Apre o scarica il file pdf
</a><br/><br/>
<a href="./immagini/smile.png" target="_blank" type="image/png">
Apre/scarica l'immagine in/da una nuova scheda
</a><br/><br/>
<!-- Cliccando sull'immagine si apre la pagina html specificata -->
<a href="./pagina.html"><img src="./immagini/smile.png" height="100"/></a>
</body>
</html>
Segnalibro

<nome_tag id=”nome_elemento”>...</nome_tag>
...
<a href=”#nome_elemento”>contenuto_link</a>


l'elemento <a> può essere utilizzato per creare un segnalibro

id attributo che può essere utilizzato in qualunque elemento
per associare un nome all'elemento stesso (un documento
html non può contenere due o più elementi con lo stesso
valore per l'attributo id)
Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 5</h1>
<p id="segnalibro">
Questo è il paragrafo utilizzato per creare il segnalibro.
</p>
<p>Vai alla fine della pagina web e clicca sul segnalibro.</p>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<!-- Cliccando sul link si torna al paragrafo dal nome “segnalibro” -->
<a href="#segnalibro">Torna al primo paragrafo di questa pagina.</a><br/>
<!-- Cliccando sul link si torna al paragrafo dal nome “segnalibro2”
del file pagina.html -->
<a href="./pagina.html#segnalibro2">
Vai al segnalibro dal nome “segnalibro2” del file pagina.html.
</a>
</body>
</html>
Link ipertestuale per inviare e-mail
<a href=“mailto:indirizzo_email”>
contenuto_link
</a>

Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 6</h1>
<!-- Cliccando sul link si apre il programma utilizzato per inviare
e-mail (se è installato sul computer) -->
<a href="mailto:davide.bilo@uniss.it">Contatta il docente.</a>
</body>
</html>
Suggerimento (tooltip)
<nome_tag title=“suggerimento”>...</nome_tag>


title: attributo che può essere utilizzato in qualunque
elemento per visualizzare un suggerimento (tooltip) quando il
puntatore (del mouse) è sopra l'elemento

Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 7</h1>
<!-- Posizionando il puntatore sopra gli elementi seguenti viene
visualizzato un suggerimento -->
<img src="./immagini/smile.png" alt="Smile" title="Lo smile"/><br/>
<abbr title="World Wide Fund for Nature">WWF</abbr>
</body>
</html>
Elenchi puntati e numerati

<!-- L'elemento ul (unordered list) crea un elenco


puntato -->
<ul>
<li>prima voce elenco puntato</li>
<li>seconda voce elenco puntato</li>
...
</ul>
<!-- L'elemento ol (ordered list) crea un elenco
numerato -->
<ol>
<li>prima voce elenco numerato</li>
<li>seconda voce elenco numerato</li>
...
</ol>
Un esempio
<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 8</h1>
<ul><!-- Un elenco puntato -->
<li>prima voce elenco puntato</li>
<li>seconda voce elenco puntato</li>
</ul>
<ol><!-- Un elenco numerato -->
<li>prima voce elenco numerato</li>
<li>seconda voce elenco numerato</li>
</ol>
<ul><!-- Un elenco puntato a due livelli -->
<li>prima voce dell'elenco puntato</li>
<ul>
<li>prima sottovoce della prima voce dell'elenco puntato</li>
<li>seconda sottovoce della prima voce dell'elenco puntato</li>
</ul>
<li>seconda voce dell'elenco puntato</li>
</ul>
</body>
</html>
Tabelle

<table border="spessore_linee_bordi">
<caption>descrizione_della_tabella</caption>
<!-- Il contenuto della tabella è qui -->
</table>


<tr> per creare una riga della tabella

<td> per creare una cella di dati in una riga

<th> per creare una cella di intestazione in una riga

<caption> è un elemento opzionale

spessore_linee_bordi è un numero intero maggiore o
uguale a 0 che indica lo spessore delle linee di bordo (il valore
predefinito è 0 e equivale a nessun bordo)
Un esempio

<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 9</h1>
<!-- Una tabella con 2 righe, 2 colonne e senza intestazioni -->
<table border=”1”>
<caption>Esempio tabella.</caption>
<!-- Prima riga della tabella -->
<tr>
<th>Intestazione 1</th>
<th>Intestazione 2</th>
</tr>
<!-- Seconda riga della tabella -->
<tr>
<td>prima cella</td>
<td>seconda cella</td>
</tr>
</table>
</body>
</html>
Video/audio (un metodo semplice)

<embed src=”file_audio/video” type=”tipo_MIME”/>


file_audio/video indica la posizione del file audio o video
di riferimento (percorso relativo o assoluto su disco oppure
url)

tipo_MIME indica il tipo di file

è possibile inserire gli attributi height e width per
specificare, rispettivamente, l'altezza e la larghezza del
video in pixel

Nota: audio e video sono visualizzati solo se il browser dispone


dei plug-in.
Un esempio

<!DOCTYPE html>
<html>
<head>
<title> Mio sito web </title>
</head>
<body>
<h1>Esempio 10</h1>
<!-- Un file audio -->
<h2>Esempio di file audio</h2>
<embed src=”./audio/audio_sample.mp3” type=”audio/mp3”>
<!-- Un file video -->
<h2>Esempio di file video</h2>
<embed src=”./video/video_sample.mp4” type=”video/mp4”>
<!-- Un file video su finestra di 300x200 pixel -->
<h2>Esempio di file video in finestra di 300x200 pixel</h2>
<embed src=”./video/video_sample.mp4” type=”video/mp4” width=”300”
height=”200”>
</body>
</html>
I tag
<header>, <nav>, <section>, <footer>
Sono utilizzati per raggruppare degli elementi di un
documento HTML logicamente. Utilizzati in
combinazione ai fogli di stile (CSS) permettono di
impostare le stesse proprietà di visualizzazione degli
elementi di uno stesso gruppo in maniera molto semplice
e veloce.

Non hanno alcun effetto sulla visualizzazione del


documento HTML se non vengono utilizzati in
combinazione ai fogli di stile (CSS).
HTML Validator

Programma in grado di rilevare


errori sintattici in file HTML

Un HTML Validator online è reperibile al link


https://validator.w3.org/#validate_by_upload
Il linguaggio CSS
(Cascading Stile Sheets)
Cosa sono i CSS


I file CSS sono utilizzati per definire le
proprietà di formattazione degli elementi
HTML (XML, XHTML)
Come utilizzare un file CSS
in un documento HTML

<!DOCTYPE html>
<html>
<head>
<title>...</title>
<link rel=“stylesheet” href=“file_css” type=“text/css”/>
</head>
<body>
...
</body>
</html>
Come modificare le proprietà di
formattazione di un elemento
nome_elemento
{
proprietà_formattazione1:valore1;
proprietà_formattazione2:valore2;
...
}

oppure

#id_elemento
{
proprietà_formattazione1:valore1;
proprietà_formattazione2:valore2;
...
}
Come modificare le proprietà di
formattazione comuni a tutti gli elementi

*
{
proprietà_formattazione1:valore1;
proprietà_formattazione2:valore2;
...
}
I commenti nei file CSS

I commenti nel file CSS si scrivono tra /* e */

/* Questo è un commento di un file CSS */


Proprietà formattazione testo (1 di 2)

color:nome/codice_colore; per modificare il colore carattere

text-align:right|left|center|justify; per l'allineamento del
testo (a destra, a sinistra, al centro, giustificato)

text-indent:numero_e_unità_di_misura; per indentare il testo (le
unità di misura sono px (pixel), cm (centimetri), em (proporzionale
rispetto alle dimensioni predefinite));

text-decoration:none|underline|overline|line-through; per
aggiungere/eliminare una linea di sottolineatura (nessuno, sottolineato,
sopralineato, barrato)
● text-shadow:spostamento_orizzontale
spostamento_verticale sfumatura colore; per aggiungere
un'ombreggiatura al carattere

Una tabella di colori è disponibile alla pagina web

http://www.w3schools.com/cssref/css_colornames.asp
Proprietà formattazione testo (2 di 2)

font-family:“nome_font1”,“nome_font2”,...; per modificare i
font carattere da utilizzare

font-size:numero_e_unità_di_misura; per modificare la
dimensione del font

font-style:normal|italic|oblique; per modificare lo stile
carattere (normale, corsivo, obliquo)

font-weight:lighter|normal|bold|bolder; per modificare lo
spessore della linea carattere (leggero, normale, grassetto, più che
grassetto)
Proprietà formattazione sfondo

background-color:nome/codice_colore; per modificare il colore di
sfondo

background-image:url(“file_immagine”); per inserire
un'immagine di sfondo

background-repeat:repeat-x|repeat-y|no-repeat; per
specificare se l'immagine di sfondo deve essere ripetuta oppure no
(ripeti solo orizzontalmente, ripeti solo verticalmente, non ripetere)
● background-position:top|center|bottom left|center|right;
per specificare la posizione dell'immagine di sfondo all'interno
dell'elemento verticalmente e orizzontalmente
Proprietà formattazione elenchi

list-style-type:circle|square|disk|none; per specificare il
simbolo da utilizzare negli elenchi puntati (cerchio vuoto, quadrato, cerchio
colorato, nessun simbolo)

list-style-type:(lower|upper)-(alpha|decimal|latin|roman);
per specificare il simbolo da utilizzare negli elenchi numerati (lettere
minuscole/maiuscole, lettere dell'alfabeto greco, numeri in notazione
decimale, lettere dell'alfabeto latino, numeri romani)

list-style-image:url(“file_immagine”); per specificare il file
immagine da utilizzare come simbolo negli elenchi puntati/numerati

display:inline; per visualizzare le voci degli elenchi puntati/numerati
in orizzontale anziché in verticale
Proprietà formattazione link ipertestuali

Un link ipertestuale ha i seguenti quattro stati:


a:link per un link non visitato

a:visited per un link visitato

a:hover per un link che si sta puntando

a:active per un link mentre si sta facendo click
Ogni elemento è contenuto in un box

BOX
Margini (margin)
Bordi (border)
Imbottitura (padding)

Contenuto elemento
Proprietà formattazione dimensioni rettangolo


width:numero_e_unità_di_misura; per specificare la larghezza del
box

height:numero_e_unità_di_misura; per specificare l'altezza del
box
Proprietà formattazione bordi

border-color:nome/codice_colore; per specificare il colore delle linee di bordo

border-style:dotted|dashed|solid|double|groove|ridge|inset|outset; per
specificare lo stile delle linee di bordo

border-width:numero_e_unità_di_misura; per specificare la dimensione delle linee
di bordo

border-collapse:collapse; per fondere le doppie linee di bordo di una tabella in una
sola linea

di seguito x è o left o right o top o bottom



border-x-color:nome/codice_colore; per specificare il colore della linea di bordo x
● border-x-style:dotted|dashed|solid|double|groove|ridge|inset|outset;
per specificare lo stile della linea di bordo x

border-x-width:numero_e_unità_di_misura; per specificare la dimensione della
linea di bordo x
Proprietà formattazione margini

margin:numero_e_unità_di_misura; per modificare
tutti e quattro i margini

margin-top:numero_e_unità_di_misura; per
modificare il margine in alto

margin-bottom:numero_e_unità_di_misura; per
modificare il margine in basso

margin-left:numero_e_unità_di_misura; per
modificare il margine a sinistra

margin-right:numero_e_unità_di_misura; per
modificare il margine a destra

margin-left:auto;margin-right:auto; per centrare
l'elemento
Proprietà formattazione imbottitura


padding:numero_e_unità_di_misura; per modificare
l'imbottitura rispetto a tutti e quattro i lati

padding-top:numero_e_unità_di_misura; per
modificare l'imbottitura in alto

padding-bottom:numero_e_unità_di_misura; per
modificare l'imbottitura in basso

padding-left:numero_e_unità_di_misura; per
modificare l'imbottitura a sinistra

padding-right:numero_e_unità_di_misura; per
modificare l'imbottitura a destra
Disposizione dei vari elementi

Gli elementi vengono disposti verticalmente. Per disporre


due o più elementi distinti orizzontalmente bisogna rendere
gli elementi “mobili”


float:left|right|none; rende un elemento “mobile” e
ne specifica la posizione

clear:left|right|both; evita che l'elemento si
sovrapponga con elementi “mobili” posizionati a sinistra
(left), a destra (right), sia a sinistra che a destra (both)
CSS Validator

Programma in grado di rilevare


errori sintattici in file CSS

Un CSS Validator online è reperibile al link


https://jigsaw.w3.org/css-validator/#validate_by_upload
Il linguaggio XML

Si consiglia di utilizzare il tutorial online XML al link seguente:


http://www.w3schools.com/xml/default.asp
Struttura di un documento XML

Un documento XML è diviso in

prologo

dichiarazione XML

istruzioni di elaborazione (facoltative)

dichiarazione della grammatica (facoltativa)

DTD o XML Schema

istanza di documento
Dichiarazione XML

serve a indicare che un documento è scritto in XML

è sempre la prima riga del documento

consente l'uso degli attributi

version → versione XML utilizzata (al momento 1.0). È obbligatorio

encoding → set di caratteri utilizzato per la codifica. È opzionale

standalone → yes se il documento non fa riferimento ad altre
entità esterne; no in caso contrario. È opzionale

<?xml elenco_attributi?>
Esempio
<?xml version=“1.0” encoding=“iso-8859-1”?>
Istruzioni di elaborazione

Istruzioni utilizzate dal processore per elaborare il documento


<?istruzione_di_elaborazione?>

Esempio
<!-- L'istruzione di elaborazione seguente collega un
file di stile (css) al documento XML -->
<?xml-stylesheet type=“text/css” href=“./stile.css”>
Dichiarazione della grammatica DTD

Indica la DTD di riferimento

DTD interna al documento XML

<!DOCTYPE nome_elemento_radice [ grammatica_utente ]>

DTD esterna al documento XML (altro file sul computer)

<!DOCTYPE nome_elemento_radice SYSTEM “file”[]>

DTD esterna al documento (file su Web)

<!DOCTYPE nome_elemento_radice PUBLIC


“simbolo//nome_gruppo//nome_notation//lingua” “url”[]>
Un esempio di documento XML

<?xml version=”1.0” encoding=”UTF-8”?>

<!-- Dichiarazione della grammatica -->


<!DOCTYPE radice [
<!ELEMENT radice (#PCDATA)>
]>

<!-- Istanza del documento -->


<radice>
Questo è un esempio di documento XML.
</radice>
Nomi dei tag

L'utente definisce i tag.

XML è case sensitive (distingue le maiuscole dalle minuscole)


<NomeTag>
<NOMETAG>
<nometag>
sono tre nomi diversi

Il W3C consiglia l'utilizzo delle sole lettere minuscole.


Definizione della grammatica DTD

La DTD serve a

definire le relazioni reciproche tra elementi

definire attributi da associare agli elementi

DTD e XML

non è obbligatoria

può essere contenuta all'interno del documento (DTD interna)
e/o in un file a parte (DTD esterna)
Dichiarazione di elementi

<!ELEMENT nome_elemento (regola_grammaticale)>


dove

nome_elemento è il nome dell'elemento dichiarato, ossia
una sequenza di caratteri formata solamente da caratteri
alfabetici, numeri, trattini, trattini bassi e punti

regola_grammaticale specifica quali elementi e dati
possono essere contenuti all'interno dell'elemento
nome_elemento

Nota bene: un elemento può essere dichiarato al più una sola volta
Alcuni esempi
<!-- Un'antologia di poesie è formata da una o
più poesie. Ogni poesia può avere o meno un
titolo seguito da una sequenza di una o più
strofe. Ciascuna strofa è formata da uno o più
versi. Infine, il titolo e i versi di una poesia
contengono una sequenza di caratteri -->
<!ELEMENT antologia (poesia+)>
<!ELEMENT poesia (titolo?,strofa+)>
<!ELEMENT titolo (#PCDATA)>
<!ELEMENT strofa (verso+)>
<!ELEMENT verso (#PCDATA)>

<!-- L'elemento pagina è un elemento vuoto -->


<!ELEMENT pagina EMPTY>
Dichiarazione di elementi

<!ELEMENT nome_elemento (regola_grammaticale)>


dove
regola_grammaticale contiene un elemento

nome_elemento_bis seguito da indicatore_occorrenza

indicatore_occorrenza

assente → esattamente una sola occorrenza di nome_elemento_bis

? → al più una sola occorrenza di nome_elemento_bis

* → zero o più occorrenze di nome_elemento_bis

+ → una o più occorrenze di nome_elemento_bis

CONTINUA...
Dichiarazione di elementi

<!ELEMENT nome_elemento (regola_grammaticale)>


dove
regola_grammaticale contiene le parole chiave


#PCDATA → solo testo (parsed character data)

EMPTY → elemento vuoto

ANY → qualunque cosa

CONTINUA...
Dichiarazione di elementi

<!ELEMENT nome_elemento (regola_grammaticale)>


dove
regola_grammaticale contiene sequenze di due o più elementi


(nome_elemento_bis, nome_elemento_ter) → l'elemento
nome_elemento_bis precede l'elemento nome_elemento_ter

(nome_elemento_bis | nome_elemento_ter) → l'elemento contiene o
l'elemento nome_elemento_bis oppure l'elemento nome_elemento_ter

, e | vengono chiamati, rispettivamente, connettore AND e connettore XOR


Alcuni esempi

<!-- L'elemento A1 contiene un elemento B seguito


da un elemento C -->
<!ELEMENT A1 (B, C)>
<!-- L'elemento A2 contiene o un elemento B o un
elemento C -->
<!ELEMENT A2 (B | C)>
<!ELEMENT B (#PCDATA)>
<!ELEMENT C (#PCDATA)>
<A1><B>…</B>…<C>…</C></A1>
<A2><B>…</B></A2>
<A2><C>…</C></A2>
Alcuni esempi
<!-- L'elemento A3 contiene uno o più elementi B
seguiti da un elemento C opzionale -->
<!ELEMENT A3 (B+, C?)>
<!-- L'elemento A4 contiene o una sequenza di 0 o
più elementi B o una sequenza di uno o più
elementi C -->
<!ELEMENT A4 (B* | C+)>
<!ELEMENT B (#PCDATA)>
<!ELEMENT C (#PCDATA)>
<A3><B>…</B>…<B>…</B>…<C>…</C></A3>
<A3><B>…</B>…<B>…</B>…<B>…</B></A3>
<A4><B>…</B>…<B>…</B>…<C>…</C></A4>
<A4><B>…</B>…<C>…</C>…<C>…</C></A4>
<A4><C>…</C>…<C>…</C>…<C>…</C></A4>
Alcuni esempi

<!-- La discografia è formata da una lista di album,


singoli e live riportati in un ordine qualunque -->
<!-- Quindi, l'elemento discografia contiene uno o
più elementi (album | singolo | live). Ogni elemento
(album | singolo | live) è o un elemento album o un
elemento singolo o un elemento live -->
<!ELEMENT discografia (album | singolo | live)+>
Alcuni esempi
<!-- Una poesia può avere o meno un titolo seguito da
(i) o una sequenza di uno o più versi,
(ii) o un ritornello opzionale seguito da una
sequenza di una o più strofe ciascuna delle quali è
seguita da un ritornello opzionale -->
<!ELEMENT poesia (titolo?,(verso+ |
(ritornello?,(strofa, ritornello?)+)))>
<!ELEMENT ritornello (verso+)>
<!ELEMENT titolo (#PCDATA)>
<!ELEMENT strofa (verso+)>
<!ELEMENT verso (#PCDATA)>
Dichiarazione di attributi

<!ATTLIST nome_elemento
nome_attributo_1 valori_1 specifica_1
nome_attributo_2 valori_2 specifica_2

nome_attributo_n valori_n specifica_n>
dove

nome_elemento → nome dell'elemento per il quale definiamo gli attributi

nome_attributo_i → nome attributo i-esimo

valori_i → insieme di valori che l'attributo i-esimo può assumere

specifica_i → regole per l'attributo i-esimo (obbligatorio, opzionale,
valore predefinito)
Alcuni esempi
<!ELEMENT poesia (titolo?,strofa+)>
<!-- L'elemento poesia ha due attributi: numero e
status. L'attributo numero è opzionale (#IMPLIED). Il
valore dell'attributo numero è una sequenza
ininterrotta di caratteri alfabetici, numerici,
trattini, trattini bassi e punti. L'attributo status
può assumere solo uno dei valori tra bozza,
revisionato e pubblicato. Il valore predefinito
dell'attributo è bozza. -->
<!ATTLIST poesia
numero NMTOKEN #IMPLIED
status (bozza|revisionato|pubblicato) “bozza”>
Alcune delle parole chiave per i valori degli attributi
Parole chiave Significato
CDATA Qualsiasi carattere valido, compresi gli spazi o i segni di punteggiatura;
anche i tag possono essere inclusi nel valore, ma non verranno
riconosciuti da un parser XML e non verranno processati in quanto tag
NMTOKEN Solo caratteri alfabetici, numeri, trattini, trattini bassi, punti; deve
cominciare con una lettera e non può contenere spazi bianchi
NMTOKENS Uno o più valori NMTOKEN separati da uno o più spazi bianchi
Parole chiave per le specifiche

Parole chiave Significato


#REQUIRED Un valore deve essere necessariamente
specificato
#IMPLIED Un valore non deve essere necessariamente
specificato
#FIXED “valore” (richiede un valore oltre alla parola chiave) se
l'attributo compare con un valore diverso da
quello indicato verrà considerato erroneo
“valore” specifica il valore predefinito per l'attributo