Sei sulla pagina 1di 37

ALGEBRA BOOLEANA

George Boole (1815-1864) matematico inglese. In matematica, informatica ed elettronica,


l’algebra di Boole è un ramo dell’algebra astratta che comprende tutte le algebre che operano con
variabili booleane o logiche che possono assumere i soli valori di verità 0 o 1. L’algebra booleana
è nalizzata al calcolo proporzionale.
ES.: “Rossi (identi cato da codice scale) è un dipendente dell’industria XXX (identi cata dalla
partita iva) e il giorno x è residente a Milano” (codice scale, partita iva e giorno x sono tutte
variabili) è vera se Rossi appartiene all’intersezione dei due insieme “dipendenti industria XXX” e
“residenti a Milano il giorno x”
0= valore che indica il falso
1= valore che indica il vero

LOGICA DELLE PROPOSIZIONI


Una proposizione è una frase alla quale può essere attribuito un valore di verità: vero o falso. Se io
dico “ oh che bella giornata!” Questa non è una proposizione in quanto è un’espressione di un
sentimento, non è oggettiva. Mentre se dico “2+1=4” è una proposizione falsa, l’importante è che
io alla frase possa associare un valore di verità.
La logica in loso a è lo studio delle leggi e delle funzioni che caratterizzano il pensiero in sé
(LOGICA FORMALE), oppure dei procedimenti seguiti dal pensiero in riferimento ai diversi
contenuti cui può applicarsi (LOGICA MATERIALE).
La LOGICA MATEMATICA è lo studio delle operazioni logiche che le formalizza in un linguaggio
matematico e noi tratteremo di questa.
La FORMULA è l’espressione ben formata del linguaggio alla quale può essere assegnato un
valore di verità: vero o falso.
“Questa frase è vera” è una proposizione dell’algebra booleana in quanto è vera, è una
proposizione sempre vera quindi una tautologia.

CALCOLO PROPOSIZIONALE
Proposizioni atomiche—>valori di verità
Le proposizioni atomiche sono proposizioni unite dalle congiunzioni “e” od “o”; i valori di verità di
queste possono essere 0 o 1.
Se con le proposizioni atomiche utilizzo i connettivi queste diventano proposizioni composte. I
connettivi sono: AND (*), OR (inclusivo, +), XOR (esclusivo), NOT (- fa riferimento all’intero insieme
complementare).

Gli operatori introdotti godono di numerose proprietà:


- ASSOCIATIVA e COMMUTATIVA—>le operazioni AND e OR hanno le proprietà classiche della
somma
- DISTRIBUTIVA—> sia per AND e OR
- IDEMPOTENZA A and A=A A or A=A
- INVOLUTIVA - - A=A
- CONTRADDIZIONE x*(-x)=0
- ASSORBIMENTO x+(x*y)=x x*(x+y)=x

OPERATORE NOT (negazione)


Tavola di verità
A NOT A

0 1

1 0

Quando A è falsa (0) NOT A è vera (1); quando A è vera (1) NOT A è falsa (0). NOT A indica qual è
l’immagine di A. NOT A=1-A
fi
fi
fi
fi
fi
fi
fi
CONGIUNZIONE (AND)
AND sarà vero (valore 1) quando entrambe le proposizioni sono vere.
Tavola di verità
A B A AND B

0 0 0

0 1 0

1 0 0

1 1 1

AND(A, B)= MIN (A, B)

DISGIUNZIONE (OR)
Tavola di verità
A B A OR B

0 0 0

0 1 1

1 0 1

1 1 1

La disgiunzione è vera se almeno uno delle due componenti è vera. OR(A,B)=MAX(A,B)


PRIORITÀ
Imponiamo le seguenti priorità ai connettivi dalla più alta alla più bassa:
1. NOT -
2. AND *
3. OR + (inclusive)
4. IF...THEN =
Un esempio di cancellazione delle parentesi è dato dalla seguente formula
((if (A or (not B)) then C) i A) che può essere scritta senza parentesi

LEGGI DI DE MORGAN
NOT (A AND B)=(NOT A) OR (NOT B)
A B -A -B A*B -(A*B) (-A)+(-B)

1 1 0 0 1 0 0

0 1 1 0 0 1 1

1 0 0 1 0 1 1

0 0 1 1 0 1 1
NOT A. NOT B. A AND B. NOT (A AND B). (NOT A) OR (NOT B)

NOT (A OR B)= (NOT A) AND (NOT B)


A B -A -B A+B -(A+B) (-A)*(-B)

1 1 0 0 1 0 0

0 1 1 0 1 0 0

1 0 0 1 1 0 0

0 0 1 1 0 1 1

