You are on page 1of 9

Esercizi di Algebra Relazionale

Nota: sono evidenziati solo i vincoli di chiave esterna

Esercizio 1
Si assuma il seguente schema relazionale per la gestione di una biblioteca:

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

Si esprima, nell’algebra relazionale, ciascuna delle seguenti interrogazioni:

0.1trovare il codice utente di Paolo Bianchi


0.2rinominare il codice utente della selezione precedente in risultato
0.3trovare i codici utente di Paolo Bianchi e Giovanni Rossi. Rinominare la
selezione come risultato.

a) Il Codice dei libri presi in prestito il giorno 13/7/2011


b) Titoli dei libri presi in prestito il giorno 13/7/2011
c) Autori dei libri presi in prestito da Paolo Bianchi
d) Codici degli utenti che hanno preso in prestito libri scritti da Camilleri
oppure da De Luca
e) Codici degli utenti che hanno preso in prestito libri non scritti da Camilleri
f) Titoli dei libri presi in prestito il giorno 13/7/2011 da Paolo Bianchi
g) Trovare gli utenti che hanno preso in prestito solo libri di Camilleri

[Digitare qui]
SOLUZIONI:

0.1) trovare il codice utente di Paolo Bianchi

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

codice_utente ( nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti))

Oppure
S1=( nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti))
codice_utente(S1)

0.2) rinominare il codice utente della selezione precedente in risultato


ρ risultatocodice_utente (codice_utente(S1))

0.3) trovare i codici utente di Paolo Bianchi e Giovanni Rossi. Rinominare la


selezione come risultato.

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1=codice_utente ( (nome =‘Paolo‘ AND cognome = ‘Bianchi’) OR (nome =‘Giovanni‘


AND cognome = ‘Rossi’) (Utenti))
ρ risultatocodice_utente (S1)

si usano le parentesi perché non ho informazioni su precedenza e associatività


di AND e OR
Oppure
S1=codice_utente ( nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti))
S2=codice_utente ( nome =‘Giovanni‘ AND cognome = ‘Rossi’ (Utenti))
[Digitare qui]
ρ risultatocodice_utente (S1 U S2)

a) Il Codice dei libri presi in prestito il giorno 13/7/2011 (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1= data_prestito=13/7/2011(Prestiti)
codice_libro(S1)

b) Titoli dei libri presi in prestito il giorno 13/7/2011 (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1= data_prestito=13/7/2011(Prestiti)
titolo(S1 Libri)

oppure:
titolo(data_prestito=13/7/2011(Prestiti Libri)

oppure:
S1= data_prestito=13/7/2011(Prestiti)
titolo(LIBRI.codice_libro=S1.codice_libro (S1 x Libri))

Come prodotto cartesiano

c) Autori dei libri presi in prestito da Paolo Bianchi (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

[Digitare qui]
S1=  nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti)
S2 = S1 Prestiti
S3 = S2 Libri
autore (S3)

oppure:

S1=  nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti)


S2 = codice_libro (S1 Prestiti)
S3 = S2 Libri
autore (S3)

d) Codici degli utenti che hanno preso in prestito libri scritti da Camilleri
oppure da De Luca (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1 = autore =‘Camilleri‘ OR autore = ‘De Luca’ (Libri)


S2 = S1 Prestiti
codice_utente(S2)

e) Codici degli utenti che hanno preso in prestito libri non scritti da Camilleri

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1 = autore <>‘Camilleri’(Libri)
S2 = S1 Prestiti
codice_utente(S2)

[Digitare qui]
f) Titolo dei libri presi in prestito il giorno 13/7/2011 da Paolo Bianchi (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1 =  nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Utenti)


S2 =  data_prestito = 13/7/2011 (Prestiti)
S3 = codice_libro (S1 S2)
S4 = S3 Libri
titolo (S4)

g) Trovare gli utenti che hanno preso in prestito solo libri di Camilleri. (OK)

LIBRI(codice_libro, autore, titolo)


UTENTI(codice_utente, nome, cognome)
PRESTITI(codice_utente, codice_libro, data_prestito)

S1 = autore =‘Camilleri‘ (Libri)


S2 = codice_libro (S1) //proiezione come ott.
S3 = S2 Prestiti
S4 = codice_ utente(S3)

T1 =  autore <>‘Camilleri‘(Libri)
T2 = codice_libro (T1) // proiezione come ott.
T3 = T2 Prestiti
T4 = codice_ utente(T3)

