Anteprima
Vedrai una selezione di 17 pagine su 80
Basi di dati - schemi Pag. 1 Basi di dati - schemi Pag. 2
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 6
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 11
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 16
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 21
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 26
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 31
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 36
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 41
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 46
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 51
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 56
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 61
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 66
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 71
Anteprima di 17 pagg. su 80.
Scarica il documento per vederlo tutto.
Basi di dati - schemi Pag. 76
1 su 80
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

IN UN PARTICOLARE ISTANTE

ISTANZA di BASE DI DATI insieme di tutte tuple (n-uple - record) del DATABASE

IN UN PARTICOLARE ISTANTE

ovvero ’insieme delle istanze di tutte le relazioni di cui la base di

dati stessa è costituita.

IN UN PARTICOLARE ISTANTE = perché i dati VARIANO NEL TEMPO

MODELLO RELAZIONALE

CHIAVE Un sottoinsieme di attributi della relazione che ne identifica

UNIVOCAMENTE ogni tupla (record)

Una chiave deve essere fatta con il numero

UNIVOCITA’ MINIMALITA’ minimo possibile di attributi.

Non ci devono essere due chiavi Ad esempio una chiave CODICE FISCALE avrà solo una colonna

uguali per essere univoca, oppure potrei scegliere le tre colonne

NOME,COGNOME,DATA DI NASCITA ma non

NOME,COGNOME,DATA DI NASCITA, COLORE CAPELLI

MODELLO RELAZIONALE

Se una chiave non è MINIMA, è detta superchiave

SUPERCHIAVE

UNIVOCITA’ MINIMALITA’

MODELLO RELAZIONALE

Fra le varie possibili chiavi, se ne sceglie UNA che funzionerà da

CHIAVE PRIMARIA chiave primaria, tutte le altre chiavi si dicono chiavi candidate

La chiave scelta come primaria NON ammette valori NULLI

NOT NULL ES. STUDENTE(MATRICOLA, CF,NOME,COGNOME)

La chiave primaria viene

sottolineata Tutte le altre chiavi rimaste, ma non scelte come chiavi primaria,

sono le chiavi ALTERNATIVE o candidate.

CHIAVI CANDIDATE ES. STUDENTE(MATRICOLA, CF,NOME,COGNOME)

AK:CF

AK = Alternative Key

MODELLO RELAZIONALE

Condizioni di correttezza formale (per un corretto funzionamento)

VINCOLI DI INTEGRITA’ = LA CHIAVE A CUI SI FA RIFERIMENTO DEVE ESISTERE!

ENTITY INTEGRITY le chiavi primarie non possono assumere valore NULL

Quando si specifica una FK si dichiara un vincolo

CHIAVE ESTERNA (FOREIGN KEY) FK di integrità referenziale

Le chiavi esterne si dichiarano usando FILM(id, nome, anno, genere, regista)

REFERENCES in questo modo: regista REFERENCES artista(id)

ALGEBRA RELAZIONALE

FONDAMENTI

OPERATORI DELL’ALGEBRA RELAZIONALE

Operatori unari Operatori binari

selezione () prodotto cartesiano (X)

● ●

proiezione (π) join ( ⨝)

● ● unione (⋃)

● intersezione (∩)

● differenza (-)

Relazionali ÷

divisione (/ o )

Insiemistici

SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE

Operatori unari

selezione ()

SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE

Operatori unari

selezione ()

● Relazionali

R = pA VOGLIAMO FARE

R relazione UNA SELEZIONE dei soli nati nel 1981

p predicato

A insieme

SELEZIONE ⇒GENERA UN SOTTOINSIEME ORIZZONTALE

Operatori unari

selezione ()

Relazionali

R = Artista

anno=1981

R = pA

R relazione SELECT * FROM artista WHERE anno = 1981

p predicato [ p: anno = 1981]

A insieme π

PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE

Operatori unari

proiezione (π)

● π

PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE

Operatori unari

proiezione (π)

● Relazionali

R = π A

L VOGLIAMO FARE

R relazione UNA PROIEZIONE solo del

L lista attributi nome e del cognome

[L:nome,cognome]

A insieme π

PROIEZIONE ⇒GENERA UN SOTTOINSIEME VERTICALE

π

π

Operatori unari

proiezione (π)

● Relazionali π

R = Artista

nome,cognome

R = π A

L

R relazione SELECT nome, cognome FROM artista

L lista attributi [L:nome,cognome]

A insieme π

+

SELEZIONE PROIEZIONE

Operatori unari

selezione ()

● proiezione (π)

● π

+

SELEZIONE PROIEZIONE

