Appunti Del Corso Di Basi Di Dati
Appunti Del Corso Di Basi Di Dati
Appunti Del Corso Di Basi Di Dati
È una delle attività del processo di sviluppo dei sistemi informativi va quindi inquadrata in un contesto più
generale:
– Insieme e sequenzializzazione delle attività svolte da analisti, progettisti, utenti, nello sviluppo e nell’uso
dei sistemi informativi
– attività iterativa, quindi ciclo
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)
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
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)
Associazioni ricorsive :
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)
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 .
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.
REQUISITI:
Possibili fonti:
– Utenti e committenti, attraverso: interviste , documentazione apposita
– documentazione esistente: normative (leggi, regolamenti di settore) regolamenti interni, procedure
aziendali , realizzazioni preesistenti
– modulistica
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..)
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.
ISTANCE-OF
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
Strategia di progetto
Le strategie in riferimento alla modellazione di una base di dati.
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
– 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.
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
2 relationship derivabili :
-dalla composizione di altre (più in generale: cicli di relationship)
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.
1. Partizionamento di entità :
-------
3 Accorpamento di entità
-
--
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.
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
Docenza :
Corso NomeDocente
Basi di dati Rossi
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.
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
Convenzioni :
Informazione incompleta
- 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)
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
Azioni compensative
Esempio:
Idea:
Le entità diventano relazioni sugli stessi attributi
Le relationship diventano relazioni sugli identificatori delle entità coinvolte (più gli attributi propri).
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.
Strumento(Nome, Tipo)
Suona(Musicista,Strumento, AnnoInizio)
Teatro(Nome, Indirizzo)
Posto(Fila, Numero, Teatro)
TRADUZIONE ENTITA’ DEBOLE CON ATTRIBUTI IDENTIFICATIVI
Posto(Id)
Concerto(Data, Descrizione)
PostoPrenotato(Posto,Concerto)
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
Operatori ‘ortogonali’ :
Selezione : decomposizione orizzontale –
produce un sottoinsieme delle tuple , su
tutti gli attributi
Differenza :
Ridenominazione :
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 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à:
…altri attributi
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..
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
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
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.
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
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.
select ListaAttributi
from ListaTabelle
[where condizione]
Oppure
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à)
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.
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’
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
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
Con i join esterni si introducono anche i valori nulli , quelli che non si conoscono.
Ordinamento di risultato
order by Nome (dopo where)
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
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 -
prima viene normalmente eseguita l’operazione from e where e poi viene applicato l’operatore aggregato
operatori aggregati : count, sum, max, min e avg
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
max e min : restituisce rispettivamente il valore massimo e minimo (distinct o all non ha effetti sul risultato)
es ‘estrarre somma degli stipendi di tutti gli impiegati dello stesso dipartimento’
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
from impiegato
group by Dipart
having sum(Stipendio) > 100
Per gli operatori aggregati la target list deve essere omogenea rispetto all’argomento dell’operatore
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 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
Select *
From impiegato
where Dipart = any (select Nome
from Dipartimento
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 :
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
VALUES (valori)
oppure INSERT INTO Tabella(Attributi)
SELECT (..
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
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
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
‘ 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)
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
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.
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
update ContoCorrente
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