Sei sulla pagina 1di 41

Progettazione di basi di dati

È una delle attività del processo di sviluppo dei sistemi informativi va quindi inquadrata in un contesto più
generale:

il ciclo di vita dei sistemi informativi:

– Insieme e sequenzializzazione delle attività svolte da analisti, progettisti, utenti, nello sviluppo e nell’uso
dei sistemi informativi
– attività iterativa, quindi ciclo

Il ciclo di vita di un sistema informativo comprende generalmente le seguenti attività:


1. Studio di fattibilità : serve a definire i costi delle varie alternative possibili e a stabilire le priorità di
realizzazione delle varie componenti di sistema
2. Raccolta e analisi dei requisiti : individuare proprietà e funzionalità che il sistema informativo dovrà avere
3. Progettazione : si divide in progettazione dei dati ( struttura e organizzazione dei dati) e progettazione
delle applicazioni ( le caratteristiche dei programmi).
4. Implementazione/Realizzazione : realizzazione del sistema informativo
5.Validazione e collaudo: si verifica il perfetto funzionamento
6. Funzionamento : Il sistema informativo diventa operativo e si svolgono i compiti per i quali era stato
originariamente progettato

Modello dei dati:


Astrazione dei dati che permette di definire la proprietà degli oggetti di interesse per la BD e le relazioni fra
questi oggetti, dando la possibilità di nascondere i dettagli dell’implementazione Dipende dal livello di
astrazione che si vuole descrivere: modello concettuale , modello logico, modello fisico

Modello concettuale : descrivere organizzazione dei dati a un alto livello di astrazione, senza tenere conto
degli aspetti implementativi
Modello logico : descrivere i dati secondo una rappresentazione ancora indipendente dai dati fisici ma
concreta perché disponibile nei sistemi di gestione di base di dati
Modello fisico : modello che si basa sui criteri di organizzazione fisica dei dati in un sistema

Tre fasi principali da effettuare a cascata nella progettazione delle basi di dati, separando in maniera netta
le decisioni relative a ‘cosa’ rappresenta una base di dati (prima fase) a ‘come’ farlo (seconda e terza fase)

1. Progettazione concettuale -> schema concettuale (Entity- Relationship)


2. Progettazione logica -> schema logico (modello relazionale)
3. Progettazione fisica- > schema fisico

Progettazione concettuale :
‘CHE COSA’ – ANALISI
Rappresentare le specifiche informali della realtà di interesse in termini di una descrizione formale e
completa, ma indipendente dai criteri di rappresentazione utilizzati nei sistemi di gestione di basi di dati.
Progettazione logica : traduzione dello schema concettuale ad uno schema logico, ovvero in termini del
modello di rappresentazione dei dati adottato dal sistema
Progettazione fisica: lo schema logico viene completato con la specifica dei parametri fisici di
memorizzazione dei dat.
PROGETTAZIONE CONCETTUALE

Modello Entity-Relationship (Modello E-R)


Definire schemi che descrivono l’organizzazione e la struttura delle occorrenze dei dati, ovvero dei valori
assunti dai dati al variare del tempo.

Entità: Rappresentano classi di oggetti che hanno proprietà comuni ed esistenza autonoma
Occorrenze delle entità : oggetto della classe che l’entità rappresenta
Relazioni : legami logici tra due o piu’ entità
Attributi: proprietà elementari di entità o relazioni
Cardinalità di relazioni : descrivono numero minimo e massimo di occorrenze di relazione a cui una
occorrenza dell’entità può partecipare
Cardinalità minima 0: partecipazione dell’entità OPZIONALE
Cardinalità minima 1 : partecipazione dell’entità OBBLIGATORIA
Cardinalità massima 1 : partecipazione vista come FUNZIONE (1:1)
Relazioni uno a uno : cardinalità max 1 per tutte le entità
Relazioni uno a molti : cardinallità max 1 o n
Relazioni molti a molti: cardinalità max n o n
Cardinalità di attributi : descrive il numero min o max di valori dell’attributo associati a ogni occorrenza di
entità o relazione (la cardinalità (1,1) degli attributi viene omessa)
Identificatore interno : detto anche chiave, specifica l’entità singolare (può specificare un attributo oppure
piu’ di uno )
Identificatore esterno : caso in cui l’identificazione di un’entità è ottenuta utilizzando altre entità es:
studente , numero di matricola e università : due studenti possono avere lo stesso numero di matricola se
appartengono a due università diverse, quindi l’entità studente è identificata dall’entità università e
l’attributo matricola. In questo caso l’entità è DEBOLE. Questo è reso possibilie dalla relazione UNO a
MOLTI tra studente e università (uno studente si può iscrivere a n università- ma si può iscrivere a solo una
università)
Un entità E può essere identificata da altre entità se e solo se tali entità sono coinvolte in una relazione a
cui E partecipa con cardinalità (1,1)

Trasformazione di associazioni : da n-aria a binarie

Trasformazioni da entità debole a entità forte :

Associazioni ricorsive :

Il musicista suona con un altro musicista, che suona con un


altro..ecc..

Generalizzazione :

Rappresentano legami logici tra un’entità E , detta entità genitore, e una o più entità dette entità figlie, di
cui E è più generale, nel senso che le contiene tutte. E è generalizzazione di E1..E2..
Es. Persona è generalizzazione di UOMO e DONNA.
- Ogni occorrenza dell’entità figlia è anche occorrenza dell’entità genitore
-Ogni proprietà dell’entità genitore (attributi,identificatori, relazioni e altre generalizzazioni) è anche una
proprietà dell’entità figlie.

Tipi di generalizzazione:
Generalizzazione totale : ogni occorrenza dell’entità genitore è occorrenza di almeno una delle entità figlie
Generalizzazione parziale : non tutte le occorrenze dell’entità padre sono occorrenze dell’entità figlie
Generalizzazione esclusiva : ogni occorrenza dell’entità genitore è al più un’occorrenza dell’entità figlie
Generalizzazione sovrapposta : l’entità padre trova specializzazioni in più di un figlio
Es – Persona -Uomo e Donna è totale (uomini e donne costituiscono tutte le persone) e esclusiva (una
persona o è donna o uomo)

Regole AZIENDALI (documentazione schema concettuale)

Risulta necessario correlare allo schema E-R una documentazione , in quanto lo schema E-R non risulta
sufficiente alla massima comprensione della struttura dei dati. Lo schema E-R non può rappresentare
vincoli sui dati – questa struttura va intesa come strumento atta a completare le descrizione dei dati .

1 DIZIONARIO DEI DATI


.Se si deve descrivere un concetto rilevante – ad esempio la definizione precisa di entità, relazione o
attributo, si può utilizzare un dizionario dei dati.

2. VINCOLI D’INTEGRITA’
Se si deve esprimere un vincolo d’integrità sui dati – sia esso la documentazione di un vincolo espresso con
qualche costrutto E-R
Regole di vincolo :
‘affermazioni atomiche del tipo’:
<deve/non deve>
3. REGOLE DI DERIVAZIONE

Se si deve esprimere una derivazione (ovvero un calcolo , un concetto che può essere ottenuto attraverso
un ‘inferenza e da altri concetti)
es : concetto <deriva> operazione sui concetti
- RD il numero degli impiegati di un dipartimento si ottiene contando gli impiegati che vi afferiscono
(RD_ regola di derivazione)

PROGETTAZIONE CONCETTUALE

Costruzione di uno schema entità-relazione in grado di descrivere al meglio le specifiche della basi di dati –
lo schema viene progressivamente raffinato al fine di ottenere uno schema finale. I pattern sono delle
strategie che permettono di eseguire questo processo di sviluppo di uno schema concettuale.

Analisi dei requisiti e progettazione concettuale


- ACQUISIZIONE REQUISITI
-ANALISI DEI REQUISITI
-COSTRUZIONE DELLO SCHEMA CONCETTUALE
-COSTRUZIONE DEL GLOSSARIO

REQUISITI:
Possibili fonti:
– Utenti e committenti, attraverso:  interviste , documentazione apposita
– documentazione esistente:  normative (leggi, regolamenti di settore)  regolamenti interni, procedure
aziendali , realizzazioni preesistenti
– modulistica

Raccolta dei requisiti :


interviste ecc..
Una volta raccolti i requisiti in linguaggio naturale bisogna ricorrere a delle tecniche per raffinare il
linguaggio, in quanto appare molto spesso ambiguo e disorganizzato.

Regole generali:
– scegliere il corretto livello di astrazione
– standardizzare la struttura delle frasi
– suddividere le frasi articolate
– separare le frasi sui dati da quelle sulle funzioni
– costruire un glossario dei termini
– individuare omonimi e sinonimi e unificare i termini
– rendere esplicito il riferimento fra termini
– riorganizzare le frasi per concetti (frasi relative a c, a v..)

<- glossario dei termini


Accanto alle specifiche sui dati vanno raccolte le specifiche sulle operazioni da effettuare su questi dati ,
informandoci sulla frequenza con la quale le varie operazioni vengono eseguite.
Es : operazione 1 , 30 volte al giorno .. ecc