-(A+/*B)=-A*/+-B—> modo semplice per ricordare le leggi di De Morgan


Queste sono utili per negare espressioni complesse; mostrano che i tre operatori AND OR NOT
non sono indipendenti tra loro.

È possibile esprimere AND tramite OR e NOT:


A and B= not not (A and B)= not ((not A) or (not B))

È possibile esprimere OR tramite AND e NOT:


A or B= not not (A or B)= not ((not A) and (not B))
-(A+(-B)+C)= -(A+(-B))*-C= -A*B*-C

OPERATORE XOR (DISGIUNZIONE ESCLUSIVA)


Dall’unione escludo l’intersezione—> A è diverso da B, negazione di un’equivalenza
Tavola di verità
A B A XOR B

0 0 0

0 1 1

1 0 1
ff
1 1 0
Se A= vero, B= vero, C= falso; qual è il valore di verità di
A XOR (B or C)—>0
(A and B) XOR C—> 1*1+0= 1

OPERATORE IF THEN
Condiziona la verità o falsità della seconda condizione tramite la prima
Sarà vero nel caso in cui A è vero e B vero
Sarà falso nel caso in cui A è vero e B falsa
Nel caso in cui A è falso, qualunque valore abbia B il valore sarà vero
A B A—>B

1 1 1

1 0 0

0 1 1

0 0 1
L’implicazione logica può essere vista anche come una relazione, due proposizioni sono in
relazione se il risultato dell’operatore logico implicazione è VERO, questo aspetto è
particolarmente evidente nel linguaggio comune dove l’implicazione è espressa nella forme “ se A
allora B”, così ad esempio ci risulta naturale la comprensione di “se piove allora ci sono le nuvole
in cielo”.
A implica B, A è condizione su ciente per B
If then si può scrivere anche come not A or B

OPERATORE IFF
Equivalenza logica signi ca poter invertire l’if then e quindi avere and tra A implica B e B implica A
(A—>B)*(B—>A). I valori di verità sono uguali, quindi è la negazione dello XOR. Quando è vera
una, è vera l’altra e viceversa. Se una delle due è falsa e latra è vera, l’implicazione è falsa. Se
sono entrambe false, l’implicazione è vera.
A B A=>B

1 1 1

0 1 0

1 0 0

0 0 1
fi
ffi
TAUTOLOGIA, CONTRADDIZIONE
Una proposizione sempre vera è una tautologia
ES: A or not A è sempre vero
Not(notA)=A è sempre vera
Una proposizione sempre falsa è una contraddizione
ES: A and not A è sempre falsa
Not A=A sempre falsa

DALLA TABELLA ALLA FUNZIONE BOOLENA


A B F(A,B)

1 1 0

1 0 1

0 1 0

0 0 1

Posso rappresentare questa funzione andando a individuare dove la funzione assume il valore
vero. L’espressione boolena che riproduce questa funzione è formata dall’or di due espressioni; la
seconda riga A and not B (A*(-B)), nell’ultima riga ho not A and not B ((-A)*(-B)). In ne unisco le
due formule con OR—> F(A,B)= A*(-B)+(-A)*(-B)= (-B)*(A+(-A))=(-B)*VERO=-B posso notare che i
risultati della tabella sono la negazione di B

OPERATORE NAND
A NAND B= not (A and B)
A B A nand B

V V F

V F V

F V V

F F V
È la negazione dell’and.
Con il solo nand si possono esprimere and, or e not.
Not A= A nand A
A and B= not not (A and B)= not (A nand B)= (A nand B) nand (A nand B)
A or B= not not (A or B)= not(not A and not B)= (not A) nand (not B)= (A nand A) nand (B nand B)

OPERATORE NOR
A NOR B= not (A or B)
A B A nor B

V V F

V F F

F V F

F F V
È la negazione di or
fi
RAPPRESENTAZIONE DELL’INFORMAZIONE
SISTEMI DI NUMERAZIONE POSIZIONALE
Scrittura di un numero: cn-1... c2 c1 c0.c-1 c-2...c-m.
Sistema decimale: c i appartieni {0 1 2 3 4 5 6 7 8 9}
(Da 0 a 9)
Cifre 3 2 7 , 2 3

Posizioni 5 4 3 2 1 0 -1 -2 -3

Pesi 10 5 10 4 103 10 2 101 100 10−1 10−2 10−3


il numero scritto in questo modo corrisponde a: 3*10 2+2*10+7+2 * 10−1+3 * 10−2=327,23
La posizione della cifra nella rappresentazione di un numero è legata alla potenza della base
corrispondente

SISTEMA BINARIO IN BASE 2 (SIMBOLI 0;1)


CIFRE 0 C5 0 C4 1 C3 1 C2 0 C1 1 C0 , C^-1 C^-2 C^-3

PESI 2^5 2^4 2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3
(001101) IN BASE DUE
Se dichiaro che questo numero è in base 2 e voglio sapere che numero è in base 10 dovrò fare:
0*2^5+0*2^4+1*2^3+1*2^2+0*2^1+1*2^0=8+4+1=13 . Le operazioni aritmetiche sono in base
dieci
La decina in base dieci è la coppia in base due
CONTARE IN BASE...
In base dieci (dec) il successivo è:
Da 9 si passa a 10
Da 99 si passa a 100
Da 999 si passa a 1000

In base due (bin) sommando 1, l’uno più a destra diventa 0 perché c’è un riporto quindi riportando
avrò 1+1=0 con riporto di 1
Da 1 si passa a 10
Da 11 si passa a 100
Da 111 si passa a 1000

In base tre
Da 2 si passa a 10
Da 22 si passa a 100
Da 222 si passa a 1000
SISTEMA DI NUMERAZIONE BINARIO
Rappresentazione della base (2) in base 10=(1 0) in base 2

Cifre: ci=0,1 In inglese: binary digit= bit

Massimo valore rappresentabile con n cifre 11=100-1=22 − 1. 11 è il precedente di 100


111=1000-1=23 − 1=7
1111=1 0000-1=24 − 1=15
1111 1111= 1 0000 0000-1=28 − 1=255

Con 8 bit si possono rappresentare (28)256 combinazione diverse di 0 ed 1 (interi da 0 a 255)

CONVERSIONE DALLA BASE 2 A DECIMALE


10 1000(in base 2)=25 + 23 = 40 (in base 10) prendere gli uni nella loro posizione e sommare le
loro potenze.
Calcolo rapido:
11 1111 1111= 512+256+128+64+32+16+6+4+2+1=1023
=29 + 28 + 27 + 26 + 25 + 24 + 23 + 22 + 21 + 20
Oppure più semplicemente
11 1111 1111= 100 0000 0000-1=210 − 1=1024-1=1023. 1024 è il successivo del massimo
numero che posso rappresentare su 10 bit. 1024 è il K, kilo informatico in quanto è la potenza di 2
più vicina a 1000, quando si vuole sapere la quantità in decimale corrisponde tre ad un certo
numero di K si può approssimare il K con 1000 facendo un errore per difetto.
2K circa 2000 ma sarebbe in realtà 2048
Per indicare che il numero è in base 2 si può utilizzare la notazione (...)B

DA DECIMALE A BINARIO
La sequenza di 0 e 1 della rappresentazione binaria indica la presenza o meno di una potenza di 2
Prendo il numero, lo scompongo come somma di potenze di due e assegno il valore di 0 ed 1
35=32+2+1= (100011)B = 25 + 21 + 20
12=8+4= (1100)B = 23 + 22
255=256-1=1 0000 0000-1=1111 1111
50/2=(32+16+2)/2=11 0010/10=1 1001

SISTEMA DI NUMERAZIONE ESADECIMALE


CIFRE 0123456789ABCDEF

VALORE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Una cifra esadecimale sintetizza l’informazione contenuta in 4 bit
4 cifre binarie= 1 cifra esadecimale

CONVERSIONE DA ESADECIMALE A DECIMALE


(1A3) (base 16)= 1 * 162 + 10 * 161 + 3 * 160 = 419 in base 10
16 al quadrato perché 1 è seguita da due cifre, 16 alla prima perché A è seguita da una cifra
FF=15 * 161 + 15 = 255 in base 10

1110=14=E
1111=15=F
1 0000=16=10
(1011.01) B=(B.4) H
12,25=8+4+1/4=23 + 22 + 2−2=1100,0100=C,4
Per convertire un numero da base 8 a base dieci devo fare: 37->3*8+7=31 da convertire in base 2
faccio 31=16+8+4+2+1=24 + 23 + 22 + 21 + 20=11111
FUNZIONI DI EXCEL PER LE CONVERSIONI
Binario—>decimale=converte un numero binario in decimale
Binario—> hex
Decimale—>binario= converte un numero decimale in binario
Hex—>decimale
Hex—>binario

VALORI MASSIMI CARATTERISTICI


7 bit= 111 1111=127
8 bit= 1111 1111= 255
10 bit= 2^10-1=1023= 1K-1
16 bit= 2^16-1=65535= 2^6 2^10=64K
24 bit= 2^24-1= 16 Mega
32 bit= 2^32-1= 4 Giga
64 bit= 2^64-1= 16 Exa
1 byte=8 bit
1K=1024 B(byte)= 2^10 B
1 MG=1024 KB
1GB=1024 MB

INDIRIZZI IP IN INTERNET
Quattro interi di un byte l’uno, in totale 32bit; ogni intero può variare tra 0 e 255, se ho una
sequenza di bit, posso rappresentarla a gruppi di byte (di 8), ognuna di queste sequenze può
arrivare al massimo a 255 (1111 1111). Ad esempio l’indirizzo IP http://193.204.255.12/ ho quattro
numeri che non superano 255.
Il numero massimo di indirizzi IP è 2^32= 4 giga.
Un indirizzo IP è rappresentato da 4 numeri interi separati da un punto.
I numeri rappresentati negli indirizzi IP possono essere rappresentati in questo modo:
Classe A-primo bit:0 poche reti al massimo 127 (indirizzate con 7bit) con molti host (identi cati
con 24 bit) 2^7 reti e 2^24 host—> primo numero 0, primo byte identi ca la rete, e i restanti 3
byte identi cano l’host.
Classe B-primi due bit:10, i primi due byte identi cano la rete e i restanti 2 sono per l’host.
Numero medio di reti ( indirizzate con 14 bit) e numero medio di host (identi cato con 16 bit)
Classe C- primi tre bit:110 questi identi cano la classe, molte reti (indirizzate con 21 bit) con
pochi host (identi cati con 8 bit)

COLORI RGB (RED, GREEN, BLUE)


Numeri compresi tra 0 e 255 in decimale
Da 00 a FF in esadecimale
Rosso 255,0,0 FF 00 00
Verde 0,255,0 00 FF 00
Blu 0,0,255 00 00 FF

RAPPRESENTAZIONE INTERNA DEGLI INTERI CON SEGNO


Tipo Valori limite Bit

Shortint -128...127 8

Integer -32 768...32 767 16

Longint -2 147 483 648... 2 147 483 647 32

Byte 0...255 8

Word 0..65 535 16


Quando rappresento i numeri negativi ho un valore in più rispetto ai positivi.
fi
fi
fi
fi
fi
fi
fi
In shortint si possono rappresentare 255 valori con 8 bit, una parte sarà nei postivi e l’altra parte
nei negativi.
Integer rappresentato su 16 bit, anche qui divisi in 2 parti per positivi e negativi
Longint rappresentato su 32 bit anche qui divisi tra positivi e negativi
Per il Byte (8 bit) invece si considerano solo i positivi, quindi da 0 a 255
In ne Word (su 16 bit) anche qui rappresento solo i postivi, da 0 a 65535.

Gli interi della rappresentazione sono usati in parte per i valori positivi ed in parte per quelli
negativi, sarebbe come rappresentare segno e valore assoluti cioè una cifra binaria: 0 sta per +
e 1 sta per - se si facesse in questo modo si avrebbe lo stesso numero di positivi e negativi, ma
abbiamo visto che nei negativi c’è un numero in più. Questo perché, rappresentando 04 avrei +4;
03–> +3; 02–>+2; 01–>+1; 00–>+0; 1 0–> -0; quindi avrei due rappresentazioni dello 0.
Lo 0 avrebbe due rappresentazioni: 00, 1 0, perciò le operazioni sarebbero di cili in quanto (+4)+
(-2)=4+12=16 che non corrispondi alla somma iniziale.
La soluzione sarebbe quella della rappresentazione in complemento alla base:
In base dieci su due cifre si osserva che 00 coincide con 100 (in quanto l’1 non è rappresentabile
su due cifre come per l’orologio), quindi: per i positivi, partendo da 00 si incrementa; per i negativi,
partendo da 100, si decrementa.

04 +4+00=04

03 +3

02 +2

01 +1

00 0

99 100-1= 99->-1

98 -2

97 -3

96 -4+100= 96
I due problemi non ci sono più:la rappresentazione dello 0 è una=00 e le operazioni si fanno
facilmente (+4)+(-2)= +2 infatti su due cifre 4+98= 102=02

Ad esempio in base due su quattro cifre si osserva che 0000 coincide con 10000 quindi partendo
da 0000 si incrementa per i positivi, mentre per i negativi partendo da 10000 si decrementa.

0000+0111=0111 massimo 111= 7

0000+0100=0100 100=4

0000+0011=0011 11=3

0000+0010=0010 10=2

0000+0001=0001 1=1

0 0

10000-0001=1111 -1

10000-0010=1110 -10=-2
fi
ffi
10000-0011=1101 -11=-3

10000-1000=1000 minimo -1000=-8

-103 in base dieci da rappresentare su quattro cifre prendo 10000 che è il primo valore non
rappresentabile su 4 cifre e faccio la di erenze con 103–>10000-103=9897, il numero inizia con 9
che è l’ultima cifra che posso utilizzare in base 10, tutti i numeri che iniziano con 9 sono
sicuramente negativi.
-99–>10000-99=9901
Oppure per fare queste operazioni c’è un modo più rapido, cioè bisogna fare in modo che a ogni
cifra del numero corrisponda la cifra che sommata da 9.
0103+
9896+
1=
9897
Alla ne aggiungo 1

0099+
9900+
0001=
9901

Rappresentazione in base due su 8 bit


-1011101 prendo 100000000 e faccio la di erenza—>100000000-1011101=10100011. È come se
portassi indietro l’unità in base 10, “ne ha prestato uno al vicino”
Si può anche calcolare facendo anche la somma mettendo 1 al posto di 0 e viceversa—>
01011101+
10100010+
1=
10100011
-103 da rappresentare in base su 8 bit—> lo devo scrivere come somma di potenze di 2–>
26 + 25 + 22 + 21 + 20 e poi segno i posti con 1 e 0=1100111. Per rappresentarlo in
complemento 2 faccio la di erenza—>100000000-1100111= 10011001

RAPPRESENTAZIONE INTERNA DEI REALI


Rappresentazione in virgola ssa: a=xxxx.dddd. Signi ca che vado a scrivere il numero
utilizzato due interi:xxxx e dddd; spezzo la rappresentazione decimale in due parti: la parte intera
e quella decimale rappresentandole con due interi.
Il problema è che si ha una forte riduzione dell’intervallo numerico rappresentato perché quando
vado a rappresentare su 3 cifre la parte intera e su 2 cifre la parte frazionaria non posso superare
una dimensione delle parti. Ad esempio:
Con una rappresentazione del tipo xxx.dd con quante cifre signi cative potrebbero essere
rappresentati i valori 1234567.8, 1234.5678, 0.0001888? In questa rappresentazione perdo
la signi catività dei numeri perché perdo l’ordine di grandezza e le cifre signi cative. Questi 3
numeri non sono rappresentabili in quanto prenderebbero delle forme che non hanno nessuna
relazione con il numero originario.
Quante cifre sarebbero necessarie per poter rappresentare valori del tipo: 1.5*10^+50,
2.0*10^-30?se volessi rappresentare cifre molto grandi o molto piccole, non mi basterebbe il
campo che è stato dato, per 10^50 mi servirebbero 50 zeri. È necessario separare le cifre
signi cative dall’ordine di grandezza (dato dall’esponente)—> le cifre signi cative sono 1 e 5 e
l’ordine di grandezza è 50
Rappresentazione in virgola mobile: per rappresentare i numeri separando cifre signi cative da
ordine di grandezza. Si parla di virgola mobile perché questa dipende dall’esponente quindi la
stessa sequenza di cifre può corrispondere a numeri diversi a seconda dell’esponente che scelgo.
Se sposto la virgola verso destra moltiplico per 10, 100, 1000 e quindi aumento l’ordine di
grandezza del numero; se invece sposto la virgola verso sinistra l’esponente diminuisce e diventa
negativo.
fi
fi
fi
ff
fi
ff
ff
fi
fi
fi
fi
fi
Un numero reale (rappresentato con un numero nito di cifre) a in base b può essere scritto:
a=x*b^±n=xE±n=± c0.c1 c2 c3 c4 c5... E±n, c0≠0 “E” sta per esponente, solitamente è 10
Si utilizza la normalizzazione per far sì che l’esponente mi dia l’ordine di grandezza. La
normalizzazione fa sì che il numero sia 1≤|x|<b. Al massimo la cifra a sinistra della virgola può
essere, in caso di base 10, 9 perché se scattasse a 10 avrei due cifre.
Esempio normalizzazione: -27.3*E-4–> questo numero non è normalizzato in quanto la virgola è
dopo la seconda cifra, quindi devo spostare la virgola verso sinistra e avrò -2.73*E-3, questa è la
forma normalizzata.
-12.45E00= -1.245E0
Rappresentazione virgola ssa xxx.ddd 1234567.8 se lo rappresento in virgola ssa perdo
alcune cifre e la signi catività. Se lo rappresento in virgola mobile sposto la virgola verso sinistra
di 6 posizioni, dividendo per 10^6 e ottengo 1,2345678*10^6. Quindi quando sposto la virgola
verso sinistra la potenza di 10 aumenta.
MANTISSA ED ESPONENTE
La virgola decimale sta nella stessa posizione, la posso perciò togliere e ottengo la mantissa cioè
un numero intero nel quale riporto tutte le cifre signi cative. Togliendo la virgola però devo salvare
l’ordine di grandezza quindi avrò un altro numero che mi dà l’esponente, separo le cifre
signi cative del numero dall’esponente di 10.
L’informazione è quindi contenuta nella coppia mantissa esponente. Avrò quindi, per l’esempio,
12345678 come mantissa e 6 come esponente.
A=±C0.C1 C2 C3 C4 C5...E±N, C0≠0
±c0. C1 c2 c3 c4 c5 è la mantissa, mentre ±n è l’esponente.
Ad esempio usando 8 cifre per la mantissa e 4 per l’esponente
Numero Normalizzo Mantissa ed esponente
12.5=+1.25*E^1–> 12500000 0001
378.45=+3.7845*E^2–> 37845000 0002
0.0073= 7.3*E^-3–>73000000 9997
fi
fi
fi
fi
fi
fi
RAPPRESENTAZIONE INTERNA DEI CARATTERI
Se ho una stringa di caratteri, come faccio a tradurli in sequenza di bit?
Con il codice ASCII che rappresenta qualunque carattere come coppia di numeri, si usa la
numerazione esadecimale

Nella prima riga ci sono i numeri da 0 a F e sulle colonne i numeri da 0 a 7 quindi avrò 4 bit per i
numeri da 0 a F e 3 bit per i numeri da 0 a 7. La rappresentazione ASCII è su 7 bit, posso
rappresentare no a 128 caratteri perché il codice può andare da 0 a 127. Se prendo il carattere A
e lo leggo nella tabella (riempita con i caratteri più utilizzati dalle persone) a questo corrisponde la
coppia di valori esadecimali 4 1, in binario è 0100 0001=16*4+1=65 in decimale. A ogni valore
corrisponde una coppia. Se considerassi O la coppia sarebbe 4 F, in decimale sarebbe 79 e in
binario 26 + 23 + 22 + 21 + 20= 0100 1111
1 carattere= 2 cifre esadecimali
Numero di caratteri rappresentati: 128 (7 bit) 256 (8 bit)
La rappresentazione interna induce l’ordinamento: Sp<0<1...A<a
I 128 caratteri ASCII standard non sono su cienti per rappresentare di erenti alfabeti nazionali,
simboli matematici, alfabeto grado, arabo, ebraico, cirillico...
Quindi si utilizza il codice UNICODE che utilizza 16 bit per carattere, i numeri di caratteri
rappresentabili sono 65536. I primi 128 caratteri di Unicode coincidono con lo standard ASCII
Sapendo che (30)H(esadecimale)=0 e (4)H=A, cosa rappresentano i seguenti valori di 16 bit se
vengono interpretati come coppie di caratteri ASCII:
(4242)H=BB
4341 H=CA
3532 H=5 2 inteso come coppia di caratteri
4247 H= BG
FUNZIONI EXCEL PER I CODICI
- CODICE: Restituisce il codice ASCII decimale del primo carattere di una stringa di testo
- CODICE:CARATT: restituisce il carattere ASCII speci cato da un valore decimale (0...255)
Per indicare che una cella contiene un testo devo mettere l’apice, se ho una formula la metto tra
virgolette.

ARCHIVI E DATABASE
Un archivio è un insieme organizzato di informazioni caratterizzate da: un nesso logico che le
accomuna, ovvero le informazione riguardano il medesimo argomento; sono rappresentate con un
formato che ne rende possibile l’interpretazione; sono registrate su un supporto che ne permetto
l’aggiornamento; sono persistenti, cioè possono essere lette anche dopo molto tempo; sono
fi
ffi
fi
ff
organizzate in modo da permetterne la facile consultazione. Esempio: elenco telefonico degli
abbonati di una città.
Il nostro interesse è per gli archivi informatizzati. Si parla di le come collezione di record
composti da campi
FILE
Un le è una collezione di record, cioè di informazione logicamente omogenee, che descrivono
istanze di una entità. Ogni record è composto da campi con i valori assunti dalle caratteristiche
scelte per descrivere le entità.

ORGANIZZAZIONE DEI FILE


- SEQUENZIALE: i record sono registrati uno di seguito all’altro. L’organizzazione sequenziale ha
come modello di le il pacco di schede o un le su nastro magnetico dove è possibile accedere
a un record solo dopo aver visitato tutti i record che lo precedono.
- AD ACCESSO DIRETTO O RANDOM: i record, tutti della medesima lunghezza, possono essere
acceduti, ossia letti o scritti, in base alla posizione che occupano nel le. È possibile eseguire
operazioni del tipo: read (File, POS; Dato)
- CON ACCESSO A CHIAVE: l’accesso avviene in base al valore assunto da un particolare
campo detto campo chiave. La chiave ha la caratteristica di identi care univocamente il record
cercato. Esempio di chiave è la matricola di uno studente
- SEQUENZIALE A INDICI/INDEX SEQUENTIAL: i dati sono registrati nell’ordine di immissione e
viene gestita una tabella delle chiavi o le indice. La ricerca del record avviene leggendo la
tabella delle chiavi mantenuta ordinata secondo il valore delle chiavi
INDICI
Un indice permetto di accedere rapidamente ai dati. La costruzione di un indici ha un costo per lo
spazio occupato dal le indice e per il tempo necessario ad aggiornare il le indice e i dati.
In genere i dati, dopo essere stati scritti negli archivi, sono letti molte volte: il costo pagato per
inserirle è giusti cato dal minor tempo i necessario per leggerli.
Oltre all’organizzazione sequenziale a indice ci sono altri modi per organizzare gli indici, per
esempio con indici su più livelli ovvero con un albero di indici.
ORGANIZZAZIONE CONVENZIONALE
Grazie all’organizzazione convenzionale i dati memorizzati in le sono gestiti da programmi ad
hoc, ma ci possono essere dei problemi come:
• Dipendenza dei dati: i programmi sono dipendenti dagli archivi che gestiscono
• Di coltà di accesso ai dati: è possibile accedere ai dati solo tramite le applicazioni previste, per
ogni altra esigenza informativa bisogna sviluppare applicazioni ad hoc
• Isolamento dei dati: i dati sono dispersi tra molti farli, in di erenti formati, pertanto diventa
di cile collegarli ed integrarli
• Ridondanza e inconsistenza dei dati: causata dallo sviluppo di molte applicazioni indipendenti,
da parte di molti programmatori, in di erenti linguaggi, con diversi formati dei dati.
• Di coltà di gestire l’integrità dei dati: i vincoli di integrità dei dati sono esprimibile unicamente
scrivendo del codice nei programmi che manipolano i dati
• Anomalie dovute alla concorrenza: ad esempio perdita di uno o più aggiornamenti
• Problemi di sicurezze: intesa sia come riservatezza sia come garanzia contro la possibile
perdita di dati a causa del malfunzionamento dei dispositivi o del software
ORGANIZZAZIONE CON BASE DI DATI
Il database è una collezione di dati logicamente correlati e condivisi, che ha lo scopo di soddisfare
i fabbisogni informativi di una speci ca organizzazione. I dati, congiuntamente con la loro
descrizione, sono gestiti da un unico sistema, chiamato DBMS (DataBase Mangement System)
che ne permette la gestione e ne regola gli accessi.
Un DBMS deve
- Permettere la creazione di basi di dati da parte degli utenti e di speci care la struttura logica del
data base (schema) mediante un apposito linguaggio
- Dare la possibilità aglio utenti di interrogare la base di dati per estrarre informazioni
- Permettere di manipolare i dati contenuti nel data base e di modi care lo schema della base di
dati
- E ettuare le precedenti operazione sfruttando i servizi di un linguaggio semplice da apprendere
e standardizzato in modo che l’utente possa agevolmente passare da un DBMS ad un altr: SQL
(structured query language).
ff
ffi
ffi
ffi
fi
fi
fi
fi
fi
ff
fi
fi
ff
fi
fi
fi
fi
fi
fi
fi
Le caratteristiche di un DBMS sono: facilità di accesso ai dati, indipendenza dei dati dalla
struttura logica e sica, eliminazione della ridondanza e dall’inconsistenza, integrità dei dati,
utilizzo da parte di più utenti, controllo della concorrenza e sicurezza dei dati.
Un’importante ragione alla base delle caratteristiche possedute da archivi gestiti con la tecnologia
dei database consiste nel fatto che le informazioni sulla natura degli archivi, la loro composizione,
i vincoli sui dati, le limitazione al loro accesso, in sintesi la descrizione dei dati, è memorizzata
all’interno del database stesso con i dati.
La descrizione dei dati è formata dai metadati, cioè dati che descrivono i dati, e prende il nome di
dizionario dei dati o catalogo dei dati (data dictionary).
Nell’approccio con Basi di Dati: i metadati sono memorizzati assieme ai dati nel database e sono
utilizzati dal DBMS
Nell’approccio tradizionale File Based: la descrizione dei dati è memorizzata separatamente
rispetto ai dati ed è dispersa e distribuita nei programmi che implementano il sistema informativo.
Non basta usare un database per eliminare gli inconvenienti descritti: serve una loro accurata
progettazione.

PROCESSO PER COSTRUIRE UN DATABASE

Si parte dalla realtà da cui devo individuarne gli attori e le caratteristiche di questi, ad esempio in
un insieme di amici, l’entità in gioco è l’amico.
Questa schematizzazione della realtà porta al modello concettuale; se io associo alla realtà
un’entità che ho chiamato “amico”, descriverò quest’entità con “nome, cognome e telefono”,
questi tre sono gli attributi che caratterizzano l’entità. Fatto questo ho costruito il modello
concettuale—> modello astratto che descrive uno degli aspetti in esame della realtà in modo
schematico.
Quando passo al modello logico mi propongo di riempire di dati questo modello, cioè di andare a
vedere nella realtà sica quali saranno il nome, cognome e telefono dei diversi amici. Se devo
rappresentare 50 persone, avrò 50 elementi che caratterizzano l’entità “amico”. Il modello logico
fi
fi
può essere costruito in vari modi; noi utilizziamo il modello tabulare, quindi nel nostro caso il
modello logico sarà realizzato attraverso delle tabelle.
All’entità “amico” corrisponderà la tabella “Amici” in cui avrò 3 colonne per nome, cognome e
telefono e tante righe quanto sono gli amici che rappresento.
Queste realizzazioni nel modello logico saranno memorizzate sicamente in le, che però non
vedo all’interno dei database, ma vedrò nome e campi delle tabelle.

LIVELLO CONCETTUALE- IL MODELLO E/R


Questo modello è un utile strumento di comunicazione.

Entità cliente al quale sono associati 4 attributi: cognome, via, città e CAP, distinguere i diversi
dati senza accorparli è utile per le diverse interrogazioni e per l’aggiornamento.
Vicino a cognome c’è la sigla {PK} che sta per primary key, in questa tabella cognome è
l’identi cativo univoco di ogni istanza (riga) quindi è una chiave primaria per la ricerca.
Come terza entità ho movimento, con chiare primaria che è numero registrazione e gli altri attributi
che sono data, causale ed importo.
Questo movimento è relativo ad un conto, quindi avrò un’altra tabella “conto” in cui ho il numero
del conto come chiave primaria e il saldo.
Per poter costruire un database nel quale queste 3 entità siano collegate dovrò aggiungere le
Associazioni (collegamento). Ad ogni collegamento corrisponde un predicato cioè un cliente deve
possedere un conto, altrimenti non sarebbe un cliente; si usa la linea continua.
Questo mi permette di dire che ogni conto deve essere posseduto da uno o più clienti, questo
viene rappresentato tramite la biforcazione a sinistra. Si tratta di un’associazione N a 1, a N clienti
deve corrispondere 1 conto. Escludo che un cliente abbia più conti nella stessa banca.
A destra l’associazione conto a movimento è legata al predicato “variare”, ogni conto può essere
variato da uno o più movimenti, ogni movimento deve variare un solo conto.
Se c’è un’obbligatorietà la linea sarà continua, se c’è la possibilità la linea è tratteggiata.

LIVELLO LOGICO: IL MODELLO RELAZIONALE


Basi di dati relazionali(Codd 1970): i dati sono visti dall’utente sotto forma di tabelle dette
relazioni. Dalle due entità Cliente e Conto si derivano le tabelle

Metto il plurale perché sono degli elenchi a cui associo i vari attributi, ognuno dei quali ha valore
speci co.
fi
fi
fi
fi
Gialli e Verdi hanno lo stesso numero di conto, se volessi sapere il loro saldo basta che vada a
scegliere il valore 5100 nella tabella conti, questa è una chiave primaria per cui non si può
ripetere. Tutte le interrogazioni che riguardano i clienti e i conti possono essere implementate
attraverso le due tabelle.
Il modello relazionale è un modello basta sui valori; il legame tra cliente e conto è descritto con la
presenza del numero di conto nella riga del cliente; non ci sono puntatori (un sistema di variabili
che permettono di associare un record ad un altro) quindi non ci sono collegamenti tra i record
delle tabelle per stabilire legami tra i dati.
Il modello gerarchico e reticolare dei dati: i record o associati sono collegati tramite puntatori
alla collocazione sica dei record su disco. È un sistema più rigido con di coltà nella
manutenzione e nel porting dei dati. se prendo i record corrispondenti a Rossi ci sarà un
puntatore rappresentato con un numero al quale viene collegato il puntatore al record riferito al
conto di Rossi. Ha 6227 che punta al numero di conto 4500 e 6500 che punta al numero di conto
4310
Posso associare a Rossi più conti, cosa che nel modello concettuale avevo escluso.

IL LIVELLO FISICO
Riguarda la e ettiva rappresentazione dei dati nei dischi del computer: come sono rappresentate
le tabella, come sono costruiti gli indici... Non fa parte della progettazione di uno speci co
database, interessa i progettisti di uno speci co DBMS. Access è la somma di DBMS Jet e un
generatore di applicazioni, lo useremo per implementare i database progettati.

APPROCCIO DICHIARATIVO DI SQL


SQL è facile perché ha un approccio dichiarativo cioè dichiaro cosa voglio ottenere e non come
ottenerlo, si ha un ordine di priorità.

Utilizzando la parola chiave in SELECT che voglio ottenere un valore corrispondente a NumConto,
dichiaro che questo valore deve essere ricavato FROM Clienti (tabella). Prima FROM e poi
SELECT. In ne dico che non voglio tutti i numeri di conto, ma WHERE Nome=‘Rossi’ andrò a
scegliere solo le righe dove la prima colonna ha valore Rossi.
fi
ff
fi
fi
ffi
fi
Se voglio vedere i clienti con saldo>5000 farò
SELECT Nome
FROM Clienti C, Conti D
WHERE C.NumConto= D.NumConto AND Saldo>5000;
Ho bisogno di utilizzare entrambe le tabelle, la tabella clienti verrà segnata come C mentre la
tabella conti verrà segnata con D. Le tabelle saranno unite da NumConto che hanno in comune.
Grazie a questo riuscirò a costruire una sorta di sintesi delle due tabelle grazie ad un’altra tabella.
La sintassi di questo linguaggio deve essere rigido, non si possono aggiungere caratteri non
previsti dal linguaggio SQL. NON METTERE DUE PUNTI DOPO SELECT, FROM O WHERE
Il punto e virgola chiude la query, se la mettessi in mezzo non conterebbe ciò che viene dopo.

MODELLO CONCETTUALE DEI DATI


Entità e associazioni, qualunque concetto reale può essere pensato come astratto; le associazioni
sono quelle relazioni che immagino tra gli enti.
Il modello entità/associazioni (E/R) è uno strumento utile per analizzare le caratteristiche di una
realtà in modo indipendente dagli eventi che in essa accadono

Nel modello io immagino che un fornitore PUÒ fornire uno o più prodotti, un prodotto DEVE
essere fornito da un fornitore. Associazione 1 a N. L’associazione è fornire, associata a questa ci
sono delle associazioni (DataAcquisto e quantità)
L’entità è un oggetto (concreto o astratto) che ha un signi cato anche quando viene considerato
in modo isolato ed è di interesse per la realtà che si vuole modellare. Ad esempio gli studenti di
una scuola sono classi cabili nel tipo entità Studente. Ogni singolo studente rappresenta
un’istanza dell’entità Studente.
L’associazione è un legame che stabilisce un’interazione tra le entità, ad esempio un Persone
può POSSEDERE una o più automobili; un’automobile deve ESSERE POSSEDUTA da una
persone. Ci sono di erenti simbolismi per rappresentare le associazioni:
ff
fi
fi
le associazioni hanno un grado dato dal numero delle entità che partecipano all’associazione. Le
associazioni di grado 2 sono dette binarie, le associazioni di grado 1 sono dette ricorsive;
Coordinare è un esempio di associazione ricorsi a nella quale l’entità dipendente partecipa nei
ruoli di manager e collaboratore.

Tra due entità possono sussistere più associazione e in questo caso si evidenziano i ruoli giocati
da un’entità nelle diverse associazioni. Ad esempio: un persona (proprietario) può possedere
un’auto. Una persona (autista) può guidare un’auto.
Le proprietà delle entità e delle associazioni sono descritte attraverso attributi. Ad esempio gli
attributi per l’entità automobile sono: modello, produttore, cilindrata, potenza e prezzoListino.
Le caratteristiche degli attributi sono:
- Formato: il tipo di valori che assume, i formati base sono: carattere, numerico e data/ora
- Dimensione: la quantità di caratteri o cifre
- Opzionalità: la possibilità di essere valorizzato o meno—> obbligatorio o con valore nullo.
Un attributo che non può essere opzionale è la chiave primaria.
La chiave primaria di un’entità è un insieme minimale di attributi che permette di distinguere tra le
istanze di quelle entità, identi ca univocamente un’istanza. Ad esempio ssata la matricola come
chiave primaria non potrò avere delle sue ripetizioni. (L’istanza è è l0insieme dei valori che assume
ogni campo)
Il dominio di un attributo è l’insieme dei valori che esso può assumere.
Le associazioni possono avere attributi. Per esempio nell’associazione Acquistare, DataAcquisto
e PrezzoAcquisto sono attributi.
CARATTERISTICHE DELLE ASSOCIAZIONI
LE ASSOCIAZIONE TRA ENTITÀ
La molteplicità di un’associazione è il numero di possibili istanze di un’entità che viene messo in
corrispondenza con un’istanza dell’altra entità che partecipa all’associazione.
Si rappresenta con scritture del tipo: 1...1 cioè ogni elemento della prima entità ha un solo
corrispondente nella seconda entità, 0...1 signi ca che quell’entità può non avere corrispondenti
con la seconda, 1...N signi ca che la prima entità può avere un corrisponde o N corrispondenti
nella seconda.
Al valore minimo è associato il concetto di obbligatorietà: 0 facoltativa, 1 obbligatoria.
Al valore massimo quello di cardinalità cioè quante sono le istanze che sono messe in
corrispondenza con un elemento dell’altra entità: 1 (uno) oppure N (molti)
- Associazione 1:1 (uno a uno) o biunivoca quando ogni istanza della prima entità si deve
associare a una sola istanza della seconda entità e viceversa
- Associazione 1:n (uno a molti) o semplice, quando a ogni istanza della prima entità si può
associare una o più istanze della seconda entità, mentre a ogni istanza della seconda entità si
deve associare una sola istanza della prima
- Associazione n:n (molti a molti) o complessa, se a ogni istanza della prima entità si possono
associare una o più istanze della seconda entità e a ogni istanza della seconda entità si
possono associare una o più istanze della prima.
fi
fi
fi
fi
REGOLE DI LETTURA

MODELLO LOGICO DEI DATI—> MODELLO RELAZIONALE


LE RELAZIONI
Il successo del modello relazione si fonda sulla visione tabellare dei dati basata sul concetto
matematico di relazione. Una relazione è un sottoinsieme del prodotto cartesiano di due insiemi.
Dati n insiemi S1, S2, S3... Sn si dice relazione R su questi insiemi l’insieme delle tuple (n-uple):
s1, s2, s3,... sn. Gli insiemi Si si chiamano domini della relazione detta di grado n cioè ho n
possibili domini. La cardinalità della relazione è il numero di tuple (righe) che la compongono
Chiave di una relazione è un attributo o un insieme minimale di attributi che identi cano
univocamente le n-uple della relazione, cioè ogni riga della tabella possiede valori diversi per
l’attributo (o l’insieme di attributi) chiave
Lo schema di una relazione, per esempio Automobili, è una scrittura del tipo: Automobili(Modello,
Costruttore, Segmento, Porte, Posti)

TERMINOLOGIA USATA
TABELLA COLONNA RIGA

Relazione Attributo Tupla

File Campo Record

CodFac nella
tabella Studenti ha
la funzione di
chiave esterna
fi
CARATTERISTICHE MODELLO RELAZIONALE:
- Tutte le righe hanno lo stesso numero di attributi e contengono informazione di una (sola) entità
- I valori delle colonne rappresentano informazioni elementari (non ci sono informazioni di
gruppo)
- Tutti i valori in una colonna sono del medesimo tipo
- Non ci possono essere righe duplicate: ci deve essere un attributo o un insieme di attributi con
la funzione di chiave primaria
- L’ordine delle colonne non è rilevante (perché le colonne hanno un’intestazione)
- L’ordine delle righe non è rilevante

DAL MODELLO E/R AL MODELLO RELAZIONALE


Dal modello concettuale dei dati è possibile ottenere il modello logico dei dati usando le seguenti
regole di derivazione:
1. Ogni entità diventa una relazione; ogni attributo di un’entità diventa un attributo della relazione
ereditando le caratteristiche dell’attributo dell’entità da cui deriva
2. L’identi catore univoco di un’entità diventa la chiave primaria della relazione derivata
3. Per rappresentare le associazioni:
• a) Associazione 1:1–> si costruisce un’unica relazione che contiene gli attributi della prima e
della seconda entità (regola con molte eccezioni). È spesso preferibile trattare l’associazione
1:1 come se fosse 1:N

