Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL...

25
Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>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)

Transcript of Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL...

Page 1: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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)

Page 2: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 3: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 4: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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)

Page 5: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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.

Page 6: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 7: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 8: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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))

Page 9: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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))

Page 10: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 11: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 12: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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.

Page 13: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

) )

Page 14: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 15: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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.

Page 16: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 17: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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)

Page 18: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 19: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 20: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

Definizione dei dati

Esistono 6 domini elementari:

Character Bit Tipi numerici esatti Tipi numerici approssimati Data e ora Intervalli temporali

Page 21: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 22: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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.

Page 23: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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

Page 24: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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.

Page 25: Trovare le matricole dei capi degli impiegati che guadagnano più di 40 milioni PROJ Capo (SEL Stipendio>40 (Supervisione JOIN Impiegato=Matricola Impiegati))

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