Dopo questa strutturazione dei requisiti, siamo pronti ad avviare la prima fase della progettazione che
consiste nella costruzione dello schema concettuale.
Criteri generali di rappresentazione :
1. Se un concetto ha proprietà significative e/o descrive classi di oggetti con esistenza autonoma, è
opportuno rappresentarlo con una entità.
2. Se un concetto ha una struttura semplice e non possiede proprietà rilevanti associate, è opportuno
rappresentarlo come attributo di un altro concetto a cui si riferisce.
3.Se sono state individuate 2 o piu’ entità e nei requisiti compare un concetto che le associa, questo può
essere rappresentato con una relazione. Però è importante capire che questo concetto non ha degli
attributi o proprietà come le entità, a quel punto va rappresentato come entità. Ad esempio ‘visita’ non
può essere rappresentata come relazione tra medico e paziente, perché :
- ha le proprietà :data, orario
- un paziente può avere piu’ visite con il dottore
Quindi va rappresentata come entità collegata da relazioni uno a molti !
4. Se uno o più concetti risultano essere casi particolari di un altro, è opportuno rappresentarli facendo uso
di una generalizzazione.

Pattern di progetto : strategie di progettazione

REIFICAZIONE DI ATTRIBUTO DI ENTITA’:

E’ utile quando un attributo ha le


caratteristiche di un entità : ad esempio
strumento è un entità in quanto si vuole
conoscere nome e tipo.
PART-OF

Quando si vuole rappresentare il fatto che un’entità è ‘parte


di’ un’altra entità . Sono relazioni tipicamente uno a molti e si
presentano in due forme.
La prima , l’esistenza di una occorrenza dell’entità ‘parte’
dipende dall’esistenza di una occorrenza dell’entità che la
contiene (identificatore esterno) .
La seconda l’entità contenuta nell’altra ha esistenza
autonoma.

ISTANCE-OF

Un’entità che descrive il concetto astratto di volo


presente sull’orario di una compagnia aerea, con un
codice e un orario e un’altra entità che rappresenta il
volo ‘reale’, vale a dire l’istanza del volo astratto.Stessa
cosa per il torneo, c’è distinzione tra il concetto astratto
di torneo e l’edizione del torneo. Per distinguere questi
due casi si utilizza ‘dividerli’, essendo uno l’istanza di un
altro.

Reificazione di relazione BINARIA

Una relazione, tipicamente molti a molti, che si


utilizza per collegare un concetto ad un altro.
Questa soluzione è valida se ogni studente può
sostenere una sola volta un certo esame
perché, per definizione, una occorrenza della
relazione ESAME è un insieme di coppie
studente-corso, senza duplicati. Ci suggerisce
che la soluzione corretta è la seconda :
l’identificazione di un esame avviene
attraverso lo studente, il corso e la data.
Sennò, un’altra soluzione, è la terza, con
l’aggiunta di un codice identificativo :
semplifica le cose ma bisogna tener conto che
il codice è un progetto nuovo non facente
parte delle specifiche.
Reificazione di attributo di relazione
Consideriamo la relazione molti a molti che
rappresenta la partecipazione di un musicista a
un’orchestra con un certo strumento. Se il musicista
può suonare piu’ strumenti diversi ma suona, per
ogni orchestra, sempre lo stesso strumento, lo
schema primo è corretto. Non stiamo
rappresentando esplicitamente il concetto di
strumento – se è un concetto rilevante dobbiamo
reificare l’attributo della relazione e per poterlo
fare, bisogna reificare la relazione.

Caso particolare di entità

Quando si vuole rappresentare un caso particolare di


un’altra entità, si utilizza la generalizzazione. Il
sottoinsieme degli impiegati sono i manager. In questo
schema è ragionevole assumere che un manager può
gestire solo un progetto al quale partecipa : ogni coppia
manager/progetto che compare tra le occorrenze della
relazione GESTIONE , compare anche nelle occorrenze della
relazione PARTECIPAZIONE. Questo vincolo però non può
essere espresso direttamente sullo schema con un
apposito costrutto e va quindi aggiunta una regola alla
documentazione dello schema.

Storicizzazione di un concetto
Uno schema in cui si vuole gestire la
storicizzazione di un concetto, nel caso
particolare, di un’entità. Vogliamo memorizzare le
informazioni correnti di un’azienda, tenendo però
traccia dei dati passati – che sono variati. E’
efficace utilizzare due entità con gli stessi
attributi: una rappresenta il concetto con le
informazioni aggiornate e l’altro rappresenta lo
storico. Le proprietà vengono messe a fattor
comune attraverso la generalizzazione, la cui
entità genitore rappresenta tutte le info
anagrafiche dell’azienda. Vengono inoltre aggiunti gli attributi per definire l’intervallo di validità dei dati
(data inizio e data fine). L’identificatore si ottiene aggiungendo all’identificatore naturale, in questo caso,
partita ita, la data di rilascio, ovvero di inizio validità.
Un caso analogo è che si vuole distinguere una relazione ‘presente ‘ e ‘passata’ tra due entità: una
soluzione è rappresentare separatamente i dati correnti e i dati storici e aggiungere gli attributi per
specificare gli intervalli di validità delle informazioni.

Evoluzione di concetto

Vogliamo rappresentare il fatto che un certo


concetto subisce una evoluzione nel tempo
che può essere diversa per le diverse
occorrenze del concetto. Nell’esempio
abbiamo progetti proposti con l’obiettivo di
ottenere un finanziamento – solo alcuni
vengono accettati – vanno aggiunte le
informazioni quali la data di inizio ufficiale e
il finanziamento effettivo. Il costrutto di
generalizzazione si presta bene.

Strategia di progetto
Le strategie in riferimento alla modellazione di una base di dati.

Strategia TOP-DOWN (raffinamento)


Lo schema concettuale viene prodotto mediante una serie di raffinamenti successivi a partire da uno
schema iniziale che descrive tutte le specifiche con pochi concetti molto astratti. Lo schema viene poi via
via raffinato mediante opportune trasformazioni. Ci sono quindi vari livelli di raffinamento – dove lo
schema viene modificato facendo uso di alcune trasformazioni elementari che vengono chiamate primitive
di trasformazione top-down.
1. La definizione di attributi di entità o relazione
2. La reificazione di un attributo o entità, che trasforma attributo in entità oppure una relazione in una
entità.
3. La decomposizione di una relazione in due relazioni distinte
4.La trasformazione di una entità in una gerarchia di generalizzazione

Strategia BOTTOM-UP (integra)


Le specifiche iniziali sono suddivise in componenti via via sempre piu’ piccole, fino a quando queste
componenti descrivono un frammento elementare della realtà di interesse. A questo punto vengono
rappresentate da semplici schemi concettuali che possono consistere anche in singoli concetti. I vari schemi
così ottenuti vengono poi fusi fino a giungere attraverso una completa integrazione di tutte le componenti,
allo schema finale concettuale.

Strategia inside-out (caso particolare bottom up) (espande)


Si individuano solo alcuni concetti importanti e poi si procede, a partire da questi, a ‘macchia d’olio’. Si
rappresentano prima i concetti in relazione con i concetti iniziali, per poi muoversi verso quelli piu’ lontani
attraverso una ‘navigazione’ tra le specifiche.

Strategia mista: (quella che si attua di solito)


In pratica :
si procede di solito con una strategia mista: – si individuano i concetti principali e si realizza uno schema
scheletro – sulla base di questo si può decomporre – poi si raffina, si espande, si integra
Definizione schema scheletro:
Si individuano i concetti più importanti, ad esempio perché più citati o perché indicati esplicitamente come
cruciali e li si organizza in un semplice schema concettuale

Una metodologia :

 Analisi dei requisiti –  Analizzare i requisiti ed eliminare le ambiguità –  Costruire un glossario dei
termini –  Raggruppare i requisiti in insiemi omogenei
 Passo base –  Definire uno schema scheletro con i concetti più rilevanti
 Passo iterativo (da ripetere finché non si è soddisfatti) –  Raffinare i concetti presenti sulla base
delle loro specifiche –  Aggiungere concetti per descrivere specifiche non descritte
 Analisi di qualità (ripetuta e distribuita) –  Verificare le qualità dello schema e modificarlo

Qualità di uno schema concettuale

– Correttezza
Gli errori possono essere sintattici e semantici.

sintattici: uso non ammesso di costrutti . Es . generalizzazione tra associazioni invece che tra entità
semantici: uso di costrutti che non rispetta la loro definizione. Es usare una associazione per esprimere il
fatto che una entità è specializzazione di un’altra

– Completezza

verifica sulle specifiche: TUTTI i concetti sono rappresentati e TUTTE le operazioni possono essere eseguite

– Leggibilità
E’ leggibile quando rappresenta i requisiti in maniera naturale e comprensibile – schema autoesplicativo,
per esempio attraverso una scelta opportuna dei nomi da dare ai concetti.
Disporre i costrutti su una griglia scegliendo come elementi centrali quelli con più legami con altri, tracciare
solo linee perpendicolari e cercare di minimizzare le intersezione, disporre le entità genitori sopra le entità
figlie (consigli estetici)

– Minimalità

tutte le specifiche sono rappresentate una sola volta nello schema (a volte la ridondanza è una scelta, ma
va documentata)
PROGETTAZIONE LOGICA

Le attività della progettazione logica sono la riorganizzazione dello schema concettuale e la traduzione in un
modello logico. La progettazione logica si articola in due fasi:

