Swappa : Uni / Basi di dati - Esercizio 1
Creative Commons License

Torna alla pagina di Basi di Dati


 :: Basi di dati - Esercizio 1 ::

Query: Cellulari


CELLULARE (Codice, CFUtente, Modello, Marca, Colore)
ABBONAMENTO (Numero, CFUtente, Operatore, Tariffa)
UTENTE (CF, Nome, Cognome, Città)


Domanda 1
Determinare il codice dei cellulari di marca Nokia di colore rosso e di colore nero.

Prioetta la colonna del codice cellulare e visualizza le tuple in cui colore = rosso o nero e marca = Nokia

ΠCodice(Colore='rosso' ν Colore='nero') Λ Marca='Nokia' CELLULARE)


Domanda 2
Determinare il codice dei cellulari degli utenti residenti a Milano.

Attinge le informazioni dalla tabella UTENTE e crea la tabella UTENTI MILANO che ha la colonna CF e contiene le tuple che hanno il campo città = Milano

UT_MIL := ΠCFCittà='Milano' UTENTE)

Si fa il Join tra la tabella UTENTI MILANO e CELLULARE(perchè il codice cellulare si trova nella tabella CELLULARE) con la condizione che si tratti dello stesso utente (CF = CFUtente).Si proietta il codice del cellulare

ΠCodice (UT_MIL ⋈ CF=CFUtente CELLULARE)


Domanda 3
Determinare la marca dei cellulari degli utenti serviti da Tim a Milano.

Creo una tabella UTENTI TIM formata dalla colonna CFUtente presa da UTENTE e proietto la colonna CFUtente che rinomino CF e seleziono le tuple in cui città = Milano

UT_TIM := ΠCFUtenteOperatore='Tim' ABBONAMENTO)

Creo la tabella UTENTI MILANO che ha la colonna CF presa dalla tabella UTENTE e contiene le tuple in cui città = MILANO

UT_MIL := ρ CFUtente ← CFCFCittà='Milano' UTENTE))

Ora trovotutti gli utenti che abitano a MILANO e che hanno l'operatore TIM (l' intersezione ) poi faccio il join con la tabella CELLULARE perchè voglio proiettare la marca

ΠMarca ((UT_TIM ⋂ UT_MIL) ⋈ CELLULARE)


Domanda 4
Determinare gli operatori che servono tutti gli utenti della città di Milano.

Creo la solita tabella UTENTI MILANO

UT_MIL := ρ CFUtente ← CFCFCittà='Milano' UTENTE))

Creo la tabella OP che ha la colonna operatore della tabella ABBONAMENTO

OP := ΠOperatore (ABBONAMENTO)

Ora creo la tabella TUTTI che contiene la colonna operatore e CFUtente con tutte le combinazioni possibili di tuple ( prodotto cartesiano )

TUTTI := UT_MIL x OP

Join tra UT MIL e ABBONAMENTO e proiezione delle colonne CFUtente e operatore. Così facendo trovo tutti gli utenti di Milano e i loro rispettivi abbonamenti. La tabella così formata la chiamo ABB MIL

ABB_MIL := ΠCFUtente, Operatore (UT_MIL ⋈ ABBONAMENTO)

TUTTI - ABB MIL mi da tutti gli operatori che non hanno nemmeno un utente a Milano. Ora faccio la differenza tra gli utenti di Milano con i loro operatori e gli operatori che non hanno nemmeno un utente a Milano.

ΠOperatore (ABB_MIL) - ΠOperatore (TUTTI - ABB_MIL)


Domanda 5
Determinare la tariffa minima applicata da Tim.

Per prima cosa creiamo TAR TIM che dalla tabella ABBONAMENTO prende la colonna tariffa e tutte le tuple in cui operatore = TIM

TAR_TIM := ΠTariffaOperatore='Tim' ABBONAMENTO)

Creo una copia di TAR TIM in cui la colonna tariffa si chiama tariffa'. Join tra le due tabelle con condizione trariffa >tariffa' per trovare tutte le tariffe alte. Differenza tra TAR TIM e tabella appena trovata per trovare la tariffa più piccola

TAR_TIM - ΠTariffa (TAR_TIM ⋈ Tariffa>Tariffa'Tariffa' ← Tariffa TAR_TIM))


Domanda 6
Determinare gli utenti (CF, Nome, Cognome e Città) per i quali tutti i numeri di telefono loro intestati hanno tariffa maggiore di 100.

Creo la tabella UT MIN dove ho la colonna CFUtente e la tariffa minore di 100. Ovviamente le info le prendo dalla tabella ABBONAMENTO

UT_MIN := ΠCFUtenteTariffa<=100 ABBONAMENTO)

Per trovare tutti coloro che hanno tariffa >100 devo fare TUTTI - QUELLI CHE HANNO TARIFFA <100 perciò

UT_RIS := ΠCFUtente (ABBONAMENTO) - UT_MIN

ora Join tra UT RIS e UTENTE ( perchè le colonne che devo proiettare sono nella tabella UTENTE ) tenendo presente che la colonna CF di UT RIS = colonna CF di UTENTE. Proietto CF, nome, cognome e città

ΠCF, Nome, Cognome, Città (UT_RIS ⋈ CFUtente=CF UTENTE)


Torna alla pagina di Basi di Dati

(Printable View of http://www.swappa.it/wiki/Uni/EsBDD01)