• b) Associazione 1:N—> si rappresenta aggiungendo, agli attributi dell’entità che svolge il ruolo
“a molti”, l’identi catore univoco dell’entità che svolge il ruolo “a uno” nell’associazione (chiave
esterna). Gli eventuali attributi dell’associazione vengono inseriti nella relazione che
rappresenta l’entità “a molti”,
assieme alla chiave esterna. Ad
esempio il dominio CodFac
nella tabella studenti è la chiave
esterna in quanto collega la
prima tabella alla tabella Facoltà
fi
fi
• c) Associazione N:N—> si rappresenta costruendo una nuova tabella (in aggiunta alle relazioni
derivate dalle entità) composta dagli identi catori univoci delle due entità e dagli eventuali
attributi dell’associazione. La chiave primaria della nuova relazione è formata dall’insieme di
attributi che compongono le chiavi delle due entità, oltre agli attributi dell’associazione
necessari a garantire l’unicità delle righe nella tabella ottenuta.

IN SINTESI
REGOLE DI DERIVAZIONE per le associazioni
1. L’associazione uno a uno diventa un’unica tabella che contiene gli attributi della prima e della
seconda entità
2. L’identi catore univoco dell’entità di partenza nell’associazione uno a molti diventa chiave
esterna dell’entità di arrivo associata
3. L’associazione molti a molti diventa una nuova tabella (in aggiunta alle tabelle derivate della
entità) composta dagli identi catori univoci delle due entità e dagli eventuali attributi
dell’associazione