1. Ristrutturazione dello schema entità-relazione : è una fase indipendente dal modello logico scelto e
si basa sui criteri di ottimizzazione
2. Traduzione verso il modello logico : il modello relazionale

(prima fase)Dati di ingresso : schema progettuale (E-R + regole aziendali), carico applicativo previsto in
termini di dimensione dei dati e caratteristiche delle operazioni.
(seconda fase) Schema E-R ristrutturato non è più uno schema concettuale, costituisce una
rappresentazione dei dati che tiene conto degli aspetti realizzativi + modello relazionale
Analisi delle prestazioni
Parametri che regolano le prestazioni :
1. Costo di una operazione : valutato in termini di occorrenze di entità e associazione che vengono visitate
per accedere ad una operazione sulla base di dati
2. Occupazione di memoria : termini dello spazio di memoria
Volume dei dati :
- numero di occorrenze di ogni entità e associazione dello schema
-dimensione di ciascun attributo
Caratteristica delle operazioni :
-tipo dell’operazione
-frequenza
-dati coinvolti
Volume dei dati e caratteristiche delle operazioni vengono descritti in tavole : Tavola dei Volumi, Tavola
delle operazioni.
TAVOLA DEI VOLUMI
Vengono riportati tutti i concetti dello schema (entità e associazioni) con
il volume previsto a regime.
Il numero delle occorrenze delle associazioni dipende da due parametri :
numero occorrenze entità coinvolte nelle associazioni e numero medio di
partecipazioni di una occorrenza di entità alle occorrenze di associazioni.
Il secondo parametro dipende a sua volta dalle cardinalità delle
associazioni.

TAVOLA DELLE OPERAZIONI


Riportiamo per ogni operazione, la frequenza prevista e un simbolo che indica se l’operazione è
INTERATTIVA (I) o batch (B).

SCHEMA DI OPERAZIONE
Per ogni operazione possiamo descrivere graficamente i dati coinvolti con uno schema di operazione che
consiste nel frammento dello schema E-R interessato all’operazione . Da questi si possono contare i costi di
operazione contando il numero di accessi alle occorrenze entità e associazioni necessari per eseguire quella
operazione.
TAVOLA DEGLI ACCESSI
Nell’ultima colonna viene riportato il tipo di accesso :

L : lettura
S: scrittura

Le operazioni di scrittura sono più onerose di quelle


in lettura.

RISTRUTTURAZIONE SCHEMA E-R

 Analisi delle ridondanze


Si decide se eliminare o mantenere eventuali ridondanze
 Eliminazione delle generalizzazioni
Tutte le generalizzazioni vengono analizzate e sostituite da altri costrutti
  Partizionamento/accorpamento di entità e relationship
Si decide se è opportuno partizionare concetti dello schema in più concetti o, viceversa, accorpare
concetti separati
  Scelta degli identificatori primari
Si seleziona un identificatore per quelle entità che ne hanno più di uno

Analisi delle ridondanze :


1 attributi derivabili:
– da altri attributi della stessa entità (o relationship)
– da attributi di altre entità (o relationship)
-da operazioni di conteggio di occorrenze (es numero di abitanti)

2 relationship derivabili :
-dalla composizione di altre (più in generale: cicli di relationship)

Ci sono vantaggi e svantaggi nelle ridondanze :


il vantaggio è la riduzione di accessi necessari per calcolare il dato derivato, lo svantaggio è proprio la
maggiore occupazione di memoria e la necessità di effettuare operazioni aggiuntive per mantenere il dato
derivato.
Eliminazione delle generalizzazioni:

Abbiamo 3 alternative possibili:


1. Accorpamento delle figlie della generalizzazione nel genitore
2. Accorpamento del genitore della generalizzazione nelle figlie
3. Sostituzione della generalizzazione con relationship

Prendiamo in esempio lo schema a destra.

1 - L’entità E1 ed E2 vengono eliminate e le loro proprietà aggiunte


all’entità genitore E0. A tale entità viene aggiunto un altro attributo
che serve a distinguere il tipo di una occorrenze di E0, cioè se
appartiene a E1 o E2, nel caso di una generalizzazione non totale a
nessuna delle due.

CONVENIENTE : quando le operazioni non fanno molta distinzione tra


le occorrenze e gli attributi di E0, E1, E2

2- L’entità genitore E0 viene eliminata e per la proprietà di


ereditarietà ,i suoi attributi , il suo identificatore e le relazioni a cui
tale entità partecipava, vengono aggiunti alle entità figlie E1 ed E2. Le
relazioni R11 e R12 rappresentano la restrizione della relazione R1
sulle occorrenze delle entità E1 ed E2.

POSSIBILE: solo se la generalizzazione è totale – le occorrenze di E0


che non sono né occorrenze di E1 ed E2 non sono rappresentabili
CONVENIENTE : quando ci sono operazioni che si riferiscono solo a occorrenze di E1 oppure di E2, e dunque
fanno distinzioni tra tali entità.

3- La generalizzazione si trasforma in due associazioni uno a uno che


legano rispettivamente l’entità genitore con l’entità figlie E1 ed E2.
Non ci sono trasferimenti di attributi e le entità E1 ed E2 sono
identificate esternamente da E0. Vanno aggiunti però dei vincoli : ogni
occorrenza E0 non può partecipare contemporaneamente a Rg1 e Rg2
; inoltre, se la generalizzazione è totale, ogni occorrenza di E0 deve
partecipare o a un’occorrenza di Rg1 oppure ad un’occorrenza di Rg2.

CONVENIENTE : la generalizzazione non è totale e ci sono operazioni che si riferiscono solo a occorrenze di
E1 (E2) oppure E0, fanno distinzione tra entità figlia ed entità genitore.
Combinazione delle 3 ristrutturazioni :
Si è deciso di accorpare E0 ed E1, e lasciare E2 separata.
L’attributo TIPO è stato aggiunto per distinguere le occorrenze di
E0 da quelle di E1.

Per le generalizzazioni a più livelli : si procede analizzando una


generalizzazione alla volta a partire dal fondo dell’intera gerarchia.

Partizionamento/accorpamento di entità e relationship


Entità e associazioni in uno schema E-R possono essere partizionati o
accorpati per garantire una maggior efficienza delle operazioni in base al
seguente principio : gli accessi si riducono separando attributi di uno stesso
concetto che vengono acceduti da operazioni diverse e raggruppando
attributi di concetti diversi che vengono acceduti dalle medesime
operazioni.

1. Partizionamento di entità :

DECOMPOSIZIONE VERTICALE : (si suddivide un concetto operando sui


suoi attributi)
L’entità impiegato viene sostituita da due entità collegate da una
associazione uno a uno , che descrivono rispettivamente i dati anagrafici
e i dati lavorativi.
CONVENIENTE : se le operazioni che coinvolgono l’entità originaria
richiedono, per un impiegato, solo informazioni di carattere anagrafico o solo informazioni relative alla sua
retribuzione. Genera entità con pochi attributi – molto conveniente.

DECOMPOSIZIONI ORIZZONTALI : (si suddivide il concetto sulle occorrenze dell’entità)


Impiegato si suddivide in ANALISTA e VENDITORE : si divide l’entità in due distinte, perché le operazioni
riguardano o solo analisti o solo venditori. Bisogna duplicare però le associazioni a cui l’entità originaria
partecipa, questa suddivisione corrisponde all’introduzione di una generalizzazione.
2 Eliminazione di attributi multivalore :

-------

E’ un tipo di partizionamento che riguarda


l’eliminazione di attributi multivalore- è una ristrutturazione necessaria perché il modello relazionale, come
per le generalizzazioni, non permette di rappresentare in maniera diretta questo tipo di attributo.
Agenzia ha l’attributo multivalore TELEFONO viene partizionata in due entità : agenzia e telefono.

3 Accorpamento di entità

-

L’accorpamento è l’operazione inversa del partizionamento : persona e appartamento , legate da una


associazione uno a uno (!!!!) vengono accorpate in un’unica entità. Le operazioni su persona richiedono
tutti i dati relativi ad appartamento e persona – vogliamo risparmiare gli accessi necessari per risalire a
questi dati. L’effetto collaterale : valori nulli -> nessuna persona è intestataria di un appartamento.
Uno a uno : ok
Uno a molti : ridondanze
Molti a molti : mai , ridondanze

4 Partizionamento orizzontale di associazione

--

Decomporre una associazione in due associazioni – per separare le occorrenze accedute sempre
separatamente. Oppure accorpare più associazioni quando vengono accedute sempre
contemporaneamente (inverso) .
Scelta degli identificatori principali

E’ fondamentale nelle traduzioni verso il modello relazionale – le chiavi vengono usate per stabilire legami
tra dati in relazioni diverse.
Specificare una chiave primaria : sulla quale vengono costituite strutture ausiliarie , dette indici, per il
reperimento dei dati. Nei casi in cui esistono entità per le quali sono stati specificati più identificatori,
bisogna decidere quale di questi identificatori verrà utilizzato come chiave primaria.

1. Attributi con valori nulli non possono costituire identificatori principali


