7. Elementi di teoria dei database relazionali
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
MySQL è un sistema di gestione di database (DBMS).
Un database è una raccolta strutturata di dati. Si può trattare di qualunque insieme di dati da
una semplice lista della spesa a una galleria di quadri o all’enorme quantità di informazioni di
una rete aziendale. Per aggiungere, accedere, elaborare i dati memorizzati in un database è
necessario un sistema di gestione di database come ad esempio MySQL Server. Poiché i
computer sono in grado di manipolare grandi quantità di informazione, i sistemi di gestione di
database svolgono un ruolo centrale nella elaborazione sia come applicazioni a se stanti che
come parti di altre applicazioni.
MySQL è un sistema di gestione per database relazionali.
Un database relazionale memorizza i dati in tabelle separate piuttosto che mettere i dati tutti
insieme in un unico archivio per motivi di velocità e flessibilità.
La parte SQL della sigla sta per “Structured Query Language”. SQL è il più comune linguaggio
standardizzato usato per accedere ai database.
MySQL è un software Open Source. Open Source significa che è possibile per chiunque usare e
modificare il software. Chiunque può scaricare il software MySQL da Internet e usarlo senza
pagare. Si può studiare il codice sorgente e cambiarlo per adattarlo alle proprie esigenze.
Se però si inserisce il software MySQL in una applicazione commerciale è
necessario
acquistare una licenza commerciale.
7.1 Elementi di teoria dei database relazionali
Informazioni e dati non sono la stessa cosa. Le informazioni sono comprese dalle persone. I
dati sono sequenze di bit memorizzate in un disco. Lo scopo dei sistemi di gestione di database
è di colmare la differenza fra informazione e dato cioè convertire i dati memorizzati in un disco
in informazioni utilizzabili dalle persone.
Un database è un modello di un sistema del mondo reale. I contenuti di un database
rappresentano lo stato di ciò che il modello rappresenta. Cambiamenti nei contenuti del
database rappresentano eventi che avvengono nell’ambiente e che cambiano lo stato del
sistema modellato. Il database deve quindi essere strutturato in modo da rispecchiare la realtà
che vuole rappresentare.
7.2 Modello concettuale
La modellazione concettuale permette di modellare il sistema in termini indipendenti dal
particolare tecnologia scelta per memorizzare i dati. I metodi di modellazione concettuale
consentono di far evolvere la struttura di un database nel tempo al variare delle necessità degli
utenti. Un modello concettuale molto diffuso è il modello entità-associazioni.
7.3 Modello Entità-Associazioni
Il modello entità-associazioni è uno strumento per l’analisi delle caratteristiche di una
applicazione indipendentemente dagli eventi. Il modello entità-associazioni aiuta a ridurre la
ridondanza dei dati e ad aumentare l’affidabilità e l’efficienza della applicazione. Questo
approccio include una rappresentazione grafica che rappresenta le entità come rettangoli e le
associazioni come rombi.
Il modello entità associazioni fornisce un metodo per visualizzare le relazioni che intercorrono
tra entità in una applicazione facilitando il passaggio dalla descrizione delle informazioni di una
applicazione allo schema formale dei dati di un database.
Il modello entità associazioni viene successivamente convertito in un altro modello, ad esempio
il modello relazionale, in cui il database è effettivamente realizzato.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
1-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
Definizione di alcuni termini fondamentali che sono usati nella descrizione del modello entità
associazioni:

Entità: un entità è una cosa astratta o concreta che esiste nell’ambiente che viene
modellato ed è distinguibile dalle altre. Ad esempio: sole, luna, Mario, Giovanni, amore,
odio.
 Istanza di Entità: Una istanza di entità è una particolare occorrenza di una entità. Ad
esempio una ogni persona è una occorrenza di una entità, ogni automobile è una
occorrenza di entità …
 Insieme di Entità: Un gruppo di entità simili costituisce un insieme di entità o tipo di
entità o anche classe di entità. Un insieme di entità ha proprietà comuni che sono
condivise da tutte le istanze che la compongono. Ad esempio: l’insieme di entità astri
comprende sole e luna, la classe di entità persone comprende Mario e Giovanni, la
classe di entità sentimenti comprende amore e odio.

Attributo: Un attributo descrive una proprietà di un insieme di entità (e anche di una
associazione) comune a tutte le istanze. Ad esempio: possibili attributi dell’insieme di entità
persone sono nome, cognome, data_di_nascita …
 Attributo semplice: proprietà costituita da una singola unità di informazione
indivisibile. Ad esempio: un possibile attributo semplice dell’insieme di entità automobili
è marca.
 Attributo composto: gruppo di attributi che possono essere considerati sia insieme
che separatamente. Ad esempio: nell’insieme di entità persone l’attributo indirizzo è
composto dagli attributi via,numero,città,provincia,cap
 Attributo multiplo: gruppo di attributi che sono presenti in quantità variabile sotto
forma di una sequenza di attributi simili. Ad esempio: una sequenza di misurazioni di
temperatura, i libri scritti da un autore … Sebbene le realtà che devono essere
modellate presentino spesso attributi in questa forma la necessità di eliminare
ridondanza di dati nelle banche dati non consente rappresentazioni di questo tipo che
devono essere risolte modificando lo schema (prima forma normale)

Dominio di un attributo: insieme dei valori che un attributo può assumere.