S4-T4

[Digitare qui]
Esercizio 2

Si assuma il seguente schema relazionale per la gestione del noleggio di cd:

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

Si esprima, nell’algebra relazionale, ciascuna delle seguenti interrogazioni:


0.1 codice fiscale degli utenti che si chiamano piero
0.2 titoli dei CD degli U2 presenti. Rinominare il risultato come U2-selection
a) Autore e titolo dei cd noleggiati da Paolo Bianchi in data 20/1/2012
b) Nome e cognome dei clienti che hanno noleggiato cd dei Radiohead in data
12/10/2001
c) Titolo dei cd che sono stati noleggiati dal cliente avente codice C123 oppure
dal cliente avente codice G624 (Farlo Prima)
d) Trovare i clienti che hanno stesso nome e cognome, ma diverso Codice
Fiscale.
e) Trovare gli autori di CD con lo stesso titolo

SOLUZIONE:

0.1) trovare il codice fiscale degli utenti che si chiamano Piero

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

codice_cliente ( nome =‘Piero‘ (Clienti))

0.2) titoli dei CD degli U2 presenti. Rinominare il risultato come U2-selection


CD(codice_cd, autore, titolo)
CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

[Digitare qui]
S1 = titolo ( autore =‘U2‘ (CD))
ρ U2-selectiontitolo (S1)

a) Autore e titolo dei cd noleggiati da Paolo Bianchi in data 20/1/2012 (OK)

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

S1 = Noleggio Clienti
S2 = data_noleggio = 20/1/2012 AND nome =‘Paolo‘ AND cognome = ‘Bianchi’ (S1)
S3 = codice_cd (S2)
autore, titolo (S3 CD)

Oppure:

S1 = data_noleggio = 20/1/2012 (Noleggio)


S2 =  nome =‘Paolo‘ AND cognome = ‘Bianchi’ (Clienti)
S3 = codice_cd (S1 S2)
autore, titolo (S3 CD)

b) Nome e cognome dei clienti che hanno noleggiato cd dei Radiohead in data
12/10/2001 (OK)

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

S1 = data_noleggio = 12/10/2001 (Noleggio)


S2 = autore = ‘Radiohead‘(CD)
[Digitare qui]
S3 = codice_cliente (S1 S2)
nome, cognome (S3 Clienti)

c) Titolo dei cd che sono stati noleggiati dal cliente avente codice C123 oppure
dal cliente avente codice G624 (OK)

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

 titolo (codice_cliente =‘ C123’OR codice_cliente = ‘G624’ (Noleggio) CD)


Oppure:
S1 = codice_cd(codice_cliente = ‘C123’ OR codice_cliente = ‘G624’ (Noleggio))
Oppure:
S1 = codice_cd(codice_cliente =‘ C123’(Noleggio) ∪ codice_cliente = ‘G624’
(Noleggio))
S2 =  titolo (S1 CD)

d) Trovare i clienti che hanno stesso nome e cognome, ma diverso Codice


Fiscale (OK)

CD(codice_cd, autore, titolo)


CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

Ridenominiamo gli attributi della tabella Clienti:

Clienti1 = ρ codice_cliente11codice_cliente, nome1nome, cognome1cognome, codice_fiscale1 codice_fiscale


(Clienti)
 nome, cognome, codice_fiscale(Clienti Clienti.nome = Clienti1.nome1 AND
Clienti.cognome = Clienti1.cognome1 AND Clienti.codice_fiscale<> Clienti1.codice_fiscale1
Clienti1)

[Digitare qui]
Il join (Self-Join) ci permette di mantenere tutte quelle tuple in cui i
valori degli attributi nome e cognome sono uguali alla loro controparte
ridenominata, mentre il valore dell’attributo codice_fiscale è diverso.

d) Trovare gli autori di CD con lo stesso titolo (OK)


CD(codice_cd, autore, titolo)
CLIENTI(codice_cliente, codice_fiscale, nome, cognome)
NOLEGGIO(codice_cliente, codice_cd, data_noleggio)

Rinominiamo gli attributi della tabella CD:

CD1 = ρ codice_cd11codice_cd, autore1autore, titolo1titolo (CD)


 autore(CD CD.titolo = CD1.titolo1 AND CD.autore <> CD1.autore1 CD1)

[Digitare qui]

You might also like