2. Identificatore composto da uno o da pochi attributi è da preferire a identificatori costituiti da molti
attributi. Gli indici dovrebbero essere di strutture ‘ridotte’, permettendo un risparmio di memoria
nella realizzazione dei legami logici.
3. Un identificatore interno è da preferire da uno esterno, che magari coinvolge diverse entità.
4. Un identificatore che viene utilizzato da molte operazioni per accedere alle occorrenze di un’entità
è da preferire rispetto agli altri.

Se nessuno dei candidati soddisfa le richieste è possibile introdurre un ulteriore attributo all’entità : questo
attributo conterrà valori speciali (detti codici) generati appositamente per identificare le occorrenze delle
entità. Per alcuni identificatori è possibile definire chiavi secondarie - indici secondari – consentono
l’accesso efficiente ai dati e alternativi agli indici definiti automaticamente.

IL MODELLO RELAZIONALE

Modello dei dati è un insieme di concetti utilizzati per organizzare i dati di interesse e descrivere la struttura
in modo che essa risulti comprensibile. Ogni modello fornisce meccanismi di strutturazione, analoghi ai
costruttori di tipo dei linguaggi di programmazione, che permettono di definire nuovi tipi sulla base di tipi
predefiniti.
Il modello relazionale dei dati permette di definire tipi per mezzo del costruttore ‘relazione’ , che consente
di organizzare i dati in insiemi di record a struttura fissa. Una relazione viene spesso rappresentata per
mezzo di una tabella, le cui righe rappresentano specifici record e le cui colonne corrispondono ai campi dei
record ; l’ordine delle righe e delle colonne è irrilevante.
Ci sono 3 tipi di modelli logici comunque :
-relazionale
-gerarchico ( strutture ad albero )
-reticolare ( uso di grafi )
-modello a oggetti (evoluzione del relazionale)
-modello XLM (complementare a quello relazionale, i dati vengono presentati insieme alla loro descrizione
e non devono sottostare rigidamente a un’unica struttura logica)
-NoSQL , modello flessibile

Schema della base di dati : invariante nel tempo


istanza o stato : valori effettivi
Modello relazionale : relazione e tabella
Schema di una relazione : è costituito dalla sua intestazione, cioè dal nome della relazione seguito dai nomi
dei suoi attributi .
Attributi : colonne , non variano nel tempo
Istanze : righe , variano nel tempo

Docenza :

Corso NomeDocente
Basi di dati Rossi

- > le colonne Docenza (Corso, NomeDocente)


-> Le righe : l’istanza di una relazione costituita dall’insieme , variante nel tempo , delle sue righe
es : Basi di dati, Rossi

Lo schema è la componente intensionale della base di dati e l’istanza la componente estensionale.


Relazioni e tabelle

Relazione matematica :
Dati due insiemi D1 e D2, si chiama prodotto cartesiano di D1 e D2 , D1xD2 l’insieme delle coppie ordinate
(v1,v2) tali che v1 fa parte di D2 e v2 di D2.
D1 e D2 sono i domini della relazione – l’insieme delle coppie vengono rappresentate graficamente sotto
forma di tabella.
Possono esserci piu’ domini : prodotto di n insiemi D1..D2…Dn , è l’insieme delle n-uple (v1,….vn) tali che vi
appartiene da Di.

Una relazione è un sottoinsieme del prodotto cartesiano.

Numero n : grado del prodotto cartesiano e della relazione


Numero di elementi – n-uple : cardinalità della relazione

Def Tupla (n-upla)


Una sequenza ordinata di valori di attributi (una particolare
riga della tabella)

Def attributi
Insieme di ‘ruoli’ della relazione, colonne es. (NomeCorso,
NomeDocente, Anno) che non variano nel tempo
Sono le intestazioni delle colonne e indicano i ruoli ‘giocati’ dai
domini stessi.

Formalizziamo i concetti :
D : insieme dei domini
dom : X -> D funzione che associa a ciascun attributo A app X un dominio dom(A) e D.

Tupla : insieme di attributi di X , è una funzione t che associa a ciascun attributo A app X un valore del
dominio dom(A).
Relazione : una relazione su X è un insieme di tuple su X.
Se t è una tupla su X e A app a X allora t[a] indica il valore di t su A.
es : t[SquadraOspitata] = Lazio
t[SquadraOspitata,RetiOspitata]= Lazio,2

Una base di dati è un insieme di tabelle, insieme di relazioni .