Associazione: Una associazione è una connessione tra insiemi di entità. Ad esempio: una
associazione tra persone e automobili potrebbe essere possiede cioè l’indicazione di quale
istanza di entità persone possiede una certa istanza di entità automobili.
 Associazione uno-a-uno (1:1): per ogni istanza di entità in un insieme di entità c’è al
massimo una istanza di entità associata in un altro insieme di entità. Per esempio: per
ogni marito c’è la massimo una solo moglie e viceversa.

Associazione uno-a-molti (1:N): Una istanza di entità in un insieme di entità E2 è
associato con zero o più istanze di entità dell’insieme di entità E1 ma ogni istanza di
entità dell’insieme E1 è associato al massimo con una istanza del insieme E2. Per
esempio: una donna può avere molti figli ma un figlio può avere solo una madre.
 Associazione molti-a-molti (N:M): Non ci sono restrizioni su quante istanze di entità
sono associa con ciascuna istanza dell’altro insieme di entità. Un esempio
di
associazione molti-a-molti la associazione tra classi e professori. Ogni classe ha molti
professori ma ogni professore ha molte classi.
 Associazione gerarchica (IS-A): E’ una speciale associazione che consente ad un
insieme che dipende gerarchicamente da un altro di ereditarne le proprietà. Per
esempio se si dice che un autocarro è un veicolo e un veicolo ha gli attributi marca e
modello questo implica che anche l’entità autocarro ha gli attributo marca e modello più
gli altri che lo caratterizzano.

Chiave: La chiave distingue in modo univoco una istanza dalle altre in un insieme.
 Chiave primaria: identificatore usato per identificare univocamente una particolare
istanza di un insieme. Può essere composta da uno o più attributi. Deve essere unica
nel dominio. Deve essere sempre presente e non può cambiare nel tempo. Se non
ITIS “O.Belluzzi” – Laboratorio di Sistemi
2-16
7. Elementi di teoria dei database relazionali