VINCOLI DI INTEGRITÀ- NORMALIZZAZIONE DELLE TABELLE

Ci sono situazioni anomale che invalidano i dati:


- Chiave con valore nullo e chiavi duplicate
- Valore di una data scorretto
fi
fi
fi
- Riferimento alla scuola mancante—> è un’anomalia solo se il campo è obbligatorio (non in
questo caso)
- Riferimento alla scuola inesistente
Per evitare queste anomalie bisogna porre dei vincoli. Quesì possono riguardare diversi aspetti
1. VINCOLI DI CHIAVE—> la chiave primaria non può avere valore nullo e non può essere
duplicata
2. VINCOLI DI TUPLA—> obbligatorietà dei dati, vincoli di dominio dei dati (ad esempio la data
dell’esempio) (speci che del problema), correlazione interna fra campi del singolo record (se in
una tabella compaiono due valori che dipendono l’uno dall’altro bisognerebbe evitarla
3. VINCOLI DI INTEGRITÀ REFERENZIALE—> riguarda FK (chiave esterna) di una tabella e PK
della tabella correlata; l’integrità referenziale richiede che per ogni valore non nullo della chiave
esterna, esista un valore corrispondente alla chiave primaria nella tabella associata. Per
evitare di rovinare l’integrità referenziale non posso, ad esempio, inserire una riga in studenti
con valore di CodScuola che non compare fra quelli di Codice in Scuole. Non è possibile
cancellare una scuola dalla tabella Scuole se ci sono righe nella tabella Studenti che si
riferiscono ad essa. Non si possono modi care i valori di Codice o di CodScuola se sono
violate le regole di integrità referenziale

INTEGRITÀ REFERENZIALE E DBMS


Applicando l’integrità referenziale il DBMS impedisce di immettere (o modi care) un valore nella
chiave esterna della tabella associata, se tale valore non esiste tra le chiavi della tabella primaria.
È possibile invece immettere un valore nullo nella chiave esterna, per rappresentare il fatto che le
righe non sono correlate.
Impedisce di modi care il valore alla chiave nella tabella primaria, se ad essa corrispondono righe
nella tabella correlata.
Impedisce di eliminare una n-upla dalla tabella primaria, se esistono righe legate ad essa
attraverso la chiave esterna nella tabella correlata.

NORMALIZZAZIONE
È un processo con il quale le tabelle vengono trasformate. Ogni tabella deve corrispondere ad un
singolo oggetto della realtà
Le regole di normalizzazione sono de nite per evitare inconsistenze ed anomalia a seguito di
operazioni di aggiornamento dei dati. Nella costruzione delle tabelle vanno evitate la ripetizione
dei dati e la ridondanza delle informazioni, c’è ridondanza anche quando viene riportata
un’informazione che la base di dati può calcolare e aggiornare in automatico
CONSEGUENZE DELLE RIDONDANZE
- Anomalia di aggiornamento
- Anomalia di cancellazione
- Anomalia di inserimento
La normalizzazione prevede che la relazione iniziale venga scomposta in più relazioni,
complessivamente forniscono le stesse informazioni di partenza, mantengono le dipendenze tra
gli attributi (in ciascuna tabella ogni attributo dipende direttamente dalla chiave) e vengono evitati
problemi di ridondanza e di inconsistenza dei dati senza perdita complessiva delle informazioni.

FORME NORMALI
Sono criteri che de niscono le condizioni che devono essere soddisfatte per evitare situazioni
anomale.
• 1NF riguarda le richieste di base per il modello relazionale
• 2NF, 3NF, BCNF riguardano le anomalie da dipendenze funzionali quindi a rontano a vari livelli
le varie anomali
• 4NF anomali per dipendenze multivalore
• ....
DEFINIZIONI
Chiave o chiave primaria è l’insieme di uno o più attributi che identi cano in modo univoco una
riga della tabella
Chiave candidata è ogni insieme minimale di attributi che possono svolgere la funzione di chiave
(ci possono essere molte chiavi candidate, ma una sola chiave primaria)
Attributo non chiave è un campo che non fa parte della chiave primaria
fi
fi
fi
fi
fi
fi
ff
fi
Superchiave è un insieme di uno o più attributi che consentono di distinguere un’istanza
dall’altra, perciò non si potranno inserire gli stessi valori per quanto riguarda tutti gli attributi

DIPENDENZE FUNZIONALI
Si ha dipendenza funzionale tra attributi quando il valore di uno o piò attributi A determina
univocamente il valore di un attributo B e si indica con: A->B. Si dice che A determina
funzionalmente B, o che: B dipenda funzionalmente da A oppure A è un determinante per B
Una chiave candidata di una relazione è determinante per ogni attributo della relazione. Viceversa
un determinante per ogni attributo di una relazione, è chiave candidata per la relazione stessa

Ho 4 campi con valori diversi.


IDProdotto ha tutti i valori diversi, quindi è una chiave candidata. È determinante sia per
descrizione che per reparto e compratore.
Vedo che Descrizione è determinante per IDProdotto, Reparto e Compratore perché quando sso
Descrizione, da questo posso risalire anche agli altri campi
Compratore è determinante per Reparto quindi reparto dipende da compratore. Se io cambiassi
qualcosa nella colonna reparto questo non sarebbe più vero.
Scoprire le dipendenze funzionali non è sempre facile.
Qualora avessi dipendenze particolari, devo trattare le tabelle in modo tale da evitare delle
ridondanze
Dipendenti (Matricola, Nome, Cognome, Stipendio, CodiceCapo, NomeCapo)
Posso dire che Nome Cognome Stipendio e CodiceCapo dipendono direttamente da Matricola,
questo è un determinante per “ “ “ “
NomeCapo dipende da CodiceCapo e NomeCapo dipende transitivamente da Matricola
attraverso CodiceCapo
Quindi Matricola—> (determina)(Nome, Cognome, Stipendio, CodiceCapo, NomeCapo)
Perciò Matricola è chiave per Dipendenti
Si ha dipendenza transitiva tra attributi quando un attributo A determina B e B determina C; si
dice allora che C dipende transitivamente da A: A->B e B->C allora A->C transitivamente

PRIMA FORMA NORMALE-1NF


• Tutte le righe hanno lo stesso numero di attributi e contengono informazioni di una (sola)entità;
• I valori delle colonne rappresentano informazioni elementari (no informazioni di gruppo;
• Tutti i valori in una colonna sono del medesimo tipo
• Non cdi possono essere righe duplicate, quindi ci deve essere un attributo o un insieme di
attributi con la funzione di chiave primaria
fi
• L’ordine delle righe e delle colonne non è importante (le colonne hanno un’intestazione)
SECONDA FORMA NORMALE-2NF
Una relazione è in seconda forma normale quando è già in prima forma normale e tutti i suoi
attributi non chiave dipendono dall’intera chiave e non solamente da una parte della chiave

ALGORITMO DI SCOMPOSIZIONE DI UNA RELAZIONE T


1) Si identi cano tutte le dipendenze funzionali e le chiavi candiate in T
2) Se c’è una dipendenza funzionale che viola le regole della normalizzazione:
- Si costruisce una nuova tabella con tutti gli attributi della dipendenza funzionale considerata
- Il determinante della dipendenza funzionale è la chiave primaria della tabella de nita nel primo -
- Si costruisce una seconda tabella rimuovendo dalla tabella di partenza tutti gli attributi che
sono determinati dalla dipendenza funzionale in esame
3) Si ripete il passo 2 si a che non ci sono più violazioni delle regole di normalizzazione

