Manga 07 Database (c2c Bud - 666)
Manga 07 Database (c2c Bud - 666)
Database
MANA TAKAHASHi
SHOKO AZUMA
TREND-PRO Co., LTD.
sommario
prefazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IX
1
che cos’è un database? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
A che cosa servono i database? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Che succede nel regno? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
I dati vengono duplicati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
I dati possono entrare in conflitto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
I dati sono difficili da aggiornare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Un database: ecco la soluzione! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Come si usa un database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Riassumendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2
che cos’è un database relazionale? . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
La terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
I database relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
I modelli di database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Operazioni di estrazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Gli operatori di insieme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Gli operatori relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Domande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Il database relazionale vince! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Riassumendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Risposte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3
progettiamo un database! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Il modello E-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Normalizzare una tabella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Che cos’è il modello E-R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Come si analizza il modello E-R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Caso 1: associazioni uno-a-uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Caso 2: associazioni uno-a-molti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Caso 3: associazioni molti-a-molti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Domande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Normalizzare una tabella . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Domande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
I passi per progettare un database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Riassumendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Risposte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4
impariamo il linguaggio SQL! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5
facciamo funzionare un database! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
vi sommario
Gli indici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Domande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Ottimizzare una Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
I cicli annidati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Sort Merge (ordina e unisci) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
L’ottimizzatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Riassumendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Risposte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
6
i database sono ovunque! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
appendice
le istruzioni SQL più usate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
indice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
sommario vii
prefazione
I database rappresentano una delle componenti fondamentali
di tutti i sistemi aziendali informatici . Alcuni lettori di questo
libro potrebbero prendere in considerazione l’idea di introdurre i
database nella loro esperienza quotidiana di lavoro . Altri potrebbero
avere l’esigenza di sviluppare sistemi basati su database . Il database
è la tecnologia che supporta da dietro le quinte questi sistemi e non
è semplice comprendere la sua vera natura .
Questo libro è concepito per consentirvi di imparare i rudimenti
dei database attraverso la lettura di un manga . Alla fine di ogni
capitolo troverete esercizi pratici di verifica e approfondimento delle
nozioni che avrete appreso . Ogni capitolo è strutturato in modo da
associare alla comprensione della tecnologia dei database la verifica
pratica della vostra comprensione .
La struttura di questo libro è la seguente .
Il Capitolo 1 spiega perché usiamo i database . Perché i database
sono necessari? Quali problemi dobbiamo affrontare se non usiamo
i database? Apprenderete quindi informazioni di base sul loro
utilizzo .
Il Capitolo 2 affronta la terminologia specifica . Scoprirete
diversi modelli di database e altri termini legati ai database .
Il Capitolo 3 spiega come progettare un database, nello specifico
un database relazionale (quello più diffuso) .
Il Capitolo 4 è dedicato a SQL, un linguaggio usato per gestire i
database relazionali . Grazie a SQL imparerete a gestire con facilità i
vostri dati .
Il Capitolo 5 spiega la struttura di un sistema basato su
database . Visto che consente di condividere dati tra molti utenti,
imparerete a farlo nel modo più sicuro .
Il Capitolo 6 è dedicato alle applicazioni per database .
Imparerete come vengono usati i database Web-based o di altro
tipo .
Questo libro è il frutto della collaborazione di molte persone:
Shoko Azuma per il fumetto, TREND-PRO per la produzione e
Ohmsha per la supervisione, l’editing e il marketing . A tutte le
figure coinvolte rivolgo i miei ringraziamenti .
Spero che questo libro si rivelerà utile a tutti i lettori .
MANA TAKAHASHi
1
che cos'è un database?
a che cosa servono i database? clang
clang
fr
puff ag
ol
e
pant
M
el
o
ni
me
le
a
bla bl
o
r eg n di Ko d
non si arrabbi
così!
ma...
principessa
ruruna!
la
be
ne
di
zi
il regno o ne
...guarda quante di kod... “la de
cose devo ancora terra dei ll
a
una montagna!
fare! frutti” te
r ra
il raccolto
quest'anno
sarà molto
abbondante!
dovrebbe essere
contenta di come
vanno le cose.
Ooh...
vorrei solo
Ugh! poter gestire
tutto in modo
ecco, tenga. più efficiente.
reparto
...dal reparto esportazione
la di da la
logistica, dal la di dum!
reparto vendite
estere e dal reparto
esportazione, vero? !
sb a m
sì.
3
mi chiedo se non
mmm... sia poco efficace principessa
gestire tutti i dati in ruruna!
base al reparto da
cui provengono..
quando il prezzo
delle mele è sbam!
salito, l'altro
giorno, è stato un
bel grattacapo.
ho un
regalo da
parte del
re.
...
o
tr
ie
se i miei genitori a? d
es s
d
a
vivessero ancora al n ci p
Pri
po
dovete
m
proprio
e
molto diverso...!
ch
andare?
al
qu
izz
str izz
str
cain, ti
i viaggi all'estero affido fai la
fanno parte ruruna brava.
dei miei doveri durante
istituzionali! la nostra s-sì,
assenza. maestà!
oh-oh-oh
...
mi costringete a
incredibile! te lavorare
n
e
cla n s
g e
r
p
cla ng
al e partite in vacanza
cla ng
senza di me! ancora
o
m
non ci credo!
ia
rn
to
che
rabbia!
si calmi,
la
prego.
il re ha deciso
di partire perché una
be' un
si fida di lei, lettera?
pacchet-
principessa
to...
ruruna.
allora?
cosa mi ha
e una
spedito?
lettera.
la persona
che ce l'ha consegnato
ci ha detto che questa
tecnica segreta si
chiama database.
abbiamo sentito
che il database è un
sistema che permette
di condividere, gestire
e usare i dati.
ma come viene
utilizzato dipende da chi
legge questo libro.
poi ci ha
consegnato il libro,
nella convinzione
che il regno di kod
l'avrebbe usato per
scopi pacifici.
ruruna...
ma per piacere!
voi non avete idea
...usa questo di quanto mi sento
libro per il stressata!
progresso
della nostra
nazione.”
strapp
strapp!
oh, com'è
vecchio...
sì, funziona...
non si apre.
ma è chiuso.
mmm...
forse con
c l ic k !
questa chiave?
l'ho trovata nella busta...
oom!
Ka-b
?! ack!
Coff
coff
Aaahhh!
!!!
allora?
dove mi
trovo?
e tu chi
sei?
e voi chi
siete? un
fantasma?!
?!
s-s-
siamo nel
c-castello
di kod.
ma vola...? Zip!
io sono cain!
l'assistente
della
principessa
ruruna di kod.
No!
uffa!
una fatina?
che sgarbata!
io sono tico.
n
o u
s on !
n m a
... no antas
f
Flump!
ma solo chi ha
aperto il libro
può vedermi. aaaah!
ih-ih!
questo libro
proprio
possiede poteri
così.
soprannaturali,
può aiutare
chi lo apre a
usare le sue
conoscenze... Ta
sei uscita
- da
da quel ...in modo !
libro? appropriato.
...
ma... allora
sì! ci aiuterai?
basta parlare
di me! avete
aperto il libro
per imparare
va bene,
tutto sui
allora,
database...
comincia-
mo.
sarà pure
una domanda
banale...
ferma un
momento!
oh, non
sapete gestisco
cosa sia? numeri e valori
avete a che collegati
clienti e
fare con molti a diversi
vendite
valori e molti prodotti,
generando file
numeri, giusto? a seconda dei
reparti.
Prodo
tto
vendit
e
clie
nte
sì, e ho
oh, quindi stai
molti
gestendo i dati in
problemi...
modo scoordinato,
divisi per reparto.
mmmh
significa mela: 100au mela: 100au mela: 100au
che i dati vengono
duplicati in ogni
reparto, giusto?
secondo
esatto. kolone,
“è un
sistema
efficiente,”
ma...
e ogni reparto ha
i propri dati.
...qualche volta
abbiamo dei
problemi.
come il
caos dell'altro
giorno!
mm, mm
ho informato aumentate il
prezzo a 120au! uno dei reparti
tutti i si è scordato di
reparti del modificarlo.
cambiamento di
prezzo, ma...
non ho
ricevuto
il tuo
messaggio...
ma...?
vendite
estere
mela 100au
12 capitolo 1
un altro reparto
Ca o s !
non solo... ha modificato per
sbaglio il prezzo a
300au.
ma è p e rc
hé...?
giusto?
che e!
strano... c'è un error
correggete
il prezzo,
per favore!
cavoli.
proprio
così! non si è ancora
ripreso...
ma secondo
me non siamo
ancora pronti. no d
ella fr utta
r eg
, il
k od
a
u ti
en
la fa nv
allarghiamo gli
e
b
semplice, affari usando il
lui. nostro sistema
consolidato.
ah ah ah!
che rabbia!
ma... il mio
se dovessimo
lavoro non
ampliare gli affari
si ridurrà di
sarebbe impossibile
certo, così!
gestire i dati con il
sistema attuale.
sì calmi,
la
i dati si prego!
mischierebbero
tra loro...
se aprite un nuovo
canale di vendita
dovrete creare
nuovi file per il
nuovo reparto.
un mucchio di
documenti
14 capitolo 1
un sistema in davvero?
cui i dati sono
condivisi da
tutti si chiama
database.
se lo usaste ì!
già, non s
dovreste
o
gestire così
c
tanti dati inutili.
è possiamo avere
un sistema molto
più efficiente di
quello attuale?
visto
che sei
certo! così in non puoi farlo
un'idea che gamba...
vale la pena tu?
considerare,
no?
...
ih
ih
capisco.
lo farò!
ma per
ringraziarti di
avermi fatta
uscire dal libro... Oh, princi-
pessa!
che succede nel regno?
Il Regno di Kod gestisce i suoi dati con un sistema di file informatici. Ma sembra che
questo sistema abbia qualche problema. Quali, nello specifico? Osserviamo il sistema da
vicino.
Nel regno ci sono attualmente tre reparti: il Reparto Logistica, il Reparto
Vendite Estere e il Reparto Esportazioni. Il Reparto Logistica tiene traccia di tutta la
frutta prodotta nel Regno. Il Reparto Vendite Estere gestisce i contatti con i partner
commerciali del Regno, mentre il Reparto Esportazioni registra tutte le spedizioni di
frutta del Regno.
PrincipesSa
Ruruna
reparto reparto
reparto
logistica vendite esportazioni
estere
16 capitolo 1
E non è tutto. Il sistema può generare problemi quando qualcuno deve modificare i
dati. Ipotizziamo per esempio che il prezzo delle mele cambi. Per gestire questa modifica
la Principessa Ruruna deve informare del cambiamento ogni reparto individualmente. Non
è scomodo?
principesSa
Ruruna
La Principessa deve
inviare un messaggio
a ogni reparto.
reparto
reparto reparto
vendite
logistica esportazioni
estere
cambiate il
prezZo delLe mele da
100au a 120au.
principesSa
Ruruna
I dati potrebbero
essere discordanti.
Cain
Bisogna creare
nuovi file.
Questo, a sua volta, aumenta il rischio di duplicazioni ogni volta che nasce un
nuovo reparto. Alla luce di questi punti deboli, il sistema attuale non è efficiente. Rende
complessa l'apertura di nuovi progetti e la reattività agli stimoli esterni.
18 capitolo 1
un database: ecco la soluzione!
In definitiva, perché questo sistema è così inefficiente? I problemi derivano tutti dalla
gestione separata e indipendente dei dati. Ma allora che dovrebbero fare Ruruna e Cain?
Dovrebbero creare un database! E questo significa unificare la gestione di tutti i dati del
Regno. Nel prossimo capitolo vedremo come fare.
principesSa
Ruruna
Database
I dati sono accessibili
a chiunque.
reparto reparto
reparto
vendite esportazione
logistica
estere
Uniformare la gestione dei dati ci assicura che ogni reparto disponga delle
informazioni corrette, perché ogni reparto lancerà un'interrogazione (query) per ogni
singolo dato. Un sistema davvero efficiente! Evita i conflitti ed elimina le duplicazioni dei
dati, facilitando al contempo l'introduzione e l'integrazione di nuovi reparti.
principesSa
qual è il Ruruna
prezZo in au Database qual è stato
delLe mele? il volume di vendite
il 5 marzo?
reparto reparto
reparto
vendite esportazione
logistica
estere
Il nuovo sistema presenta anche qualche rischio: per esempio, gli utenti potrebbero
rubare o sovrascrivere informazioni importanti o confidenziali, come gli stipendi. Questi
dati devono essere quindi protetti con delle restrizioni di accesso. Oppure potrebbero
esserci informazioni (per esempio i dati di vendita) che devono essere accessibili solo al
Reparto Esportazione. Impostare i criteri di sicurezza e i permessi è fondamentale, quando
si progetta un database.
reparto reparto
reparto
vendite esportazione
logistica
estere
Il nuovo sistema può presentare altri problemi. Il database potrebbe essere utilizzato
da molte persone contemporaneamente. Ipotizziamo che qualcuno al Reparto Vendite
Estere e qualcuno al Reparto Esportazioni decidano di cambiare nello stesso istante il
nome a un frutto (per esempio, il primo da Mela a ML e il secondo da Mela a MLA.) Quale
sarà il nome definitivo del prodotto? Se il database verrà usato da molte persone bisogna
prendere in considerazione questa eventualità.
principesSa
Ruruna
Database
ml?
mla?
reparto reparto
reparto
vendite esportazione
logistica
estere
Dovrete fare anche attenzione a non perdere nessun dato. Potrebbe anche capitare
che il database vada in crash, o che un errore del disco rigido provochi la corruzione di
qualche dato. Il database deve possedere meccanismi in grado di recuperare i dati in
queste situazioni piuttosto comuni.
Database
Bisogna prepararsi
a gestire i fallimenti.
20 capitolo 1
Inoltre, anche se il database conterrà un'enorme quantità di dati, dovremo comunque
poter eseguire ricerche molto veloci. Il nuovo sistema dovrà essere in grado di gestirle.
Iniziamo lo studio dei database insieme alla Principessa Ruruna e a Cain, e impareremo
a risolvere questi problemi. Andiamo al Capitolo 2!
riassumendo
• Una gestione basata sui file può generare conflitti e una duplicazione dei dati.
• Un database ti permette di condividere facilmente i dati e di evitare conflitti e
duplicazioni.
...
oh,
che c'è
che non
splendida va?
principessa.
esp
ress
i miei genitori sono sto io
rdit ne
no, c'è a
partiti e io sono
cain qui
molto occupata!
con me.
mmm
cain?
sono venuto qui
proprio perché
pensavo che ti
sentissi sola.
non vorrai
insinuare che il
principe RaaaMiiiNeeesss!!
tuo assistente raminess!
!
sia più affidabile s b a m!
di un principe!
!
s b a m!
iik!
ah ah ah!
beccato!
avevi
promesso di
uscire con
me, oggi.
no... questi
ecco... sono
e chi è,
quella? ehm... per te.
fiuu!
quanto è
tira, irritante,
... tira..
. quello.
principessa
ruruna,
tornerò...
e i miei
fiori?
Plop!
ma raminess è lo so
bene...
il principe del
paese vicino.
non dovrebbe
trattarlo con
sufficienza. buongiorno!
aaAH!!
quanto sei
superficiale, non è mi cogli di
ugh! da quanto per niente una buona sorpresa
tempo sei qui? tutte le
da quando giornata. volte.
hai aperto il
libro poco
fa.
salve. ma
lasciamo
perdere.
raminess se
n'è andato,
comunque.
cominciamo a
progettare un
database.
strizz
strizz
ferma un
minuto.
Hop!
vero...
!!!
impegniamoci
oohh... al massimo mi
o...
butt
prima di tutto,
impariamo la
terminologia dei
database.
26 capitolo 2
avete detto n-no, niente...
cosa? qualcosa?
e ha
sguisc sguisc è entrata nel tira-
computer! to
fuori
qual-
cosa...
zzz
zzz
e
not
zzo i
pre rio ns
em
a co
e u nit
questo è uno nom tto au
do 8 00
pr o
dei file che ice
cod tto u
usate. o do one 150a
pr m el
u
ola 120a
g
fra
au
20 0
a
m el
au
10 0
n e
limo
au
n a 16 0
tag
uh-uh. cas
o
cac
r
e
c
o proprio
r
d così.
allora codice
prodotto, nome
e ogni oggetto prodotto, prezzo
nel record si chiama unitario e note
campo. sono tutti campi,
esatto?
fragola 150au
mela 120au
Record
caco 160au
capisco.
pesca 130au
campo
codice
per esempio, ...mentre nome prodotto adesso
codice prodotto ha proviamo a
prodotto è al massimo dieci considerare
un numero a caratteri in dettaglio
tre cifre... il codice
prodotto.
codice
prodotto
nome prodotto
mel on e Hmmm...
Record...
f ra g campo...
mumble...
m el a
mumble...
l i m on e
c a s t a g na qui!
in ?
c a co Ca
28 capitolo 2
non
esistono due
e non ci sono record
prodotti
duplicati, quindi se sai
con lo
che il codice di un
stesso
prodotto è 101...
codice.
puoi identificarlo
come melone.
vero.
al
prezzo
sì, è giusto.
unitario?
ho
capito.
ma nel caso
cosa succede?
del prezzo
unitario...
anche se sai
che un frutto
costa 200au...
come questo...
sono come le
caratteristiche
di una persona, consideriamole in alcuni casi dentro
giusto? dal punto di vista le note non c'è
di un database. scritto niente,
o
tip e... giusto?
est
note qu
Persona
Bionda
Ruruna
Attiva
e
Bruno not capisco
Cain
tranqui i
se m dove vuoi
c on
arrivare...
come,
tranqui?
a ro
am
io
n ricc
co
non vuole dire questo vuole dire
che contengono che dalle note
note uno spazio... non è possibile
identificare un
con semi prodotto.
...sono proprio
vuote. già.
amaro
con riccio
prezioso
non può
essere "null". nel mondo dei
database, quando
codice nome prezzo
prodotto prodotto unitario note non c'è un valore si
Melone
definisce null.
800au con semi
null
fragola 150au
mela 120au
Lemon 200au amaro un valore null è
limone 100au con riccio accettabile dentro a
caco 160au una nota, ma non per un
codice prodotto, che
pesca 130au
deve identificare un
Kiwi 200au dato.
ing
! Bo
Bo dati in
g
e ora dimmi !
per esempio...
come si fa! dati dati
calma!
quando dici
database, devi
sapere che ne ...i dati sono
esistono molti organizzati secondo
tipi diversi. una struttura ad
albero.
come per
la frutta.
davvero?
32 capitolo 2
B... B... Dat
Boing! i
poi esiste il Dati Dat
modello reticolare, i Dati
in cui i dati sono Data Dat
Dati Dati i Dat
i
collegati l'un l'altro Dati
Dati
tramite relazioni che
Dati Dati modell
si intersecano tra Dati Dati g e r a rc
o
hico
loro.
non è B...
sono pronto B...
incredibile, Bo
a tutto! ing
cain? !
Sh
az
a m
!
ma allora
useremo uno
um
di questi?
ph
!
in effetti c'è un
ZZZT! altro tipo molto
no!
più semplice da
usare di questi
Z T! due.
B a n g!
ZZ
Bang
B a n g! paura,
eh? per
che ansia! niente.
si chiama...
ih ih
...modello relazionale.
relazionale?
intestazione intestazione
intestazione intestazione
il modello
Dati Dati Dati Dati relazionale si basa
su una tabella a due
Dati Dati Dati Dati dimensioni.
ah.
B o i n g!
!
m
a
az
Sh
è di nuovo
comparso qualcosa.
mi ricorda relazione.
qualcosa. nel modello
relazionale, la
tabella viene
? ne!
to anche chiamata
vis agio
r relazione.
o
ev
av
sembra che dati
come i prodotti questa mi
siano semplici da è nuova.
mettere in tabella...
ne
zio
o ta
ca m p int
es
ti ogni gruppo di
ne
Da
colonna io ti dati, o record, viene
az Da
es
t
ti chiamato riga...
nt ti
i
Da Da
ti
Da
ne
io
ti
az
Da
st
ti
te
Da
...mentre ogni
in
ti
Da
descrizione o campo
ne
ti
io
Da
az
viene chiamato
st
ti
te
Da
colonna.
in
ti
Da
ti
Da
un'altra
parola nuova!
riga
Rec
or d
34 capitolo 2
un ruolo
può capitare a
importante?
volte che a un
campo venga
affidato un
ruolo molto
importante.
sì, per
esempio...
...il codice
prodotto, nel
questi campi file che hai
speciali sono visto poco fa.
chiamati chiavi.
questo d.
codice viene dic
e pro è uno
co
definito chiave dei vantaggi
primaria. del modello
relazionale.
anche le
persone che
non sapevo che non conoscono
ci fossero tutti i database sanno
questi termini. maneggiare i
dati così.
torniamo per
esempio alla
Magia!
tabella di prima.
puoi
estrarre il quando
nome del estrai una
prodotto? colonna fai
un'operazione
chiamata
proiezione.
36 capitolo 2
quindi estrarre il
nome di un prodotto è
un'operazione?
sì, è semplice.
esistono molte
altre operazioni. Così
prodo tante!
sono otto, per la tt
cartes o
ia no
precisione!
Diff
ere n
e
u nion
za
Divis
ion e
pro
iezio
ne
n e
rs ezio
inte
nzione
selez congiu
ione
un altro vantaggio
del modello
relazionale è che
puoi elaborare i
dati...
...combinando
queste
operazioni.
capisco.
raminess!
ma che...?
dammi il
cinque!
esatto!
ah ah ah!
il principe
raminess è maledetto...!
andato via
poco fa... Ra m
i ness
! ma con
quante
donne...?
!
sbam!
oh! eh eh!
oh, scusate.
*ihihihihih
38 capitolo 2
i modelli di database
Quando usi il termine database, a quale tipo di database ti riferisci? Esistono svariate
possibilità nella gestione dei dati. L'associazione dei dati e le procedure usate da un
database si definiscono modello. I modelli più comunemente utilizzati sono tre.
Come ho raccontato a Ruruna e a Cain, il primo tipo è il modello di database
gerarchico. In questo modello un dato "figlio" contiene solo un pezzo del dato "genitore".
Il secondo tipo è il modello reticolare in cui, a differenza del modello gerarchico, un
dato "figlio" può collegarsi a più di un dato "genitore".
Per usare correttamente uno di questi due modelli devi gestire i dati tenendo sempre
a mente la loro allocazione fisica e il loro ordine. Quindi è complicato effettuare una
ricerca flessibile e veloce dei dati usando i modelli gerarchico o reticolare.
Il terzo tipo di database si basa sul modello relazionale. Un database relazionale
elabora i dati sfruttando un concetto semplice da comprendere, la tabella. Vediamo in
dettaglio di cosa si tratta.
Modello relazionale
Come si estraggono i dati in un database relazionale? Puoi operare sui dati ed estrarli
utilizzando operatori matematici formalmente definiti. Esistono otto operatori principali
a disposizione che si dividono in due categorie: gli operatori di insieme e gli operatori
relazionali.
unione
L'operatore unione ti permette di estrarre tutti i prodotti contenuti nella Tabella Prodotti 1
e nella Tabella Prodotti 2. Questo è il risultato:
Prodotto Prezzo
unitario
Melone 800Au
Fragola 150Au
Mela 120Au
Limone 200Au
Castagna 100Au
Caco 350Au
L'operazione di unione estrae tutte le righe dalle due tabelle e le combina insieme.
La figura seguente mostra come sono organizzati i dati delle due tabelle in seguito
all'operazione di unione. Tutte le righe della Tabella Prodotti 1 e della Tabella Prodotti 2
sono state estratte.
tabelLa tabelLa
prodotTi 1 prodotTi 2
40 capitolo 2
differenza
L'operatore differenza estrae righe solo da una delle tabelle. Per esempio, un'operazione
di differenza può estrarre tutti i prodotti della prima tabella che non sono inclusi nella
seconda. Il risultato dipende da quale tabella si estraggono le righe e da quale tabella si
escludono.
intersezione
Prodotto Prezzo
unitario
Melone 800Au
Fragola 150Au
tabelLa tabelLa
prodotTi 1 prodotTi 2
prodotto cartesiano
42 capitolo 2
gli operatori relazionali
Un database relazionale è progettato in modo da permettere l'estrazione dei dati tramite
gli operatori di insieme e gli operatori relazionali. Studiamo quindi gli altri quattro
operatori specifici dei database relazionali. Gli operatori relazionali sono proiezione,
selezione, congiunzione e divisione.
proiezione
Nome prodotto
Melone
Fragola
Mela
Limone
selezione
Codice prod. Nome prodotto Prezzo unit. Data Codice prod. Quantità
101 Melone 800Au 11/1 102 1.100
102 Fragola 150Au 11/1 101 300
103 Mela 120Au 11/5 103 1.700
104 Limone 200Au 11/8 101 500
In questo modo si crea una nuova tabella dinamica di dati di vendita, che include la
data, il codice prodotto, il nome prodotto, il prezzo unitario e la quantità. La figura qui
sotto mostra una congiunzione (l'area grigia indica una colonna che appare in entrambe le
tabelle originali).
44 capitolo 2
divisione
Per ultima c'è la divisione. La divisione è un'operazione che estrae righe le cui colonne
corrispondono a quelle di una seconda tabella, ma restituisce esclusivamente le colonne che
non compaiono nella seconda tabella. Vediamone un esempio.
Data
3/5
domande
E adesso rispondi a qualche domanda per verificare se hai capito come funzionano i
database relazionali. Troverai le risposte a pagina 48.
D1
Come si chiama la chiave che fa riferimento a una colonna di una tabella diversa in un
database relazionale?
D2
La tabella seguente propone un esempio relativo ai libri. Quale elemento puoi utilizzare
come chiave primaria? Il codice ISBN (International Standard Book Number) è un
numero univoco che identifica ogni libro pubblicato. Alcuni libri, invece, potrebbero avere
lo stesso titolo.
D4
Come si chiama l'operatore utilizzato in questo caso per estrarre i dati?
46 capitolo 2
D5
Come si chiama l'operatore utilizzato in questo caso per estrarre i dati?
In un database relazionale puoi usare fino a otto operatori diversi per estrarre i dati. I
risultati sono forniti sotto forma di tabella. Combinando le operazioni che hai imparato a
conoscere in questa sezione potrai ottenere qualsiasi tipo di dato. Per esempio, puoi usare il
nome e il prezzo di un prodotto per creare una tabella aggregata con i risultati di vendita. I
database relazionali sono molto diffusi perché sono semplici da capire e molto flessibili nella
gestione dei dati.
risposte
D1 Chiave Esterna.
D2 ISBN.
D3 Selezione.
D4 Unione.
D5 Congiunzione.
48 capitolo 2
3
progettiamo un database!
il modello e-r
p s st
...giusto,
giusto.
t
Pss
c s c ma che cosa
rus fru
f gli è preso a
cain?
p s st
cain? dove non la
sei? smette di
mormorare
strane parole...
principessa b-buon
shh! ruruna! giorno!
...
ho capito.
buongiorno,
tico.
buongiorno,
ruruna! cosa?
vero.
sembri allora, di
matto!
cosa stavate
oh! parlando?
e...?
progettiamo un database! 51
prima di tutto secondo tico ci vorrà un
bel pezzo...
abbiamo stabilito l'approccio corretto
che potremmo richiede di creare un
facilmente creare modello e analizzare la
gestione attuale delle
un database...
esportazioni sulla
base di questo
modello.
Ko
d
la prego, si
accomodi.
grazie.
allora, siete
pronti?
per l'analisi
useremo un
modello
chiamato...
...modello e-r!
entità e
e sta per entità, relazione...
mentre r sta per
relazione.
à
tit nemmeno
= En io.
E
R = R
ela zion
e
...non credo
e-r...? di capire...
52 capitolo 3
Plunk!!
il modello
e-r richiede di ora mi
considerare il spiego
mondo secondo i meglio...
concetti di entità
e relazione.
Plunk!!
scr
ib
scr
ib
Sc
ree scrib
k!! scrib
codice dest.
reek!! nazioni
destinatarie
Sc nome dest.
progettiamo un database! 53
così avete ma in cosa consiste
analizzato la la relazione?
frutta e le nazioni
destinatarie.
si riferisce al
modo in cui le
entità sono
collegate tra
loro. per esempio...
quindi frutta
possiamo
...la frutta e le nazioni
stabilire
sono collegate tra frutta che sono in
loro perché voi relazione
vendete frutta a delle grazie alla
nazioni destinatarie. vendita. vendite
nazioni
destinatarie
Squeeeeak!!
54 capitolo 3
codice prodotto
Frutta
nome prodotto ...capirete perché
questa relazione
prezzo unitario viene chiamata molti-
vendite
a-molti.
codice dest.
nazioni nel modello e-r, ciò
r min
e
nome dest.
di associazioni tra
d
imp
i
e
i
a lf ro
r eg
no a entità.
rit d
ol i
solo Bingo!
mele
perché
io? esatto!
è così che
sì! funzionano le
esportazioni del
regno di kod!
normalizzare una tabella
vero! la prima
e ora che avete
cosa da fare
definito la situazione
è davvero è analizzare
attuale del regno
difficile la situazione
di kod...
cominciare di partenza.
è molto
a creare un
importante.
database.
sìììì!!!
...possiamo
cominciare a
progettare un
vero database.
gasp
Shhh!
signor
cain?
Shhh!
principessa?
r egistr
azion e
di ven
dita
mmm... trovato. a l r eg
no di
mina n m
i
Data: 3
Melon /5
e
frago
mi !
la
f fo
t u r eg n o
di kod
Tota le
è un... un
esempio delle il documento
ricevute che mostra in modo
creiamo quando impeccabile
esportiamo lo stato delle
frutta verso esportazioni.
una nazione
straniera.
Frusc verissimo! quindi
ora prendiamo
questi dati...
metterli in
...e creiamo un tabella!
database.
Swish
eccola qui.
regno di
1103 3/8 25 ritol
104 limone 200Au 500
regno di
1104 3/10 12 minanmi
101 Melone 800Au 2.500
57
ma è splendido!
questo può in un database
diventare principessa! relazionale
il nostro dovete prima
database. rendere la
delusione tabella più
no semplice
no
possibile da
utilizzare.
:
i ve
n dita Data
istr
azio
ne d 3/5 mmm.
r eg
ina n mi
o di m
eg n
al r
one
M el
e
r a gol
f
od
di k
no
r eg
58 capitolo 3
...solo rinunciando a
e possiamo
creare una tabella
riuscirci...
dai dati così come
sono...
Bang! Bang!
Shazam!!
...e spezzandoli in più
tabelle!
così!
ma diventa molto
ah, capisco! più complicato
che con una sola
tabella...
cosa?!
definire la
condizione
di partenza...
...usando il
modello
e-r...
uh-uh.
progettiamo un database! 59
è
ipotizziamo di se usaste la qui!
voler aumentare tabella così
il prezzo del com'è...
melone di 20au.
e
...dovreste
anche
trovare tutte
qui...
le righe che
contengono meloni
e correggere i
prezzi uno alla
volta.
solo qui!
tabella
ma con una prodotti
facile!
tabella che
contiene solo i
Melone
singoli prodotti...
fragola
mela
...vi basterà
e senza alcun rischio
correggere il limone
di creare conflitti,
prezzo una volta
anche se vi scordate
sola, un singolo
di correggere gli
record della
altri record! non è
tabella prodotti.
fenomenale?
se usi una
capisco,
sola tabella ...si chiama fare una ma allora
è facile che sotto questa
normalizzazione. cosa dovrei
ti dimentichi di luce non è
correggere fare?
vantaggiosa.
qualcosa.
normalizzazione,
è molto
normalizzazione... importante!
Hiss
parli ancora
da solo?
uh...
dividere la tabella
per evitare
innanzi-
possibili conflitti
tutto...
tra i dati...
60 capitolo 3
...proviamo a
modificarla in la presenza di dati
modo che ogni ripetuti fa capire
riga contenga un che le righe devono
solo valore. essere divise.
regno di
1101 3/5 12 minanmi
ma il numero
1102 3/7 23 impero alfa
di registrazione
regno di
1103 3/8 25 ritol compare in
regno di entrambe le
1104 3/10 12 minanmi
tabelle, è
regno di
1105 3/12 25 ritol giusto?
N. registrazione
codice nome prezzo quantità
prodotto prodotto unit. uh.
1101 101 Melone 800au 1.100
progettiamo un database! 61
la tabella che risulta la tabella che invece
da questa divisione ha record che
prende il nome contengono due o
di prima forma più valori, prima di
normale. venire divisa viene
chiamata forma non
normalizzata.
prima forma
normale,
prima forma
normale si
divide
smettila di in pratica la prima
borbottare!
forma normale si
ottiene dividendo
la forma non
normalizzata. prima forma
normale
coraggio!
monte da
tabase
r elaziona
le
puff
pant
62 capitolo 3
codice nome prezzo
bene, ora N. registrazione
prodotto prodotto unit.
quantità
in che senso?
se a un certo ho
punto ricevi capito!
dei mandarini...
...non puoi
aggiungerli alla
tabella finché
non sono stati
venduti.
ma ndarini no
n venduti
dat
ass i
Sn
enti
prezz
ap
o
un it.
!
codice
prodotto nome
prodotto
ben detto!
progettiamo un database! 63
...la
non si possono mmm. spezziamo...
gestire i
prodotti in modo
indipendente con
tabella
la tabella (2) (2)
...in due!
esatto! e quindi...
tiè!
tabella prodotti
(seconda forma normale (1)
codice
N. registrazione
prodotto
quantità
esatto.
64 capitolo 3
per quanto immaginiamo nella
riguarda i dati tabella (2) di usare
relativi alle come chiave primaria la
vendite nella combinazione di numero
tabella (2), di registrazione e
codice prodotto.
in questa
tabella, la
chiave primaria
determina i chiave primaria
valori nelle
codice
altre colonne. N. registrazione
prodotto
ma...
ci sono casi
e ci sono casi in cui
in cui vendiamo
vendiamo quantità
contemporaneamente
diverse dello stesso
due prodotti
prodotto.
diversi...
questo significa...
codice prodotto nome prezzo
prodotto unitario
volta determinata la
chiave primaria, questa
codice
determina i valori delle N. registrazione
prodotto
quantità
altre colonne.
chiave
primaria
capito.
capito?
progettiamo un database! 65
la tabella e se il prezzo
ottenuta nella seconda del melone cambia,
dalla divisione forma normale (1) è sufficiente
secondo questa possiamo aggiungere modificare il
regola si i mandarini di cui valore in un
chiama... parlavamo prima. singolo record,
giusto?
che non sono stati
possiamo aggiungere ancora venduti!
anche l'uva e i kiwi,
seconda forma
normale.
regno di
1101 3/5 12 minanmi
chiave
primaria
Flump
in questa tabella,
se un numero di registrazione
è determinato, tutti gli
altri valori (data, codice
vediamo!
destinatario e nome
destinatario) sono determinati.
ottima
osservazione! sììì!
66 capitolo 3
come si chiama
quindi una tabella seconda forma normale!
in cui i valori nelle
altre colonne sono
determinati quando lo allora questa tabella
è la chiave primaria? è una seconda forma
normale, giusto?
N. registrazione Data codice dest. nome dest. N. registrazione Data codice dest. nome dest.
regno di regno di
minanmi minanmi
giusto. puoi ...come la seconda
considerare la prima impero alfa
forma normale (3)!
impero alfa
forza e
abbiamo completato
coraggio! non ancora...
la prima e la
seconda forma
normale!
S
! !
h
ora il nostro o ci siamo
database
relazionale è
c quasi!
pronto?! k
se
e! se mp
z io n
emo c ri p r e p
no fo on i do i ù
la seconda Ah rm rm da
forma al a
normale è... e
m
o
n
r e te
la d
zi at
o ab
na a
le s e
tu puoi
volare, tico.
fermi tutti... non vale!
progettiamo un database! 67
consideriamo di nuovo la non puoi gestire le
seconda forma normale destinazioni delle pensa,
(3). tue esportazioni pensa,
con questa tabella. pensa...
ah!
tabella vendite
tabella vendite
eh? seconda forma normale (3)
regno di
1101 3/5 12 minanmi
dati
nome
assenti regno di dest.
sazanna
codice
dest.
mmm...
...dividiamo di nuovo!
come facciamo
a gestire
in maniera
tabella vendite tabella destinazioni (terza
autonoma le forma normale (2)
(terza forma normale (1)
destinazioni?
regno di
1101 3/5 12 12 minanmi
1104 3/10 12
proprio
m!
1105 3/12 25
così...
za
S ha
ma in effetti, N. regi-
nella seconda sì. il numero di stra-
forma normale (3), i registrazione zione
nomi dei destinatari determina un
sono determinati a valore nel codice
partire dal numero di dei destinatari...
registrazione. codice de-
stinatario
...determinando
indirettamente
anche il
nome del nome
destinatario
destinatario.
per sistemare
questo dividi la tabella, così
problema, che nessun valore
sia indirettamente
determinato.
a
r min min
a
te r a
de de
te
r min
te
de
ora potrete
finalmente gestire
persino il
siamo arrivati regno di
esatto, una tabella che alla terza sazanna.
terza
forma
...si chiama terza normale
forma normale!
progettiamo un database! 69
tabella
tabella vendite destinazioni
1104 3/10 12
1105 3/12 25
tabella
prodotti
codice Quantità
N. registrazione
prodotto
102 fragola 150au
un database relazionale
utilizza normalmente
tabelle divise fino alla
terza forma normale.
evvài!
GASP
ora il nostro
database è
completo!
Cain? Principessa?
Zump!
anche aggiungere
ora potete gestire i prod
otto nuovi dati non
prodotti, le destinazioni
creerà conflitti.
e le vendite passando da
una tabella all'altra...
e
zion
tina
des
ven
dite
...senza problemi.
che sollievo…
giàggià.
ta bella
ni
destinazio
lla
ta be ite
ven d
a
tabella creata dai risultati di vendita ta bell i
ott
prod
nella prossima
pagina si vedono
esplicitate le
relazioni tra
i dati.
esatto! è un database
relazionale.
progettiamo un database! 71
tabella
tabella vendite si
riferisc
e destinazioni
a…
12 regno di
23 impero alfa
il codice destinatario
nella tabella di vendita regno di
riferisce al codice
destinatario nella allo stesso
tabella destinazioni. modo, il codice prodotto
nella tabella risultati di
vendita riferisce al codice
tabella risu ltati di prodotto nella tabella
ven dita
prodotti,
si rif …
codice
N. registrazione
prodotto Quantità
a
eris
tabella
prodotti
ce
si
rif
er
a … isce
codice nome prezzo
prodotto prodotto unit.
Melone
fragola
mentre il numero di
registrazione nella tabella
risultati di vendita riferisce
al numero registrazione
nella tabella vendite.
la chiave esterna
ci
si collega alla siamo...
chiave primaria quasi...!
delle altre
tabelle.
72 capitolo 3
St
non vedo l'ora
ir
di poter gestire
ac
più facilmente le
h!
esportazioni grazie
al nostro database.
stanco
principessa...
Mr cain...
sì.
oh, sei
tu.
qualcosa
non va?
non avrà
detto
qualcosa di
strano alla
principessa,
signor cain!
ih ih
io?
certo
che no.
che cos'è il modello e-R?
Cain e la Principessa Ruruna hanno analizzato la situazione attuale del Regno di Kod
usando un modello E-R (entità-relazione). Quando proverai a creare un database, il primo
passo sarà determinare le condizioni dei dati che stai cercando di modellare.
Cerca quindi di definire un'entità nei tuoi dati, usando il modello E-R. L'entità è un
oggetto concreto o una cosa realmente esistente, come la frutta o le destinazioni verso cui
esporti.
In aggiunta, un modello E-R evidenzia le relazioni tra le entità. La Principessa Ruruna
e Cain hanno basato la loro analisi sulla relazione chiamata vendita tra la frutta e le sue
destinazioni. La frutta viene esportata verso varie destinazioni, mentre ognuna di queste
destinazioni importa tipi diversi di frutta. Per questa ragione l'analisi secondo il modello E-R
presume che esista una relazione chiamata molti-a-molti tra la frutta e le sue destinazioni.
M frutti hanno relazioni con N destinazioni. Il numero di associazioni tra le entità si chiama
cardinalità.
codice prodotTo
M prezZo unitario
vendita Quantità
N
codice destinatario
destinazioni
esportazione
nome destinatario
destinazione
Principe
RaminesS
1
gestione
informazione
sulLa
destinazione 1
storico
esportazione
74 capitolo 3
caso 2: associazioni uno-a-molti
Molte persone sono al servizio di una principessa. I servitori non assistono nessun'altra
principessa e neppure il re.
PrincipesSa PrincipesSa
Ruruna
1
asSistenza
Cain servitore
servitore servitori
frutTa
vendita
N
regno impero regno
a lph a e g
ki n
gdom k i n do m o
of mi mpire f Ritol
minan
progettiamo un database! 75
domande
Hai capito bene come funziona il modello E-R? Analizza e disegna il modello E-R per
ognuno dei seguenti casi. Troverai le risposte a pagina 82.
D1
Un membro del personale gestisce diversi clienti. Un cliente non sarà mai contattato
da più di un membro del personale.
Cain
lph a g
gd o
kregno k i n do m o
in m
of
minan
mi impero
a em i r e
p regno f Ritol
D2
Una persona può prendere in prestito più di un libro. I libri possono essere presi in
prestito da più studenti in momenti diversi.
principesSa libro
Ruruna
libro
Cain libro
76 capitolo 3
D3
Ogni studente frequenta più di un corso. Ogni corso è frequentato da più studenti. Un
professore può tenere più corsi. Ogni corso è tenuto da un solo professore.
principesSa
Ruruna
Tico
profes-
sore
profes-
Cain sore
corso corso
D4
Ogni cliente può aprire più di un conto corrente. Ogni conto corrente è aperto da
un singolo cliente. Ogni banca gestisce diversi conti correnti. Ogni conto corrente è
gestito da una banca.
RaminesS
conto
banca
conto
re di
kod
banca
banca
Ricordate sempre che l'analisi basata sul modello E-R non produce necessariamente
un solo risultato "corretto". Possono esserci molti modi di organizzare logicamente dei dati
per riflettere le condizioni attuali di un contesto.
progettiamo un database! 77
normalizzare una tabella
78 capitolo 3
La forma non normalizzata è una tabella che contiene elementi che compaiono più
di una volta. Abbiamo visto che non è possibile gestire bene i dati usando questo tipo di
tabella in un database relazionale, quindi è necessario suddividerla.
La prima forma normale si riferisce a una semplice tabella bidimensionale che risulta
dalla divisione della tabella originaria nella forma non normalizzata. Si tratta di una tabella
che contiene un elemento in ogni cella. La tabella viene divisa in modo che un elemento
non compaia più di una volta.
La seconda forma normale si riferisce a una tabella in cui una chiave che può
identificare i dati determina i valori nelle altre colonne. Stiamo parlando della chiave
primaria.
In un database relazionale, un valore è definito funzionalmente dipendente se quel
valore determina i valori di altre colonne. Nella seconda forma normale, la tabella è divisa
per far sì che le colonne siano funzionalmente dipendenti dalla chiave primaria.
Nella terza forma normale, la tabella è divisa per far sì che un valore non sia
determinato da una chiave che non sia primaria. In un database relazionale, un valore
è definito transitivamente dipendente se quel valore determina indirettamente i valori di
altre colonne, come parte di un'operazione funzionalmente dipendente. Nella terza forma
normale la tabella è divisa in modo da poter rimuovere i valori transitivamente dipendenti.
domande
È importante riuscire a progettare un database relazionale nelle situazioni più disparate,
quindi esaminiamo alcuni esempi di tabelle da normalizzare. Determina il livello di
normalizzazione in tutti i casi seguenti. Troverai le risposte a pagina 82.
D5
La seguente tabella gestisce il prestito di libri (come definito nella domanda D2). Fino
a quale livello è stata normalizzata?
progettiamo un database! 79
D6
Anche la seguente tabella descrive la gestione di una biblioteca. A quale livello è
normalizzata?
D7
La tabella seguente mostra i risultati delle vendite effettuate mensilmente da ciascun
dipendente. Ogni reparto è formato da più dipendenti. Un dipendente può far parte di
un solo reparto. Normalizza questa tabella fino alla terza forma normale.
reparto
reparto vendite reparto
logistica estere esportazione
D8
La tabella seguente rappresenta un sistema per la ricezione degli ordini. Normalizzala
fino alla terza forma normale. Ipotizza che a ogni numero d'ordine corrisponda un
solo cliente. Puoi processare anche più di un prodotto con lo stesso numero d'ordine.
Infine, a un numero d'ordine può essere associato solo un venditore.
Numero Data Codice Nome Codice Nome Prezzo Codice Nome Quantità
d'ordine cliente cliente prodotto prodotto unitario venditore venditore
80 capitolo 3
D9
La tabella seguente rappresenta un sistema per la ricezione degli ordini. Normalizzala
fino alla terza forma normale. Ipotizza che i prodotti siano classificati per codice
prodotto.
Numero Data Codice Nome Codice Nome Prezzo Codice Nome Quantità
d'ordine cliente cliente prodotto prodotto unitario categoria categoria
prodotto prodotto
Hai imparato come si progetta un database! Tuttavia questo non basta, avrai bisogno di
progettare una struttura dettagliata dei file che formeranno il database e stabilire i metodi
per l'esportazione e l'importazione dei dati. In generale, è possibile dividere la progettazione
di un database in tre parti: lo schema concettuale, lo schema interno e lo schema esterno.
Lo schema concettuale si riferisce alla modellizzazione del mondo reale. Più
precisamente, è un modo per determinare la struttura logica di un database. Lo schema
concettuale viene progettato prendendo in considerazione la concezione del mondo basata
sul modello E-R e la normalizzazione di una tabella.
Lo schema interno si riferisce al database visto nell'ottica di un computer. Nello
specifico, è un modo per determinare la struttura fisica di un database. Lo schema interno
viene progettato dopo che si è creato un metodo di ricerca ad alta velocità dei dati contenuti
nel database.
Lo schema esterno si riferisce al database visto nell'ottica dei suoi utenti o delle
applicazioni che si interfacciano con lui. Lo schema esterno viene progettato dopo che sono
stati creati i dati necessari per i programmi applicativi.
riassumendo
progettiamo un database! 81
risposte
Q1 membro del Q2 Q3 Q4
personale
libro studenti cliente
1 m m 1
N N N N
m m
insegna- gestione
tmento
1 1
profesSore banca
D7
82 capitolo 3
D8
D9
progettiamo un database! 83
progettare un database
In questo capitolo hai imparato come si progetta un database relazionale. Esistono
tuttavia altri metodi di progettazione. L'efficienza e la praticità d'uso di un database
dipendono dall'analisi e dal metodo di progettazione, quindi è importante creare un
database adatto alle proprie esigenze sin dalla fase di progettazione.
In questa fase ti viene chiesto di svolgere diversi altri compiti, oltre alla
progettazione delle tabelle. Per esempio, devi considerare il tipo di dato da usare nella
tabella. Dovrai anche specificare quali colonne contengono valori numerici, quali valute
o campi di testo. Dovrai anche ideare un metodo che ti consenta di eseguire ricerche
in modo veloce. A volte dovrai progettare il tuo database tenendo in considerazione
l'organizzazione fisica dei file. Dovrai inoltre controllare l'accesso ai dati dei vari utenti,
per ragioni di sicurezza. Ci sono molti fattori da tenere in considerazione quando si
progetta un database. Nei capitoli seguenti ne affronteremo alcuni.
84 capitolo 3
4
impariamo il linguaggio sql!
sql: coMe usARlo
passeggiare
in città mi
ricorda
sempre la mia
infanzia.
m
ah ah ah! o
lt
principessa!
ia
n
principessa
n
if
la scuola per
sgattaiolare fuori
dal castello.
scapp
puff
puff
puff
Pant
Pant
Pant
seguire la mi segui solo
sai che c'è, cain? se principessa è perché devi
devi solo sgridarmi uno dei compiti farlo?
puoi anche tornare del suo
indietro! assistente! pensavo mi
seguissi be'...
perché eri
uffA! mio amico.
gasp
Pant
insom-
m-ma... ma...
senso del dovere!
Swish!
Principessa.... ahio!
l'ho trovata,
principessa
ruruna!
!
M
O
O
i-igor, il
comandante
B
delle guardie!
gulp!
oh, davvero?
...
da quando ero
una bambina...
torniamo ...cain si
a casa, è sempre
principessa... preso cura
di me.
88 capitolo 4
ma cosa mi
qualcosa
oh, no, no... succede...
non va?
cosa?
ah ah ah
!!
...niente!
Princip
e
Ra mine ah ah ah
ss...
c h e fu
sto !!!
w ow
RaMiNess!!
iihhh
iihhh
oh, no,
come viene da
state, cain! entriamo in
questa dedichiamo un
incantevoli questo caffè.
parte. po' di tempo
signorine?
allo studio dei
database.
le
i nk
tw
cosa?
iiik
aaa !
hh!
ah
ah
ah
eccomi qua!
oh, un
nuovo
posto
dove
eccovi qui! studiare! flit
Fl
ap
si sta
bene,
fuori.
finalmente...
allora, a questo il prossimo passo
punto possiamo è capire come Hip, hip,
progettare un usare il database urrà!
puoi dirlo
forte!
quando usi un
database devi
inserire o per farlo, squalo??
recuperare dati, useremo sql.
ma questo già lo
sapete. sembra
complicato...
ih ih
90 capitolo 4
lità allo stesso
per esempio, loca re
n ea modo, noi usere-
quando fate due bal
chiacchiere nella mo un linguaggio
località balneare chiamato
dall'altra parte oh, parli il
structured
del mare... balnearese. query language
(sql)...
Splish,
splash....
...dovete
...per
parlare in
dialogare con davvero?
balnearese.
il database.
eccezionale!!!
ma certo,
lo so!
1104 3/10 12
tabella
1105 3/12 25 prodotti
N. registrazione
codice
Quantità
102 fragola 150Au
prodotto
103 mela 120Au
1101 101 1.100
104 limone 200Au
1101 102 300
ma... si
usando sql potrete direbbe un
dialogare con sacco di
il database, in lavoro.
relazione a questi
tre compiti...
SQ
L pe
• c r me
sembra proprio re
ar
e t tt
che si possa fare
• in
se
ab
ell ed
• g
rir
e e e i
di tutto! es
tir
d e
st
e g ra
li rr
ute e d
nti ati
non c'è
problema.
be'... è vero...
e voglio ho già inserito le
abbiamo
cominciare prima tabelle e i dati che
imparato un
possibile a usare abbiamo redatto.
sacco di cose!
il mio database.
Bip
questo
è lo
spirito
giusto!
vediamo come
recuperarli.
esatto.
92 capitolo 4
la ricerca dei dati
signor
come si fa? database...
...ti preghiamo di
estrarre la colonna
coi nomi dei prodotti...
ma non dovete
pregare! basta
usare sql...
bisogna
scrivere
così: SELECT nome_prodotto
FROM prodotti;
quest'istruzione sql
in sql, ogni consiste di due gruppi
richiesta che viene di parole: select
fatta si chiama nome_prodotto e
istruzione (o from prodotti.
comando).
nome
ed ecco i dati che prodotto
otteniamo.
siamo riusciti a Melone
recuperare tutti i
nomi dalla tabella fragola
prodotti.
mela
ecco
fatto! limone
se dovessimo
vari tipi... chiedere una lista
stiamo dialogando
mmm. dei prodotti che
con il database
usando sql. hanno un prezzo
unitario maggiore
o uguale a
200au?
allora,
proprio così, per maggiore
esistono molti esempio, o uguale a
200au
tipi di frase per
recuperare i
dati necessari.
94 capitolo 4
in questo caso in questi casi devi
non ti interessano sì, esatto. specificare le tue
i dati di tutti i condizioni usando
prodotti. la frase where.
per esempio:
vuoi solo
quelli che
hanno un
prezzo unitario
uguale o
superiore a
200au.
mmm...
grazie a questa
istruzione
ecco qui
basta usare il recupererai dalla
carattere “*”! Ecco tabella tutti i
come si fa. prodotti...
B a ng
!!
prodotti che costano 200au
o più
SELECT *
codice nome prezzo
prodotto prodotto unit.
FROM prodotti
101 Melone 800au
WHERE prezzo_unitario>=200
104 Limone 200au
...che hanno un
quindi, prezzo unitario
uguale o superiore
a 200au.
quindi allo
dobbiamo imparare
stesso modo
a scrivere le
puoi estrarre
condizioni.
i prodotti che
costano meno di
200au.
WHERE prezzo_unitario<200
esatto, basta
fare così! infatti...
in questo modo
recuperiamo le
mele!
esattamente.
96 capitolo 4
e se non sai di che si fa in
preciso come quel caso?
si chiama un
prodotto?
usi la
parola like in
combinazione con
un simbolo.
davvero comodo!
mele e fragole
in un baleno!
visto?
ottimo!
voglio veramente? mi fa
piacere!
sapere di
più su sql,
tico!
che ne dici di
questo?
317,5
SELECT AVG(prezzo_unitario)
FROM prodotti;
ecco il prezzo
unitario medio dei
prodotti.
98 capitolo 4
sono molte le
non avevo idea cose che non
che il prezzo so, anche se in sql c'è anche
medio fosse succedono nel una funzione che
questo... mio paese. aggrega i risultati.
5 ,71 3
esatto. non è
comodo?
quindi puoi
ma certo, per esempio...
ottenere altri dati
oltre al valore
medio?
...il numero di oggetti,
la somma, la media, il
valore massimo e il
valore minimo possono
essere estratti
utilizzando una funzione
di aggregazione.
Funzione Descrizione
COUNT(*) Restituisce il numero di righe
COUNT(nome_colonna) Restituisce il numero di volte in cui la colonna contiene un valore
COUNT(DISTINCT nome_colonna) Restituisce il numero di valori distinti nella colonna
SUM(nome_colonna) Restituisce la somma dei valori di tutte le righe nella colonna
AVG(nome_colonna) Restituisce la media dei valori di tutte le righe nella colonna
MAX(nome_colonna) Restituisce il valore massimo nella colonna
MIN(nome_colonna) Restituisce il valore minimo nella colonna
così... wow!
Sping Sping
sping... sping...
puoi anche
sql permette di capisco, le
raggrupparli per
aggregare i dati, funzioni di
poterli analizzare
dando accesso aggregazione
o manipolare
a un sacco di sono utili.
ulteriormente.
informazioni.
ma...
okay, allora...
100 capitolo 4
unire le tabelle
risultati di vendita.
Uh-oh!
a-
stin
de ioni
z
i di
vendite risu ltat
prodotti
vendita
se la stessa colonna
unisci le tabelle
appare in più di una
elencandole tabella, lo specifichi
separate da una come nome_tabella.
virgola. nome_colonna.
regno di
1101 3/5 12 minanmi
102 fragola 150au 300
regno di
1103 3/8 25 ritol
104 limone 200au 500
regno di
1104 3/10 12 minanmi
101 Melone 800au 2.500
regno di
1105 3/12 25 ritol
103 mela 120au 2.000
regno di
1105 3/12 25 ritol
104 limone 200au 700
possiamo recuperare
è la stessa tabella i dati relativi alle vendite
dalla quale siamo anche gestendo i prodotti,
partiti, l'abbiamo le destinazioni e le vendite in
ricreata! modo autonomo e
indipendente.
splendido!
Wow!
creare una tabella
come ci sei
quindi avevi già
se ricordo bene, inserito i dati riuscita?
tico, questa l'hai all'interno, o
creata usando sbaglio?
sql, giusto?
con l'istruzione
create table puoi
creare una tabella.
esatto.
* vedi pagina 115 per una spiegazione dettagliata delle istruzioni per creare le tabelle.
proprio
così.
puoi anche
cancellare (con
INSERT INTO prodotti (codice_prodotto,nome_prodotto, l'istruzione delete) e
prezzo_unitario) aggiornare (istruzione
VALUES (101, 'melone', 800); update) i dati.
e usando sql
puoi modificare il
prezzo unitario.
melone è stato
inserito nella
tabella prodotti
così.
104 capitolo 4
l'istruzione select
ora potete è la parte più
gestire le vostre importante di sql,
esportazioni con quindi studiatela
un database. con attenzione.
ne avete di
strada da
fare...
lo
farò.
usando sql
santo cielo,
al suo pieno
guarda
potenziale
com'è tardi!
saremo in
grado di
gestire...
...altrimenti igor,
torniamo al il comandante
castello prima delle guardie,
che faccia si arrabbierà di quel vecchio
buio... nuovo. prepotente...
sì, in cain!!
effetti...
Clang,
forza, clang...
muoviamoci.
okay,
andiamo.
panoramica su sql
In questo capitolo la Principessa Ruruna e Cain hanno imparato a usare SQL (Structured
Query Language), un linguaggio usato per operare sui database relazionali. I comandi SQL
si possono suddividere in tre gruppi:
Data Control Language (DCL) per gestire l'accesso da parte degli utenti
SQL possiede le istruzioni per creare la struttura di un database e un'istruzione
specifica per creare tabelle all'interno di un database. Puoi anche usare questo linguaggio
per modificare o cancellare una tabella. Il linguaggio deputato a queste funzioni si chiama
Data Definition Language (DDL).
SQL include anche istruzioni per inserire, modificare e cancellare i dati, nonché un
comando che consente la ricerca dei dati. Il linguaggio deputato a queste funzioni si chiama
Data Manipulation Language (DML).
Per finire, SQL offre la possibilità di controllare un database in modo da scongiurare
conflitti tra i dati anche quando più persone lo stanno utilizzando contemporaneamente. Il
linguaggio deputato a queste funzioni si chiama Data Control Language (DCL).
La Principessa Ruruna e Cain hanno cominciato a impratichirsi con SQL usando una
funzione elementare di ricerca dati. Per effettuare una ricerca con SQL bisogna inserire una
cosiddetta istruzione (o combinazione di frasi). Per ricercare un prodotto specifico con un
prezzo unitario di 200Au, per esempio, bisogna usare la seguente istruzione SQL.
SELECT *
Un'istruzione SQL è una
FROM prodotti
combinazione di frasi.
WHERE prezzo_unitario=200
L'istruzione SELECT è la più elementare delle istruzioni SQL. Specifica quale colonna,
da quale tabella (FROM) e sulla base di quali condizioni (WHERE). Puoi combinare queste
frasi per interrogare un database in modo molto intuitivo (anche un utente non molto
avvezzo all'uso dei database può utilizzare quest'istruzione per recuperare dati).
106 capitolo 4
stabilire le condizioni
Come ha detto Cain, "dobbiamo imparare a scrivere le condizioni". Scopriamo alcuni modi
per farlo in SQL.
operatori di confronto
operatori logici
In certi casi è necessario esprimere condizioni più complesse del semplice confronto. Puoi
usare gli operatori logici (AND, OR e NOT) per creare condizioni combinate più elaborate,
come evidenziato nella seguente tabella.
operatori logici
caratteri jolly
le ricerche
Esistono molti altri metodi per ricercare dati. Per esempio, puoi specificare un intervallo
di valori con BETWEEN X AND Y. Se specifichi l'intervallo come mostrato nell'esempio
seguente, puoi estrarre i prodotti con prezzo unitario maggiore o uguale a 150Au e minore
di 200Au.
SELECT *
FROM prodotti
WHERE prezzo_unitario
BETWEEN 150 AND 200; Specifica un intervallo di ricerca.
Puoi anche specificare che stai cercando i prodotti il cui prezzo unitario è zero, grazie
all'operatore NULL.
SELECT *
FROM prodotti
WHERE prezzo_unitario is NULL; Cerca un valore vuoto.
108 capitolo 4
domande
Adesso prova a creare delle istruzioni SQL usando diversi tipi di condizioni. Partiamo dalla
Tabella Destinazioni riportata qui sotto (l'unità di misura per la popolazione è 10.000
abitanti). Rispondi alle domande usando istruzioni SQL. Troverai le risposte a pagina 119.
tabella destinazioni
D1
Estrai la tabella qui sotto per trovare gli stati con un numero di abitanti maggiore o
uguale a 1 milione.
D2
Estrai la tabella qui sotto per trovare gli stati con un numero di abitanti minore di 1
milione.
D3
Trova gli stati in cui il codice destinatario è minore di 20 e il numero di abitanti
maggiore o uguale a 1 milione.
D4
Trova gli stati in cui il codice destinatario è maggiore o uguale a 30 e il numero di
abitanti maggiore di 1 milione.
D5
Quanti sono gli abitanti del Regno di Ritol?
D6
Trova gli stati i cui nomi contengono la lettera n.
SELECT COUNT(*)
COUNT(*)
FROM prodotti
WHERE prezzo_unitario>=200; 2
tabella prodotti
Per ottenere il prezzo unitario medio per ognuno dei distretti della Tabella Prodotti,
specifica la colonna Distretti e usa la funzione AVG comandata dalla frase GROUP BY. In
questo modo i dati saranno raggruppati per distretto e otterrai il valore medio relativo a
ogni singolo distretto.
Distretti AVG(prezzo_unitario)
SELECT distretto,AVG(prezzo_unitario)
Mare del Sud 332,5
FROM prodotti Permette di
GROUP BY distretto; Mare del Nord 110
raggruppare.
Centrale 155
110 capitolo 4
E se volessi ulteriormente restringere questi risultati sulla base di una proprietà
particolare? Immagina di voler trovare i prodotti il cui prezzo unitario medio regionale è
maggiore o uguale a 200Au. In questo caso non dovrai specificare una condizione nella
frase WHERE, ma usare al suo posto la frase HAVING. Questo ti permetterà di estrarre solo
i distretti in cui la media rispetta il tuo requisito.
SELECT distretto,AVG(prezzo_unitario)
FROM prodotti Distretto AVG(prezzo_unitario)
GROUP BY distretto; Filtra i risultati già Mare del Sud 332,5
HAVING AVG(prezzo_unitario)>=200; raggruppati.
domande
Rispondi alle seguenti domande usando questa Tabella Destinazioni Esportazione (l'unità di
misura per la popolazione è 10.000 abitanti). Troverai le risposte a pagina 120.
D7
Quanti abitanti ha lo stato meno popoloso?
D8
Quanti abitanti ha lo stato più popoloso?
D9
Qual è il totale degli abitanti di tutti gli stati presenti nella Tabella Destinazioni
Esportazione?
D10
Qual è la popolazione totale degli stati il cui codice destinatario è maggiore di 20?
D11
Quanti stati presentano una popolazione maggiore o uguale a 1 milione?
D12
Quanti stati ci sono nel distretto del Mare del Nord?
D14
Qual è la popolazione totale di tutti gli stati escluso il Regno di Ritol?
D15
Trova i distretti in cui la popolazione media è maggiore o uguale a 2 milioni.
D16
Trova i distretti che contengono almeno tre stati.
In aggiunta a quelli che abbiamo già visto, esistono in SQL altri metodi più sofisticati per
interrogare un database.
Puoi usare queste due tabelle per recuperare i nomi dei prodotti le cui vendite
superano o sono uguali a 1.000 unità. La seguente istruzione SQL eseguirà la ricerca.
112 capitolo 4
In quest'istruzione SQL viene prima eseguita l'espressione SELECT tra parentesi.
Il codice prodotto nella Tabella Risultati di Vendita viene cercato per primo, e da questa
ricerca vengono estratti i codici 101 e 103 (sono gli unici in cui il venduto supera le 1.000
unità).
Questi codici prodotto vengono poi usati come parte della condizione dell'istruzione
SELECT fuori dalle parentesi. IN indica che la condizione è soddisfatta quando un record
corrisponde a uno dei valori inclusi tra parentesi. Quindi i prodotti corrispondenti ai codici
prodotto 101 e 103 saranno restituiti come risultato della query intera.
In altre parole, quando c'è una subquery il risultato dell'istruzione SELECT tra
parentesi verrà trasmesso all'altra istruzione SELECT per continuare la ricerca. Il risultato di
questa ricerca è esposto nella tabella seguente.
Vediamo come viene elaborata questa subquery. In una subquery correlata viene
prima eseguita la query esterna.
u SELECT *
FROM risultati_vendita U
Il risultato è mandato alla query interna per essere valutato riga per riga. Analizziamo
ora come viene elaborata la prima riga, ovvero il codice prodotto 101.
Il codice prodotto nella prima riga è 101 (melone). Il venduto medio per i meloni è pari
a 1.800 unità e questo risultato è ora inviato come condizione alla query esterna.
v WHERE quantita>(1.800)
Questo processo viene iterato per tutte le righe della Tabella Risultati di Vendita: i passi
v e w vengono dunque eseguiti per tutti i codici prodotto. In altri termini, questa query
estrae le registrazioni relative a frutti che sono stati venduti in misura maggiore alla media
di vendita per quel frutto particolare.
Di conseguenza solo la quinta, la sesta e la settima colonna di u sono estratte.
domande
Adesso rispondi alle seguenti domande, basate sulla Tabella Prodotti e sulla Tabella
Risultati di Vendita. Troverai le risposte a pagina 122.
D17
Trova i risultati di vendita dei frutti il cui prezzo unitario è maggiore o uguale a
300Au ed estrai la tabella qui sotto.
D18
Ottieni i volumi medi di vendita suddivisi per prodotto, e trova i prodotti che
presentano volumi di vendita inferiori alla media.
unire le tabelle
Dopo aver condotto una ricerca grazie a SQL, la Principessa Ruruna e Cain hanno generato
un resoconto delle vendite combinando le tabelle. Unire le tabelle combinando colonne con
lo stesso nome è un'operazione chiamata equi-join. In un'equi-join la condizione dev'essere
l'uguaglianza delle righe. Riunire in un'unica colonna più colonne dallo stesso nome è invece
definita natural join.
114 capitolo 4
Il metodo con cui vengono selezionate solo righe aventi un valore in comune (come nel
caso di una equi join) si chiama inner join.
Invece, il metodo che mantiene tutte le righe di una tabella e specifica un valore vuoto
per le righe non incluse in un'altra tabella si chiama outer join. Se metti una tabella creata
grazie a un outer join a destra o a sinistra di un'istruzione SQL, otterrai una left outer join o
una right outer join, a seconda di quali righe vengono mantenute.
Left Right
outer join outer join
Alla fine la Principessa Ruruna e Cain hanno imparato a usare l'istruzione che consente
di creare una tabella, CREATE TABLE. La sintassi di un'istruzione CREATE TABLE spesso
dipende dal tipo di database in uso. Vediamo un esempio:
Quando crei una tabella devi sempre specificare i nomi delle colonne. Puoi anche
specificare una chiave primaria e una chiave esterna per ogni colonna. In questo esempio
il codice prodotto viene specificato come chiave primaria e il valore del codice prodotto non
può essere null. Quando crei una tabella spesso hai bisogno di includere una delle seguenti
condizioni.
Vincolo Descrizione
PRIMARY KEY Stabilisce una chiave primaria
UNIQUE Deve essere univoco
NOT NULL Non accetta un valore NULL
CHECK Verifica che il valore stia in un intervallo
DEFAULT Inserisce un valore di default predefinito
FOREIGN KEY REFERENCES Stabilisce una chiave esterna
Queste condizioni sono chiamate vincoli. Stabilire dei vincoli quando si crea una tabella
consente di evitare conflitti sui dati e aiuta nella corretta gestione del database.
Quando inserisci, aggiorni o cancelli una riga, non puoi violare i vincoli espressi dalla
istruzione CREATE TABLE. Se un prodotto con codice prodotto 200 esiste già, non riuscirai
ad aggiungere ciliegia, visto che non è possibile avere duplicati fra le chiavi primarie.
Quando inserisci, aggiorni o cancelli i dati in un database devi sempre tenere conto dei
vincoli.
116 capitolo 4
creare una vista
Basandoti sulla tabella che hai creato con l'istruzione CREATE TABLE, puoi anche creare
una tabella virtuale che esiste soltanto quando viene visualizzata da un utente. Queste
tabelle si chiamano viste, e la tabella da cui una vista deriva si chiama tabella di base.
La Tabella Prodotti Costosi è una vista basata sulla Tabella Prodotti, che rappresenta
la tabella di base. È stata creata estraendo dalla Tabella Prodotti i record in cui il prezzo
unitario è uguale o superiore a 200Au.
Una volta creata la vista dei Prodotti Costosi puoi ricercare al suo interno i dati con le
stesse modalità con cui accederesti a una tabella base.
Può essere comodo creare una vista quando vuoi rendere pubblica solo una parte dei
dati contenuti in una tabella.
domande
Crea le istruzioni SQL relative alle seguenti domande (l'unità di misura per la popolazione è
10.000 abitanti). Troverai le risposte a pagina 123.
D19
La Tabella Destinazioni qui sotto è stata creata usando l'istruzione CREATE TABLE.
Aggiungi i dati qui sotto.
tabella destinazioni
D20
Partendo dalla Tabella Destinazioni della Domanda 19, crea una vista chiamata
Nazioni del Mare del Nord che contiene le nazioni appartenenti al distretto del Mare
del Nord.
tabella destinazioni
D21
Modifica la popolazione del Regno di Tokanta nella Tabella Destinazioni portandola a
1,5 milioni.
D22
Cancella nella Tabella Destinazioni tutti i dati relativi al Regno di Paronu.
118 capitolo 4
riassumendo
risposte
D1
SELECT *
FROM destinazioni
WHERE popolazione>=100;
D2
SELECT *
FROM destinazioni
WHERE popolazione<100;
D3
SELECT *
FROM destinazioni
WHERE codice_destinatario<20
AND popolazione>=100;
D4
SELECT *
FROM destinazioni
WHERE codice_destinatario>=30
AND popolazione>100;
Nessuno dei paesi soddisfa questi criteri e la query restituisce l’insieme vuoto.
Popolazione
150
D6
SELECT *
FROM destinazioni
WHERE nome_destinatario LIKE '%n%';
D7
SELECT MIN(popolazione)
FROM destinazioni;
MIN(popolazione)
80
D8
SELECT MAX(popolazione)
FROM destinazioni;
MAX(popolazione)
300
D9
SELECT SUM(popolazione)
FROM destinazioni;
SUM(popolazione)
1.350
120 capitolo 4
D10
SELECT SUM(popolazione)
FROM destinazioni
WHERE codice_destinatario>20;
SUM(popolazione)
1.050
D11
SELECT COUNT(*)
FROM destinazioni
WHERE popolazione>=100;
COUNT(*)
7
D12
SELECT COUNT(*)
FROM destinazioni
WHERE distretto='Mare del Nord';
COUNT(*)
3
D13
SELECT MAX(popolazione)
FROM destinazioni
WHERE distretto='Mare del Nord';
MAX(popolazione)
240
SUM(popolazione)
1.200
D15
SELECT distretto, AVG(popolazione)
FROM destinazioni
GROUP BY distretto
HAVING AVG(popolazione)>=200;
Distretto AVG(popolazione)
Centrale 250
D16
SELECT distretto, COUNT(*)
FROM destinazioni
GROUP BY distretto
HAVING COUNT(*)>=3;
Distretto COUNT(*)
Mare del Nord 3
Mare del Sud 3
D17
SELECT *
FROM risultati_vendita
WHERE codice_prodotto IN
(SELECT codice_prodotto
FROM prodotti
WHERE prezzo_unitario>=300);
122 capitolo 4
D18
SELECT *
FROM risultati_vendita U
WHERE quantita<
(SELECT AVG(quantita)
FROM risultati_vendita
WHERE codice_prodotto=U.codice_prodotto);
D19
INSERT INTO destinazioni(codice_destinatario,
nome_destinatario,popolazione,distretto)
VALUES(12,'Regno di Minanmi',100,'mare del sud');
INSERT INTO destinazioni(codice_destinatario,
nome_destinatario,popolazione,distretto)
VALUES(15,'Regno di Paronu',200,'centrale');
INSERT INTO destinazioni(codice_destinatario,
nome_destinatario,popolazione,distretto)
VALUES(22,'Regno di Tokanta',160,'mare del nord');
INSERT INTO destinazioni(codice_destinatario,
nome_destinatario,popolazione,distretto)
VALUES(23,'Impero Alfa',120,'mare del nord');
D20
CREATE VIEW nazioni_mare_nord(codice_destinatario,
nome_destinatario_popolazione)
AS SELECT codice_destinatario,nome_destinatario,popolazione
FROM nome_destinatario
WHERE distretto='mare del nord';
D21
UPDATE destinazioni
SET popolazione=150
WHERE nome_destinazione='Regno di Tokanta';
D22
DELETE FROM destinazioni
WHERE nome_destinatario='Regno di Paronu';
124 capitolo 4
5
facciamo funzionare un
database!
Che cos'è una transazione?
Click, click,
click...
Biip
Biip
Click,
click,
clack,
click...
Click, clack,
click...
guarda,
questi sono due
nuovi ordini.
ma insomma,
sì, signora, li sai fare solo
alla fine siamo
inserisco subito entrate a
riusciti a imparare
nel database. effetto?!
come si usa un Tico!
database, eh?
scusa.
che
cavolo!
aagh!
*
*Hop!
126 capitolo 5
...anche se per esempio, mi
però devo dobbiamo chiedo come faccia a
ringraziarti... imparare funzionare un database
ancora quando ci sono così
molto. tanti utenti collegati
contemporaneamente.
e in effetti,
anche la
questione
della sicurezza
mi preoccupa.
be', per
comprendere
si direbbe che siate meglio il
problema...
preoccupati per il
database. a-hem!
...ho fatto
qualche oh,
più o ricerca. davvero?
meno.
F la s
h!
come fa un database a
consentire l'accesso
di tanti utenti ho preparato
contemporaneamente? anche delle
illustrazioni per
aiutarvi meglio a
capire!
oh, ma è
splendido!
il teatro
oh! del
database
mi piacciono
gli spettacoli!
andiamo a
cominciare. un giorno,
andy e becky database
accedono a un
Clap, database nello
clap, stesso istante.
clap accesso
evviva!
poi
saranno
40.
voglio
30 mele solo
intanto anche becky legge aiutare!
ne
il valore 30 delle mele e vedo
ne aggiunge 10. 30 ma è
giusto?
40 mele.
128 capitolo 5
non ma allora dove
dovrebbero esatto.
sono finite le
essere 50? altre 10 mele?
andy ne ha
forza,
aggiunte 10, ragiona!
e 10 anche
becky.
vediamo...
le ha impossibile!
mangiate perché non ci
cain! sono mai state!
io?! j'accuse!
aggiun-
gi 10.
infatti, becky
non può operare sul Database
database in questa in questo modo
sequenza, mentre andy le sue 10 mele
sta lavorando. non sarebbero
scomparse.
quindi la domanda è:
per consentire a come fa un database
becky e andy di a controllare le
utilizzare insieme operazioni degli
il database, utenti?
oggi cain
è in gran
forma.
una sequenza indivisibile
innanzitutto, di operazioni sui dati viene
un database è chiamata transazione.
progettato
per elaborare
le operazioni
raggruppandole.
giàggià.
transazione?
nel
nostro esempio,
abbiamo visto
una transazione
che comprende leggi leggi
un'operazione di il il
dato. dato.
lettura, di addizione
transazione
e di scrittura.
transazione
ag- ag-
giungi giungi
10. 10.
scrivi scrivi
il risul- il risul-
tato. tato.
quindi le
operazioni di mentre le operazioni
andy formano una di becky ne formano
transazione, un'altra.
130 capitolo 5
che cos'è un blocco?
capisco.
"lock" come il
"lucchetto" della
chiave?
esattamente.
provo a
spiegarmi
puoi bloccare i Da usando l'esempio
Dato to
dati per evitare precedente.
che vengano
hai
elaborati disegnato
erroneamente. un sacco
di schemi!
non lo
sapevo.
Flip
Flip
30 mele
30 mele
sto
aspettando
in coda!
sto aspettando che
andy finisca.
aggiungo 10.
40 mele 40 mele
aggiungo 10.
50 mele
becky potrà eseguire
le sue operazioni solo
dopo che andy avrà
completato le sue.
50 mele
proprio
così.
132 capitolo 5
Database
blocco
condiviso
posso
posso scrivere?
leggere?
cco
blo ivo
bl lu s
es occ
cl e sc
us o
ivo
posso posso
leggere? scrivere?
ah, capisco,
ci sono tipi
diversi di quando un blocco
blocchi. viene usato per controllare
due o più transazioni, si
parla di controllo di
concorrenza.
in effetti
ha senso.
sì, tico?
134 capitolo 5
è davvero
devi avere ti do questa affidabile!
studiato un impressione? non credi, bene,
sacco! ruruna? continua!
no, volentieri.
direi
veramente no. di sì...
per esempio...
a-ha.
...mentre becky cosa
poi andy prova prova a disporre
a disporre un succederà a
un blocco questo punto?
blocco esclusivo esclusivo sulle
sulle fragole... mele.
blocc
o
ccat ato
blo
be'...
fammi
pensare...
esatto!
questa
per esempio, puoi
situazione
prende il nome cercare delle
di deadlock, e transazioni che quando cancelli
non può essere sono rimaste una transazione,
risolta finché in coda per un hai eseguito un
uno dei blocchi determinato rollback.
non viene periodo...
rilasciato.
CA
NC
EL
...e cancellarle!
la
rollback?
r
e
136 capitolo 5
stai dicendo sì! per esempio, se una
che si possono transazione per "scontare i
cancellare in una frutti che hanno un prezzo
volta tutte le minore o uguale a 150au" è
operazioni in una fallita...
transazione?
capisco.
operazione
quindi il database
si comporta se succede
come se nessuna qualcosa durante
operazione una transazione
fosse stata che ne impedisce la
eseguita? chiusura,
allora viene
operazione
eseguito un
rollback,
sì, più o invece del
meno. normale
commit.
benissimo! ora,
esatto. una mia cara tico,
transazione il prossimo
finisce sempre argomento è...
con un'operazione
di commit o di
rollback.
uh-ehi!
capisco. anche quando
è condiviso tra un
grande numero di
utenti, un database può
evitare problemi se
è stato progettato
correttamente.
mmm
perché sono
rapido come un
???
fulmine.
non ti
arrabbiare, guarda qui.
su!
la nostra
tabella
codice prodotto nome prodotto prezzo unitario
prodotti.
101 Melone 10.000Au
i prezzi? c
co o m
e
m e sta
le cifre nella lo i l
ne
colonna !
prezzo unitario
sono tutte
sbagliate!
oh, no!!!
cosa è
successo?
a causa delle
vostre fatture così
imprecise nella mia
nazione, che importa da
voi, è scoppiato
il caos.
non interessata
a compensazione
parziale di questo
disturbo...
principe
qualche raminess...
malintenzionato deve
aver sovrascritto
i dati senza
autorizzazione.
ma è
terribile!
ti comporti
come se ...siamo
io non
esistessi. profondamente
dispiaciuti.
140 capitolo 5
promettiamo di ...
migliorare la
sicurezza del
nostro database,
per impedire che una
cosa del genere si
ripeta di nuovo.
dici che
la prego di sistemerete tutto,
perdonarci! ma... non sono così
convinto... puoi
essere un po' più
preciso?
il problema è
per prima cosa
generato dal
dovremo instaurare
fatto che tutti
dei controlli
nel regno di kod
d'accesso, per
hanno libero
limitare il numero
accesso al
di utenti.
nostro database.
il che
tradotto...?
Database
...mi sembra
un'occasione
imperdibile per oh, ma
accettare di aspetta!
sposarmi e...
in questo modo
eviteremo qualsiasi
tipo di problema, e i sc
Sg u
il database resterà
condiviso.
142 capitolo 5
l'indicizzazione
quando sempre più capisco dove
persone useranno vuole arrivare...
il database e il
mi ignora
di nuovo...
volume dei dati
crescerà...
mmm...
...potrebbero
sorgere altri più aumenta il
problemi. volume di dati
gestiti...
no,
no,
no
così!
l'indice non è
...l'indicizzazione sembra quella cosa
la soluzione più adatta. che si trova
in fondo a un
libro?
principessa... non fa
niente, davvero. perché
non parliamo del
nostro matrimonio,
invece?
indicizzazione? è vero.
ne
azio
alla voce tra n
s
transazione sono
riportate le pagine in n saz
ion
e
tra
cui viene usata quella
parola.
indice
pagina di
riferimento
e l'indice in
usando un indice un database
siamo in grado funziona allo
di trovare stesso modo.
agevolmente per esempio...
la pagina che
cercavamo!
?
proprio così.
144 capitolo 5
se crei indici per i
codici prodotto... ti dice dove si trovano
101 M quei dati nel disco.
elo ne
dover trovare un
l'indicizzazione aiuta dato scandagliando
a velocizzare le tutte le righe è
ricerche. una vera perdita di
vuole che
le ripeta da
tempo.
capo tutta la
spiegazione?
no, no...
uh-huh.
ehi, con
usando gli indici chi stai
e riducendo gli
possiamo ridurre parlando?
accessi alla
gli accessi alla
memoria, le
memoria. attenzione,
ricerche saranno principessa!
c'è qualcuno
più veloci! qui?
!
che
succede?
uh-oh.
c’è ancora
molto...?
psst
ma allora gli
psst
indici vanno bene
o
d'altro canto, creare sbaglio? o no?
troppi indici potrebbe
risultare poco
efficiente.
me l'ha
detto
tico!
146 capitolo 5
inutile che proviate
capisco, questo a sorprendermi!
database è più i database hanno
furbo di quanto anche altri
pensassi. problemi!
da dove è
spuntata
quella
rosa?
gulp!
il database... per dirne uno...
proprio
così.
Dati
terrore
Dati
Dati
capisco...
log, mmm...
i più importanti sono quelli
che registrano lo stato
dei dati prima e dopo un
aggiornamento.
mmm...
148 capitolo 5
in presenza di un
esistono vari metodi di
problema, per prima cosa
recupero, a seconda se
occorre riavviare il
la transazione fosse
sistema.
conclusa o meno.
Non mi
sembra poi
trans- così sveglio... Eh,
peccato. già.
che?
se il problema si è
lascia ora te lo verificato dopo la chiusura
stare,
non mostro... della transazione, questo significa
importa... che le operazioni di quella
transazione si sono completate
ri
b correttamente.
sc r i b
sc quindi puoi recuperare
i dati replicando le
operazioni sul database.
dato a
roll
forward
in questo
tipo di ripristino, il
database fa riferimento dato a
al valore dopo dopo
l'aggiornamento. l'aggiornamento
termini come
il sistema ripristina i
transazione o
dati e verifica che non
ripristino non
ci siano incongruenze.
mi sono molto
familiari.
uh-huh. mmm
sigh
finalmente
l'hai capito!
150 capitolo 5
be', visto come
stanno le cose, per
questa volta lascerò
correre.
santo
cielo...
...prima
ero serio,
quando
gulp!
ma... parlavo di
matrimonio!
...amo un'altra
persona!
raminess, mi
dispiace.
non posso
accettare la tua
proposta.
sguardo
appassionato
mi chiedo
chi... oh!
non si era
capito...?!
Strizz!
resterò per
sempre con cain, e grazie
al potere del nostro
database...
stai
dicendo...
...faremo fiorire e
prosperare il regno
di kod!
ma è come puoi
preferire
impossibile! un plebeo
perché devi
chiedergli
non... non puoi come cain? scusa,
cain?
farmi questo...
mi
dispiace. ecco, be',
no, certo,
mi scusi
non
dovrei...
scusa.
resta per
sempre
con me, sono una
cain. splendida
coppia.
sì, sì,
vostra
altezza!
peerché?
perchééé?
152 capitolo 5
le proprietà delle transazioni
La ricerca di Cain ha dimostrato che gli utenti di un database possono cercare, inserire,
modificare e cancellare i dati. Un insieme di operazioni eseguite con successo da un singolo
utente si chiama transazione.
Database
legGi
transazione
scrivi
atomicità
La prima proprietà necessaria in una transazione è l'atomicità, e implica che una
transazione deve sempre terminare con un commit o con un rollback, per scongiurare la
presenza di incongruenze nel database. Quindi, ognuna delle azioni di una transazione
dev'essere completata correttamente, altrimenti tutte le azioni vengono cancellate.
L'istruzione commit segna la fine corretta di una transazione, mentre l'istruzione
rollback cancella tutte le operazioni della transazione.
ComMit RolLback
domande
Rispondi a queste domande per verificare se hai compreso bene il concetto di atomicità.
Troverai le risposte a pagina 167.
D1
Scrivi un'istruzione SQL che può essere utilizzata per chiudere una transazione.
D2
Scrivi un'istruzione SQL che può essere utilizzata per cancellare una transazione.
coerenza
Una transazione non deve generare errori. Se il database era coerente prima
dell'esecuzione di una transazione, allora dovrà esserlo anche una volta che questa è stata
eseguita.
Cain ha fatto l'esempio di Andy e di Becky che cercano entrambi di aggiungere 10 mele
a un totale di partenza di 30 mele. Il database non restituisce il risultato corretto (50 mele),
ma ne mostra solo 40. Questo tipo di errori si chiama perdita di aggiornamento.
154 capitolo 5
30 mele 30 mele
30 mele
40 mele
40 mele
40 mele?
Quando due transazioni sono elaborate nello stesso momento può succedere che
entrambe vogliano accedere allo stesso record della stessa tabella. Questo può causare
conflitti nei dati.
Le tabelle e le righe che durante una transazione sono soggette a operazioni sono
chiamate risorse. In un database le transazioni devono essere in grado di accedere alla
stessa risorsa contemporaneamente senza creare incoerenze.
isolamento
Quando due o più transazioni vengono eseguite contestualmente e portano allo stesso
risultato che avrebbero se eseguite singolarmente, si dice che la loro sequenza di operazioni
è serializzabile. L'isolamento è una proprietà che richiede la serializzabilità, per proteggere il
database dagli errori.
Per ottenere questa serializzabilità, devi poter controllare le transazioni che vengono
effettuate nello stesso istante. Il metodo più comunemente usato a questo scopo è basato
sui blocchi. Un blocco condiviso si usa quando i dati vengono solo letti, altrimenti si usa un
blocco esclusivo.
Quando è in funzione un blocco condiviso, un altro utente può inserire blocchi condivisi
ad altre transazioni, ma non blocchi esclusivi. Quando è in funzione un blocco esclusivo,
nessun altro tipo di blocco può essere inserito. La tabella seguente riassume le relazioni
possibili tra blocchi di tipo condiviso ed esclusivo.
domande
Hai capito come funzionano i blocchi? Rispondi a queste domande, troverai le risposte a
pagina 167.
D3
Se Andy ha applicato un blocco condiviso, Becky può applicare un blocco condiviso?
D4
Se Andy ha applicato un blocco esclusivo, Becky può applicare un blocco condiviso?
D5
Se Andy ha applicato un blocco condiviso, Becky può applicare un blocco esclusivo?
D6
Se Andy ha applicato un blocco esclusivo, Becky può applicare un blocco esclusivo?
Per poter assicurare la serializzabilità di una sequenza di comandi, dobbiamo seguire delle
regole ferree quando impostiamo o rilasciamo dei blocchi. Una di queste regole si chiama
blocco a due fasi: per ogni transazione devono essere considerate due fasi: una in cui si
applicano i blocchi e una in cui questi blocchi vengono rilasciati.
Per esempio, immaginiamo che due risorse A e B siano entrambe sottoposte a
un blocco. La transazione osserva la regola del blocco a due fasi, a differenza della
transazione . La serializzazione può essere ottenuta solamente quando tutte le
transazioni seguono la regola del blocco a due fasi.
156 capitolo 5
u LOCK A v LOCK A
La fase di attivazione
LOCK B dei blocchi. READ A
READ A WRITE A
READ B UNLOCK A Qui i blocchi in "A"
WRITE A LOCK B sono stati rilasciati
WRITE B READ B prima dell'operazione
UNLOCK A La fase di rilascio WRITE B di scrittura in "B".
UNLOCK B dei blocchi. UNLOCK B
Esistono molti tipi di risorse che possono essere bloccate, per esempio puoi bloccare intere
tabelle o intere righe di dati. L'estensione delle risorse bloccate viene anche chiamata
granularità. Si definisce grezza quando implica il blocco di molte risorse allo stesso tempo, e
fine quando invece comporta il blocco di poche risorse.
I blocchi di singole
I blocchi di tabelle sono righe o insiemi di righe
definiti a granularità sono definiti a
grezza. granularità fine.
domande
D7
La risorsa destinataria di un blocco è stata modificata da una tabella a una riga. Cosa
succederà al numero di transazioni che sarà possibile operare contemporaneamente?
D8
La risorsa destinataria di un blocco è stata modificata da una riga a una tabella. Cosa
succederà al numero di transazioni che sarà possibile operare contemporaneamente?
Puoi utilizzare i blocchi per eseguire con efficacia due o più transazioni allo stesso tempo.
L'abuso dei blocchi, però, può portare a disagi nella gestione, visto il rischio di generare dei
deadlock, o situazioni di stallo. In presenza di un numero limitato di transazioni o di un alto
numero di operazioni di lettura ci son sistemi più semplici di controllo della concorrenza. In
questi casi specifici si possono usare i seguenti metodi:
Controllo sull’orario di accesso
Un'etichetta che contiene l'orario di accesso, chiamato in questo caso timestamp,
viene assegnata ai dati coinvolti durante una transazione. Se un'altra transazione
con un orario di accesso successivo ha già aggiornato i dati, l'operazione non verrà
permessa. Quando un'operazione di lettura o di scrittura non viene permessa, la
transazione si chiude con un rollback.
Controllo ottimistico
Questo metodo consente le operazioni di lettura. Quando viene tentata una scrittura,
viene controllata la presenza di altre transazioni occorse sul dato. Se un'altra
transazione ha già aggiornato il dato, la transazione si chiude con un rollback.
livelli di isolamento
Nell'uso comune puoi impostare il livello di transazioni che possono essere elaborate nello
stesso tempo. Questa impostazione si chiama livello di isolamento.
In SQL l'istruzione SET TRANSACTION può essere usata per specificare i livelli di
isolamento delle transazioni seguenti:
• READ UNCOMMITTED
• READ COMMITTED
• REPEATABLE READ
• SERIALIZABLE
• Una lettura sporca si verifica quando la transazione 2 legge una riga prima che la
transazione 1 sia chiusa con un commit.
• Una lettura non ripetibile si verifica quando una transazione legge lo stesso dato due
volte ottenendo un valore diverso.
• Una lettura fantasma si verifica quando una transazione cerca le righe che
corrispondono a una determinata condizione, ma trova le righe sbagliate per colpa delle
modifiche apportate da un'altra transazione.
158 capitolo 5
durabilità
Un database può gestire dati importanti, quindi è fondamentale poter garantire la sua
sicurezza e la persistenza dei dati in caso di problemi. La sicurezza è importante anche
quando si tratta di impedire a utenti non autorizzati di modificare i dati (generando
problemi di coerenza).
In un database puoi stabilire i diritti di accesso di tutti gli utenti. Aumentandone il
livello di sicurezza, Cain ha scongiurato possibili pericoli al database del Regno.
In un database relazionale, l'istruzione GRANT permette di assegnare i permessi di
lettura e scrittura agli utenti. Puoi usare quest'istruzione per regolare l'accesso degli utenti
alle tabelle che hai creato. Assegnare i permessi è un'operazione molto importante nella
gestione di un database.
Privilegi su database
Istruzione Risultato
SELECT Permette agli utenti di cercare le righe in una tabella
INSERT Permette agli utenti di aggiungere righe a una tabella
UPDATE Permette agli utenti di aggiornare le righe di una tabella
DELETE Permette agli utenti di cancellare righe in una tabella
ALL Assegna tutti i privilegi
reparto reparto
reparto esportazione
vendite
logistica
estere
Grazie alle viste, come descritte a pagina 117, hai accesso a una gestione ancora più
controllata e sicura. Per prima cosa, estrai parte di una tabella base per generare una vista.
Assegnare un privilegio per questa vista sottintende che il privilegio è assegnato anche nella
porzione selezionata di dati che contiene.
Vista Tabella base
domande
Prova a rispondere a queste domande sulla durabilità. Troverai le risposte a pagina 168.
D9
Scrivi un'istruzione SQL che consenta al Reparto Esportazione di cercare dati nella
Tabella Prodotti.
D10
Crea un'istruzione SQL per revocare al Reparto Vendite Estere il privilegio di
cancellare dati dalla Tabella Prodotti.
D11
L'amministratore della Tabella Prodotti ha assegnato i seguenti privilegi. Completa la
tabella seguente con SÌ o NO per indicare l'assenza o la presenza di un privilegio in
ognuno dei reparti indicati.
GRANT ALL prodotti TO reparto_vendite_estere;
GRANT INSERT, DELETE ON prodotti TO reparto_logistica;
GRANT UPDATE, DELETE ON prodotti TO reparto_esportazioni;
160 capitolo 5
in caso di disastro
Un database deve prevedere un meccanismo di protezione dei dati, nel caso si verifichi un
problema (fallimento). Per assicurare la durabilità delle transazioni è necessario impedire
che un fallimento possa generare dati non corretti o incompleti. Per proteggersi da queste
eventualità il database ha a disposizione diverse operazioni, che includono la creazione di
backup e di registri delle transazioni.
le tipologie di fallimento
Un fallimento può avvenire in diverse circostanze, tra le più comuni ci sono le seguenti:
• Fallimento di transazione (Transaction failure)
• Fallimento di sistema (System failure)
• Fallimento fisico (Media failure)
Una transaction failure avviene quando una transazione non può essere completata
per via di un errore nella transazione stessa. In questi casi viene eseguito un ripristino
(rollback).
Una system failure avviene quando il sistema si spegne, per esempio a causa di
un'interruzione dell'alimentazione. Quando succedono fallimenti di questo tipo, l'operazione
di recupero prende il via subito dopo il reboot del sistema. In genere le transazioni che non
erano state ancora chiuse al momento del fallimento vengono perdute (rollback), mentre
quelle che erano già state completate al momento del fallimento vengono confermate (roll
forward).
Una media failure avviene quando il disco che contiene i database è danneggiato. Nel
caso di un tale fallimento, il ripristino è eseguito utilizzando i backup. Per le transazioni
finalizzate dopo che i file di backup erano stati creati sarà eseguito un roll forward.
i checkpoint
Al fine di migliorare l'efficienza di un'operazione di scrittura in un database, spesso si
usa un buffer (un segmento della memoria predisposto a memorizzare dati temporanei).
Nel momento in cui il contenuto del buffer è sincronizzato a quello del database viene
fissato un checkpoint. Quando il database scrive un checkpoint non deve effettuare nessun
ripristino per tutte le transazioni finalizzate prima del checkpoint stesso. Le transazioni che
non si erano chiuse prima del checkpoint dovranno invece essere recuperate.
Ora, supponiamo che mentre sono in esecuzione le transazioni mostrate qui sotto,
avvenga un fallimento di sistema. Quali transazioni dovrebbero essere gestite con un
rollback? Quali con un roll forward?
Checkpoint Momento del fallimento Tempo
Start
T1
Start Commit
T2
Start Commit
T3
D12
Come dev'essere processata la transazione T1?
D13
Come dev'essere processata la transazione T2?
D14
Come dev'essere processata la transazione T3?
gli indici
Un database gestisce grandi quantità di dati, quindi la ricerca di uno specifico dato può
risultare molto laboriosa. Ma gli indici consentono di accelerare le ricerche!
Codice prodotto Nome prodotto Prezzo unit. Distretto
101 Melone 800Au Mare del Sud
102 Fragola 150Au Centrale
103 Mela 120Au Mare del Nord Ricercare un dato
104 Limone 200Au Mare del Sud una riga alla volta
richiede molto
201 Castagna 100Au Mare del Nord tempo!
202 Caco 160Au Centrale
301 Pesca 130Au Mare del Sud
302 Kiwi 200Au Mare del Sud
Un indice è uno strumento che consente di accedere velocemente alla posizione del
dato ricercato. Quando si esegue una ricerca in database molto grandi, l'uso degli indici
consente di trovare in fretta il dato desiderato.
162 capitolo 5
Esistono vari metodi di indicizzazione, tra cui i B-alberi e le tabelle hash. Un B-albero
si compone di nodi padre e di nodi figlio, i quali possono a loro volta avere dei nodi figlio. I
nodi sono disposti in ordine, ogni nodo padre contiene informazioni sul valore minimo e sul
valore massimo contenuto da tutti i suoi figli. Questo permette al database di raggiungere
in fretta la posizione desiderata, saltando intere sezioni dell'albero che sicuramente non
contengono il valore desiderato.
200 In un B-albero, la
posizione desiderata si
raggiunge in fretta.
L'indice hash invece consente di trovare la posizione del dato ricercato applicando una
funzione hash al valore chiave del dato. L'hash è unico, come le impronte digitali. Questo
metodo permette di eseguire ricerche molto specifiche, come per esempio la ricerca del
codice prodotto 101. Non è però progettato per funzionare efficacemente nei casi in cui la
ricerca usi condizioni comparative come codice prodotto maggiore di 101 o condizioni poco
definite come prodotti che finiscono per 'e'.
Funzione
hash
In certi casi usare un indice potrebbe non semplificare una ricerca: un indice non
permette di guadagnare tempo, a meno che la ricerca non sia circoscritta a una piccola
porzione dei dati. Esistono anche casi in cui gli indici devono essere ricreati ogni volta
che viene modificato un dato, e questo provoca un rallentamento nel processare un
aggiornamento.
D15
Quale indice sarebbe più efficace se la tua condizione fosse 'uguale a...', un B-albero
o un indice hash?
D16
Quale indice sarebbe più efficace se la tua condizione fosse 'diverso da...', un B-albero
o un indice hash?
tabelLa
unione vendite
proiezione
selezione
proiezione selezione
proiezione unione
164 capitolo 5
A prescindere dal risultato, procedere da 1 a 3 richiede in generale un tempo di
elaborazione più lungo, perché quando viene realizzata la prima unione si genera una
tabella intermedia che contiene moltissime righe. Invece, procedere da 3 a 1 richiede meno
tempo, perché la selezione e la proiezione provvedono a escludere dati non desiderati sin
dal principio. Quindi una medesima query può richiedere tempi di elaborazione diversi, a
seconda dell'ordine in cui l'unione, la selezione e la proiezione vengono eseguite.
In genere, il database dovrebbe seguire queste regole per stabilire l'ordine di
esecuzione ottimale:
• Eseguire prima la selezione, per ridurre il numero di righe.
• Eseguire prima la proiezione, per ridurre il numero di colonne non rilevanti al risultato.
• Posticipare l'unione.
Esistono diverse tecniche per eseguire proiezione, selezione e unione. Per la selezione
si possono avere ricerche per concordanza totale (full-match) o ricerche basate su indici.
Per l'unione sono disponibili i metodi seguenti.
i cicli annidati
Il metodo dei cicli annidati confronta una riga in una tabella a diverse righe in un'altra
tabella (vedi la figura qui sotto). Per esempio, uno dei valori in una riga della Tabella T1
viene usato per trovare righe equivalenti nella Tabella T2. Se i valori sono identici, allora
vengono unite le righe.
tabelLa t2
tabelLa t1
101
101
101
102
102 Tutte le righe
103 sono
102 confrontate a
104 ognuna delle
righe di T1.
101 101
102 101
Prima ordina e
103 102 poi confronta.
104 102
Hash
Un hash divide una delle tabelle utilizzando una funzione hash, e poi le collega con una riga
in un'altra tabella con lo stesso valore di hash. Questo metodo seleziona efficacemente le
righe che devono essere unite.
tabelLa t1 tabelLa t2
Funzione Funzione
hash hash
166 capitolo 5
l'ottimizzatore
Quando viene eseguita una query, ci sono diverse tecniche per ottimizzare la sua
performance. In un database, la funzione deputata all'ottimizzazione delle query si chiama
ottimizzatore. Gli ottimizzatori sono di due tipi.
Prima di eseguire le operazioni vengono stabilite alcune regole. Per esempio, alcune
operazioni possono essere combinate o rimescolate, così come spesso in un'espressione
algebrica gli operatori possono cambiare di posto senza modificare il risultato.
L'ottimizzatore cerca il modo più efficiente di elaborare la query senza modificarne il
risultato.
Questo metodo cerca di stimare quanto costa in termini di tempo eseguire la query, sulla
base di dati statistici raccolti dal database. La gestione basata sui costi può risultare più
flessibile di quella basata sulle regole, ma richiede un aggiornamento periodico dei dati
statistici da parte del database. La gestione e l'analisi di questi dati statistici richiede molto
tempo.
riassumendo
risposte
D1
COMMIT;
D2
ROLLBACK;
D3 Sì.
D4 No.
D5 No.
D10
D11
D12
Con un rollback, visto che la transazione non si era chiusa con un commit nel
momento del fallimento.
D13
Con un roll forward, visto che la transazione si era chiusa con un commit prima del
fallimento.
D14
Non è necessario alcun ripristino visto che è stata chiusa con un commit prima del
checkpoint.
D15
Hash.
D16
B-albero.
168 capitolo 5
6
i database sono ovunque!
*
delizioso!
questo frutto
*gnam slurp! viene dal regno!
padre!
no, no!
sì? che
succede?
anche tu vuoi
una banana,
ruruna?
padre, da
scusa, la
quando sei
frutta di
tornato non
kod non ha
hai fatto
paragoni!
altro che
ingozzarti di
frutta.
lo sospettavo,
tico è invisibile
a tutti tranne
che a me e a principessa
cain. ruruna.
tico è scomparsa! dove diamine si
sarà nascosta?
e non sembra
essere neppure
nel libro.
proverò a
cercarla di
nuovo in tutto il
castello.
scusate!
oh, mi scusi,
maestà.
vostra altezza,
quei due
sembrano...
...andare davvero
d'accordo, o
sbaglio? è sparita!
eh eh!
non si trova da
nessuna parte! avrei
voluto...
tico, dove te ne
sei andata così,
all'improvviso?
...almeno
dirle addio.
anch'io.
ma insomma,
!!!
chi state
cercando?
cosa? eccomi
qui!
Tico!
oh!
ih ih ih!
dove sei
stata?
sono stata
molto occupata,
sapete?
oh,
capisco.
davvero?
174 capitolo 6
i database in uso
immaginate
per esempio, in certi
PRELiEVO
un conto
stati i database sono corrente che
usati dalle banche può essere
per gestire i conti condiviso tra
correnti! più persone...
ento
trasferim
puoi prelevare
del denaro
dal tuo
conto oppure
banche con trasferirlo
database! nel conto di
qualcun altro.
sembra
davvero delle volte
comodo da anche i sistemi di
usare! prenotazione dei
puoi
treni sono basati su
effettuare database.
un pagamento
usando il
database!
tutti a
bordo! biglietto.
ricordate la lezione
grazie a un
sulle operazioni
database potresti
regolate dai
prenotare da
blocchi?
qualsiasi stazione.
proprio
così.
ovviamente
sono anche esatto! i database
implementate data- bancari non possono
misure di base assolutamente farne a
sicurezza e meno.
protezioni
in caso di
guasti.
sarebbe un
misure in disastro se
caso di qualcuno
fallimento potesse
prelevare
i miei soldi
impunemente.
se mi
vuotassero
il conto
i database ci aiutano corrente sarei e non solo, i database
a terra.
in un sacco di modi. sono davvero ovunque.
puoi dirlo
forte!
176 capitolo 6
i database e il web
mi riferisco
per esempio? ai database
collegati al
Web.
Al Web?
wow, voglio
questo
libro.
o
at
m pr
in tutto il mondo co
questo sistema mi
piace tantissimo!
...acquistandolo la lista
su una pagina del re
web.
fantastico! qual
è il
pros-
simo?
parola chiave
...basta inserire
una parola chiave Tico
nel browser. search?
quale tipo
di libri ti
interessa? allora
scrivi parola chiave
"frutti"
nel campo
parola Frutti
vediamo un
chiave.
po'... quelli che
parlano di frutti.
sul server
la parola chiave viene viene eseguita
gestita come una un'istruzione sql,
richiesta http. immagino.
categorie
parola chiave
un computer che
riceve ed elabora una
richiesta come questa
si chiama server.
178 capitolo 6
server database
Server
SELECT nome_prodotto
FROM prodotti
WHERE nome_prodotti Data-
LIKE '%fruit%'; base
Router condizione
di ricerca
frutti
Internet
server
database.
server database
pagina server
web dati
data-
base
recupero
Router
risultati
della ehi, funziona!
Internet
ricerca
Router
già!
180 capitolo 6
quando compri
così possiamo
un prodotto, il
vedere su una
processo non
pagina web la
varia di molto.
lista dei libri
che parlano di
frutta.
wow, questo
lo comprerei
subito!
in quel caso,
un'istruzione sql
quindi... anche qui
viene lanciata per
sql.
ridurre il numero
di oggetti a
catalogo...
e
questo
cos'è?
...nella tabella
dell'inventario. principes-
a questo punto sa ruruna,
l'oggetto che hai guardi un
ordinato finisce istante.
nella tabella
spedizioni.
e
secondo
questo mi chiedo
lei questo quando
cos'è?! l'abbia
cos'è? pubblicato!
fruit
love consigliato: fruit love
autore: re di kod
re di kod
a volte salta
fuori anche
oh?!
qualcosa di
curioso, no?
libreria
online
anche
con i blocchi e le
funzioni di sicurezza ...dev'esserci un
più sofisticate... sacco di lavoro per i
processori.
web
vuoi dire che server appli-
cation
ne utilizzano più ser-
di uno? ver
esatto! mentre un
application server
un web server è un compone le istruzioni
server che crea la web
sql, oltre a tanti altri
pagina web, giusto? server compiti.
appli-
pagina cation
web server
182 capitolo 6
database distribuiti
Data
ba se
Se
rv
er
Serv
considera però er
er
che ognuno di Se
rv
è molto comodo
avere dei server
che possono
comportarsi come un
unico database.
in pratica ognuno di
loro può gestire le
richieste sulla base
della sua capacità.
Ti-co!
Ti-co!
in pratica anche se
qualche server è
colpito, il sistema
comunque rimane in
piedi.
p uò iniziare il
co nte g g i o
ma ricordate sempre
che ci vogliono anche
fallimento
precauzioni extra per
gestire il vostro
database in questo
wow!
modo.
per esempio?
poi, per esempio,
tutti i server devono
essere ripristinati
correttamente in caso di
problemi alla rete.
quando una transazione
viene chiusa con un
commit, dovrete
assicurarvi che vengano
aggiornati i dati in tutto il
database distribuito.
184 capitolo 6
le procedure archiviate e i trigger
esatto!
una rete è ecco perché
necessaria se si vengono utili
vogliono utilizzare le procedure
più server. archiviate...
giusto!
.
le operazioni o..
nd
n sa
effettuate più be', visto che pe
sto
di frequente... stiamo parlando di
mi chiedo quali libri, l'operazione
possano essere... di prelievo dal
magazzino nella
tabella inventario e
l'inserimento nella
tabella spedizioni...
...quelle non
sono forse
operazioni
tipiche?
...direttamente nel
database!
anche il nostro
grazie alla stored lavoro si riduce.
procedure non
dovremo lanciare capisco.
un'istruzione sql...
...tutte le volte
che vogliamo
prelevare un
libro dallo
stock e
lanciare la in questo
spedizione. modo il carico oh, sì, hai
di rete si riduce. ragione!
oltre a queste,
esistono anche
procedure che si
attivano automati-
camente.
automatica-
mente?
186 capitolo 6
quando si trigger,
aggiorna un dato, in questo caso come...
per esempio, una parliamo di
procedura può trigger.
essere eseguita ...il
automaticamente. grilletto!
sarebbe davvero
funziona come il pratico se tutte
grilletto di una le volte che
pistola! arriva un ordine
e il database si
aggiorna...
perché sono
vestito anch'io
così?
...partisse in
automatico
una procedura
che riduce
l'inventario
e prepara la
spedizione.
iih-
haa! il semplice acquisto
di un libro genera
un sacco di lavoro
dietro le quinte,
vero?
premi il grilletto e
parte un proiettile.
aggiorna un dato e viene
eseguita una procedura.
...quando acquisti
un libro in rete.
che ne dici,
cain?
sono
d'accordo, bene!
principessa.
tico ci ha
non dimenticate mai
insegnato come si
che i database sono
usano i database,
il modo migliore di
ora possiamo
organizzare i dati in
continuare in
modo efficiente.
autonomia.
faremo del
nostro
mi piace! sono meglio!
pronta, usando i
database...
...costruirò
un regno
meraviglioso
dove tutti sì-ì-ì-ì!
potranno godere
di una vita
confortevole.
avete fatto
grandi ...poco
avete cominciato solo progressi... ma cosa stai
da poco a comprendere sicuro. dicendo, tico?
i meccanismi che ruotano ma avete
ancora
intorno ai database.
molto da
imparare! resterai
ancora con
ma sono noi, vero?
sicura che ve
la caverete
benissimo anche
da soli.
mi dispiace, ma...
oh, no...
...non posso.
devo
aiutare
il mio nk
tante Klu
lavoro qui è
persone.
terminato.
perché io
sono...
allora andrai da
qualcun altro che ha
aperto un libro sui
database?
!
Database
ghi ghi
ma nonostan-
te le intenzioni, mi
sono trattenuta
di più.
è stato bello
tico, aspetta!
conoscervi, anche
se è durato poco!
devo...
Tico!!
mia cara
tico... tico!
190 capitolo 6
grazie!
se n'è andata.
ora dobbiamo
mi addolora utilizzare le
vederla conoscenze che
così triste, tico ci ha dato...
principessa.
...per creare un
vero sistema.
il tempo passa... principessa, va
tutto bene con
quel suo libro sui
database?
192 capitolo 6
a proposito di
è davvero cain, il re sta
bella. aspettando che
vi decidiate per
l'organizzazione
delle nozze.
...oh, sì.
bene.
un giorno, da un
antico libro sui
database...
e nel
a s d
da tab di ko
i no
r eg
...sbucò
fuori una
piccola
fatina...
fine
i database nel web
I database vengono usati per molti scopi, per esempio nei sistemi di prenotazione
ferroviaria e nei circuiti bancari. Sono indispensabili nella vita di tutti i giorni e nelle
operazioni economiche. Come ho mostrato a Ruruna e a Cain, i database su server sono
molto diffusi. In un sistema basato su internet, il protocollo di comunicazione che si usa
è l'HTTP (HyperText Transfer Protocol). Il server attende una richiesta da un utente, e
quando la riceve (si chiama richiesta HTTP) risponde via software tramite una pagina web
generata appositamente (risposta HTTP).
Una pagina web consiste di vari testi in formato HTML. Altri file specificati da URL
(Uniform Resource Locator) possono comparire all'interno di una pagina web per fornire
informazioni aggiuntive (per esempio immagini).
Web client Web server
richiesta htTp
risposta htTp
pagina
web
Database
Server
Router
internet
Router
liv. presentazione
Client
194 capitolo 6
Il livello di presentazione riceve una richiesta dall'utente, ad esempio una condizione di
ricerca, che dev'essere condivisa con il database. Questo livello serve anche a elaborare i
risultati ricevuti dal database perché siano visualizzati sullo schermo dell'utente. Un browser
web (come Chrome o Firefox) funziona come strumento di presentazione e interfaccia per
l'utente.
Il livello di applicazione si occupa di elaborare i dati, ed è qui che vengono composte
le istruzioni SQL. I processi così gestiti possono essere scritti utilizzando linguaggi di
programmazione diversi. A seconda dei contenuti e della quantità di processi, potrebbe
essere necessario utilizzare più server (ad esempio un application server e un web server)
per gestire tutti i processi.
Il livello di gestione dei dati elabora i dati su un database server. I risultati della ricerca
sono restituiti dal database in risposta a una query SQL.
Database
Server
Server
Router
internet
Router
Riceve la richiesta
dell'utente e
visualizza i risultati.
liv. Presentazione
Client
Server
Router
Internet
Router
Un browser web
è sufficiente per
l'operatività.
liv. Presentazione
Client
Tipologia Definizione
Procedura Programma che non restituisce valori dalla procedura in corso
Funzione Programma che restituisce valori dalla procedura in corso
Trigger Programma lanciato automaticamente prima o dopo le operazioni del
database
domande
Riesci a rispondere a queste domande? Troverai le risposte a pagina 205.
D1
In un'architettura client/server a tre strati, in quale dei tre livelli opera il database?
196 capitolo 6
D2
In un'architettura client/server a tre strati, quale dei tre livelli interagisce con l'utente
e mostra i risultati?
In un sistema pensato per il web, l'operatività è distribuita tra un database server, un web
server e un browser web, ognuno dei quali risponde a esigenze specifiche. Questo genere
di sistema distribuito consente maggiore flessibilità e diminuisce le esigenze in termini di
capacità di calcolo dei singoli server.
Ma anche un database server può essere distribuito su più server separati. I database
server distribuiti possono trovarsi in luoghi diversi o sulla stessa rete. C'è però da
sottolineare che un database distribuito può essere gestito come se fosse un singolo. Se
il database distribuito appare come se fosse caricato su un solo server, l'utente non deve
preoccuparsi dell'ubicazione dei dati o del loro trasferimento.
Un database, come vedremo, può essere distribuito orizzontalmente o verticalmente.
La distribuzione orizzontale
La distribuzione orizzontale utilizza diversi database server paritari. Ognuno di loro può
elaborare dati provenienti dagli altri e, parimenti, ognuno di loro si rende disponibile agli
altri. Questa struttura viene usata per sistemi di database che operano separatamente in
ogni reparto.
Un database distribuito orizzontalmente è un sistema progettato per essere
particolarmente robusto, visto che un fallimento su uno dei server non inficia l'operatività
del database.
Server A Server B
Anche in caso di
fallimento su uno dei
server del reparto A...
Router
Router
Server A
server
Questo server principale
pilota l'intero
sistema di
server.
Router
Router
Server B Server C
il partizionamento orizzontale
Un partizionamento orizzontale divide i dati separandoli per righe. Le righe che risultano da
questa divisione vengono poi distribuite su più server. Questa forma di partizionamento è
spesso usata quando i dati possono essere suddivisi in modo da poter raggruppare sullo
stesso server dati collegati tra loro (e, per questo, oggetto spesso di accessi simultanei).
regione a regione b
reparto vendite reparto vendite
Nome Prezzo
Distretto Venditore
prodotto unitario
198 capitolo 6
il partizionamento verticale
Un partizionamento verticale divide i dati per colonne. Le colonne che risultano da queste
divisione vengono poi distribuite su vari server. Per esempio, un partizionamento verticale
è consigliato per gestire e unire database indipendenti che provengono da reparti diversi,
come il Reparto Logistica, il Reparto Vendite e il Reparto Esportazione.
Server A Server B
agGiornamento
agGiornamento
COmMIT
COmMIT
Quindi, un commit a due fasi viene adottato nei database distribuiti. Il commit a due
fasi crea un'operazione di commit sia dalla prima che dalla seconda operazione di commit.
partecipante partecipante
agGiornamento
agGiornamento
Secure
Secure
OK
OK
COmMIT
COmMIT
Se uno dei nodi non può assicurare l'operazione nel commit a due fasi, tutti i
partecipanti ricevono l'istruzione di eseguire un rollback. Così i database su tutti i server
restano consistenti fra di loro.
CoOrdinatore
partecipante partecipante
agGiornamento
agGiornamento
Secure
Secure
OK
OK
RolLback
RolLback
200 capitolo 6
domande
Prova a rispondere a queste domande sui commit a due fasi. Troverai le risposte a pagina
205.
D3
In uno schema che prevede commit a due fasi, quali istruzioni invia il coordinatore
durante la prima fase?
D4
In uno schema che prevede commit a due fasi, quali istruzioni invia il coordinatore
durante la seconda fase?
la replicazione di un database
Alcuni database distribuiti prevedono duplicati, o repliche, che servono a ridurre il carico
sulla rete. Questa pratica prende il nome di replicazione. Il database primario viene definito
master, mentre la copia è definita replica. Esistono molti tipi diversi di replicazione.
server principale
Replica Replica
Le operazioni eseguite
su questo server si Le operazioni eseguite
riflettono anche sugli su questo server si
altri. riflettono anche sugli
server altri.
principale
Server A Server B
Le operazioni eseguite
su questo server si
riflettono anche sugli
altri.
Quest'ultima sezione introduce tecnologie applicate che si basano sempre sui database.
XML
L'XML (eXtensible Markup Language) sta diventando sempre più popolare come metodo
di conservazione dei dati. L'XML rappresenta i dati personalizzandoli con dei tag. Visto che
questi tag forniscono a loro volta informazioni sui dati a cui sono riferiti, questo linguaggio è
molto adatto alla conservazione e alla ricerca dei dati.
L'XML è utile perché la sua grammatica rigidamente strutturata semplifica i processi
di programmazione. Inolte, l'XML viaggia su file di testo (facilmente editabili) e può
comunicare con altri sistemi. Per queste ragioni, l'XML è talvolta usato come metodo per la
rappresentazione dei dati in alternativa al database.
202 capitolo 6
<?xml version="1.0"?>
<prodotti>
<frutto>
<codice prodotto>101</codice prodotto>
<nome prodotto>Melone</nome prodotto>
<prezzo unitario>800</prezzo unitario>
</frutto>
<frutto>
<codice prodotto>102</codice prodotto>
<nome prodotto>Fragola</nome prodotto>
<prezzo unitario>150</prezzo unitario>
</frutto>
<frutto>
<codice prodotto>103</codice prodotto>
<nome prodotto>Mela</nome prodotto>
<prezzo unitario>120</prezzo unitario>
</frutto>
</products>
Ruruna Kod
mela
mela
mela
mela
In uno schema orientato agli oggetti, una classe può anche essere inserita in una
gerarchia. Puoi creare una classe "figlia" che conterrà gli stessi dati e le stesse funzioni
della classe "madre". Questa relazione prende il nome di ereditarietà. Puoi anche assegnare
funzioni specifiche alla classe figlia.
Per esempio, la classe Mela e la classe Arancia possono ereditare i dati e le funzioni
della classe Frutta e possedere al contempo dati e funzioni specifiche. In uno schema
orientato agli oggetti le relazioni gerarchiche servono a garantire maggiore efficienza.
frutTa
arancia
Banana
mela
204 capitolo 6
riassumendo
risposte
D1 Il livello di gestione dei dati.
D2 Il livello di presentazione.
D3 Preparazione (prepare).
D4 Commit o rollback.
conclusioni
Ti è piaciuto studiare i database? Dovrai imparare ancora molte cose prima di essere in
grado di gestire tutti gli aspetti di un database, ma i principi fondamentali rimarranno
sempre gli stessi. Se capirai bene le regole di base, riuscirai a identificare i dati significativi
nel mondo reale, che è il primo passo per progettare e utilizzare un database. Poi,
lavorando sulle conoscenze acquisite, potrai completare la tua competenza con tantissime
tecniche avanzate. Buona fortuna!
query condizionale
Pattern Matching
ricerca ordinata
aggregazione e raggruppamento
unione di tabelle
UPDATE nome_tabella
SET nome_colonna = valore1, ...
WHERE condizione;
208
indice
A controlli di concorrenza, - corruzione, 20, 154
accesso, 19, 106, 126–129, 141– - blocco, 131–137, 155–157, 167 - duplicati, 11, 16, 18, 19, 21, 29
142, 159–160, 167 - livelli di isolamento, 158 - elaborazione, 35–37, 47–48,
aggregazione, funzione di, - ottimistico, 158 130, 159, 167, 182,
98–100, 110–111 - sull’orario di accesso, 158 195–198
ALL (istruzione), 159 controllo, - estrazione, 36–37, 39–47
application server, 182, 195 - accesso utenti, 19, 106, 126– - gestione, 10, 19
architettura client-server a 129, 141–142, 159–160, - inserimento, 21, 90–92,
tre strati (three-tier), 167 103–104, 106, 116
194–196, 197, 205 - ottimistico, 158 - organizzazione, 32–39
atomicità, 153–154 - sull’orario di accesso, 158 - perdita, 20, 154
AVG, media (funzione), corruzione di dati, (v. dati, - protezione, 19, 127, 138–142,
98, 99, 110 corruzione di) 159–160, 161–164, 167,
COUNT (funzione), 99–100, 110 176, 182, 184
B CREATE TABLE (istruzione), - recupero, 20, 36–47, 90–92,
B-albero, indicizzazione, 163 103, 115–119 95–99, 101–102, 106,
backup, copie, 161 CREATE VIEW (istruzione), 117 147–152, 161–164,
base, tabelle, 167, 180, 202
(v. tabelle, base) D - ricerca, 93–97, 106, 108,
blocco, database, 6, 10, 15, 187 112–115, 163.
- a due fasi, 156–157 - efficienza, (v. anche SQL)
- condiviso, 133, 155–156 3–4, 15, 19, 146, 174 - sicurezza, 19, 127, 138–142,
- controllo, 131–137, 155–157, - fallimento, 161, 184, 197 159–160, 161–164,
167, 175–176, 182 - incoerente, 153, 154, 159, 167, 176, 182, 184
- esclusivo, 134–136, 155–156 199–201 dati condivisi, problemi con,
- granularità, 157 - inserimento su sistemi 12, 20, 21, 129, 175
buffer, 161 esistenti, 14 DBMS (DataBase Management
- master, 201–202 System), 21
C - modello, 33, 39 DCL (Data Control Language),
campo, 27–28, 30, 34, 35, 48 - modello gerarchico, 106
caratteri, 32, 33, 39, 204 DDL (Data Definition
- jolly, 97, 108 - note, 30–31 Language), 106
- stringa di, 84, 108 - replicazione, 201–202 deadlock, 136, 158
cardinalità, 74 - terminologia, 24–31 DELETE (istruzione),
checkpoint, 161–162 - tipi, 32–39 104, 116, 118, 119, 159
chiave, - uso, 19–21, 175–182 differenza (operazione),
- esterna, 44, 48, 72, 101 database distribuiti, 183–184, 37, 39, 41
- primaria, 35, 44, 48, 65, 67, 72, 197–199, 205 disastro, in caso di,
78–79, 101, 103, 115 - commit a due fasi, 20, 147–150, 161–164,
cicli annidati, metodo, 165 199–201, 205 167
coerenza, 153, 154–155, 184 - distribuzione orizzontale, distribuzione
colonne, 34, 84 197 - orizzontale, 197
COMMIT (istruzione), - distribuzione verticale, 198 - verticale, 198
133, 137, 150, 154, 205 - partizionamento dei dati, divisione, operazione, 37, 43, 45
commit a due fasi, 198–199 divisione tabelle (v.
199–201, 205 - replicazione, 201–202 normalizzazione)
conflitto di dati, (v. dati, database, progettazione, DML (Data Manipulation
conflitto di) 19, 26, 74, 81, 84 Language), 106
confronto, operatori di, - E-R (Entità-Relazione), DROP TABLE/DROP VIEW
(v. operatori di modello, 50–55, 74– (istruzione), 118
confronto) 77, 81 durabilità, 153, 159–160
congiunzione (operazione), - normalizzazione,
37, 43, 44, 48, 165 60–72, 78–81 E
congiunzione di tabelle, dati, elaborazione dati,
(v. tabelle, - conflitto, 13, 17–18, 21, 60, (v. dati, elaborazione)
congiunzione/ unione) 71, 116, 153, 158 entità, 52–54, 74
E-R (Entità-Relazione), modello, istanza, 203 - proiezione, 36, 37, 43, 165
50–55, 74–77, 81 - scrittura, (v. scrittura,
estrazione dati, L operazioni)
(v. dati, estrazione) lettura, - selezione,
- fantasma, 158 37, 39, 43, 47, 48, 165
F - non ripetibile, 158 - unione, 37, 39, 40, 48
fallimento fisico (media failure), - sporca, 158 ORDER BY (istruzione), 98
161 lettura, operazione, ordinare. (v. aggregazione,
fallimento, tipologie, 161 130, 133, 134, 159 funzione di)
forma, 62–70, 81–82 LIKE (istruzione), 97, 108 orizzontale,
- non normalizzata, 62, 78–79 livello, 194–196, 205 - distribuzione, (v. distribuzione
forma normale, - applicativo, 194–196 orizzontale)
- prima, 62–64, 66, 78–79 - di presentazione, 205 - partizionamento, (v,
- seconda, 62, 64, 66–69, 78–79, log, 148–149 partizionamento
82 orizzontale)
- terza, 62, 68, 69–70, 78–79, M ottimizzatore, 167
81, 82 master database, ottimizzazione
funzioni archiviate, 196 (v. database, master) - basata sui costi, 167
MAX (maximum value) - basata sulle regole, 167
G (funzione), 99–100, 110 - di una query, (v. query,
gestione dati meccanismi di ripristino, (v. ottimizzazione)
- scoordinata, 10 ripristino, meccanismi) outer join, 115
- unificata, 19 media failure,
gestione separata, 11, 19, 72 (v. fallimento fisico) P
GRANT (istruzione), 159, 168 memoria, (v. procedure partizionamento, 198–199
granularità, 157 archiviate) - orizzontale, 198
- dei blocchi, 157 MIN (minimum value), - verticale, 199
- fine, 157 (funzione), 99, 110 password, 141
GROUP BY (frase), 110 modelli di organizzazione dati, pattern, 108
(v. dati, organizzazione) permessi, 19, 106, 126–129,
H modello relazionale, 33–34, 35, 141–142, 159–160, 167
hash (funzione), 167 39, 47, 48 prima forma normale,
hash, indicizzazione, 163 molti-a-molti, relazione, 62–64, 66, 78–79
HAVING (frase), 111 55, 74, 75, 81 problemi nella gestione dei dati,
HTML (HyperText Markup - dati condivisi,
Language), 194 N 12, 20, 21, 129, 175
HTTP (HyperText Transfer nome utente, (v. utente, nome) - dati corrotti/persi,
Protocol), 178, 180, normalizzate, tabelle, 72, 91 20, 154
194 normalizzazione, 60–72, 78–81 - dati duplicati,
note, 30–31 11, 16, 18, 19, 21, 29
i null, 30-31, 108 - dati incoerenti,
incapsulamento, 203 153, 154, 159, 199–201
indice/indicizzazione, O - dati in conflitto, 13, 17–18, 21,
143–147, 162–164, 167 oggetti composti, 203 60, 71, 116, 153, 158
inner join, 115 OODB (Object-Oriented - difficoltà nella variazione dei
inserimento dati, (v. dati, DataBases), 203–205 dati, 13, 14, 17, 18
inserimento) operatore, 107 - fallimento, 161
INSERT (istruzione), - di confronto, 107 procedure archiviate,
104, 116, 119, 159 - di insieme, 39–42 185–188, 196
Internet database. - logico, 107 prodotto cartesiano,
(v. Web, database sul) - relazionale, 43–47 operazione, 37, 39, 42
intersezione, operazione, operazione, programmazione, linguaggi,
37, 39, 41 - congiunzione, 178, 180, 194, 202
ISBN (International Standard 37, 43, 44, 48, 165 proiezione, operazione,
Book Number), 45 - differenza, 37, 39, 41 36, 37, 43, 165
ISO (International Organization - divisione, 37, 43, 45 protezione dati,
for Standardization), - estrazione dati, 39–47 (v. dati, protezione)
124 - intersezione, 37, 39, 41
isolamento, 153, 155–158 - prodotto cartesiano, Q
- livelli di, 158 37, 39, 42 query. (v. SQL; SQL, istruzioni)
210 indice
query, ottimizzazione, 164–167 - aggregazione, funzione di, - congiunzione/unione,
98–100, 110–111 44, 101–102, 114–115
R - caratteri jolly 97, 108 - creazione, 57–59, 91–92, 103–
raggruppamento, 110, 159 - condizioni, 105, 106, 115–119
READ COMMITTED, 95–96, 101, 107–109 - forme, 62–70, 81–82
transazione, 158 - congiunzione di tabelle, - multiple, 59
READ UNCOMMITTED, 44, 101–102, 114–115 - normalizzate 72, 91
transazione, 158 - creazione tabelle, 91–92, 103– - normalizzazione,
recupero dati, (v. dati, recupero) 105, 106, 115–119 60–72, 78–81
registro, 27–28, 34, 48, 148–149 - creazione vista, 117, 160 - vincoli 116
relazione, 54, 74 - frasi, 94–97, 106, 110–111, 119 - vista, 117, 160
- E-R (Entità-Relazione), - gestione dati, tag, 202
50–55, 74–77, 81 90–92, 100, 106, 116 terza forma normale, 62, 68,
- gerarchica, 32, 33, 39, 204 - GROUP BY (frase), 110 69–70, 78–79, 81, 82
- molti-a-molti, 55, 74, 75, 81 - HAVING (frase), 111 transazione, 126–130
- uno-a-molti, 55, 75, 81 - metodi di ricerca, 93–97, 106, - fallimento, 161
- uno-a-uno, 74, 81 108, 112–115, 163 - operazioni di lettura/scrittura,
REPEATABLE READ, - operatori di confronto, 107 130, 133, 134, 159
transazione, 158 - operatori logici, 107 - proprietà 153–160
replica, 201–202 - ottimizzazione di una query, - recupero dati, 149–150
- in sola lettura, 201 164–167 trigger, 187, 196
REVOKE (istruzione), - pattern, 108
159, 160, 168 - standardizzazione, 124 U
riga, 34, 84, 116 - subquery, 112–114 unione (operazione),
right outer join, 115 - Web database, 37, 39, 40, 48
ripristino, meccanismi, 20, 178–179, 195–196 univoco, 30
147–150, 161–164, 167 - WHERE (frase), uno-a-molti, relazione,
risorse, 155 94–97, 106, 110, 119 55, 75, 81
ROLLBACK (istruzione), 136– SQL (Structured Query uno-a-uno, relazione, 74, 81
137, 150, 153–154, 205 Language), istruzioni, UPDATE (istruzione),
roll forward, 149 - ALL, 159 104, 116, 119, 159
- COMMIT, utente,
S 133, 137, 150, 154, 205 - autorizzazione, 141, 159
schema, 81 - CREATE TABLE, 103, 115–119 - nome, 141
- concettuale, 81 - CREATE VIEW, 117
- esterno, 81 - DELETE, V
- interno, 81 104, 116, 118, 119, 159 valori funzionalmente
scrittura, operazioni, - DROP TABLE/DROP VIEW, 118 dipendenti, 79
130, 133–134, 159 - GRANT, 159, 168 valori transitivamente
seconda forma normale, 62, 64, - INSERT, 104, 116, 119, 159 dipendenti, 79
66–69, 78–79, 82 - LIKE, 97, 108 verticale,
SELECT (istruzione), 93–97, 98, - ORDER BY, 98 - distribuzione (v. distribuzione
105, 106, 113, 119, 159 - REVOKE, 159, 160, 168 verticale)
selezione, operazione, - ROLLBACK, 136–137, 150, - partizionamento, (v,
37, 39, 43, 47, 48, 165 153–154, 154, 205 partizionamento
SERIALIZABLE, transazione, - SELECT, 93–97, 98, 105, 106, verticale)
155, 156, 158 113, 119, 159 vista, creazione di, 117, 160
server, 178–185, 194–197, 205 - SET TRANSACTION, 158, 160
SET TRANSACTION - UPDATE, 104, 116, 119, 159 W
(istruzione), 158, 160 SQL92/SQL99, 124 Web, database sul,
sicurezza, 19, 127, 138–142, Structured Query Language. 177–182, 194–197
159–160, 161–164, 167, (v. SQL) WHERE (frase),
176, 182, 184 subquery, 112–114 94–97, 106, 110, 119
sort merge (ordina e unisci), subquery correlata, 113–114
metodo, 166 SUM (funzione), 99, 110 X
sovrascritture non autorizzate, XML (eXtensible Markup
140 T Language), 202
SQL (Structured Query tabella/tabelle, 34, 39, 48
Language), 90–92, 106, - a due dimensioni, 34, 79
116, 124 - base, 160
indice 211
l'autrice
Mana Takahashi, dopo una laurea in Economia alla Tokyo University si è
specializzata nella comunicazione tecnica e ha pubblicato numerosi libri su
argomenti quali Java, C, XML, progettazione e amministrazione di sistemi.