Lezioni di web attivo
esiste un attributo o un insieme di attributi che soddisfano alle condizioni precedenti
deve essere creata artificialmente.
Chiave esterna: Una chiave esterna collega una istanza ad una istanza di un’altra
entità attraverso la chiave primaria di quest’ultima. Le chiavi esterne devono rispettare
le condizioni integrità referenziale cioè se esiste una chiave esterna in un insieme di
entità deve esistere una corrispondente chiave primaria nell’insieme di entità associato.
7.4 Diagramma entità-associazioni
Simboli usati nel modello grafico:
Entità:
Proprietari
Associazione:
Possiede
Nel rettangolo è inserito un identificatore che descrive
sinteticamente il significato dell’insieme di entità. (In
genere un sostantivo)
Nel rombo è inserito un identificatore che descrive
sinteticamente il significato della associazione. (in genere
un verbo)
Archi: Gli archi collegano le entità con le associazioni e gli attributi con le entità e associazioni.
Gli archi che collegano entità con associazioni sono orientati con una singola freccia in caso di
associazione di tipo 1 e doppia freccia in caso di associazione di tipo molti. La associazione
gerarchica è indicata con un arco orientato tra due entità di grande spessore.
Sottolineatura: Gli attributi chiave sono sottolineati.
Associazione 1:1
Presidi
Dirige
Scuole
Un preside dirige una sola scuola e una scuola è diretta da un solo preside
Associazione 1:N
Classi
Appartiene
Studenti
Uno studente appartiene ad una sola classe e una classe è formata da molti
studenti
Associazione N:M
Classi
Insegna
Prof.
Un professore insegna in più classi e in una classe insegnano più professori.
Associazione IS-A
Docente
Personale
Amministativo
Non
Docente
Tecnico
Ausiliario
Il personale di una scuola costituisce un insieme di entità che può essere
suddiviso in due sottoinsiemi del personale docente e non-docente. Il personale
non-docente può a sua volta essere suddiviso in amministrativo, tecnico e
ausiliario. L’insieme di entità Personale ha proprietà comuni a tutti i sottoinsiemi
ITIS “O.Belluzzi” – Laboratorio di Sistemi
3-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
(nome, cognome, indirizzo …) che tutti i sottoinsiemi ereditano. Inoltre ogni
sottoinsieme ha proprietà specifiche non possedute dagli altri.
Attributi: Negli esempi precedenti non sono stati messi in evidenza per semplicità gli attributi
posseduti dalle entità o dalle associazioni. Ecco alcuni esempi che consentono di completare lo
schema:
Presidi
ID
Dirige
Scuole
cognome nome
CODMPI descrizione indirizzo
Note:
1. Sono inserititi solo alcuni degli attributi che descrivono le entità.
2. La presenza di un attributo chiave per le entità è obbligatoria
3. Nel caso di Presidi la chiave è artificiale (ID) per evitare omonimie
4. Nel caso di Scuole la chiave è un codice parlante fornito direttamente dal Ministero. A tutti
gli effetti è anch’essa una chiave artificiale che però contiene al suo interno alcuni elementi
decrittivi dell’istanza. Ad esempio il codice del Belluzzi è: BOTF030006 dove BO indica la
provincia in cui si trova, T indica che è un istituto tecnico, F indica che è industriale e
030006 è un numero progressivo.
5. Indirizzo è un attributo composito che andrà ulteriormente scomposto in una successiva
analisi
Classi
Studenti
Appartiene
Num Sez Spec Aula
Matricola Cognome
Nome
DataDiNascita
Note:
1. Anche in questo caso sono stati inseriti solo alcuni attributi oltre alle chiavi.
2. Nel caso di Classi la chiave è naturale composta da più attributi. Ad esempio nel caso del
Belluzzi esistono più istanze con il valore Num=5 (quinta), più istanze con il valore Sez=B
(sezione B) e più istanze con il valore Spec=5 (informatica) ma solo una ha
contemporaneamente i valori: 5,B e 5
3. Nel caso di Studenti la chiave è artificiale per il solito problema dell’omonimia .
4. La chiave primaria di Classi è chiave esterna per Studenti quindi deve rispettare il vincolo di
integrità referenziale (cioè se esiste uno studente appartenente a una classe deve esistere
la classe.
5. Una degli attributi di Studenti è ‘DataDiNascita’ e non ‘Età’ per garantire la indipendenza
dal tempo.
Classi
Num Sez Spec Aula
Insegna
Prof.
Materia
ID
Cognome
Nome
Note:
1. Anche in questo caso sono stati inseriti solo alcuni attributi oltre alle chiavi.
2. Nel caso di Prof. la chiave è artificiale per il solito problema dell’omonimia .
3. Le chiavi primarie di Classi e Prof. sono chiavi esterne per l’associazione Insegna e quindi
devono rispettare il vincolo di integrità referenziale (cioè se esiste un insegnamento devono
esistere la classe e il professore coinvolti)
4. Una associazione molti-a-molti (N:M) può avere attributi come in questo caso la materia
insegnata. Negli altri casi un attributo non appartiene alla associazione ma alla entità a cui
l’associazione è collegata.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
4-16
7. Elementi di teoria dei database relazionali
ITIS “O.Belluzzi” – Laboratorio di Sistemi
Lezioni di web attivo
5-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
7.5 Conversione del modello Entità-Associazioni in un database relazionale.
Un database relazionale è un insieme di relazioni. Può essere pensato come un insieme di
tabelle associate tra loro. Ogni tabella ha uno specifico formato. Gli attributi possono essere
pensati come le intestazioni di colonna della tabella, le istanze di entità come le righe della
tabella.
A partire dal modello entità- associazioni una tabella è richiesta per ogni:


Insieme di entità
Associazione molti-a-molti (N:M)
Le associazioni uno-a-uno (1:1), uno-a-molti (1:N) e gerarchiche (IS-A) non richiedono una
tabella specifica ma possono essere realizzate nella tabelle a cui si riferiscono.
Creazione di una tabella da un insieme di entità o da una associazione N:M



Nome: ogni tabella deve avere un nome descrittivo. Il nome usato per l’insieme di
entità o per la associazione in genere è soddisfacente.
Chiave: Ogni tabella deve avere un attributo o un insieme di attributi designati
come chiave primaria. Affinché un attributo o insieme di attributi possa essere
designato come chiave primaria e necessario che le occorrenze dei valori
dell’attributo o la loro combinazione nel caso di un insieme deve essere univoca.
Attributi: Sono consentiti solo gli attributi semplici (intestazioni di colonna). Gli
attributi composti vanno spezzati in una sequenza di attributi semplici. Gli attributi
multipli vanno estratti dalla tabella e portati in una associazione N:M esterna (prima
forma normale)
7.6 Il modello relazionale
Nel modello relazionale il database è rappresentato come un gruppo di tabelle correlate.
Introdotto negli anni ’70 è attualmente il modello più popolare per la sua semplicità
concettuale e di realizzazione.
Il modello relazionale è basato sulla teoria matematica degli insiemi.
7.7 Definizioni
Relazione: Tabella a due dimensioni
La relazione corriponde alla nostra familiare nozione di tabella: una relazione è una collezione
di righe di tabella (tuple) ognuna delle quali contiene i valori per un numero fissato di attributi.
Da un punto di vista fisico una relazione assomiglia ad un file a tracciato record fisso (flat
file).Ogni tupla in una relazione deve essere unica cioeè non ci possono essere righe duplicate.
Attibuto: Colonna di tabella
Altri termini comunemente usati per indicare un attributo sono ‘proprietà’ o ‘campo’. L’insieme
dei valori ammessi per un attributo è chiamato dominio.
Tupla: Riga di tabella
Una tupla è una istanza di una entità o di una associazione rappresentata da una relazione.
Chiave: Un singolo attributo o una combinazione di attributi i cui valori identificano
univocamente le tuple della relazione. Questo vuole dire che ogni riga ha differenti valori per
l’attributo(i) chiave. Il modello relazionale richiede che ogni relazione abbia una chiave e che:

Due tuple non possono avere lo stesso valore di chiave
ITIS “O.Belluzzi” – Laboratorio di Sistemi
6-16
7. Elementi di teoria dei database relazionali

Lezioni di web attivo
Ogni tupla deve avere un valore di chiave non nullo.
Note:
1. Se non è possibile individuare un gruppo di attributi che godano della proprietà di univocità
si ricorre alla chiave artificiale che è un attributo numerico aggiunto alla relazione. Ad
esempio: una relazione che contiene gli ordini ricevuti da una azienda commerciale
potrebbe non avere alcuna colonna che consenta la distinzione tra due istanze (cioè sono
identiche); in questo caso è opportuno aggiungere un campo numerico univoco detto ID
(identificatore). Un altro esempio è costituito da una relazione contenente l’entità ‘persone’.
Se la relazione è grande (cioè ci sono molte istanze) la probabilità di una omonimia è
elevata. In questo caso il codice fisclae (nato proprio per questo scopo) risolve il problema.
2. Non esiste alcun ordinamento delle tuple all’interno della relazione cioè si trovano
fisicamente nell’ordine in cui sono state inserite. Esistono però risorse che consentono di
mantenenere
logicamente ordinate le tuple secondo vari criteri attrevarso tabelle
aggiuntive (indici)
7.8 Schema ed estensione di una relazione
E’ necessario distinguere lo schema di una relazione dalla sua estensione
Lo schema è la struttura che definisce la relazione ed è composto da:
 Nome della relazione (Nome della tabella)
 Nomi degli attributi e loro dominio (Nome delle intestazioni di colonna e tipo dei dati
contenuti
 Chiave primaria composta da uno più attributi
L’estensione di una relazione è il contenuto della relazione, cioè l’insieme di tuple (righe di
tabella) che compongono la relazione. L’estensione di una relazione può cambiare molto nel
tempo a causa dell’inserimento, rimozione o modifica di righe mentre lo schema di una
relazione è normalmente stabile e viene generato in fase di progettazione (o modificato in fase
di revisione del progetto). Facendo riferimento alla tabella ‘clienti’ sottostante le intestazioni di
colonna possono essere pensate come parte dello schema mentre le righe sotto l’intestazione
formano l’estensione.
clienti
id_cliente
19238
35895
12993
nome
ABC spa
XYZ srl
QWERTY
indirizzo
max_credito
Via Roma, 9
30000
Piazza Verdi, 1
15000
Casella postale 99 45000
Dal punto di vista concettuale, una relazione è una struttura per la memorizzazione di valori
degli attributi di particolari insiemi di entità o associazioni.
L’esempio è una relazione che descrive e contiene i membri di un insieme di entità chiamato
‘clienti’. In questo caso la relazione descrive una entità ma una relazione può essere anche
usata per descrive una associazione. (Attenzione in inglese i due termini sono molto simili
‘Associazione’=’Relationship’, ‘Relazione’=’Relation’).
Nella relazione ‘clienti’, la chiave per ogni istanza di cliente è memorizzata sotto l’attributo
id_cliente. E’ possibile che però che la chiave sia composta da più attributi.
Regole per una buona trasformazione dal modello entità-associazioni allo schema relazionale:
 Sono necessarie relazioni separate (tabelle) per ogni insieme di entità e per ogni
associazione molti-a-molti.
 Non sono necessarie relazione separate (tabelle) per rappresentare le associazioni
uno-a-molti ma la relazione lato N deve contenere come attributo la chiave primaria
della relazione lato 1
 Quando si construisce una relazione (tabella) per rappresentare una associazione
molti-a-molti, la chiave primaria della relazione deve contenere tutte le chiavi delle
relazioni che rappresentano le entità che l’associazione collega.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
7-16
Lezioni di web attivo

7. Elementi di teoria dei database relazionali
Nel caso di associazioni 1:1 e gerarchiche entrambe le soluzioni sono possibili.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
8-16
7. Elementi di teoria dei database relazionali
Lezioni di web attivo
7.9 Esempio di una modellazione relazionale
L’esempio descrive in modo elementare il sistema di fatturazione di una aziende commerciale
che vende ad altre aziende.
Analisi: I clienti devono essere registrati per potere acquistare. I clienti possono acquistare i
prodotti disponibili nel magazzino dell’azienda. Ogni cliente registrato può effettuare acquisti di
un insieme qualsiasi di prodotti in una quantità qualsiasi. Tutti gli acquisti fatti con una unica
operazione vengono raccolti in una fattura che può essere pagata in un secondo tempo.
Quando i clienti saldano una o più fatture i pagamenti vengono registrati in modo da potere
verificare il bilancio.
Sintesi:
 I clienti costituiscono un insieme di entità dotato di chiave primaria artificiale, attributi
anagrafici e massimo credito.
 I prodotti costituiscono un insieme di entità dotato di chiave primaria artificiale e di attributi
come descrizione e prezzo
 Le fatture costituiscono un insieme di entità dotato di chiave primaria artificiale, attributi
come data di emissione e termini di scadenza.
 I dati dei clienti non devono essere ripetuti in ogni fattura per evitare ridondanza
dell’informazione (un cliente può richiedere tante fatture e in questo modo i suoi dati
sarebbero ripetuti uguali più volte) quindi deve esistere una associazione 1:N tra clienti e
fatture (un cliente può richiedere più fatture, una fattura può essere stata richiesta da un
solo cliente)
 I prodotti acquistati con una stessa fattura costituiscono un attributo multiplo della fattura
(il numero di prodotti diversi è indeterminato) è quindi necessario scomporre il contenuto
della fattura in una associazione N:M tra fatture e prodotti. Uno stesso prodotto può essere
inserito in più fatture e una fattura può contenere più prodotti. Ogni prodotto può
comparire in una fattura in diverse quantità quindi la quantità è un attributo
dell’associazione, inoltre anche il prezzo di acquisto deve essere un attributo
dell’associazione perché l’attributo prezzo contenuto nell’entità prodotti cambia nel tempo
mentre il prezzo di acquisto di una determinata fattura deve rimanere inalterato.
 I pagamenti costituiscono un insieme di entità dotato di chiave primaria artificiale, e
attributi come la data di pagamento e l’importo pagato.
 I pagamenti, effettuati dai clienti, non devono contenere i dati dei clienti per evitare
ridondanza quindi deve esistere una associazione 1:N tra clienti e pagamenti (un cliente
può effettuare più pagamenti, un pagamento può essere effettuato da un solo cliente)
 Non esiste un collegamento diretto tra fatture e pagamenti, ma esiste un collegamento
indiretto tramite l’entità clienti. Questo collegamento consente di calcolare il bilancio per
ciascun cliente (differenza fra fatture emesse e pagamenti effettuati).
Il modello entità-associazioni che nasce da questo studio è:
richiede
fatture
prodotti
dett_fat
clienti
scadenza
max_cred
data
indirizzo
id_fattura
nome
id_cliente
effettua
quantità
prezzo
prezzo
descr
Id_prod
pagamenti
importo
data
id_pagam
ITIS “O.Belluzzi” – Laboratorio di Sistemi
9-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
Dal modello entità-associazioni si deriva il modello relazionale:
L’entità ‘clienti’ diventa la tabella ‘clienti’ con chiave primaria artificiale per evitare omonimie:
Clienti
id_cliente
19238
35895
12993
Nome
ABC spa
XYZ srl
QWERTY
Indirizzo
Max_credito
Via Roma, 9
30000
Piazza Verdi, 1
15000
Casella postale 99 45000
L’entità ‘prodotti’ diventa la tabella ‘prodotti’ con chiave primaria artificiale eventualmente a
codice parlante:
Prodotti
id_prodotto
MV001
MD039
MR900
Descrizione
Vite
Dado
Rondella
Prezzo
1.25
0.75
0.25
L’entità ‘fatture’ diventa la tabella ‘fatture’ con chiave primaria artificiale e con chiave esterna
id_cliente che coicide con la chiave primaria della tabella clienti per realizzare l’associazione
1:N ‘richiede’:
Fatture
id_fattura
997/02
001/03
002/03
id_cliente
19238
35895
19238
Data_fattura
31/12/2002
31/09/2003
01/10/2003
Scadenza
30
60
30
L’associazione ‘dettaglio_fatture diventa la tabella ‘dettaglio_fatture’ con chiave primaria
costituita dalla combinazione delle chiavi primare delle due tabelle che associa (notare che il
prezzo nella prima riga è diverso dal prezzo attuale perché si riferisce ad una fattura molto
vecchia):
Dettaglio_fatture
Id_fattura
Id_prodotto
997/02
MV001
001/03
MV001
001/03
MD039
Quantità
10
10
100
Costo
1.00
1.25
0.75
L’entità ‘pagamenti’ diventa la tabella ‘pagamenti’ con chiave primaria artificiale e con chiave
esterna id_cliente che coicide con la chiave primaria della tabella ‘clienti’ per realizzare
l’associazione 1:N ‘effettua’:
Pagamenti
Id_pagamento
00350
00351
Id_cliente
19328
35895
Data
01/02/2003
31/12/2003
ITIS “O.Belluzzi” – Laboratorio di Sistemi
Importo
10.00
5.00
10-16
7. Elementi di teoria dei database relazionali
Lezioni di web attivo
7.10 Normalizzazione
Dipendenza funzionale: l’attributo Y è funzionalmente dipendente dall’attributo X se e solo
se ogni ogni valore di X ha associato ad esso un perciso valore di Y. Si dice che X determina Y
(XY) o in altre parole che Y dipende univocamente da X.
 Le associazioni uno-a-uno hanno due dipendenze funzionali (esiste dipendenza in
entrambe le direzioni).
 Le associazioni uno-a-molti hanno una dipendenza funzionale (solo dal lato uno verso il
lato molti e non viceversa)
 Le associazioni molti-a-molti non hanno dipendenze funzionali.
Decomposizione: il termine decomposizione significa che le informazioni contenute in una
relazione vengono separate in in due o più relazioni ciascuna con meno attributi della relazione
originale. In altre parole gli attributi sono assegnati a tabelle separate. Le tuple nelle nuove
relazioni sono determinate dagli attributi che sono inclusi nella relazione. Gli obiettivi delal
decomposizione sono:
 Ridurre la ridondanza dei dati.
 Mantenere la capacità di ricostruire la relazione originaria.
Join: Il processo che consente di ricreare la relazione originaria si chiama giunzione (‘join’)
Se si hanno due relazioni T1 e T2 con un attributo comune A, il risultato del join tra T1 e T2 è
una nuova relazione. Ogni riga della nuova relazione è formata concatenando una riga da T1
con una riga da T2 solo per le tuple che hanno lo stesso valore di A in entrambe le tabelle. (Si
potrebbe immaginare di combinare le tuple di T1 e T2 in tutti i modi possibili e poi scartare
tutte le combinazioni in cui i valori di A sono diversi tra T1 e T2).
Esempio di join:Nell’esempio dell’azienda commerciale non esiste materialmente una tabella
che che contenga una intera fattura. Questa tabella però può essere generata da un join tra le
tabelle ‘prodotti’ e ‘dettaglio_fatture’
Dettaglio_fatture
Id_fat
Id_prod
Qt
Cost
997/02
MV001
10
1.00
001/03
MV001
10
1.25
001/03
MD039
100
0.75
La tabella dettaglio_fatture contiene tutte le voci di tutte le
fatture specificando il codice del prodotto, la quantità
effettivamente acquistata e il costo effettivo al momento
dell’acquisto.
Join
Prodotti
id_prod
Descr
Prz
MV001
Vite
1.25
MD039
Dado
0.75
MR900
Rondella
0.25
La tabella prodotti per ogni prodotto contiene la
descrizione e il prezzo corrente.
Produce
Join di dettaglio fatture con prodotti
Id_fat
Id_prod
Qt
Cost Descr
Prz
997/02
MV001
10
1.00
Vite
1.25
001/03
MV001
10
1.25
Vite
1.25
001/03
MD039
100
0.75
Dado
0.75
Il join tra le due tabelle collegate dall’attributo
id_prod produce una tabella che è la combinazione
di tutte le righe di entrambe le tabelle che hanno
lo stesso valore di attributo
ITIS “O.Belluzzi” – Laboratorio di Sistemi
11-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
Note:
 L’istanza di prodotti di codice MR900 non compare nel join perché non trova nessun
adattamento nell’altra tabella (cioè non è inserita in alcuna fattura).
 Tutte le istanze di dettaglio_fatture compaiono nel join. Poiché il campo comune del join è
per questa tabella chiave esterna di una relazione N:M le regole di integrità referenziale (se
un valore di chiave esterna compare in una associazione N:M deve essere presente come
chiave primaria nella tabella che collegata dall’associazione.
 Tutte le righe celesti formano la fattura 997/2 mentre tutte le righe verdi formanao la
fattura 001/03
 L’attributo prezzo attuale (Prz) è irrilevante in questa relazione e quindi può essere
eliminato
Normalizzazione: Per iniziare lo studio della normalizzazione, osserviamo che le associazioni
tra i dati di due domini, A e B, possono essere suddivise in tre categorie:



Associazioni uno-a-uno
Associazioni uno-a-molti
Associazioni molti-a-molti
Le associazioni uno-a-uno sono quelle in cui ogni elemeento in A è accoppiato con un unico
elemento in B, e viceversa. Per esempio, ad ogni studente iscritto ad una scuola potrebbe
essere assegnato un numero di matricola. Ogni numero di matricola è d’altraparte associato ad
un singolo studente.
Esempio di associazione uno-a-uno
Matricola
19801
20112
21345
Studente
Rossi
Bianchi
Verdi
Matricola(uno-a-uno)Studente
In una associazione uno-a-molti, ogni membro del dominio B è assegnato ad un unico
elemento del domino A, ma ogni elemento del dominio A può essere assegnato a mlti elementi
del dominio B. Per esempio, ogni studente frequenta una sola classe, mentre ogni classe è
formata da molti studenti. Si crea una associazioni uno-a-molti tra classi e studenti (o una
associazione molti-a-uno tra studenti e classi). ich may be written as:
Esempio di associazione uno-a-molti
Matricola
19801
20112
21345
Classe
3B5
3B5
4B5
Matricola(uno-a-uno)Studente
Le associazioni molti-a-molti sono quelle in cui nessun membro di un dominio dell’associazione
è associato ad un unico membro dell’altra associazione. Ad esempio l’associazione tra classi e
professori è molti-a-molti. Una classe può avere molti professori e un professore può avere
molte classi.
Classe
3B5
3B5
4B5
ID_prof
I03
M12
R01
ITIS “O.Belluzzi” – Laboratorio di Sistemi
12-16
7. Elementi di teoria dei database relazionali
Lezioni di web attivo
Classi(molti-a-molti)professori
Forme normali: Si dice che un database è in forma normale se rispetta un certo insieme di
regole. Qundi uno scjema relazione che rispetta queste regole è definito schema in forma
normale. Sebbene non esista nessun vincolo nella progettazione di uno schema relazionale ad
eccezione dell’obbligo della chiave primaria è’ opportuno che il progettista disegni lo schema in
forma normale in modo da evistare ridondanze ed anomalie che comprometterebbo il buon
funzionamento del database.
Ecco alcuni esempi di forme non normalizzate ASSOLUTAMENTE DA EVITARE:
Matricola
19801
20112
21345
Studente
Mario Rossi
Anna Bianchi
Giuseppe Verdi
L’attributo Studente è un attributo composito. Questa
situazione impedisce un corretto impiego del databese (ad
esempio rende difficile un ordinamento per cognome). In
questo caso è opportuno separare gli attributi.
Classe
ID_prof
3B5
I03 M12 R02
4B5
I03 M12
5B4
I03 M11 R01 S01
L’attributo ID_prof
è un attributo multiplo.Oltre a
presentare gli stessi problemi di un attributo composito
presenta anche il problema che il numero di elementi
che lo compongono è variabile quindi il problema non si
risolve neppure separando gli attributo ma è necessario
ricorrere ad una associazione molti-a-molti.
Prima forma normale: una relazione è in prima forma normale se ogni campo non è
scomponibile in più campi e ogni tupla è unica.
Ci sono due comuni tipi di campi non-atomici (scomponibili). Il primo tipo di campo nonatomico è il campo strutturato (ad esempio il nome-cognome oppure un indirizzo). Se l’intero
indirizzo è posto in un signolo campo la relazione non è in prima forma normale perché un
indirizzo è composto di via,comune,provincia e cap. Mettere tutti i dati insieme in uno stesso
campo pregiudica la possibilità di ordinare o filtrare (=scegliere solo alcune righe) per comune
o per provincia.
Un secondo tipo è la lista o “gruppo ripetuto”. Ad esempio una classe ha un numero
imprecisato di insegnati (la quantità dipende dal tipo di corso). Se gli insegnanti sono
semplicemente elencati in una lista (attibuto multiplo) la relazione non è in prima forma
normale. Mettere tutti gli insegnanti in una lista porta a severe limitazioni, oltre alla difficoltà di
ordinamennto e filtro, che non si risolvono convertendo l’attributo multiplo in attributo
composito (cioè numero fisso di campi). Infatti in questo caso potrebbe capitare che il numero
di campi previsto non basti oppure, se ci si tiene larghi (prevedendo molti campi), si lascia
tabella largamente inutilizzata con un degrado delle prestazioni.
In conclusione i gruppi ripetuti o strutturati distruggono la naturale struttura rettagolare di una
relazione. E’ particolarmente difficile estrarre un particolare elemento da un gruppo ripetuto o
strutturato perché bisogna in qualche modo specificare la sua posizione all’interno del gruppo.
Le regole della prima forma normale rappresentano la ovvia considerazione che ogni attributo
deve avere un proprio nome.
Il passaggio alla prima forma normale consiste nel verificare che ogni attributo abbia un
proprio nome e nella estrazione degli attributi multipli in una tabella esterna.
Forme normali superiori sono motivate dalla individuazione di anomalie nel trattamento dei
dati della relazione con possibili inconsistenze o perdite di dati.
Seconda forma normale: una relazione è in seconda forma normale se è in prima forma
normale e se tutti i suoi attributi sono dipendenti dall’intera chiave priamria.
Una relazione in seconda forma normale
Per costruire una relazione in seconda forma normale si può procedere con la tecnica della
decomposizione cotruendo una relazione separata che incorpora la dipendenza parziale e
rimuovendo l’attributo dalla relazione originale.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
13-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
Esempio: Una azienda di trasporti gestisce le corse di alcune linee identificate dai due
capolinea mediante un certo numero di autobus (ogni autobus indentificato da un numero è
catatterizzato da un certo numero di posti).
Una possibile relazione ‘Corse’ è:
Ora
7.00
7.00
7.30
8.00
8.00
8.30
Linea
25
19
25
19
21
25
Origine
Roveri
S.Lazzaro
Roveri
S.Lazzaro
Casalecchio
Roveri
Destinazione
Dozza
P.Maggiore
Dozza
P.Maggiore
Stazione
Dozza
Bus
30144
25251
19154
30144
25328
25251
Posti
50
30
70
50
30
30
La chiave primaria è determinata dalla combinazione dell’ora di partenza e della linea.
La relazione tuttavia non è in seconda forma normale infatti gli attributi Origine e Destinazione
dipendono solo parzialmente dalla chiave (dipendono solo da Linea e non da Ora). La
consegnuenza di questa anomalia è che i dati di origine e destinazione sono ripetuti più volte
nella stessa tabella. Il problema non è solo di ridondanza (eccesso di dati) ma è anche di
consistenza (validità dei dati). Infatti se si cambia un capolinea la modifica va fatta in tutte le
righe in cui compare altrimenti il capolinea può cambiare in funzione della riga visitata.
Per passare in seconda forma normale devono essere estratti dalla relazione tutti gli attributi
che dipendono parzialmente dalla chiave e spostati in una nuova relazione in cui dipendono
totalmente dalla chiave.
Ora
7.00
7.00
7.30
8.00
8.00
8.30
Linea
25
19
21
Linea
25
19
25
19
21
25
Bus
30144
25251
19154
30144
25328
25251
Origine
Roveri
S.Lazzaro
Casalecchio
Posti
50
30
70
50
30
30
Destinazione
Dozza
P.Maggiore
Stazione
Terza forma normale: Una relazione è in terza forma normale se è in seconda forma normale
e se non ci sono dipendenze transitive dalla chiave primaria cioè nessuno degli attributi nonchiave è dipendente da un altro attributo che a sua volta dipende dalla chiave.
Una decomposizione che genera una terza forma normale consiste nell’estrarre gli attributi
che non dipendono direttamente dalla chiave in una relazione separata in cui la chiave primaria
è formata dall’attributo da cui dipendono direttamente.
Nell’ esempio precedente si vede che la prima delle due relazioni ottenute nel passaggio in
seconda forma normale non è in terza forma normale. Infatti l’attributo posti non dipende
direttamente dalla chiave (Ora+Linea) ma solo indirettamente attraverso l’attributo non-chiave
Bus. L’anomalia che si determina è la ripetizione del valore di Posti ad ongi ripetizione di un
valore di Bus. La trasformazione in terza forma normale porta a questa situazione:
Ora
7.00
7.00
Linea
25
19
Bus
30144
25251
Linea
25
19
Origine
Roveri
S.Lazzaro
Destinazione
Dozza
P.Maggiore
7.30
8.00
25
19
19154
30144
21
Casalecchio Stazione
8.00
21
25328
8.30
25
25251
ITIS “O.Belluzzi” – Laboratorio di Sistemi
Bus
30144
25251
Posti
50
30
19154
25328
70
30
14-16
7. Elementi di teoria dei database relazionali
Lezioni di web attivo
7.11 Linguaggi di descrizione e manipolazione dei dati
Per realizzare una banca dati relazionale è necessario disporre di un programma di gestione
delle tabelle (normalmente chiamato motore di banca dati) in grado di interpretare i comandi
di descrizione e manipolazione della banca dati.
In attuazione ai comandi di descrizione, detti DDL (Data Description Language), il motore
genera banche dati e strutture delle tabelle in essi contenuti, modifica la struttura delle tabelle
ed elimina banche dati e tabelle.
In attuazione ai comandi di manipolazione, detti DML (Data Manipolation Language), il motore
inserisce dati nelle tabelle, li modifica, li cancelle oppure restituisce i dati contenuti nelle
tabelle.
Non si deve confondere il motore di banca dati con l’interfaccia utente usata per il comando.
Ad esempio il programma Microsoft Access non è un motore di banca dati ma una interfaccia
utente (il suo motore è una DLL (Dynamic Link Library) interna di Windows chiamata Jet).
Nel nostro caso invece il motore è un server TCP (in ascolto sulla porta 3306) in esecuzione su
un host di rete in grado di ricevere comandi attraverso una connessione e l’interfaccia è
costituita da pagine di web attivo.
Esiste uno standard che consente di utilizzare lo stesso linguaggio indipendentemente dal
motore utilizzato. Questo standard si chiama SQL (Structured Query Language). Il linguaggio
SQL è un linguaggio non procedurale nel senso che per ottenere un risultato non si deve
descrivere l’azione da svolgere ma il risultato desiderato. Il linguaggio contiene sia istruzioni
DDL che instruzioni DML. Le istruzioni SQL a causa della loro natura non procedurale vengono
chiamate query (richiesta)
Istruzioni DDL:
CREATE DATABASE nomedb
crea un nuovo database vuoto (nel senso che non contiene tabelle).
Esempio: CREATE DATABASE miodb
DROP DATABASE nomedb
cancella un nuovo database esistente (cancella anche le sue tabelle ed il relativo
contenuto).
Esempio: DROP DATABASE miodb
USE nomedb:
seleziona un database dall’insieme dei db gestiti dal motore.
Esempio: USE miodb
CREATE TABLE nometab ...
crea una nuova tabella vuota nel database selezionato database vuoto (devono essere
specificati i campi con i loro tipo cioè lo schema della tabella).
Esempio: CREATE TABLE prodotti(idprod INT PRIMARY KEY,descr CHAR(20))
Crea una tabella con una chiave primaria artificiale numerica ed un campo di testo di
descrizione
ALTER TABLE nometab ...
Modifica lo schema di una tabella esistente aggiungendo, togliendo, modificando i suoi
campi.
Esempio: ALTER TABLE prezzo ADD prezzo DECIMAL(10,2)
Aggiunge alla tabella precedente un campo prezzo in virgola fissa con due decimali (€)
DROP TABLE nometab.
Cancella una tabella esistente rimuovendo anche tutti i dati in essa contenuti..
Esempio: DROP TABLE miatab
ITIS “O.Belluzzi” – Laboratorio di Sistemi
15-16
Lezioni di web attivo
7. Elementi di teoria dei database relazionali
Istruzioni DML:
SELECT campi FROM tabelle WHERE condizioni
crea una tabella dinamica avente lo schema definito da campi, ricavata dal join di
tabelle con le restrizioni imposte da condizioni.
Esempi:
SELECT * FROM prodotti
Estrae tutti gli elementi di prodotti (l’intera estensione) mostrando l’intero schema
SELECT
t1.idfat,t1.idprod,t1.qt,t2.descr
FROM
dett_fatt AS t1,prodotti AS t2
WHERE
t1.idprod =t2.idprod
Crea una nuova tabella dinamica che mostra il dettaglio ordini con anche l’indicazione
della descrizione del prodotto
Modificando nella query precedente la condizione where:
WHERE
t1.idprod =t2.idprod AND t1.idfat=numerofattura
Si ottiene una estensione limitata ad una singola fattura (è in pratica il documento di
fattura da stampare).
INSERT INTO tabella(campi) VALUES (valori)
Inserisce in una tabella una nuova riga
Esempi:
INSERT INTO prodotti VALUES(1,’prodotto1’,1.55)
Inserisce un nuovo prodotto nella tabella specificandone i tutti i valori. (potrebbe fallire
per duplicazione di chiave primaria)
INSERT INTO prodotti(descr,prezzo) VALUES(’prodotto1’,1.55)
Se la chiave è ad autoincremento il fatto di non specificare la chiave ne fa generare una
nuova che sicuramente non è duplicata.
UPDATE tabella SET campo=valore, … WHERE condizione
Aggiorna i campi specificati con i valori specificati solo per le righe che rispettano la
condizione nella tabella specificata
Esempio:
UPDATE prodotti SET prezzo=2.0 WHERE idprod=1
Aumenta il prezzo del prodotto di codice 1 da 1.55 a 2.00 €
DELETE FROM tabella WHERE condizione
Cancella dalla tabella tutte le righe che soddisfano la condizione
Esempio:
DELETE FROM prodotti WHERE prezzo<2.00
Cancella dalla tabelle tutti i prodotti che costano meno di 2.00 €
Questi sono solo alcuni esempi elementari di query; la sintassi delle query può essere anche
molto più complessa. Per ulteriori dettagli consultare l’unità 8 (database mysql) ed il manuale
ufficiale di mysql.
ITIS “O.Belluzzi” – Laboratorio di Sistemi
16-16