Schema di relazione : R(X), dove R è il nome della relazione e X insieme di attributi.
Schema di base di dati : (R1(X1),R2(X2)…Rn(Xn) insieme di schemi di relazione
Istanza di relazione : r(X), insieme r di tuple su X.
Istanza di base di dati : insieme di relazion r= (r1,r2..rn) dove ogni r è una relazione sullo schema R(X).

Convenzioni :

Attributi : lettere iniziali alfabeto, maiuscole con indici e/o pedici A, A’


Insiemi di attributi : lettere finali alfabeto, maiuscole X, Y, Z con indici e/o pedici X=A B C , unione insiemi
sarà X Y, scrivere X A
Nomi di relazioni : R e lettere contigue, maiuscole R’, S, S’ .. per le relazioni stessi simboli ma minuscole

Informazione incompleta

•  ll modello relazionale impone ai dati una struttura rigida:


– le informazioni sono rappresentate per mezzo di ennuple
– solo alcuni formati di ennuple sono ammessi: quelli che
corrispondono agli schemi di relazione

•  I dati disponibili possono non corrispondere al formato


previsto

- La non disponibilità di valori, il concetto di relazione viene di solito esteso prevedendo che una
tupla possa assumere, su ciascun attributo, o un valore del dominio oppure un valore nullo. (che
non è un valore del dominio)
Simbolo : NULL
- t[A],per ogni attributo di A, è un valore del dominio dom(A) oppure NULL
- Si possono e debbono imporre restrizioni sulla presenza di valori nulli

Bisogna stare attenti alle presenza del valore nullo : ci sono informazioni irrilevanti che si possono
trascurare, mentre mettere il valore nullo in alcuni contesti essenziali può essere dannoso e privare di
senso la base di dati. Solo alcune configurazione dei valori nulli possono essere ammesse.

Vincoli di integrità
Proprietà che deve essere soddisfatta dalle istanze che rappresentano informazioni corrette per
l’applicazione

•  Un vincolo è una funzione booleana (un predicato): associa ad ogni istanza il valore vero o falso

•  descrizione più accurata della realtà •  contributo alla “qualità dei dati” •  utili nella progettazione
(vedremo) •  usati dai DBMS nella esecuzione delle interrogazioni

Tipi di vincoli :

1. Vincoli intra-relazionale: se il suo soddisfacimento è definito rispetto a singole relazioni della base
di dati.
1.1 Vincoli di tupla : vincolo che può essere valutato su ciascuna tupla indipendentemente dalle
altre . Viene detto vincolo di ennupla
1.2 Vincolo definito con riferimento a singoli valori (es _ voti esami compresi tra 18 e 30) , vincolo
su valori o vincolo di dominio
1.3 Vincoli di chiave
2. Vincoli Inter-relazionale : Se coinvolge più relazioni (vincoli di integrità referenziale)

Vincoli di tupla- vincoli di ennupla e vincoli di dominio

Condizioni sulle singole tuple, indipendentemente dalle altre.

Una possibile sintassi per esprimere questi vincoli è quella


attraverso le espressioni booleane :
AND, OR , NOT
es Voto >=18 AND Voto<=30
not (Lode=’lode’) or (Voto = 30) (dominio)

Oppure
Lordo = (Ritenute + Netto) (ennupla)

----------------------------------------------------------------------------------------------------------------------------------------------

Alcuni tipi di vincoli (ma non tutti) sono "supportati" dai DBMS:
– possiamo quindi specificare vincoli di tali tipi nella nostra base di dati e il DBMS ne impedisce la
violazione.
Per i vincoli "non supportati", la responsabilità della verifica è dell'utente o del programmatore.
-----------------------------------------------------------------------------------------------------------------------------------------------

Vincoli di chiave

Una chiave è un insieme di attributi utilizzato per identificare univocamente le tuple di una relazione. Per
formalizzare la definizione, procediamo in due passi :

- Un insieme k di attributi è superchiave di una relazione r se r non contiene due tuple distinte t1 e
t2 con t1[k]=t2[k]
- K è chiave di r se è una superchiave minimale di r (cioè non esiste un’altra superchiave K’ di r che
sia contenuta in K come sottoinsieme proprio)

Ogni relazione ha una chiave : possiamo partire dall’insieme di attributi X e definirlo come chiave, verificare
se presenta all’interno una chiave minimale, e così via, ricorsivamente, finchè non si trova la superchiave di
una relazione.
es : matricola è la chiave della relazione STUDENTI

L’esistenza delle chiavi garantisce l’accessibilità a ciascun dato della base di dati.
Le chiavi permettono di correlare i dati in relazioni diverse: Il modello relazionale è basato su valori

In presenza di valori nulli, i valori della chiave non permettono – di identificare le ennuple – di realizzare
facilmente i riferimenti da altre relazioni – la presenza di valori nulli nelle chiavi deve essere limitata.
Chiave primaria : non sono ammessi valori nulli
Sulle altre chiavi, sono in generali, amessi.

Notazione : sottolineatura
In questo modo si può sempre accedere alla basi di dati – c’è sempre un
identificatore univoco per i soggetti del dominio.
Vincoli di integrità referenziali

Le informazioni delle infrazioni sono rese significative con il riferimento alle altre due relazioni : vigili per
mezzo dell’attributo MATRICOLA , e la relazione auto, per mezzo degli attributi PROV e NUMERO.
I valori nella relazione INFRAZIONE sono uguali a valori presenti nelle altre due.
Un vincolo di integrità referenziale fra un insieme di attributi X di una relazione R1 e un insieme di attributi
K di un’altra relazione R2 è soddisfatto se i valori su X di ciascuna tupla dell’istanza di R1 compaiono come
chiave primaria dell’istanza R2. Quando ci sono più attributi è necessario specificare un ordinamento
nell’insieme di attributi di X e di K.
X=A1…AN e K=B1…Bp
IL vincolo è soddisfatto se per ogni tupla t1 in R1 senza nulli su X esiste una tupla t2 in R2 con t1[Ai]= t2[Bi] ,
con i compreso fra 1 e p

Esempio di violazione di vincolo :

Azioni compensative

Esempio:

– Viene eliminata una ennupla causando una violazione


• Comportamento “standard”:
– Rifiuto dell'operazione
• Azioni compensative:
– Eliminazione in cascata
– Introduzione di valori nulli
TRADUZIONE VERSO IL MODELLO RELAZIONALE

MODELLO LOGICO – MODELLO RELAZIONALE .


La seconda fase della progettazione logica è la traduzione tra modelli di dati diversi : a partire da uno
schema E-R ristrutturato si costruisce uno schema logico equivalente.
Schema E-R ristrutturato: senza generalizzazioni e attributi multivalore, nella quale ogni entità ha un solo
identificatore chiave.

Idea:
Le entità diventano relazioni sugli stessi attributi
Le relationship diventano relazioni sugli identificatori delle entità coinvolte (più gli attributi propri).

TRADUZIONE ENTITA’ FORTE

Dato che Musicista può essere associato a 1,n strumenti, allora di ‘strumento’ ne si fa una relaziona a sé.

1. Per ogni entità : una relazione con lo stesso nome avente per attributi i medesimi attributi
dell’entità e per chiave il suo identificatore
2. Per l’associazione, una relazione con lo stesso nome avente per attributi gli attributi
dell’associazione e gli identificatori delle entità coinvolte ( vincoli di integrità referenziali tra gli
attributi e si denominano con i nomi delle entità per renderlo più chiaro) – tali identificatori
formano la chiave della relazione.

TRADUZIONE ASSOCIAZIONE MOLTI A MOLTI

Musicista (CF, Nome , Cognome)

Strumento (Nome, Tipo)

Suona (Musicista, Strumento, AnnoInizio) (Musicista e Strumento – vincoli d’integrità)


TRADUZIONE ASSOCIAZIONE CARD MAX 1

Musicista(CF , nome, cognome, strumento, AnnoInizio)


Strumento(Nome,Tipo)

Strumento : vincolo di integrità

TRADUZIONE DI UN ASSOCIAZIONE CON CARD MAX 1 OPZIONALE

Musicista(CF , Nome, Cognome)

Strumento(Nome, Tipo)

Suona(Musicista,Strumento, AnnoInizio)

Vincolo di integrità tra attributi Musicista e CF e tra attributo strumento e Nome.


Con la partecipazione opzionale possono esistere attributi NULLI – per questo caso si prevede le relazioni
separate – questa soluzione ha il vantaggio di non presentare mai valori nulli sugli attributi che
rappresentano l’associazione. E’ da prendere in considerazione se il numero delle occorrenze delle
associazioni è molto basso rispetto alle occorrenze delle entità che partecipano all’associazione.
TRADUZIONE CON ENTRAMBE ASSOCIAZIONE CON CARD MAX 1

L’associazione ‘suona’ non conviene usarla come relazione.


Musicista(CF, nome, cognome, strumento, AnnoInizio)
Strumento( Nome, Tipo)

Strumento è vincolo di integrità tra attributo Nome e Strumento

TRADUZIONE DI UN’ASSOCIAZIONE RICORSIVA

Musicista (CF, nome, Cognome)


SuonaCon( Musicista1, Musicista2)
Vincoli di integrità tra attributo Musicista1,2 e il CF di Musicista
C’è stata una ridenominazione, efficace nella traduzione ricorsiva.

TRADUZIONE ASSOCIAZIONI TERNARIE (molti a molti)


Musicista (CF, nome, Cognome)
Strumento (Nome, Tipo)
Brano (ID, Titolo)
Registra (Musicista,Strumento,Brano, Data)

Vincoli di integrità : attributo Musicista-CF, Strumento-Nome e Brano-ID

TRADUZIONE ASSOCIAZONI TERNARIE CON CARD MAX 1 (1,1)

Musicista( Cf, Nome, Cognome)


Strumento(Nome, Tipo)
Brano(Id, Titolo, Musicista, strumento, Data)

Vincolo di integrità tra Musicista e CF e tra strumento e Nome

Si leva l’associazione come relazione e la si incorpora nell’entità.

TRADUZIONE DI UN’ENTITA’ DEBOLE , con vincolo di partecipazione 1,1 e attributi identificativi

Teatro(Nome, Indirizzo)
Posto(Fila, Numero, Teatro)
TRADUZIONE ENTITA’ DEBOLE CON ATTRIBUTI IDENTIFICATIVI

Posto(Id)
Concerto(Data, Descrizione)
PostoPrenotato(Posto,Concerto)

Vincoli integrità Posto-Id e Concerto-Data

L’entità debole ha tutte le chiavi primarie dell’entità


forte.

Entità deboli in cascata  Schemi complessi

Regole Basi traduzioni schemi complessi :

1. TRADUCO OGNI ENTITA’ CON UNA RELAZIONE – LE ENTITA’ CON IDENTIFICATORE INTERNO è
IMMEDIATA- IN QUANTO DIVIENE CHIAVE PRIMARIA
2. TRADUCO LE ENTITA’ CON IDENTIFICATORE ESTERNO- OVVERO DEBOLI – CONTENGONO TUTTE LE
CHIAVI PRIMARIE DELLE IDENTITA’ FORTI CON ASSOCIAZIONI 1,1
3. TRADUCO LE ASSOCIAZIONI- QUELLE 1,1 AGGIUNGEREMO GLI ATTRIBUTI ALLE ENTITA’ COLLEGATE
– QUELLE MOLTI A MOLTI AVRANNO COME CHIAVE PRIMARIA LE CHIAVI PRIMARIE DELLE ENTITA’
COLLEGATE E LE STESSE
ALGEBRA RELAZIONALE

Linguaggi per basi di dati :


DDL – definire schemi logici, esterni, fisici
DML -interrogare e aggiornare le istanze di BD
Interrogare : funzione che data un’istanza di BD produce una relazione su un dato schema
Aggiornare : funzione che data un’istanza di BD produce un’altra istanza sullo stesso schema

Operazioni di base : selezione, proiezione, ridenominazione


Operazioni insiemistiche : unione, intersezione, differenza
Operazioni di correlazione : prodotto cartesiano, join naturale, theta-join

Operatori ‘ortogonali’ :
Selezione : decomposizione orizzontale –
produce un sottoinsieme delle tuple , su
tutti gli attributi

Selstipendo>50 (Operatore denotato dal


simbolo – a pedice del quale viene definita la
‘condizione di selezione’ =)
Le condizioni di selezione possono
prevedere confronti fra attributi e confronti
fra attributi e costanti – possono essere
complesse , ottenute combinando condizioni
semplici con i connettivi logici.

Proiezione : decomposizione verticale - produce un sottoinsieme degli attributi

Data una relazione r(X) e un sottoinsieme Y di X, la


proiezione di r su Y è l’insieme di tuple su Y ottenute dalle
tuple di r considerando solo i valori su Y :
La seconda proiezione ha meno
tuple dell’operando perché
alcune tuple hanno uguali
valori su tutti gli attributi della
proiezione – danno lo stesso
contributo alla proiezione
stessa – i contributi uguali
collassano in una tupla sola.
In generale diciamo che il
risultato di una proiezione
contiene al più tuple quante
l’operando – ma può
contenerne meno.
- Se Y è una superchiave, allora r non contiene tuple uguali su Y , quindi ogni tupla dà un contributo diverso
alla proiezione

-se la proiezione ha tante tuple quante l’operando- allora Y è una superchiave .


Unione :

L’unione di due relazioni r1 e r2 definite sullo stesso insieme di


attributi X è indicata con r1 U r2 ed è una relazione ancora su X
contenente le tuple che appartengono a r1 oppure a r2, oppure a
entrambe

Se contengono una tupla uguale – l’unione ne conterrà solo una


‘copia’.
Intersezione:

L’intersezione di r1(x) e r2(x) è indicata con r1 Ω r2 ed è una


relazione su X contenente le tuple che appartengono sia a r1 che a
r2

Differenza :

La differenza di r1(x) e r2(x) è indicata con r1-r2 ed è una relazione


su X contenente le tuple che appartengono a r1 e non
appartengono a r2
(tutte le tuple di r1- le tutple di r2)

Ridenominazione :

Per risolvere il problema dell’unione sensata ma


scorretta- bisogna utilizzare la ridenominazione.
Ren genitore <- Padre (Paternità) e Ren gentitore <-
madre (maternità)
Ovvero ridenomino l’attributo ‘padre’ con genitore, e
‘madre’ con genitore – in modo tale che l’unione sia
sensata.

Si possono ridenominare più attributi contemporaneamente.


ren at1,at2 <- at1v,at2v (r)

Join
E’ un operatore che permette di correlare dati contenuti in relazioni diverse – confrontando i valori
contenuti in esse e utilizzando quindi la caratteristica fondamentale del modello , quella di essere basato
sui valori. Esistono due versioni del join : join naturale e theta join
Join naturale : operatore correla dati in relazioni diverse, sulla base di valori uguali in attributi con lo stesso
nome

Il grado della relazione ottenuta come risultato di un join è minore o uguale della somma dei gradi dei due
operandi , perché gli attributi omonimi degli operandi compaiono una sola volta nel risultato

Join completi :ciascuna tuple di ciascuno degli operandi contribuisce al risultato , cardinalità r1xr2

Join incompleto : non tutte le tuple contribuiscono al risultato , cardinalità minore di r1xr2

Join Vuoto : nessuna tupla contribuisce al risultato cardinalità 0

1. Se il join è completo, contiene almento r1xr2 tuple


2. Se x1 intersecato x2 contiene una chiave per r2, allora il join di r1(x2) e r2(x2) contiene al più di r1
tuple
3. Se x1 intersecato x2 coindice con una chiave per r2 e sussiste il vincolo di riferimento fra x1
intersecato x2 in r1 e la chiave di r2, allora il koin contiene esattamente r1 tuple

Join esterni
•  Il join esterno estende, con valori nulli, le
ennuple che verrebbero tagliate fuori da un
join (interno) esiste in tre versioni: –
 sinistro, destro, completo
SQL :
Originariamente "Structured Query Language", ora "nome proprio"   ,
linguaggio con varie funzionalità:

– contiene sia il DDL sia il DML

Definizione dei dati in SQL :


- [,] termine opzionale – può comparire o non comparire una sola volta
- {,} temine può non comparire o essere ripetuto un numero arbitrario di volte
- | deve essere scelto uno tra i termini separati dalle barre
- parentesi angolari – isolano un termine della sintassi
Definizione di schema :
SQL consente la definizione di uno schema di basi di dati come collezione di oggetti -
Uno schema viene definito :
create schema [NomeSchema] [ [authorization] Autorizzazione ] {defElementoSchema}
Autorizzazione : nome utente proprietario dello schema
Definizione delle tabelle
Una tabella in SQL è definita come collezione ordinata di attributi e da un insieme di vincoli.
create table NomeTabella (
NomeAttributo Dominio [Valore di default] [vincoli}

…altri attributi

Una tabella creata è inizialmente vuota


Vincoli intrarelazionali
Vengono messi dopo il nome di attributo e il valore di default

NOT NULL : il valore nullo è un particolare valore che indica assenza di informazioni – questo vincolo indica
che il valore nullo non è ammesso come valore dell’attributo
DEFAULT 0 : viene specificato che il valore dell’attributo è associato ad un valore di default (in questo caso
0)
UNIQUE : Impone che i valori dell’attributo siano una superchiave, cioè righe differenti della tabella non
possono avere gli stessi valori – fatta eccezione per il valore nullo il quale può comparire su diverse righe
senza violare il vincolo in quanto si assume che i valori nulli siano tutti diversi tra loro
Si può usare in due modi :
1. Definire il vincolo su un solo attributo – si fa seguire la specifica dell’attributo dalla parola UNIQUE
2. Definire il vincolo su più attributi – dopo aver definito gli attributi si utilizza la sintassi
unique (attributo1,attributo2..)

PRIMARY KEY: Per ogni relazione si specifica la chiave primaria – una sola volta per ogni tabella
Primary key può essere usato in due modi come unique – su un attributo oppure su più attributi – gli
attributi che fanno parte della chiave primaria non possono assumere il valore nullo (può essere omessa)

Vincoli interrelazionali
Vincoli di integrità referenziale – in SQL si utilizza il vincolo foreign key
Ovvero chiave esterna
Vincolo che crea un legame tra i valori di un attributo della tabella interna e uno della tabella esterna.
Il vincolo impone che per ogni riga della tabella interna il valore dell’attributo specificato se diverso dal
valore nullo , sia presente nelle righe della tabella esterna tra i valori del corrispondente attributo.
L’attributo a cui si fa riferimento deve essere soggetto al vincolo unique – cioè sia un identificatore della
tabella. Tipicamente rappresenta infatti la chiave primaria.
Possono essere coinvolti più attributi ma in questo caso bisogna confrontare più ennuple.
Può essere definito in due modi come i vincoli unique e primary key.
UN SOLO ATTRIBUTO COINVOLTO – COSTRUTTO REFERENCES tabellaesterna(AttributoEsterno)
INSIEME DI ATTRIBUTI COINVOLTI – FOREIGN KEY -posto al termine della definizione di attributi
foreign key (Attributo1,Attributo2)
references TabellEsterna(Attributo1est,Attributo2est)
La corrispondenza avviene in base all’ordine : Attributo1 collegato a Attributo1est e così via..

Violazione del vincolo :


- modificando contenuto tabella interna – inserendo nuova riga o modificando valore – OPERAZIONE
RIFIUTATA
-modifiche tabella esterna – ci sono diverse alternative possibili per questa violazione

La tabella esterna (master) rappresenta la tabella principale mentre quella interna (slave).
Alternative possibili per operazione di modifica :

 Cascade : il nuovo valore dell’attributo della tabella esterna viene riportato su tutte le
corrispondenti righe della tabella interna;
 Set null : all’attributo referente viene assegnato il valore nullo al posto del valore modificato nella
tabella esterna ;
 set default : all’attributo referente viene assegnato il valore di default al posto del valore
modificato nella tabella esterna
 no action : l’azione di modifica non viene consentita e il sistema non ha quindi bisogno di riparare
la violazione

Alternative possibili per operazione di cancellazione elemento tabella esterna :

 Cascade : tutte le righe della tabella interna corrispondente alla riga cancellata vengono cancellate
 Set null : all’attributo referente viene assegnato il valore nullo al posto del valore cancellato nella
tabella esterna
 set default : all’attributo referente viene assegnato il valore di default al posto del valore cancellato
nella tabella esterna
 no action : cancellazione non consentita

Cascade : righe tabella interna strettamente legate alle righe della tabella esterna
La politica di reazione viene specificata dopo il vincolo di integrità in questo modo :
on (delete | update )
(cascade |set null |set default |no action)

Esempio :
on delete set null
on update cascade

Politica set null per la cancellazione e cascade per la modifica

Modifiche degli schemi :

Sql fornisce primitive per la manipolazione degli schemi delle basi di dati, che permettono di modificare le
definizioni di tabelle precedentemente introdott.
Alter . comando alter permette di modificare domini e schemi di tabelle.
alter domani NomeDominio ( set default | ValoreDefault ) |
drop default |
add constraint defVincolo |
drop constraint NomeVincolo )
alter table NomeTabella (

Altercolumn NomeAttributo ..
AddConstrain defVincolo|
drop constraint NomeVincolo !
add column DefAttributo |
drop column NomeAttribuo )
Tramite alter domani e alter table è possibile aggiungere o rimuovere vincoli e modificare i valori di default
associati ai domini e agli attributi – aggiungere e eliminare attributi sullo schema di una tabella.

Es: aggiungere attributo numeroUffici a dipartimento


alter table Dipartimento add column NumeroUffici numeric(4)

Drop : drop permette di rimuovere dei componenti, siano essi schemi domini o tabelle , viste o asserzioni
Opzione restrict specifica che il comando non deve essere eseguito in presenta di oggetti non vuoti : è
opzione di default.
Opzione cascade : tutti gli oggetti specificati vengono rimossi

Definizione degli indici


create index – in passato unico mezzo per definire chiavi
create index CodiceDip_IDX on Studenti(CodiceDip)
create unique index Matricola_IDX on Studenti(Matricola)

Indice primario : matricola_IDX


DDL : In molti sistemi si utilizzano strumenti diversi dal codice SQL per definire lo schema della base di dati

Query in SQL -> query optimizer -> query in ling proced interno al DBMS -> esecuzione
Sql non esprime interrogazioni in modo dichiarativo, si specifica l’obiettivo dell’interrogazione e non il
modo in cui ottenerlo. Si contrappone ai linguaggi di interrogazioni procedurali, come l’algebra relazionale,
in cui l’interrogazione specifica i passi da compiere per estrarre le informazioni dalla base di dati.
L’interrogazione SQL per essere seguita viene passata all’ottimizzatore di interrogazioni (query optimizer) ,
un componente del DBMS il quale analizza l’interrogazione e formula a partire da questa un’interrogazione
equivalente al linguaggio procedurale interno del sistema di gestione di basi di dati. Questo linguaggio è
nascosto all’utente – per questo in sql si possono trascusare gli aspetti di traduzione e ottimizzazione.
Bisogna basarsi su : leggibilitàe modificabilità dell’interrogazione – SQL agevola così il lavoro del
programmatore permettendogli di descrivere le interrogazioni in modo astratto e di alto livello.

OPERAZION SUI DATI :


Interrogazione : parte del DML
select : istruzione che specifica interrogazioni

select ListaAttributi
from ListaTabelle
[where condizione]
Oppure

Select AttrEspr as Alias


from Tabella
where condizione

Le tre parti vengono chiamate ‘clausola’ select – clausola from e clausola where.
L’interrogazione seleziona tra le righe che appartengono al prodotto cartesiano delle tabelle elencate nella
clausola from , quelle che soddisfano le condizioni espresse nell’argomento della clausola where.
Il risultato dell’esecuzione di un’interrogazione SQL è così una tabella con una riga per ogni riga prodotta
dalla clausola from e filtrata dalla clausola where, le cui colonne si ottengono dalla valutazione delle
espressioni AttrEspr che appaiono nella clausola select.

Esempio:
estrarre lo stipendio degli impiegati di cognome ‘rossi’
Impiegato(Nome, Cognome, Dipart, Ufficio, Stipendio, Città)
Dipartimento( Nome, Indirizzo, Città)

select Stipendio as Salario


from Impiegato
where Cognome = ‘Rossi’

Clausola select * : la clausola select specifica gli elementi dello schema della tabella risultato. Come
argomento della clausola select può anche comparire il carattere speciale * (asterisco) , che rappresenta la
selezione di tutti gli attributi delle tabelle elencate nella clausola from.

‘estrarre tutte le info di ‘rossi’’


select *
from Impiegato
where Cognome = ‘Rossi’

‘estrarre lo stipendio mensile dell’impiegato che ha cognome bianchi’

Select stipendio/12 as StipendioMensile


from Impiegato
where Cognome =’Bianchi’

Verrà fuori : Stipendio Mensile : 3,00


Clausola from : quando si vuole formulare una interrogazione che coinvolge righe appartenenti a più di
una tabella , si pone come argomento della clausola from Tabella1,Tabella2..
Sul prodotto cartesiano delle tabelle elecante verranno applicate le condizioni contenute nella clausola
where.
Un join può essere espresso indicando in modo esplicito le condizioni che esprimono il legame tra le diverse
tabelle.
‘estrarre i nomi degli impiegati e le città in cui lavorano’
select Impiegato.Nome , Impiegato.Cognome,
Dipartimento.Città
from Impiegato, Dipartimento
where Impiegato.Dipart =Dipartimento.Nome

Si usa l’operatore punto per identificare la tabella da cui vengono estratti gli attributi
Clausola where : la clausola where ammette come argomento un’espressione booleana costruita
combinando predicati semplici con gli operatori and, or e not. Ciascun predicato usa gli operatori:
=, <>, <, >, <=, =>
es:

Estrarre i nomi e i cognomi degli impiegati che lavorano nel dip. Di amministrazione o nel dipartimento
produzione
select Nome, Cognome
from Impiegato
where Dipart = ‘Amministrazione’ or Dipart=’Produzione’

Operatore di confronto di stringhe : Like


_ carattere arbitrario
& qualsiasi lunghezza

A_d% : nome che inizia per A e D come terza lettera

Gestione dei valori nulli


selezionare valori nulli :
attributo is null
il predicato risulta vero solo se l’attributo ha valore nullo
attributo is not null
il predicato risulta vero solo se l’attributi non ha valore nullo

Logica a tre attributi : unknown, vero, falso

Duplicati : in sql si possono avere in una tabella più righe uguali , con gli stessi astttributi
Per emulare il comportamento dell’algebra relazione sarebbe necessario effettuare l’eliminazione dei
duplicati :
select distinct
distinct elimina i duplicati di un attributo
select distinct Attributo

Selezioni, proiezioni, ridenominazioni e join


Istruzioni SELECT con una sola relazione nella clausola FROM permettono di realizzare:
– selezioni, proiezioni, ridenominazioni ,
con più relazioni nella FROM si realizzano join (e prodotti cartesiani)

Prodotto cartesiano : FROM


Selezione WHERE
Proiezioni SELECT
Ridenominazione AS
Join : FROM Tabella1,Tabella2

Join esterno :
Select Attributo1, Attributo2 as ..
from Tabella1 tipojoin join Tabella2 on CondizioneJoin
where Altra condizione

TipoJoin : inner (valore di default omesso) , right outer, left outer o full outer (esterni )
Inner join : tradizionale theta join

Es : padre e se nota, madre di ogni persona

SELECT Paternita.Figlio,Padre, Madre


FROM Paternità left join Maternita on Paternità.Figlio=Maternità.figlio

SELECT Paternità.Figlio, Padre, Madre


FROM Paternità left outer join Maternità on Paternità.Figlio=Maternità.Figlio

Con i join esterni si introducono anche i valori nulli , quelli che non si conoscono.

Ordinamento di risultato
order by Nome (dopo where)

Order by attr asc o desc (ascendente o discendente) – se omesso : ascendente

INTERROGAZIONI DI TIPO INSIEMISTICO : UNION- EXCEPT- INTERSECT

UNIONE di selezioni :
Select A, B
FROM R
union
Select A,B
FROM S

DIFFERENZA :
select A
from B
except
select C as A
from B

INTERSEZIONI :
select A
from B
intesect
select B as A
from B
===

Select I.Nome

from Impiegato I, Impiegato J,

where I.nome=J.cognome
Operatori aggregati : Spesso viene richiesto di valutare delle proprietà che dipendono da insiemi di tuple.
Supponiamo che si voglia determinare il numero degli impiegati del dipartimento – per esprimerla in SQL
utilizziamo l’operatore di conteggio count -

‘estrarre il numero di impiegati dal dipartimento produzione’

select count (*)


From impiegato
where Dipart= ‘Produzione’

prima viene normalmente eseguita l’operazione from e where e poi viene applicato l’operatore aggregato
operatori aggregati : count, sum, max, min e avg

count (( * distinct || all listaAttributi ))


* restituisce il numero di righe – distinct il numero dei diversi valori della listaAttributi- all il numero di righe
che possiedono valore diverso dal valore nullo
(se si omette distinct o all , si assume all come default)

sum e avg ammettono come argomento solo espressioni che rappresentano valori numerici o intervalli di
tempo.
max e min richiedono solamente che sull’espressione sia definito un ordinamento, per cui stringhe di
carattere o istanti di tempo

sum : restituisce la somma dei valori posseduti dall’espressione

max e min : restituisce rispettivamente il valore massimo e minimo (distinct o all non ha effetti sul risultato)

avg : restituisce la media dei valori (il risultato di sum/count)

raggruppamento : clausola group by

es ‘estrarre somma degli stipendi di tutti gli impiegati dello stesso dipartimento’

select Dipart, sum(Stipendio)

from Impiegato

group by Dipart

group by : le righe vengono raggruppate in sottoinsiemi – va bene solo quando ad ogni valore dell’attributo
da raggruppare corrispondono sulla select uguali valori dell’attributo

clausola having : descrive le condizioni che si devono applicare al termine dell’esecuzione di


un’interrogazione che fa uso della clausola group by. Ogni sottoinsieme di righe costruito dal group by fa
parte del risultato dell’interrogazione solo se il predicato argomento della having risulta soddisfatto.
es:

estrarre i dipartimenti che spendono più di 100 stipendi

select Dipart, sum(Stipendio) as SommaStipendi

from impiegato

group by Dipart
having sum(Stipendio) > 100

Per gli operatori aggregati la target list deve essere omogenea rispetto all’argomento dell’operatore

FORMA SINTATTICA DI UNA INTERROGAZIONE :

SelectSQL ::= select ListaAttributioEspressioni

From ListaTabelle

Where condizioniSemplici

Group by ListaAttributiDiRaggruppamento

Having CondizioniAggregati

Order by ListaAttributiDiOrdinamento

INTERROGAZIONI NIDIFICATE :

Le condizioni atomiche permettono anche – il confronto fra un attributo (o più, vedremo poi) e il risultato
di una sottointerrogazione – quantificazioni esistenziali

La forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili).
La forma piana e quella nidificata possono essere combinate.
Le sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”);
la limitazione non è significativa

