Anteprima
Vedrai una selezione di 3 pagine su 9
Risoluzione esercizi Basi di dati Pag. 1 Risoluzione esercizi Basi di dati Pag. 2
Anteprima di 3 pagg. su 9.
Scarica il documento per vederlo tutto.
Risoluzione esercizi Basi di dati Pag. 6
1 su 9
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Bolletta (ID_BOLLETTA, data, importo, ID_datacenter)

Intervento (ID_INTERVENTO, data, importo, ID_datacenter)

Si deve calcolare per ogni data center

-​ totale incassato con le fatture

-​ totale spese sia di elettricità si di manutenzione

-​ Utile= Fatturato_tot - Elettricita_tot - Manutenzioni_tot (dove tot sta per

totale)

-​ Condizione di selezione nella where: utile > 1’000’000

-​ order by utile desc

select a.id_datacenter, a.Fatturato_tot-b.elettricita_tot-c.manutenzione_tot as

utile

from( select id_datacenter , sum (importo) as Fatturato_tot

from Fattura

group by id_datacenter

) as a,(

select id_datacenter, sum(importo) as elettricita_tot

​ from Bolletta

​ group by id_datacenter

) as b,(

select id_datacenter, sum(importo) as manutenzione_tot

from Manutenzione

group by id_datacenter

)as c

where a.id_datacenter=b.id_datacenter and b.id_datacenter = c.id_datacenter

and utile > 1000000

order by utile desc

/*Commento*/

In questo esercizio si richiede di calcolare, per ogni data center, l’utile ossia la

differenza tra Fatturato_tot , Elettricita_tot , Manutenzioni_tot , considerando solo

quelle con utile maggiore di 1000000 e ordinando i risultati in ordine decrescente

in base all’utile.

Per farlo, si è scelto di ricorrere alle query annidate, ovvero query che , oltre a

operare su tabelle già esistenti , permettono di lavorare anche sui risultati di altre

sotto-queri. In particolare, si usano tre sotto-query in from (alias a , b e c),

ognuna delle quali calcola rispettivamente il fatturato totale, il totale speso in

elettricità e il totale speso in manutenzione.

Questo approccio è necessario in quanto le tabelle Fattura Bolletta e intervento

hanno granularità diversa(cioè hanno diverso insieme di chiavi che identificano

un’unità di informazione): la prima registra le singole fatture emesse ai clienti per

i servizi erogati, la seconda memorizza le singole spese sostenute per pagare

l’elettricità dei data center, e la terza riporta i costi degli interventi di

manutenzione effettuati.

Un join diretto produrrebbe sicurmante risultati incoerenti, utilizzando invece le

query annidate, è possibile unformare la granularità e calcolare correttamente

l’utile.

Per quanto riguarda invece la condizione di selezione nel where filtra solo i

datacenter con utile maggiore di 1000000

mentre l’order by utile desc permette di visualizzare in ordine di utile

Vi sono altre due alternative alle query annidate:

La materializzazione: creazione di tabelle temporanee tramite CREATE TABLE ,

questa è molto tuttavia occupa molto spazio in memoria e richiede un

aggiornamento manuale

La vista: creazione di tabelle virtuali tramite CREATE VIEW , che quindi non

occupano spazio in memoria, e che vengono aggiornate in automatico al

momento dellaa consultazione

Esercizio 3

Customer (ID_CUSTOMER, nome, cognome)

Micropalestra (ID_PALESTRA, nome, indirizzo)

Prenotazione (ID_customer, ID_palestra, data, ora)