TERZA FORMA NORMALE-3NF


Una relazione è in terza forma normale quando è in spenda forma normale e tutti gli attributi non
chiave dipendono direttamente dalla chiave, ovvero: non hanno dipendenze transitive dalla chiave
fi
fi
NORMALIZZAZIONE E DENORMALIZZAZIONE
Dipendenti è stata scomposta nelle tre tabelle:
Reparti (CodRep, NomeRep)
Città (CodCittà, NomeCittà)
Dipendenti (Matr, Cognome, Nome, CodRep, CodCittà)
La normalizzazione ha identi cato un errore di progettazione: c’erano tre entità e due associazioni
e non una sola entità
Volendo conoscere NomeRep e NomeCittà di un dipendente bisogna eseguire due join: Reparti
Join Dipendenti Join Città
L’esecuzione del join ha un costo di elaborazione
La normalizzazione è utile nei database operativi dove i dati sono continuamente aggiornati
La normalizzazione è dannosa nei database di sola lettura che sono usati a scopo di analisi dei
dati
Esempio: nei database usati nella business intelligence i dati sono denormalizzati per velocizzarne
l’accesso
In sintesi si può dire che in un database normalizzato ogni tabella deve parlare dei “fatti” di una
sola entità
Uso concreto della normalizzazione nella vita professionale: probabilmente mai nella
progettazione di database, possibile nella reingegnerizzazione di tabelle già esistenti importate da
Excel

