Basi di Dati
Algebra Relazionale
Concetti Fondamentali
Concetti Fondamentali
Introduzione
La Base di Dati di Esempio
Algebra Relazionale
selezione, proiezione
prodotto cartesiano, join
unione, intersezione, differenza
ridenominazioni
Forma Standard
Introduzione
SQL
Integra linguaggi per scopi diversi: DDL, DCL, DML
Linguaggio di Definizione (DDL)
Creare la base di dati e le tabelle (schema)
Linguaggio di Controllo (DCL)
Creare utenti e autorizzazioni
Linguaggio di Manipolazione (DML)
Inserire, cancellare, modificare le ennuple
Introduzione
DDL, DCL
concettualmente semplici
DML
aggiornamenti: concettualmente semplice
interrogazioni: complesso
Lavorare con oggetti inconsueti
le tabelle
algebra su tabelle; analogo: algebra sui reali
Introduzione
Algebra per Tabelle
insieme di operatori che applicati a tabelle restituiscono tabelle
analogo: y+3, x2
espressioni
analogo: z=(y+3)2
sintassi astratta
semantica operazionale astratta
Base di Dati dei Corsi di Informatica
Professori
codice, nome, qualifica, facoltà
numeri di telefono
Studenti
matricola, nome,
tipo di corso (ciclo): laurea tr., laurea spec.
relatore della tesi
Corsi
codice, titolo, docente, ciclo
Esami
studente, voto, lode, corso
Tutorato Studentesco
studente tutore, studente tutorato
TABLE Studenti (
matr integer PRIMARY KEY,
cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20),
anno integer, relatore char(4)
REFERENCES Professori(cod) );
TABLE Professori (
cod char(4) PRIMARY KEY,
cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15),
facolta char(10) );
TABLE Tutorato (
studente integer
REFERENCES Studenti(matr), tutor integer
REFERENCES Studenti(matr),
PRIMARY KEY (studente,tutor));
TABLE Esami (
studente integer
REFERENCES Studenti(matr) ON DELETE cascade
ON UPDATE cascade, corso char(3)
REFERENCES Corsi(cod), voto integer,
lode bool,
CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso));
TABLE Corsi (
cod char(3) PRIMARY KEY,
titolo varchar(20) NOT NULL, ciclo char(20),
TABLE Numeri (
professore char(4)
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario
qualifica
Scienze Vieri
CV
Ingegneria Totti
FT
facolta cognome
Professori cod
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
Studenti matr
laurea sp.
laurea tr.
laurea tr.
ciclo
ADP Informatica Teorica
INFT
CV FT docente
Algoritmi e Str. Dati ASD
Programmazione I PR1
titolo
Corsi cod
88888 444
88888 333
77777 222
77777 111
tutor studente
Tutorato
false 30
PR1 88888
false 28
ASD 88888
false 20
ASD 77777
false 21
PR1 77777
24 30 27 voto
false INFT
111
true false
lode
ASD 222
PR1 111
corso studente
Esami
338123456 ADP
0971205363 ADP
0971205227 VC
347123456 FT
0971205145 FT
numero professore
Numeri
Algebra Relazionale
Collezione di operatori
applicati a tabelle
risultato = ancora tabelle
Espressioni
composizione di operatori applicati a tabelle
Assegnazioni
consentono di assegnare ad un nuova tabella il risultato di un’espressione
Algebra Relazionale
Attenzione
lavoreremo con due tipi di tabelle: della BD e temporanee
Tabelle originali della base di dati
con schema completo di vincoli
Tabelle “temporanee”
risultato di interrogazioni dell’algebra
per queste tabelle non viene definito uno schema vero e proprio
ereditano parte dello schema (attributi e tipi) dall’interrogazione di cui sono il risultato
Algebra Relazionale
Operatori principali
selezione
proiezione
prodotto cartesiano e join
unione, intersezione e differenza
ridenominazione
Selezione
Funzione
serve per selezionare alcune delle ennuple di una tabella scartando le altre
sulla base di una condizione
Esempio
“Estrarre dalla base di dati una tabella, StudentiTriennio, contenente i dati degli studenti della laurea triennale”
“Studenti della laurea triennale”
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
Studenti matr
StudentiTriennio matr cognome nome ciclo anno relatore
Mario laurea tr. 1 null
Rossi 111
Paolo laurea tr. 2 null
Neri 222
Maria laurea tr. 1 null
Rossi 333
Palla laurea tr. 3 FT
Pinco 444
condizione: Studenti.ciclo=‘laurea tr.’
Selezione: Sintassi
Operatore unario (“monadico”)
condizione sui valori degli attributi
Condizione: espressione booleana
operandi: valori degli attributi della tabella
operatori di confronto, operatori booleani
Sintassi: σ
condizione(R)
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
matr
“Studenti della laurea tr. di anni successivi al 1°”
Studenti
Risultato matr cognome nome ciclo anno relatore
Paolo laurea tr. 2 null
Neri 222
Palla laurea tr. 3 FT
Pinco 444
condizione: ciclo=‘laurea tr.’ AND anno > 1
σ (Studenti)
Risultato =
Selezione: Semantica
Schema del risultato
attributi e tipi della tabella originale
Istanza del risultato
ennuple della tabella i cui valori soddisfano la condizione
cardinalità minore o uguale rispetto alla tabella originale
Selezione: Semantica
Nota sullo schema
si tratta di una tabella temporanea
i nomi (e i tipi) degli attributi sono ereditati dalle tabelle della base di dati
TABLE StudentiTriennio ( Studenti.matr integer,
Studenti.cognome varchar(20), Studenti.nome varchar(20), Studenti.ciclo char(20), Studenti.anno integer,
Studenti.relatore char(4));
TABLE StudentiTriennio ( matr integer,
Studenti.cognome varchar(20), Studenti.nome varchar(20), Studenti.ciclo char(20), anno integer,
relatore char(4));
Proiezione
Funzione
estrarre alcune delle colonne di una tabella
Esempio
“Estrarre l’elenco dei nomi e i cognomi degli studenti”
TABLE ElencoNomi (
Studenti.cognome varchar(20), Studenti.nome varchar(20), );
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
matr
“Cognomi e Nomi degli Studenti”
Studenti
Pietro Pinco
Pasquale Bruno
Palla Pinco
Maria Rossi
Paolo Neri
Mario Rossi
ElencoNomi cognome nome
Proiezione: Sintassi
Operatore unario
lista di attributi della tabella
Sintassi
lista attributi
π (R)
cognome, nome
π (Studenti)
ElencoNomi =
Proiezione: Semantica
Schema del risultato
attributi dello schema originale su cui si effettua la proiezione
Istanza del risultato
restrizione (“proiezione”) delle ennuple originali agli attributi specificati
ATTENZIONE
se nel risultato non sopravvivono chiavi dello schema originale possono esserci duplicati
“Cognomi e Anni di Corso degli Studenti”
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
Studenti matr
Pinco 3
Rossi 1
Neri 2
Rossi 1
Risultato cognome anno Risultato =
π
cognome, anno (Studenti)ennuple identiche (duplicati)
Prodotto Cartesiano
Finora
operatori unari
lavorano sui dati di un’unica tabella
In realtà
è nella natura del modello relazionale frammentare i dati tra le tabelle
molto spesso è necessario correlare dati provenienti da tabelle diverse
è possibile utilizzare il prodotto cartesiano
Prodotto Cartesiano
Esempio
“Generare la tabella ProfessoriENumeri contenente nomi, cognomi e numeri dei prof.”
TABLE Professori (
cod char(4) PRIMARY KEY,
cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15),
facolta char(10) );
TABLE Numeri (
professore char(4)
REFERENCES Professori(cod),
TABLE ProfessoriENumeri (
Professori.cognome varchar(20), Professori.nome varchar(20), numero char(9));
“Professori e Numeri”
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario
qualifica
Scienze Vieri
CV
Ingegneria Totti
FT
facolta cognome
cod
Professori
338123456 ADP
0971205363 ADP
0971205227 VC
347123456 FT
0971205145 FT
numero professore
Numeri
347123456 FT
Scienze associato
Christian Vieri
CV
0971205145 FT
Scienze associato
Christian Vieri
CV
Ingegneria ADP 338123456
ordinario Francesco
Totti FT
Ingegneria ADP 0971205363
ordinario Francesco
Totti FT
Ingegneria VC
Francesco ordinario 0971205227
Totti FT
Ingegneria FT
Francesco ordinario 347123456
Totti FT
Ingegneria FT
Francesco ordinario 0971205145
Totti FT
facolta professore
nome qualifica numero
cognome cod
1° Passo: Prodotto Cartesiano TabellaA = Professori X Numeri
“Professori e Numeri”
338123456 ADP
null supplente
Alessandro Del Piero
ADP
0971205145 FT
Scienze associato
Christian Vieri
CV
… Ingegneria Ingegneria Ingegneria Ingegneria Ingegneria
facolta
… ADP ADP VC FT FT professore
…
…
…
…
…
338123456 ordinario
Francesco Totti
FT
0971205363 ordinario
Francesco Totti
FT
Francesco Francesco Francesco
nome
0971205227 ordinario
Totti FT
ordinario ordinario qualifica
347123456 Totti
FT
0971205145 Totti
FT
numero cognome
cod
TabellaA
Ingegneria Ingegneria
facolta
FT FT professore
Francesco Francesco
nome
ordinario ordinario qualifica
347123456 Totti
FT
0971205145 Totti
FT
numero cognome
cod
2° Passo: Selezione TabellaB =
σ
cod=professore (TabellaA)“Professori e Numeri”
null null Scienze Ingegneria Ingegneria
facolta
ADP ADP VC FT FT professore
338123456 supplente
Alessandro Del Piero
ADP
0971205363 supplente
Alessandro Del Piero
ADP
Christian Francesco Francesco
nome
0971205227 associato
Vieri CV
ordinario ordinario qualifica
347123456 Totti
FT
0971205145 Totti
FT
numero cognome
cod
3° Passo: Proiezione ProfessoriENumeri =
π
cognome,nome,numero (TabellaB) Tabella B338123456 Alessandro
Del Piero
0971205363 Alessandro
Del Piero
Christian Francesco Francesco
nome
0971205227 Vieri
347123456 Totti
0971205145 Totti
numero cognome
Professori e Numeri
In sintesi
Professori X Numeri TabellaA =
cod=professore
σ (TabellaA)
TabellaB =
cognome, nome, numero
π (TabellaB)
ProfessoriENumeri =
cognome, nome, numero
π (
ProfessoriENumeri =
cod=professore
σ (
Prodotto Cartesiano: Sintassi
Operatore binario (“diadico”)
è il primo operatore che consente di mettere assieme dati provenienti da tabelle diverse
Sintassi
R X S
Prodotto Cartesiano: Semantica
Schema del risultato
unione degli attributi (e relativi tipi)
Istanza del risultato
tutte le ennuple ottenute concatenando ennuple delle due tabelle
indiscriminatamente (in tutti i modi possibili)
cardinalità pari al prodotto delle cardinalità
Join
Prodotto cartesiano
consente di correlare dati di tabelle diverse
ma genera risultati di grandi dimensioni
es: tabelle di 1000 ennuple > 1 mil. di ennuple
su cui poi bisogna effettuare una selezione
Sarebbe opportuno
avere un operatore che consente di fare la correlazione verificando contestualmente la condizione
“Professori e Numeri:
Alternativa”
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario
qualifica
Scienze Vieri
VC
Ingegneria Totti
FT
facolta cognome
cod
Professori
338123456 ADP
0971205363 ADP
0971205227 VC
347123456 FT
0971205145 FT
numero professore
Numeri
null ADP 0971205363
supplente Alessandro
Del Piero ADP
Scienze VC
Christian associato 0971205227
Vieri VC
Ingegneria FT
Francesco ordinario 347123456
Totti FT
Ingegneria FT
Francesco ordinario 0971205145
Totti FT
facolta professore
nome qualifica numero
cognome cod
I Passo: Join TabellaA’ = Professori cod=professore Numeri
“Professori e Numeri”
null null Scienze Ingegneria Ingegneria
facolta
ADP ADP VC FT FT professore
338123456 supplente
Alessandro Del Piero
ADP
0971205363 supplente
Alessandro Del Piero
ADP
Christian Francesco Francesco
nome
0971205227 associato
Vieri CV
ordinario ordinario qualifica
347123456 Totti
FT
0971205145 Totti
FT
numero cognome
cod
II Passo: Proiezione ProfessoriENumeri=
π
cognome,nome,numero (TabellaA’) Tabella A’338123456 Alessandro
Del Piero
0971205363 Alessandro
Del Piero
Christian Francesco Francesco
nome
0971205227 Vieri
347123456 Totti
0971205145 Totti
numero cognome
Professori e Numeri
In sintesi
cognome, nome, numero
π (TabellaA’)
ProfessoriENumeri =
Professori
cod=professoreNumeri TabellaA’ =
cognome, nome, numero
π (
ProfessoriENumeri =
Professori
cod=professoreNumeri )
Join: Sintassi
Operatore binario (“diadico”)
Sintassi
Condizione
AND di condizioni semplici
attributo di R = attributo di S
i due attributi devono essere dello stesso tipo
R
condizioneS
Join: Semantica
Schema del risultato
unione degli attributi e relativi tipi
Istanza del risultato:
ennuple ottenute concatenando ennuple di R ed ennuple di S, tali che soddisfano la condizione
Equivalente a prodotto cartesiano e selezione:
σ
Attenzione: semanticaJoin Complessi
Esempio
“Matricola e cognome degli studenti che hanno sostenuto l’esame di informatica teorica”
Richiede di correlare tre tabelle
matricola di Studenti e studente di Esami
cod di Corso e corso di Esami
Due condizioni di join
TABLE Studenti (
matr integer PRIMARY KEY,
cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20),
anno integer, relatore char(4)
REFERENCES Professori(cod));
TABLE Esami (
studente integer
REFERENCES Studenti(matr) corso char(3)
REFERENCES Corsi(cod), voto integer,
lode bool,
PRIMARY KEY (studente, corso));
TABLE StudentiEsami ( matr integer,
cognome varchar(20), nome varchar(20), ciclo char(20), anno integer, relatore char(4) studente integer,
“Esame di Informatica Teorica”
StudentiEsami = Studenti
matr=studenteEsami
TABLE StudentiEsami ( matr integer,
cognome varchar(20), nome varchar(20),
Studenti.ciclo char(20), anno integer,
relatore char(4) studente integer, corso char(3), voto integer, lode bool);
TABLE Corsi (
cod char(3) PRIMARY KEY,
titolo varchar(20) NOT NULL, ciclo char(20),
docente char(4)
REFERENCES Professori(cod));
TABLE StudentiEsamiCorsi ( matr integer,
cognome varchar(20), nome varchar(20),
Studenti.ciclo char(20), anno integer,
relatore char(4) studente integer, corso char(3), voto integer, lode bool
cod char(3),
titolo varchar(20), Corso.ciclo char(20),
“Esame di Informatica Teorica”
StudentiEsamiCorsi = StudentiEsami
corso=cod
Corsi
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
Inform…
Progr…
Algorit…
Algorit…
Progr…
Inform…
Algorit…
Progr…
titolo
INFT PR1 ASD ASD PR1 INFT ASD PR1
cod
INFT PR1 ASD ASD PR1 INFT ASD PR1
corso
30 30 28 20 21 24 30 27
voto
… 88888
Pietro Pinco
88888
… 88888
Pietro Pinco
88888
… 88888
Pietro Pinco
88888
… 77777
Pasquale Bruno
77777
… 77777
Pasquale Bruno
77777
111 222 111
studente
… Mario
Rossi 111
Paolo Mario
nome
… Neri
222
...
Rossi 111
… cognome
matr
StudentiEsamiCorsi
Risultato =
π
matr, cognome (σ
titolo=‘Inform. t.’ (StudentiEsamiCorsi))cognome
Risultato matr
“Esame di Informatica Teorica”
dalla tabella Studenti dalla tabella Esami dalla tabella Corsi
Join Complessi
il join è associativo StudentiEsamiCorsi =
Studenti
matr=studente (Esami
cod=corsoCorsi) StudentiEsamiCorsi =
(Studenti
matr=studenteEsami)
cod=corsoCorsi
StudentiEsamiCorsi =
Studenti
matr=studenteEsami
cod=corsoCorsi StudentiEsami = Studenti
matr=studenteEsami
StudentiEsamiCorsi = StudentiEsami
cod=corsoCorsi
“Esame di Infomatica Teorica”
In sintesi:
StudentiEsami = Studenti
matr=studenteEsami
StudentiEsamiCorsi = StudentiEsami
cod=corsoCorsi Risultato = π
matr, cognome(
σ
titolo=‘Inform. t.’(StudentiEsamiCorsi)) Risultato = π
matricola, cognome( σ
titolo=‘Inform. t.’(
Studenti
matr=studenteEsami
cod=corsoCorsi ))
Algebra Relazionale
Operatori fondamentali visti fin qui:
Unari
selezione, σcondizione(R)
proiezione, πattributi(R)
Binari
prodotto cartesiano, R x S
join, R condizione S
Algebra Relazionale
Altri operatori importanti
Operatori insiemistici
unione
intersezione
differenza
Ridenominazione
meno importante (ha solo funzioni di leggibilità)
Operatori Insiemistici
Funzione
le tabelle sono collezioni (=insiemi) di ennuple
è possibile applicare le operazioni consuete sulle collezioni
Operazioni di base
unione
intersezione
differenza
Operatori Insiemistici
Esempio
“Cognome e nome di tutte le persone”
TABLE Studenti (
matr integer PRIMARY KEY,
Studenti.cognome varchar(20) NOT NULL, Studenti.nome varchar(20) NOT NULL, ciclo char(20),
anno integer, TABLE Professori (
cod char(4) PRIMARY KEY,
Professori.cognome varchar(20) NOT NULL, Professori.nome varchar(20) NOT NULL, qualifica char(15),
facolta char(10) ); TABLE Persone (
cognome varchar(20), nome varchar(20));
“Cognome e Nome delle Persone”
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
matr
Studenti Professori
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario qualifica
Scienze Vieri
CV
Ingegneria Totti
FT
facolta cognome
cod
Alessandro Christian Francesco
nome
Del Piero Vieri Totti cognome
NomiProfessori =
π
cognome, nome (Professori)Pietro Pasquale
Palla Maria Paolo Mario nome
Pinco Bruno Pinco Rossi Neri Rossi cognome
NomiStudenti =
π
cognome, nome (Studenti)“Cognome e Nome delle Persone”
Alessandro Christian Francesco
nome
Del Piero Vieri Totti cognome
NomiProfessori
Pasquale Palla Maria Paolo Mario nome
Bruno Pinco Rossi Neri Rossi cognome
NomiStudenti AlessandroChristian
Francesco nome
Del Piero Vieri Totti cognome
Pasquale Palla Maria Paolo Mario
Bruno Pinco Rossi Neri Rossi
Persone =
NomiProfessori U NomiStudenti
Operatori Insiemistici: Sintassi
Operatori binari
Sintassi
stessi simboli delle operazioni convenzionali su insiemi
Unione: R U S
Intersezione: R S ∩
Differenza: R – S
Operatori Insiemistici: Semantica
Si applicano solo in alcuni casi
le tabelle R ed S devono avere lo stesso numero di attributi
associazione posizionale: gli attributi devono avere ordinatamente lo stesso tipo
N.B.: i nomi degli attributi possono essere anche diversi!
Schema del risultato
eredita i nomi degli attributi dalla prima tabella
Operatori Insiemistici: Semantica
Istanza del risultato
unione, intersezione o differenza delle ennuple
Attenzione
semantica della differenza: “tutti gli elementi del primo membro che non appartengono al secondo”
esempio: {1, 3, 5} – {3, 7, 9} = {1, 5}
Operatori Insiemistici: Semantica
Attenzione
dal risultato degli operatori insiemistici vengono eliminati eventuali duplicati
passo finale di eliminazione degli eventuali duplicati prodotti
Motivazioni
semantica più naturale
esistono implementazioni efficienti
Operatori Insiemistici: Semantica
Esempio
Alessandro Christian
Palla nome
Del Piero Vieri Pinco cognome
Pietro Pasquale
Palla Maria Paolo Mario nome
Pinco Bruno Pinco Rossi Neri Rossi cognome
NomiProfessori
NomiStudenti Alessandro
Christian Palla nome
Del Piero Vieri Pinco cognome
Pietro Pasquale
Maria Paolo Mario
Pinco Bruno Rossi Neri Rossi
Persone =
NomiProfessori U NomiStudenti
“Cognome e Nome delle Persone”
In sintesi:
NomiProfessori =
π
cognome, nome (Professori) NomiStudenti =π
cognome, nome (Studenti)Persone = NomiProfessori U NomiStudenti
Persone =
π
cognome, nome (Professori) Uπ
cognome, nome (Studenti)“Cognome e Nome delle Persone”
Nota
sulla base della semantica è possibile anche
StranaTabella =
π nome, cognome (Professori) U π cognome, nome (Studenti)
Del Piero Vieri Totti cognome
Alex Christian Francesco
nome
Pasquale Palla Maria Paolo Mario
Bruno Pinco Rossi Neri Rossi
Intersezione / differenza
Elenco degli studenti che hanno omonimi tra i professori
Intersezione (Studenti vs. Professori)
Elenco degli studenti che risultano iscritti a Lettere ed anche a Informatica
Intersezione (Tabella iscritti a Lettere, tab. iscritti Informatica)
Elenco dei professori che non hanno omonimi tra gli studenti
Differenza (Professori vs. Studenti)
Ridenominazione
Funzione
consente di cambiare i nomi degli attributi in una tabella temporanea
es: cognomePersona, nomePersona
Caratteristiche
agisce solo sullo schema
non cambia né la cardinalità, né il n. di attributi
normalmente si applica solo sul risultato finale (funzione puramente “cosmetica”)
Ridenominazione
Sintassi
ρ ridenominazioni (R)
ridenominazioni: elenco di coppie vecchioNome AS nuovoNome
separate da virgole
vecchioNome deve essere un attributo di R
Semantica
nello schema del risultato ai vecchi nomi sono sostituiti i nuovi
“Cognomi e Nomi delle Persone”
In definitiva:
Persone =
ρ
cognome AS cognomePersona, nome AS nomePersona( π
cognome, nome (Professori) ) Uπ
cognome, nome (Studenti)TABLE Persone (
cognomePersona varchar(20), nomePersona varchar(20));
Forma Standard
Interrogazioni in algebra relazionale
risultato dell’applicazione di vari operatori
è possibile applicare gli operatori in ordine vario (es: prima selezioni o prima ridenominazioni)
Forma standard
nel seguito viene presentata una strategia sistematica per la scrittura di interrogazioni
ordine standardizzato di applicazione degli operatori dell’algebra
Forma Standard
Esempio
“Nome e Cognome dei professori ordinari che non hanno tesisti della laurea triennale”
Strategia
(a) trovo nome e cognome di tutti i professori ordinari
(b) trovo nome e cognome dei professori che hanno tesisti della laurea triennale
faccio la differenza tra (a) e (b)
(a) “Cognomi e Nomi dei Prof.
Ordinari”
Professori
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario
qualifica
Scienze Vieri
CV
Ingegneria Totti
FT
facolta cognome
cod
ProfessoriOrdinari =
σ
qualifica = ‘Ordinario’ (Professori)NomiOrdinari =
ρ
cognome AS cognomeProf, nome AS nomeProf (π
cognome, nome (ProfessoriOrdinari))Francesco nome
ordinario qualifica
Ingegneria Totti
FT
facolta cognome
cod
nomeProf cognomeProf
(b) “Cognomi e Nomi di Prof. con Tesi Triennali”
Alessandro Christian Francesco
nome
null supplente
Del Piero ADP
associato ordinario
qualifica
Scienze Vieri
CV
Ingegneria Totti
FT
facolta cognome
Professori cod
Pietro Pasquale
Palla Maria Paolo Mario nome
CV 1
laurea sp.
Pinco 88888
FT 1
laurea sp.
Bruno 77777
FT 3
laurea tr.
Pinco 444
1 2 1 anno
null laurea tr.
Rossi 333
laurea tr.
laurea tr.
ciclo
null Neri
222
null Rossi
111
relatore cognome
Studenti matr
ProfessoriConTesisti = Studenti relatore = cod Professori
(b) “Cognomi e Nomi di Prof. con Tesi Triennali”
associato ordinario ordinario qualifica
CV FT FT relatore
Vieri Totti Totti P.cognome
Christian Francesco Francesco P.nome
Pietro Pasquale
Palla S.nome
Sc.
1 laurea sp.
Pinco 88888
Ing.
1 laurea sp.
Bruno 77777
Ing.
3 laurea tr.
Pinco 444
anno
ciclo facolta
S.cognome matr
ProfessoriConTesisti = Studenti relatore = cod Professori
ProfessoriConTesiTriennali =
σ
ciclo = ‘laurea tr.’ (ProfessoriConTesisti)NomiProfConTesiTriennali =
ρ
cognome AS cognomeProf, nome AS nomeProf (π
Professori.cognome, Professori.nome (ProfessoriConTesiTriennali))ordinario qualifica FT
relatore
Totti P.cognome
Francesco P.nome Palla
S.nome
Ing.
3 laurea tr.
Pinco 444
anno
ciclo facolta
S.cognome matr
“Cognomi e Nomi dei Prof. Ordinari senza Tesi Triennali”
NomiOrdinari =
ρ
cognome AS cognomeProf, nome AS nomeProf (π
cognome, nome(
σ
qualifica = ‘Ordinario’ ( Professori))NomiProfConTesiTriennali =
ρ
cognome AS cognomeProf, nome AS nomeProf (π
cognome, nome (
σ
ciclo = ‘laurea tr.’ (Studenti relatore = cod Professori )))
Francesco nomeProf Totti
cognomeProf
Francesco nomeProf Totti
cognomeProf
Risultato = NomiOrdinari – NomiProfConTesiTriennali
nomeProf cognomeProf
Riassumendo
Risultato =
ρ
cognome AS cognomeProf, nome AS nomeProf (π
cognome, nome (σ
qualifica = ‘Ordinario’ ( Professori)) –ρ
cognome AS cognomeProf, nome AS nomeProf (π
cognome, nome (
σ
ciclo = ‘laurea tr.’ (sottointerrogazione n. 1
sottointerrogazione n. 2
operatore insiemistico
proiezioni ridenominazioni
Studenti relatore = cod Professori ))
Forma Standard
Varie sottointerrogazioni (una o più)
correlate con operatori insiemistici
Ciascuna sottointerrogazione
prima: eventuali join o prodotti cartesiani
poi: eventuali selezioni
poi: eventuali proiezioni
infine: eventuali ridenominazioni