Operatori unari

selezione ()

● proiezione (π)

VOGLIAMO FARE

UNA SELEZIONE ED UNA PROIEZIONE:

nome e cognome dei soli nati nel 1981 π

+

SELEZIONE PROIEZIONE ATTENZIONE! COSA FACCIAMO PRIMA?

Operatori unari

selezione ()

● proiezione (π)

VOGLIAMO FARE

UNA SELEZIONE ED UNA PROIEZIONE:

nome e cognome dei soli nati nel 1981 π

+

SELEZIONE PROIEZIONE ATTENZIONE! COSA FACCIAMO PRIMA?

π π

Operatori unari

selezione ()

proiezione (π)

VOGLIAMO FARE

UNA SELEZIONE ED UNA PROIEZIONE: se eseguiamo prima la proiezione, perdiamo

nome e cognome dei soli nati nel 1981 l’anno, e non possiamo più fare la selezione in

base all’anno.

π

+

SELEZIONE PROIEZIONE DOBBIAMO QUINDI FARE PRIMA LA SELEZIONE

Risultato:

Operatori unari

selezione ()

● proiezione (π)

● E SOLO DOPO L A PROIEZIONE

( )

π

R = Artista

nome,cognome anno=1981

VOGLIAMO FARE

UNA SELEZIONE ED UNA PROIEZIONE: SELECT nome, cognome FROM artista WHERE

nome e cognome dei soli nati nel 1981 anno = 1981

X

PRODOTTO CARTESIANO

Operatori binari

prodotto cartesiano (X)

Insiemistici X

PRODOTTO CARTESIANO

Operatori binari

prodotto cartesiano (X)

● Mostra tutte le possibili

combinazioni SELECT * FROM tabella1, tabella2

(ad esempio tra 2 tabelle) X

PRODOTTO CARTESIANO

Operatori binari

prodotto cartesiano (X)

ALTERNATIVA CON CROSS JOIN SELECT * FROM tabella1 CROSS JOIN tabella2

R = tabella1 X tabella2

JOIN ( ⨝)

Operatori binari

join ( ⨝)

Relazionali

JOIN ( ⨝) Operatori binari

join ( ⨝)

E’ un sottoinsieme del prodotto SELECT * FROM tabella1 t1 JOIN tabella2 t2 ON t1.nome = t2.nome

cartesiano

JOIN ( ⨝) Operatori binari

join ( ⨝)

ALIAS SELECT * FROM tabella1

JOIN tabella2 ON tabella1.nome = tabella2.nome

NOTA: in SQL possiamo utilizzare

degli alias, ovvero rinominare una SELECT * FROM tabella1 t1 JOIN tabella2 t2 ON t1.nome = t2.nome

tabella in altri caratteri, ad esempio

artista lo chiamiamo solo a

e film lo chiamiamo solo f Dettaglio: t1 t2 t1.nome t2.nome

SELECT * FROM tabella1 JOIN tabella2 ON =

JOIN ( ⨝) Operatori binari

join ( ⨝)

NOTA: è equivalente di:

SELECT * SELECT *

FROM tabella1 t1 JOIN tabella2 t2 ON FROM tabella1 t1, tabella2 t2

t1.nome = t2.nome WHERE t1.nome = t2.nome

R = tabella1 tabella2

THETA JOIN ( )

C Operatori binari

Il theta Join è chiamato anche Theta join ( )

Join Condizionale C

C = CONDIZIONE

INNER JOIN R = tabella1 tabella2

C

SELECT * FROM tabella1 t1 JOIN tabella2 t2 C: t2.anno < 1991 t2.anno > 1981

ON t2.anno < 1991 AND t2.anno > 1981 ∧ = AND

EQUIJOIN ( )

C Operatori binari

Un caso particolare di theta Join Theta join ( )

è quando la condizione è di C

uguaglianza C = CONDIZIONE DI

UGUAGLIANZA

INNER JOIN R = tabella1 tabella2

C

=

SELECT * FROM tabella1 t1 JOIN tabella2 t2 C: t1.anno t2.anno

ON t1.anno = t2.anno ∧ = AND

LEFT JOIN ( =⨝) Operatori binari

Il left join fa una combinazione tra Left join ( =⨝)

2 tabelle mostrando anche la

tabella di sinistra LEFT che non ha

corrispondenze R = tabella1 =⨝ tabella2

SELECT * FROM tabella1 t1

INNER / OUTER JOIN LEFT JOIN tabella2 t2 ON t1.anno = t2.anno

LEFT JOIN ( =⨝) Operatori binari

Left join ( =⨝)

Il left join fa una combinazione tra 2 tabelle