ALGEBRA RELAZIONALE E INTERROGAZIONI


Gli operatori relazionali agiscono si uno o più tra bello producendo una nuova tabella. Le
operazioni relazionali servono per interrogare la base di dati per estrarre le informazioni desiderate
dalle tabella del database.
Principali operatori relazionali:
- Selezione—> operazioni unarie (opera su una tabella)
- Proiezione—> operazioni unarie (opera su una tabella)
- Congiunzione—> operazioni binarie (due tabelle)
Le relazioni sono insieme quindi ci sono anche le operazioni:
- Unione, intersezione e di erenza
L’algebra relazionale è uno strumento teorico.
Nei DBMS le operazioni relazionali si realizzano in modalità gra ca con le QBE o con il linguaggio
SQL.
ff
fi
fi
per distinguere tra IDAgente di Agenti e IDAgente di Clienti si usa la dot notation: Agenti.IDAgente
e Clienti.IDAgente

Queste tabelle sono in terza forma normale? Si perché c’è una dipendenza diretta alla chiave
C’è integrità referenziale? No perché i valori riportati nella chiave esterna IDAgente di Clienti non
sono gli stessi della chiave primaria IDAgente di Agenti.
Per applicare l’integrità referenziale devo per forza aggiungere una riga nella tabella Agenti
PROIEZIONI E SELEZIONI
Queste operazioni agiscono ortogonalmente
Che operazioni potrei e ettuare sulla tabella Agenti? Posso fare due tipi di operazioni—>
proiezione e selezione. Se decido di fare una SELEZIONE scelgo alcune delle righe (istanze) in
base ad un criterio. Questa operazione si indica con

Le righe di Agenti dove:


ZONA=“centro”.

Se invece lavoro sulle colonne eseguo una PROIEZIONE e scelgo solo alcuni dei campi
ff
Scelgo su che campo lavorare.
In questo caso proietto la tabella agenti su Nome
e Zona

La selezione estrae dalla tabella R le sole righe che soddisfano la proprietà P, cioè le righe di R per
le quali P è vera. Il grado di una relazione è dato dal numero dei campi della relazione stessa; nella
selezione il grado non cambia. Mentre cambia la cardinalità, sarà minore o uguale a quella di R
La proiezione estrae da R le colonne elencate in L. Il grado sarà minore o uguale a quello di R e la
cardinalità sarà anch’essa minore o uguale a quella di R. Questo perché nel modello relazionale
non ci possono essere tabelle con righe uguali. Le righe duplicate sono compattate. Ad esempio
se rimanesse solo la colonna della chiave primaria e ci fossero delle ripetizioni dovrò andare a
eliminarle.
Come vedremo, i DBMS, per ragioni di e cienza non compattano le righe in modo automatico.
Bisogna richiederlo esplicitamente con la clausola DISTINCT nel comando SELECT in SQL

PRODOTTO CARTESIANO RxS


Date due tabelle R e S il prodotti cartesiano tra le due combina tutte le righe di R con tutte le righe
di S, generando una tabella priva di valore informativo