Si estende con la parola chiave all o any i normali operatori di confronto.


ANY : specifica che la riga soddisfa la condizione se risulta vero il confronto (con l’operatore specificato) tra
il valore dell’attributo per la riga e almeno uno degli elementi restituiti dall’interrogazione.
ALL : specifica che la riga soddisfa la condizione solo se tutti gli elementi restituiti dall’interrogazione
nidificata rendono vero il confronto.

Si richiede compatibilità di dominio tra l’attributo restituito dall’interrogazione nidificata e l’attributo con
cui viene il confronto.
in e not in : controllo di appartenenza e di esclusione rispetto a un insieme

‘estrarre gli impiegati che lavorano in dipartimenti situati a firenze’

Select *
From impiegato
where Dipart = any (select Nome
from Dipartimento

Where città = ‘Firenze’ )

Scelta : livello di leggibilità


In casi più complessi la scomposizioni di interrogazioni può migliorarne la leggibilità

Regole di visibilità:

L’interrogazione nidificata viene eseguita prima di analizzare le righe dell’interrogazione esterna (possibile
solo senza binding)
- talvolta però l’interrogazione nidificata fa riferimento al contesto dell’interrogazione che la racchiude –
l’ambito della query più esterna è usata nella query più interna (passaggio di binding da un contesto
all’altro) -> in questo caso prima si costruisce il prodotto cartesiano delle tabelle e poi si applica a ciascuna
riga le condizioni che compaiono nella clausola where, ovvero l’interpretazione della query più interna non
vale più . Per ogni riga della query esterna – valutiamo per prima cosa la query nidificata, quindi calcoliamo
il predicato a livello di riga , pari al numero arbitrario di nidificazioni che possono essere utilizzate nella
query