SELECT * FROM tabella1 t1

LEFT JOIN tabella2 t2 ON t1.anno = t2.anno mostrando anche la tabella di sinistra LEFT che non

ha corrispondenze con la destra

RIGHT JOIN ( ⨝=) Operatori binari

Il left join fa una combinazione tra Right join ( ⨝=)

2 tabelle mostrando anche la

tabella di destra RIGHT che non

ha corrispondenze R = tabella1 tabella2

⨝=

SELECT * FROM tabella1 t1

INNER / OUTER JOIN RIGHT JOIN tabella2 t2 ON t1.anno = t2.anno

RIGHT JOIN ( ⨝=) Operatori binari

Right join ( ⨝=)

Il left join fa una combinazione tra 2 tabelle

SELECT * FROM tabella1 t1 mostrando anche la tabella di destra RIGHT che non

RIGHT JOIN tabella2 t2 ON t1.anno = t2.anno ha corrispondenze con la destra

⟗)

FULL OUTER JOIN ( =⨝= oppure

Operatori binari

Il left join fa una combinazione tra Full Outer join ( =⨝=)

2 tabelle mostrando anche E

tabella di destra RIGHT e sinistra

LEFT che non hanno R = tabella1 =⨝= tabella2

corrispondenze

OUTER JOIN SELECT * FROM tabella1 t1

FULL OUTER JOIN tabella2 t2 ON t1.anno = t2.anno

Nota: non esiste in MySql! SELECT * FROM tabella1 t1

LEFT JOIN tabella2 t2 ON t1.anno = t2.anno

Si può fare così: UNION

SELECT * FROM tabella1 t1 RIGHT JOIN tabella2 t2 ON

t1.anno = t2.anno

⟗)

FULL OUTER JOIN ( =⨝= oppure Il left join fa una combinazione tra 2 tabelle

mostrando anche le tabelle di sinistra LEFT e di

destra RIGHT che non hanno corrispondenze

SEMI JOIN ⋉

( ) ⋉

R = tabella1 ( ) tabella2

Il semi join mostra solo

informazioni della tabella

indicata, l'altra non la fa vedere

LEFT SEMI JOIN LEFT ANTI SEMI JOIN

RIGHT SEMI JOIN RIGHT ANTI SEMI JOIN

SEMI JOIN ⋉

( ) ⋉

R = tabella1 ( ) tabella2

LEFT SEMI JOIN

SELECT * FROM tabella1 t1

WHERE t1.nome IN (SELECT nome FROM tabella2)

RIGHT SEMI JOIN

SELECT * FROM tabella2 t2

WHERE t2.nome IN (SELECT nome FROM tabella1)

SEMI JOIN ⋉

( ) ⋉

R = tabella1 ( ) tabella2

LEFT ANTI SEMI JOIN

SELECT * FROM tabella1 t1

WHERE t1.nome NOT IN (SELECT nome FROM tabella2)

RIGHT ANTI SEMI JOIN

SELECT * FROM tabella2 t2

WHERE t2.nome NOT IN (SELECT nome FROM tabella1)

SELF JOIN ( ⨝) Operatori binari

Il left join fa una combinazione tra SELF join ( ⨝)

se stessa, usando due istanze

uguali della stessa tabella R = tabella1 tabella1

SELECT * FROM tabella1 t1, tabella1 t2

WHERE t1.anno = t2.anno

Attenzione:

t1 e t2 questa volta sono alias sempre della tabella1 !

SELF JOIN ( ⨝) SELECT * FROM tabella1 t1, tabella1 t2

Cerchiamo le persone nella stessa tabella, nate WHERE t1.anno = t2.anno

nello stesso anno: ⇒

MA NON FUNZIONA! APPLICHIAMO UN MIGLIORAMENTO

SELF JOIN ( ⨝)

Aggiungiamo ad esempio la condizione che gli id siano SELECT * FROM tabella1 t1, tabella1 t2

WHERE t1.anno = t2.anno

diversi: AND t1.id <> t2.id AND t1.id <> t2.id

In SQL <> significa DIVERSO

ANCORA NON FUNZIONA BENE !

⇒ APPLICHIAMO UN MIGLIORAMENTO DIVERSO

SELF JOIN ( ⨝)

Aggiungiamo questa condizione: SELECT * FROM tabella1 t1, tabella1 t2

WHERE t1.anno = t2.anno

AND t1.nome > t2.nome AND t1.nome > t2.nome

Dettagli
Publisher
A.A. 2022-2023
80 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher enricogirardi di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Modena e Reggio Emilia o del prof Gagliardelli Luca.