La CONGIUNZIONE (join) tra R e S combina due tabelle generando una nuova tabella, le cui righe
contengono tutti gli attributi di R e S, abbinando le sole righe di R e S che soddisfano la proprietà
P. La congiunzione è la selezione del prodotto cartesiano RxS per P
P nella maggior parte dei casi, consiste in una o più condizioni del tipo: R.A=S.B dove A è
attributo di R e B è attributo di S. Poiché la condizione è di eguaglianza (=) si parla di equi join.
L’equi join più comune è quello che compone due tabelle con una condizione di uguaglianza tra la
chiave primaria di una tabella e una chiave esterna dell’altra: R.PK=S.FK.
Il join naturale tra R e S è un equi join che coinvolge i campi di R e di S con lo stesso nome,
seguito da una proiezione per eliminare le colonne duplicate. Il join naturale non è sempre
presente nei DBMS commerciali. Per esempio in Access non c’è. Il join ha prolungato la tabella
Clienti con le informazioni di Agenti accodando a ogni clienti le informazioni sul proprio agente.
ffi
Nel join si possono perdere informazioni: ad esempio si perdono le informazioni di clienti senza
agenti, clienti con IDAgenti che non compare in Agenti e agenti senza clienti.
In generale: un join tra due tabelle R, di grado m, ed S, di grado n, genera una tabella gì grado
m+n e cardinalità minore o uguale al prodotto delle cardinalità di R ed S.
Il join naturale fra due tabelle R con m colonne, ed S con n colonne, e con k campi con lo stesso
nome, ha grado:m+n-k
Un equi join che coinvolge la chiave primaria di una tabella e la chiave esterna dell’altra ha
cardinalità minore o uguale a quella della tabella con la chiave esterna. Per esempio: la cardinalità
dell’equi join tra Clienti e Agenti è 10 e la tabella con la chiave esterna, cioè la tabella Clienti, ha
cardinalità 11.

ESEMPI DI INTERROGAZIONI
Elencare RagioneSociale, PartitaINA e Provincia dei clienti che hanno come agente quello di
codice “Bia”
Per prima cosa faccio la selezione poi la proiezione. Perché se facessi prima la proiezione avrei
che il risultato è dato da RagioneSociale PartitaIVA e Provincia e perdo IDAgente sul quale devo
fare la selezione.
Quindi faccio la selezione di Cliente per IDAgente “Bia”

Ora posso fare la proiezione su RagioneSociale, PartitaIVA e Provicnia


ES. 2

ESEMPIO DI NORMALIZZAZIONE
Una tabella contiene per ogni riga il codice del libro, il codice dell’autore, il nome dell’autore, il
titolo del libro, il nome dell’editore, indirizzo editore, il prezzo e l’anno di edizione.
Libri( Libro, Autore, nomeAutore, Titolo, Editore, indirEditore, Prezzo, Anno)
Normalizzare la tabella in modo da ottenere tabelle in terza forma normali che eliminino la
dipendenza transitiva:
Autori (Autore, NomeAutore)
Editori (Editore, IndirEditore)
Libri_1 (Libro, Autore, Titolo, Editore, Prezzo, Anno) dipendono direttamente dalla chiave primaria
“libro”. Le due tabelle da creare sono Autori ed Editori. Nella tabella Autori, autore è la chiave
esterna di Libri_1 e chiede primaria per la tabellaAutori. Uguale per Editori. 3 tabelle in terza
forma normale.
Dovrò fare una proiezione di Libri su Autore e NomeAutore per creare la tabella Autori e di Libri su
Editore e IndirEditore per creare la tabella Editori. in ne dovrò fare la proiezioni di Libri sui campi
Libro, Autore, Titolo, Editore, Prezzo, anno per ottenere la tabella Libri_1. Se le dipendenze
transitive sono 2 le proiezioni saranno due per creare le nuove tabelle + una per aggiornare la
tabella iniziale. Se dovessi ricreare la tabella Libri iniziale farei un join tra Libri_1 con Autori, quello
che ottengo farò join con la tabella Editori.
Volendo elencare: Titolo, NomeAutore, Editore dei libri di prezzo superiore a 20€—> mi basterà
fare il join tra le tabelle Libri_1 e Autori per estrarre le righe che riguardano i libri con prezzo
superiore a 20€. Devo osservare i campi che mi servono (titolo, nome autore, editore e prezzo), i
primi 3 mi serviranno come proiezione, mentre il prezzo mi servirà per la selezione

Temp1, Temp 2 non sono tabelle ma indicano in modo intuitivo l’ordine di applicazione delle
operazioni. Si confrontino le due forme
- Proiezione di (Selezioni di Clienti per Provincia=“MI”) su RagioneSociale
- Temp1= selezione di Clienti per Provincia=“MI”.
Proiezione di Temp1 su RagioneSociale
fi
L’ordine di esecuzione delle operazioni non è indi erente.
Per ragioni di e cienza abbiamo anticipato la selezione rispetto alla congiunzione:
1. (Selezione Clienti per Provincia =“MI”) Join Agenti
2. Selezione (Clienti Join Agenti) Provincia=“MI”
l’ottimizzazione delle interrogazione è eseguita automaticamente dai DBMS; i linguaggi usati sono
di tipo dichiarative e il DBMS trasforma la 2 nella 1 prima di eseguirla
Abbiamo imparato che per scrivere un’interrogazione:
1. Bisogna capire quali sono le informazione che servono: i campi da mostrare e quelli da usare
nelle condizioni di selezione
2. In quante e quali tabelle si trovano tali campi.
3. Se i dati necessari si trovano in una sola tabella l’interrogazione si scrive usando solo selezioni
e proiezioni
4. Se i dati necessari si trovano in più tabelle bisogna unirle con uno o più join per avere tutti i
dati che servono un una sola tabella. L’interrogazione si realizza con selezioni e proiezioni sulla
tabella così costruita

Per tabelle con struttura omogenea, cioè righe con lo stesso numero di attributi, dello stesso tipo
e nello stesso ordine:

Posso fare l’unione, cioè l’accodamento di una tabella all’altra, le righe ripetute saranno eliminate;
l’intersezione è fatta con le righe che non sono presenti in entrambe le tabelle, si può eseguire
utilizzando l’operazione di proiezione sul join cioè

La di erenza sarà data dalle righe che sono diverse, la posso eseguire basandomi sulla
disuguaglianza.

ALTRI TIPI DI JOIN


Il join esterno tra R e S è una congiunzione che restituisce tutte le righe di R o S anche in assenza
di valori uguali per gli attributi comuni.
Equi join, join naturale si dicono join interni e si possono perdere delle informazioni
I join esterni sono utili per risolvere i problemi di assenza.
R Left join S elenca tutte le righe di R; le righe di R senza corrispondenti in S sono completato con
valori nulli
ff
ffi
ff
R Right join S elenca tutte le righe di S; le righe di S senza corrispondenti in R sono completate
con valori nulli

PROBLEMI DI ASSENZA
I clienti senza agenti corrispondenti sono quelli in cui facendo Clienti left join Agenti sul campo
IDAgente ho il valore null nel campo Agenti.IDAgente.
Temp1=Clienti left join Agenti su IDAgenti
Selezione di Temp1 per Agenti.IDAgente Nullo

Agenti senza corrispondenti clienti


Temp1=Clienti right join Agenti su IDAgente
Selezione di Temp1 per Clienti.IDAgnete Nullo

Full join tra R e S elenca tutte le righe di R e S. Le righe senza corrispondenti di R o S sono
completate con valori nulli. R full join S non è sempre implementato nei DBMS
R full join S= R left join S U (unito) R right join S
Si parla di self join quando si combinano le righe di una tabella con le righe della tabella stessa.
Si usano nelle interrogazioni con tabelle derivate da associazioni ricorsive

LINGUAGGIO SQL
Il linguaggio deve poter mettere di fare tutto questo facilmente ed essere basato su costrutti
semplici e facili da imparare. Le sue caratteristiche, in ne, devono essere standardizzate in modo
che un utente, cambiamdo DBMS, non debba apprendere un nuovo linguaggio per usare le basi
di dati
- DDL (data de nition language) linguaggio per la descrizione dei dati, delle tabelle e delle viste
(strumento per creare la struttura sica del database, facendo riferimento allo schema logico)
- DML (data manipulation language) linguaggio per il trattamento (o manipolazione) dei dati
contenuti nel database (inserimenti, modi che o cancellazioni)
fi
fi
fi
fi
- QL (Query Language): linguaggio per le interrogazioni alla base di dati (strumento per ritrovare i
dati sulla base dei criteri di ricerca richiesti all’utente)
SQL è il linguaggio utilizzato da molti DBMS (oracle,access...) e contiene comandi del DDL, del
DML e del QL. È parto alle da un DBMS a un altro, è utile e necessario anche con le query QBE di
access. Una query QBE di accesso—>codice SQL

SQL UN ESEMPIO DI QUERY

Nome, Cognome, Stipendio e sede di lavoro dei dipendenti con retribuzione superiore a 50000€
SELECT Nome, Cognome, Stipendio, Sede
FROM Impiegati INNER JOIN Dipartimenti ON Impiegati.Dipartimento=Dipartimento.Codice
WHERE Stipendio>50000;