Abbonamento (ID_customer, anno, mese, importo

Per ogni utente mostrare

-​ totale dei soldi incassati per abbonamento

-​ totale n prenotazioni effettuate

-​ rapporto = tot_speso/tot_prenotazioni

select a.id_customer, a.tot/b.n as rap

from( select id_custumer, sum(importo) as tot

from Abbomamento

group by id_customer

) as a,(

select id_customer, count(*) as n

​ from Prenotazione

​ group by id_customer

) as b

where a.id_custumer=b.id_custumer /*si potrebbe usare alternativamente

anche a join b on (e a.id_custumer=b.id_custumer) */

In questo esercizio si richiede di calcolare, per ogni utente, il rapporto tra il totale

dei soldi incassati e il numero di prenotazioni effettuate.

Per farlo, si è scelto di ricorrere alle query annidate, ovvero query, che oltre a

operare su tabelle esistenti, permettono di lavorare anche sui risultati di altre

sotto-query. In particolare , si usano due sotto-query (alias a e b) ognuna delle

quali calcola rispettivamente il totale dei soldi incassati per gli abbonamenti e il

numero delle prenotazioni. Questo approccio è necessario in quanto le tabelle

Abbonamento e Prenotazione hanno granularità differenti (cioè diverso insieme

di chiavi che identificano un’unità di informazione): la prima infatti registra i

canoni di abbonamento pagati dai singoli utenti mentre la seconda memorizza le

prenotazioni effettuate .

Un join diretto produrrebbe sicuramente risultati incoerenti, mentre utilizzando le

query annidate , è possibile uniformare le granularità e calcolare correttamente il

rapporto.

Vi sono due ulteriori alternative alla query annidata:

La materializzazione: creazione di tabelle temporanee tramite il CREATE TABLE,

molto utile tuttavia richiede molto spazio in memoria e aggiornamento manuale

Le viste: creazione di tabelle virtuali tramite CREATE VIEW, che quindi non

occupano spazio in memoria e che hanno aggiornamento automatico al

momento della consultazione

Esercizio 4

Cliente (ID_CLIENTE, nome, cognome, eta)

Fornitura (ID_filtro, ID_cliente, data, prezzo)

Ricarica (ID_cliente, data, ID_macchina, qtCO2)

Noleggio (ID_cliente, mese, importo)

per ogni utente

-​ tot soldi incassati

-​ tot costi per ricambio filtri

-​ tot costi per caricamento CO2

-​ Utile = Tot_incasso-tot_costi_filtri-tot_costi_CO2

select a.id_cliente, a.tot-b.tot-c-tot as utile

from( select id_cliente, sum(importo) as tot

from noleggio

group by id_cliente

)as a, (

select id_cliente, sum(prezzo) as tot

from Fornitura

group by id_cliente

)as b,( select id_cliente, sum(5*qtCO2)as tot

from Ricarica

group by id_cliente

)as c

where a.id_cliente=b.id_cliente and b.id_cliente=c.id_cliente /*alternativa a join

b on( a.id_cliente=b.id_cliente and b.id_cliente=c.id_cliente)*/

In questo esercizio si richiede di calcolare, per ogni utente, l’utile, dato dalla

differenza tra i soldi incassati dal noleggio, il totale dei costi per il cambio filtro e

per la ricarica di co2.

Per farlo, si è scelto di ricorrere alle query annidate, ossia query che , oltre a

operare su tabelle esistenti, permettono di lavorare a partire dei risultati delle

sotto-query. In particolare, si usano le tre sotto-query (alias a e b) che calcolano

ripettivamente il totale del incasso dai noleggi, il totale dei costi per il cambio filtri,

e il costo della ricarica di CO2.

Questo approccio è neccessario in quanto le tabelle Fornitura, Ricarica e Noleggio

presentano granularità differeni t(cioè diverso insieme di chiavi che identificano

un unità di informazione): la tabella forniture riporta informazioni sui filtri installati

nelle macchine presso il cliente, ricarica invece descrive le operazione di

riempimento dei serbatoi di CO2 mentre noleggio

memorizza i canoni di noleggio mensili pagati dal cliente per il servizio di

depurazione e gasatura acqua.

Dettagli
Publisher
A.A. 2024-2025
9 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ibty_05 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 Milano - Bicocca o del prof Cesarini Mirko.