Passaggio binding :

– 1 esegui il prodotto cartesiano delle tabelle


– 2 a ciascuna riga risultante dal prodotto applica la condizione della clausola where
•  se questa è una nuova select va valutata per ogni riga della tabella prodotta in 1

– non è possibile fare riferimenti a variabili definite in blocchi più interni


– se un nome di variabile è omesso, si assume riferimento alla variabile più “vicina”
 In un blocco si può fare riferimento a variabili definite in blocchi più esterni; la semantica base (prodotto
cartesiano, selezione, proiezione) non funziona più, vedremo presto

L’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna

EXISTS: operatore logico ammette come parametro una interrogazione nidificata e restituisce vero solo se
l’interrogazione fornisce un risultato non vuoto (quantificatore esistenziale)
Può essere usato quando c’è passaggio di binding tra l’interrogazione esterna e interna

Exist permette prima di formulare l’espressione esterna e poi quella interna, che non avrebbe senso senza
prima la formulazione esterna

NOT EXISTS : il predicato è soddisfatto nel caso che il risultato dell’interrogazione nidificata sia vuoto

Modifica dei dati in SQL :


insert, delete, update

INSERT : INSERT INTO NomeTabella (listaAttributi)

VALUES (valori)
oppure INSERT INTO Tabella(Attributi)

