Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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).
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
DISGIUNZIONE (OR)
Tavola di verità
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
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)
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
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
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 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
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
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
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
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)
Shortint -128...127 8
Byte 0...255 8
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+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
-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
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à.
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.
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.
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.
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.
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
TERMINOLOGIA USATA
TABELLA COLONNA RIGA
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
• 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
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
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
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
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”
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.
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
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
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
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
EQUI JOIN
SELECT Madre, M.Figlio, P.Figlio, Padre
FROM Madri AS M, Padri AS P
WHERE 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
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
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