Esercizio
Si assuma il seguente schema relazionale per la gestione di una biblioteca:
LIBRO(codice_libro, autore, titolo)
UTENTE(codice_utente, nome, cognome)
PRESTITO(codice_utente↑, codice_libro↑, data_prestito)
codice_utente FK(UTENTE.codice_utente)
codice_libro FK(LIBRO.codice_libro)
Si esprima, nell'algebra relazionale, ciascuna delle seguenti interrogazioni:
Titoli dei libri presi in prestito il giorno 13/7/2011
Autori dei libri presi in prestito da Paolo Bianchi
Nome e cognome degli utenti che hanno preso in prestito libri scritti da Camilleri oppure da De Luca
Codice utente, nome e cognome degli utenti che non hanno mai preso in prestito un libro di Camilleri oppure di De Luca
Soluzione:
1. Titoli dei libri presi in prestito il giorno 13/7/2011
T1 = RESTRICT PRESTITO WHERE data_prestito=13/7/2011
T1(codice_utente, codice_libro, data_prestito)
data_prestito=13/7/2011
T2 = T1 TIMES LIBRO
T2(codice_utente, T1.codice_libro, data_prestito, LIBRO.codice_libro, autore, titolo)
data_prestito=13/7/2011
T3 = RESTRICT T2 WHERE T1.codice_libro = LIBRO.codice_libro
T3(codice_utente, T1.codice_libro, data_prestito, LIBRO.codice_libro, autore, titolo)
data_prestito=13/7/2011
T1.codice_libro=LIBRO.codice_libro
T4 = PROJECT T3 OVER titolo
T4(titolo)
2. Autori dei libri presi in prestito da Paolo Bianchi
T1=RESTRICT UTENTE WHERE nome="Paolo" AND cognome="Bianchi"
T1(codice_utente, nome, cognome)
nome="Paolo" AND cognome="Bianchi"
T2 = T1 TIMES PRESTITO
T2(T1.codice_utente, nome, cognome, PRESTITO.codice_utente, codice_libro, data_prestito)
nome="Paolo" AND cognome="Bianchi"
T3=RESTRICT T2 WHERE T1.codice_utente=PRESTITO.codice_utente
T3(T1.codice_utente, nome, cognome, PRESTITO.codice_utente, codice_libro, data_prestito)
nome="Paolo" AND cognome="Bianchi"
T1.codice_utente=PRESTITO.codice_utente
T4 = T3 TIMES LIBRO
T4(T1.codice_utente, nome, cognome, PRESTITO.codice_utente, T3.codice_libro, data_prestito, LIBRO.codice_libro, autore, titolo)
nome="Paolo" AND cognome="Bianchi"
T1.codice_utente=PRESTITO.codice_utente
T5=RESTRICT T4 WHERE T3.codice_libro=LIBRO.codice_libro
T5(T1.codice_utente, nome, cognome, PRESTITO.codice_utente, T3.codice_libro, data_prestito, LIBRO.codice_libro, autore, titolo)
nome="Paolo" AND cognome="Bianchi"
T1.codice_utente=PRESTITO.codice_utente
T3.codice_libro=LIBRO.codice_libro
T6= PROJECT T5 OVER autore
T6(autore)
3. Nome e cognome degli utenti che hanno preso in prestito libri scritti da Camilleri oppure da De Luca
T1=RESTRICT LIBRO WHERE autore="Camilleri" OR autore="De Luca"
T1(codice_libro, autore, titolo)
autore="Camilleri" OR autore="De Luca"
T2=T1 TIMES PRESTITO
T2(T1.codice_libro, autore, titolo, codice_utente, PRESTITO.codice_libro, data_prestito)
autore="Camilleri" OR autore="De Luca"
T3=RESTRICT T2 WHERE T1.codice_libro= PRESTITO.codice_libro
T3(T1.codice_libro, autore, titolo, codice_utente, PRESTITO.codice_libro, data_prestito)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T4=T3 TIMES UTENTE
T4(T1.codice_libro, autore, titolo, T4.codice_utente, PRESTITO.codice_libro, data_prestito, UTENTE.codice_utente, nome, cognome)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T5=RESTRICT T4 WHERE T4.codice_utente=UTENTE.codice_utente
T5(T1.codice_libro, autore, titolo, T4.codice_utente, PRESTITO.codice_libro, data_prestito, UTENTE.codice_utente, nome, cognome)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T4.codice_utente=UTENTE.codice_utente
T6=PROJECT T5 OVER nome, cognome
T6(nome, cognome)
4. Codice utente, nome e cognome degli utenti che non hanno mai preso in prestito libri scritti da Camilleri oppure da De Luca
T1=RESTRICT LIBRO WHERE autore="Camilleri" OR autore="De Luca"
T1(codice_libro, autore, titolo)
autore="Camilleri" OR autore="De Luca"
T2=T1 TIMES PRESTITO
T2(T1.codice_libro, autore, titolo, codice_utente, PRESTITO.codice_libro, data_prestito)
autore="Camilleri" OR autore="De Luca"
T3=RESTRICT T2 WHERE T1.codice_libro= PRESTITO.codice_libro
T3(T1.codice_libro, autore, titolo, codice_utente, PRESTITO.codice_libro, data_prestito)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T4=T3 TIMES UTENTE
T4(T1.codice_libro, autore, titolo, T3.codice_utente, PRESTITO.codice_libro, data_prestito, UTENTE.codice_utente, nome, cognome)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T5=RESTRICT T4 WHERE T3.codice_utente=UTENTE.codice_utente
T5(T1.codice_libro, autore, titolo, T3.codice_utente, PRESTITO.codice_libro, data_prestito, UTENTE.codice_utente, nome, cognome)
autore="Camilleri" OR autore="De Luca"
T1.codice_libro= PRESTITO.codice_libro
T3.codice_utente=UTENTE.codice_utente
T6=PROJECT T5 OVER nome, cognome
T6(UTENTE.codice_utente, nome, cognome)
T7=RENAME T6 (UTENTE.codice_utente, nome, cognome), (codice_utente, nome, cognome)
T7(codice_utente, nome, cognome)
T8=UTENTE MINUS T7
T8(codice_utente, nome, cognome)
Sito: 7ecnologie
Sezione: 11. Base di dati
Capitolo: 05. La progettazione logica
Paragrafo: 07. Es. svolto: algebra relazionale (query)
Indice dei capitoli: 00. Risorse - 01. Sistema informativo, informazione e dato - 02. Gli archivi - 03. Il progetto informatico - 04. La progettazione concettuale - 05. La progettazione logica - 06. La progettazione fisica - 07. Tutorial - 98. Esercizi
Indice dei paragrafi: 01. Il modello relazionale - 02. Algebra relazionale - 03. Regole di derivazione - 04. Normalizzazione delle relazioni - 05. Regole di nomenclatura - 06. Es. svolto: algebra relazionale (operatori) - 07. Es. svolto: algebra relazionale (query) - 08. Es. svolto: visite ambulatoriali