SELECT (..

DELETE : DELETE FROM Tabella


where [Condizione]

Se where non viene specificata , il comando cancella tutte le righe della tabella altrimenti solo le righe che
soddisfano la condizione
elimina le ennuple che soddisfano la condizione ,  può causare (se i vincoli di integrità referenziale sono
definiti con politiche di reazione cascade) eliminazioni da altre relazioni ,  ricordare: se la where viene
omessa, si intende where true
UPDATE : upadte NomeTabella

Set Attributo = Espressione | SelectSQL | null | default )


where condizione
Il comando di update permette di aggiornare uno o più attributi delle righe di Nome-Tabella che soddisfano
l’eventuale Condizione. Se il comando non presenta la clausola where, come al solito si suppone che la
condizione sia soddisfatta e si esegue la modifica su tutte le righe. Il nuovo valore cui viene posto l’attributo
può essere :

1. Il Risultato della valutazione di un’espressione sugli attributi della tabella, che può anche far
riferimento al valore corrente dell’attributo che verrà modificato dal comando ;
2. Il risultato di una generica interrogazione SQL
3. Valore Nullo
4. Valore di default per il dominio

Aggiornamento di una singola riga :


update Dipendente

Set Stipendio = StipendioBase+5

Where Matricola = ‘M2047’

Aggiornamento su insieme di righe :


update Impiegato
set Stipendio = Stipendio *1.1
where Dipart = ‘Amministrazione’

Aumenta del 10 % lo stipendio a tutti gli impiegati di amministrazione

SQL : caratteristiche evolute

Clausola check :

check (Condizione )
Specifica di vincoli di ennupla (e anche vincoli più complessi, non sempre supportati)

Check può specificare vincoli molto complessi a differenza di where – si permette una rappresentazione +
compatta e leggibile
Con la clausola check si perde la possibilità di associare ai vincoli una politica di reazione alle violazioni

Viste

Create view NomeVista ( listaAttributi ) as SelectSql

With local|cascaded check option

L’interrogazione deve restituire un insieme di attributii compatibili con la vista

‘ creare una vista in cui tutti gli impiegati del dipartimento amministrazione abbia uno stipendio maggiore
di 10 ‘
create view ImpiegatiAmmin (Nome, Cognome, Stipendio) as
select Nome, Cognome, Stipendio
from Impiegato
where Dipart = 'Amministrazione' and Stipendio > 10

Aggiornamento viste : Ammessi (di solito) solo su viste definite su una sola relazione •  Alcune verifiche
possono essere imposte

check option : insieme di attributi della vista contiene almeno una chiave primaria della tabella base – essa
specifica che sono ammessi aggiornamenti solo sulle righe della vista e che dopo ogni modifica tutte le
righe devono continuare ad appartenere alla vista. Permette modifiche, ma solo a condizione che la
ennupla continui ad appartenere alla vista

Nel caso in cui una vista sia definita in termini di altre viste, l’opzione local o cascaded specifica se il
controllo sul fatto che le righe vengono escluse dalla vista debba essere effettuato solo all’ultimo livello

(si controlla che la vista non faccia violare la condizione della vista più esterna) o se deve essere propagato
a tutti i livelli di definizione (si controlla che tutte le righe su cui si apportano modifiche non scompaiono
dalla vista a causa di una violazione di una qualsiasi condizione della selezione)

Le viste per la scrittura di interrogazioni


In alcuni sistemi la nidificazione having può non essere ammessa e quindi bisogna occorrere all’utilizzo delle
viste.

Sistema di gestione di basi di dati

DataBase Management System (DBMS)

Sistema che gestisce collezioni di dati:


– grandi – persistenti – condivise

garantendo – privatezza – affidabilità – efficienza – efficacia

Le basi di dati sono condivise

Una base di dati è una risorsa integrata, condivisa fra applicazioni .


Conseguenze
– Attività diverse su dati condivisi:
 meccanismi di autorizzazione
– Accessi di più utenti ai dati condivisi:
  controllo della concorrenza

Privilegi
Un privilegio è caratterizzato da: – la risorsa cui si riferisce – l'utente che concede il privilegio – l'utente che
riceve il privilegio – l'azione che viene permessa – la trasmissibilità del privilegio

Tipi di privilegi offerti da SQL


•  insert: permette di inserire nuovi oggetti (ennuple)
•  update: permette di modificare il contenuto
•  delete: permette di eliminare oggetti
•  select: permette di leggere la risorsa
•  references: permette la definizione di vincoli di integrità referenziale verso la risorsa (può limitare la
possibilità di modificare la risorsa)
•  usage: permette l'utilizzo in una definizione (per esempio, di un dominio)

Quando una risorsa viene creata , il sistema cede automaticamente tutti i privilegi su tale risorsa al
creatore. Esiste un utente predefinito che è _system, che rappresenta il database administrator – che
possiede tutti i privilegi sulle risorse.

I privilegi vengono concessi tramite l’operazione grant e revoke :


grant Privilegi on Risorsa to Utenti (with grant Option)
es:
grant select on Department to Stefano (concede a Stefano select su dipartimento=
grant all privileges on Impiegato to Paolo, Riccardo (concede tutti i privilegi a Paolo e riccardo su Impiegato)

GrANT : CONCESSIONE DEI PRIVILEGI

REVOKE : REVOCA DI PRIVILEGI

Revoke Privilegi on Risorsa fom Utenti (restrict|cascade)


L’unico utente che può sottrarre i privilegi a un altro utente è l’utente che aveva concesso i privilegi in
primo luogo. Il comando revoke può eliminare tutti i privilegi che erano stati concetti – o limitarsi a un
sottoinsieme.
cascade: elimina privilegi e tutti gli elementi scaturiti dai privilegi / su grant concede i privilegi e tutti i
privilegi sulle viste ricorsivamente
restrict : restrizione sui privilegi
TRANSAZIONE

  Insieme di operazioni da considerare indivisibile ("atomico"), corretto anche in presenza di concorrenza e


con effetti definitivi

Proprietà ("acide"): – Atomicità – Consistenza – Isolamento – Durabilità (persistenza)

1. Atomiche : La sequenza di operazioni sulla base di dati viene eseguita per intero o per niente: –
 trasferimento di fondi da un conto A ad un conto B: o si fanno il prelevamento da A e il versamento
su B o nessuno dei due
2. Consistenti : Al termine dell'esecuzione di una transazione, i vincoli di integrità debbono essere
soddisfatti . "Durante" l'esecuzione ci possono essere violazioni, ma se restano alla fine allora la
transazione deve essere annullata per intero ("abortita")
3. Isolate : L'effetto di transazioni concorrenti deve essere coerente (ad esempio "equivalente"
all'esecuzione separata) – se due assegni emessi sullo stesso conto corrente vengono incassati
contemporaneamente si deve evitare di trascurarne uno
4. Durevoli : La conclusione positiva di una transazione corrisponde ad un impegno (in inglese
commit) a mantenere traccia del risultato in modo definitivo, anche in presenza di guasti e di
esecuzione concorrente

Transazione in SQL :
start transaction (opzionale)

update ContoCorrente

set Saldo = Saldo – 10

where NumeroConto = 12345 ;

update ContoCorrente

set Saldo = Saldo + 10

where NumeroConto = 55555 ;

commit work;

commit work : tutti gli aggiornamenti vengono salvati nella base di dati
rollback work : se tutti gli aggiornamenti devono essere annullati in caso di errore