CARATTERISTICHE SQL
Linguaggio standard per la gestione di data base relazionali.
Linguaggio dichiarativo: si dichiara cosa si vuole ottenere e non come ottenerlo.
Estensione dell’algebra relazionale: calcoli, ordinamenti, raggruppamenti
Visione tabellare dei dati: opera su gruppi di righe o sull’intera tabella, non su una riga per volta
Identi catori: nomi di tabelle e di colonne di lunghezza massima di 18 caratteri
Colonne speci cate con dot notation: NomeTabella.NomeColonna; obbligatoria solo in caso di
omonimie
Operatori aritmetici e relazionali: + - * / ^ & > < = ≤ ≥ <> Between IN Like...
Operatori logici: AND OR NOT XOR...
Le stringhe di carattere sono delimitate con ‘ o “
Date delimitate con #
Assenza di informazione, valore nullo: NULL
fi
fi
Controllato con il predicato IS NULL per veri care se il contenuto di un campo è nullo—>
Dipartimento IS NULL e non Dipartimento=NULL
I titoli di dati vengono descritti assegnandogli INTEGER, DECIMAL, FLOAT, CHARACTER, DATE,
TIME per descrivere si il tipo che la lunghezza.
SQL COME QL
Per estrarre informazioni dal database si usa il comando SELECT che ha la seguente sintassi:
SELECT Exp1, Exp2... ExpN
FROM Tabelle
WHERE Condizioni;
Exp1, Exp2 sono espressioni sui valori delle colonne
SQL può anche essere utilizzando per l’esecuzione di calcoli, gli ordinamenti e i raggruppamenti.
SELECT signi ca Visualizza, Mostra; formato libero, come tutti i comandi SQL termina con “;”
In alcuni DBMS, SELECT può essere usato senza altre clausole, per visualizzare il valore di
un’espressione, per esempio per l’area del rettangolo di lati 4 e 5 si fa SELECT “Area del
rettangolo”, 5*4;
LE TAVOLE DI VERITÀ DI AND, OR...
La tabella Booleana contiene 4 righe con i valori delle grandezze booleane A e B

Uso degli operatori logici AND, OR, XOR, EQV, IMP

INTERROGAZIONI SU UNA SOLA TABELLA


Posso eseguire una proiezione e una selezione;
Chiedo ID; Cognome, Nome dei dipendenti torinesi della produzione:
SELECT ID, Cognome, Nome
FROM Impiegati
WHERE Dipartimento= ‘Prod’ AND Residenza =‘Torino’
Si usa DISTINCT per non avere righe multiple e si fa
SELECT DISTINCT Residenza
FROM Impiegati
Per la ridenominazione dei campi di usa AS
SELECT ID AS Matricola, Cognome, Nome
FROM Impiegati
WHERE Dipartimento=‘Prod’ AND Residenza =‘Torino’
AS si usa anche per l’esecuzione dei calcoli sui campi

INTERROGAZIONI PARAMETRICHE
Invece di ssare il valore da confrontare con il valore di un campo, metto una domanda che viene
fatta all’utente al momento dell’esecuzione; questo permette di rendere la query più essibile
senza dover sempre cambiare tutta la query per un parametro
SELECT Cognome, Nome, Residenza, Stipendio
FROM Impiegati
WHERE Stipendio >= [Retribuzione minima?];
fi
fi
fi
fl
INTERROGAZIONI SU PIÙ TABELLE

SELECT Madre, Madri.Figlio, Padri.Figlio, Padre


FROM Madri, Padri
Il risultato di questa query sarà una tabella di 16 righe

EQUI JOIN
SELECT Madre, M.Figlio, P.Figlio, Padre
FROM Madri AS M, Padri AS P
WHERE M.Figlio=P.Figlio

per LEFT e RIGHT JOIN farò


SELECT Madre, M.Figlio, P.Figlio, Padre
FROM Madri M LEFT (o RIGHT) JOIN Padri P ON M.Figlio=P.Figlio

LE CONDIZIONI DI RICERCA
Utilizzate insieme a where per determinare i criteri di selezione delle righe; segni del confronto
“=,<,>,<>,>=,<=. Più condizioni legate tra loro con gli operatori AND e OR, precedute
eventualmente dall’operazione NOT. Predicati: BETWEEN, LIKE, IN.
BETWEEN controlla l’appartenenza di un valore in un dato intervallo
IN controlla l’appartenenza di uno dei valori di un elenco
LIKE confronta una stringa di caratteri come un modello di stringa costruita, in genere, con
caratteri jolly—>
?= indica uno e un solo carattere qualsiasi in quella posizione della stringa (nello standard SQL si
usa “_”)
* indica una sequenza qualsiasi di caratteri in quella posizione della stringa (nello standard SQL si
usa “%”)
LIKE “xyz*” vengono ricercate tutte le stringhe che iniziano con i caratteri xyz
LIKE “*xyz” serve a ricercare tutte le stringhe che niscono con i caratteri xyz
LIKE “*xyz*” per tutte le stringhe che contengono al loro interno i caratteri xyz
LIKE “?xyz” controlla le stringhe di 4 caratteri che niscono con xyz
[ ] ricerca un carattere fra quelli elencarti fra le parentesi quadre
! Ricerca caratteri diversi da quelli speci cati tra [ ] (anche ^)
fi
fi
fi
[a-ß] ricerca caratteri di un intervallo. Deve essere a<ß
# ricerca un carattere numerico

FUNZIONI DI AGGREGAZIONE
COUNT, SUM, MIN, MAX, AVG...
Sintetizzano le informazioni di una colonna in un solo valore; possono comparire SOLO nelle
clausola SELECT e HAVING.
COUNT conta il numero di righe o valori non nulli in una colonna (COUNT (*) conta le righe di una
tabella)
SUM somma i valori non nulli di una colonna
AVG restituisce la media dei valori non nulli di una colonna
MIN/MAX restituiscono il valore minimo e massimo di una colonna

ORDINAMENTI
La clausola ORDER BY consente di ottenere i risultati di un’interrogazione ordinati secondo i
valori contenuti in uno o più colonne, tra quelle elencate accanto alla parola Select. Solitamente
ordinato in ordine crescente
SELECT Cognome, Nome, Residenza
FORM Impiegati
ORDER BY Cognome, Nome;
Se voglio ordinare in ordine decrescente dovrò fare ORDER BY Stipendio DESC, Cognome;

RAGGRUPPAMENTI
Clausola GROUP BY per raggruppare un insieme di righe aventi lo stesso valore nelle colonne
indicate: produce un riga di risultati per ogni raggruppamento.
Usata con le funzioni di aggregazione (sum, count...): per ciascuna riga della tabella risultante
viene prodotto un valore di raggruppamento

CONDIZIONI SUI RAGGRUPPAMENTI


Uso della clausola HAVING per sottoporre al controllo di uno o più condizioni i gruppi creati con la
clausola group by. La condizione scritta dopo HAVING normalmente controlla il valore restituito
dalle funzioni di aggregazione
SELECT Dipartimento, COUNT(ID), SUM(Stipendio)
FROM Impiegati
GROUP BY Dipartimento
HAVING COUNT(ID)>2

WHERE VS HAVING
Where pone condizioni sulle righe della tabella; having controlla condizioni su gruppi di righe.
Prendiamo le tabelle—>selezioniamo le righe—> creiamo i gruppi—> selezioniamo i gruppi in
base alle condizioni—> facciamo la proiezione—> mostriamo le informazione ordinate

SELECT elenco delle espressioni da mostrare


FROM tabelle da cui estrarre le righe
WHERE condizioni sulle congiunzioni e sulle righe estratte
GROUP BY campi da considerare per i raggruppamenti
HAVING condizioni sui raggruppamenti
ORDER BY ordinamenti sulle espressioni elencate in SELECT
Nell’ordine FROM—>WHERE—>GROUP BY—>HAVING—>SELECT—>ORDER BY

QUERY DI COMANDO modi cano il contenuto del database, quindi creare una
tabella, aggiungere dati, modi care i dati e cancellare righe.
QUERY DI CREAZIONE
Crea una nuova tabella inserendo alcuni record provenienti dalla tabella scelta. Dara il nome della
tabella da creare e dell’eventuale database in cui inserirla.
QUERY DI ELIMINAZIONE
Per eliminare alcune righe da una tabella scelta; nella riga “Elimina” selezionare DA o DOVE. In
SQL si usa il comando DELETE.
fi
fi
QUERY DI ACCODAMENTO
Per aggiungere a una tabella alcuni record estratti da un’altra tabella; scegliere la tabella con i dati
di origine, dare il nome della tabella a cui accodare i record della tabella selezionata; INSERT
INTO
QUERY DI AGGIORNAMENTO
Per modi care alcuni valori di una tabella scelta; scegliere il campo o i campi in cui modi care i
valori, inserire l’aggiornamento nella riga Aggiorna a, inserire gli eventuali criteri; UPDATE
QUERY A CAMPI INCROCIATI
Per creare una tabella a doppia entrata da una tabella scelta; inserire i campi, scegliere la funzione
di aggregazione, scegliere fra Intestazione Riga/ Intestazione Colonna/ Valore nella riga di campi
incrociati; TRANSFORM

QUERY NIDIFICATE
Serve per utilizzare nei criteri di una query i valori restituiti dalla sottoquery, questa è
rappresentata con un comando SQL racchiuso tra due parantesi tonde nella riga dei criteri; si
possono usare anche i segni di confronto.
Una costante in un a clausola WHERE può essere rimpiazzata con l’interrogazione che genera
tale costante

Si può usare per fare una sotto interrogazione che restituisce un elenco di valori
Luke viste logiche sono tabelle ottenute da interrogazioni su altre tabelle, cosi creando
indipendenza logica.

INSERIMENTI
INSERT INTO NomeTabella [(Campo1 {,CampoN})] <VALUES(Valore1 {,ValoreN}) |
ComandoSelect>; riportare i campi nell’ordine di come sono riportati nella tabella, speci care i
vari valore oppure si può usare il comando select selezionando i valori da assegnare ai vari campi

MODIFICHE
UPDATE NomeTabella SET Campo= <FUNZIONE |NULL | DEFAULT | ComandoSelect>
{,Campo=<Funzione | NULL | DEFAULT | ComandoSelect>} [WHERE formula] default e Where
true. Indicare il campo della tabella che si intende aggiornare, assegnando funzioni, valori nulli,
valori di default. Si può fare per tutte le righe della tabella o mettendo una condizione con WHERE

CANCELLAZIONI
DELETE FROM NomeTabella [WHERE Formula] si eliminano le righe ma non la tabella a meno che
non si ponga la condizione.
fi
fi
fi

Potrebbero piacerti anche