trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni proj capo (sel...
TRANSCRIPT
Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni
PROJCapo (SELStipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))
Procedimento logico:• Creo una singola tabella in cui ogni tupla contiene
gli attributi Capo, Impiegato e Stipendio• Seleziono le tuple con stipendio > 40• Proietto il risultato sull’attributo Capo
(l’ordine delle ultime due operazioni può essere invertito)
Esercizi
Trovare nome e stipendio dei capi degli impiegati che guadagnano più di 40 milioni
Trovare gli impiegati che guadagnano più del proprio capo, mostrando matricola, nome e stipendio dell'impiegato e del capo
Trovare le matricole dei capi i cui impiegati guadagnano tutti più di 40 milioni
Algebra con valori nulli
Estensione degli operatori logici ad una logica a 3 valori
(VERO, FALSO, SCONOSCIUTO (U))
NOT
AND
V
U
F
OR
V
U
F
F
V
V
V
U
F
V
V
V
V
U
U
U
U
U
F
U
V
U
U
V
F
F
F
F
F
F
V
U
F
Viste (relazioni derivate)
Rappresentazioni diverse per gli stessi dati (schema esterno)
Relazioni di base: contenuto autonomo; fisicamente e originariamente contenute nella base di dati
Relazioni derivate:relazioni il cui contenuto è funzione del contenuto di altre relazioni (definito per mezzo di interrogazioni)
Viste
• Relazioni Virtuali (Viste)Relazioni definite mediante funzioni o espressioni del linguaggio di interrogazione, non realmente presenti nella base di dati ma utilizzabili come se lo fossero. Devono essere ricalcolate tutte le volte.
Viste materializzateRelazioni virtuali effettivamente inserite nella base di dati. Immediatamente disponibili ma critiche per il mantenimento dell’allineamento con le relazioni da cui derivano. Non sono supportate dai DBMS.
VisteVantaggi
Permettono di mostrare a un utente le sole componenti della base di dati che interessano
Espressioni molto complesse possono essere definite come viste
Sicurezza: è possibile definire diritti di accesso anche relativamente ad una vista (e quindi ad una particolare porzione della base di dati)
In caso di ristrutturazione della base di dati, le “vecchie” relazioni possono essere di nuovo ricavate mediante viste, consentendo l’uso di applicazioni che fanno riferimento al vecchio schema
Viste, esempio
una vista:
Supervisione =
PROJ Impiegato, Capo (Afferenza JOIN Direzione)
A Mori
B Bruni
Reparto CapoRossi A
Neri B
Bianchi B
Impiegato RepartoAfferenza Direzione
Interrogazioni sulle viste
Sono eseguite sostituendo alla vista la sua
definizione:
SELCapo='Leoni' (Supervisione)
viene eseguita come
SELCapo='Leoni'(
PROJ Impiegato, Capo (Afferenza JOIN Direzione))
Viste come strumento di programmazione
Trovare gli impiegati che hanno lo stesso capo di Rossi
Senza vista:
PROJ Impiegato (Afferenza JOIN Direzione) JOIN
REN ImpR,RepR Impiegato,Reparto (
SEL Impiegato='Rossi' (Afferenza JOIN Direzione))
Con la vista:
PROJ Impiegato (Supervisione) JOIN
REN ImpR,RepR Imp,Reparto (
SEL Impiegato='Rossi' (Supervisione))
Viste e aggiornamenti, attenzione
Vogliamo inserire, nella vista, il fatto che Lupi ha come capo Bruni; oppure che Belli ha come capo Falchi; come facciamo?
Afferenza Direzione
A MoriB Bruni
Reparto CapoRossi ANeri B
Impiegato Reparto
Neri BNeri B B BruniB BruniB BruniB BruniVerdi A B BruniB BruniB BruniB BruniC Bruni
RossiNeri
ImpiegatoRossiNeri
RossiNeri
Verdi
SupervisioneMoriBruni
CapoMoriBruniMoriBruniBruniBruniMori
Viste e aggiornamenti
"Aggiornare una vista": modificare le relazioni di base in modo che la vista, "ricalcolata”, rispecchi l'aggiornamento
L'aggiornamento sulle relazioni di base corrispondente a quello specificato sulla vista deve essere univoco
In generale però non è univoco!
Ben pochi aggiornamenti sono ammissibili sulle viste
Equivalenza di espressioni
Due espressioni sono equivalenti se:
E1R E2 se E1(r) = E2(r) per ogni istanza r di R (equivalenza dipendente dallo schema)
E1 E2 se E1R E2 per ogni schema R (equivalenza assoluta)
L’equivalenza è importante in quanto consente di scegliere, a parità di risultato, l’operazione meno costosa.
Equivalenze
Atomizzazione delle selezioni F1 F2
(E) F1 (F2 (E))
Idempotenza delle proiezioni X (E) X (XY (E))
Anticipazione della selezione rispetto al join F (E1
E
2) E
1 (F (E2
) )
Equivalenze
Anticipazione della proiezione rispetto al join:
X1Y2 (E1
E
2) E
1 Y2 (E2
)
(se gli attributi in X2 - Y2 non sono coinvolti nel join)
Allora (combinando con idempotenza delle proiezioni):
Y (E
1 F
E2) Y
(Y1 (E
1) F
Y2 (E
2) )
dove Y1 e Y2 sono gli attributi di X1 e X2 compresi in Y o
coinvolti nel join.
In pratica è possibile ignorare in ciascuna relazione gli
attributi non compresi in Y e non coinvolti nel join
Equivalenze
Inglobamento di una selezione in un prodotto cartesiano a formare un join: F (E1
E
2) E
1 F
E2
Tutti gli operatori binari eccetto la differenza godono delle proprietà associativa e commutativa.
Equivalenze
Distributività della selezione rispetto all’unione: F (E1
E
2) F (E1
)
F (E2
)
Distributività della selezione rispetto alla differenza: F (E1
- E
2) F (E1
) -
F (E2
)
Distributività della proiezione rispetto all’unione: X (E1
E
2) X (E1
)
X (E2
)
NB La proiezione NON è distributiva rispetto alla differenza
Equivalenze
Corrispondenze fra operatori insiemistici e selezioni complesse
F1 F2 (R) F1
(R) F2(R)
F1 F2 (R) F1
(R) F2(R) F1
(R) F2(R)
F1 ¬F2 (R) F1
(R) - F2(R)
Proprietà distributiva del join rispetto all’unione: E (E
1
E
2) (E
E
1) (E
E
2)
SQL
SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language(linguaggio di interrogazione strutturato)
E’ un linguaggio completo che presenta anche le proprietà di:DDL (Data Definition Language)DML (Data Manipulation Language)
Con SQL è quindi possibile: definire schemi di basi di dati eseguire query modificare il contenuto della base di dati
SQL
1986 Prima standardizzazione1989 SQL-891992 SQL-2 (SQL-92): versione attualmente diffusa (e tuttora non completamente implementata)1998 SQL-3 (SQL-99): nuovo standard proposto con funzionalità avanzate (DB a oggetti, operazioni ricorsive ecc.)
3 implementazioni disponibili: Entry SQL Intermediate SQL Full SQL
Definizione dei dati
Esistono 6 domini elementari:
Character Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali
Domini
Characterrappresenta singoli caratteri o stringhe
character [varying] [(Lunghezza)]
[character set NomeFamigliaCaratteri]
character(20) stringa di lunghezza 20
character varying(100) stringa di lunghezza max. 100
character(20) character set Greekstringa di lunghezza 20 in caratteri greci
DominiBitrappresenta attributi o vettori di attributi che possono assumere solo valori 0 o 1. Utilizzato per implementare flag.
bit [varying] [(Lunghezza)]
Intervalli Temporaliinterval UnitàDiTempo1[(Precisione)]
[to UnitàDiTempo2[(Precisione)]]UnitàDiTempo1 e UnitàDiTempo2 specificano le unità di misura da usare dalla più lunga alla meno lunga
NB La definizione è valida nei 2 sottointervalli [year,month] e [day,second].
interval day(4) to second(6) rappresenta l’intervallo [0,10000) giorni e secondi con precisione al milionesimo di s.
Domini
Tipi numerici esattiValori interi o con parte decimale di lunghezza prefissatanumeric [(Precisione [,Scala])]decimal [(Precisione [,Scala])]integersmallint
Precisione specifica il numero di cifre significative
Scala quante cifre si rappresentano dopo la virgola
decimal(4) numeri da -9999 a 9999
numeric(6,3) numeri da -999.999 a 999.999
La precisione degli interi dipende dall’implementazione
Domini
Tipi numerici approssimatirappresentano valori reali approssimati
float [(Precisione)]double precisionreal
Precisione specifica il numero di cifre dedicato alla mantissa(la precisione dell’esponente dipende dall’implementazione)
real e double precision hanno precisione prestabilita, una doppia rispetto all’altra.
Domini
Data e oratipi utilizzati per rappresentare istanti di tempo
date
time [(Precisione)][with time zone]
timestamp [(Precisione)][with time zone]
Ciascun tipo è divisibile in campi.
date ammette come campi year, month e day
time i campi hour, minute, second
timestamp tutti i campi da year a second
I campi sono divisi da “:” 20:03:04+1:00