La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Memento zChi seguirà il modulo di e-learning? zCD di installazione del SW.

Presentazioni simili


Presentazione sul tema: "Memento zChi seguirà il modulo di e-learning? zCD di installazione del SW."— Transcript della presentazione:

1 Memento zChi seguirà il modulo di e-learning? zCD di installazione del SW

2 Esercizio 1 Rappresentazione delle informazioni relative ai partecipanti ad un corso di formazione

3 Esercizio 1 Specifiche zVogliamo memorizzare dati dei partecipanti ad un corso: ynome, cognome, data di nascita, se è sposato, e, nel caso lo sia, il numero di figli zVogliamo, poi ricordare le città in cui risiedono e le città in cui sono nati, insieme al numero di abitanti. yPer le città capoluogo di regione, vogliamo ricordare la regione zVogliamo poi sapere le lezioni che i partecipanti hanno frequentato, con i (o il) docenti che le hanno svolte, il corrispondente argomento ed il giorno in cui si sono svolte. yAd ogni lezione va associato un numero progressivo. zPer i docenti si vuole memorizzare: nome, cognome, e tipo di enti di provenienza yPer quelli universitari lUniversità da cui provengono e la materia [hp: unica] che insegnano e la città in cui sono è ubicata lUniversità

4 Esercizio 1 Schema ER

5 Esercizio 1 Vincolo non esprimibile in ER zOgni città è y la città di nascita di un partecipante y oppure la città di residenza di un partecipante y oppure la città in cui è ubicata ununiversità Citta[Nome] Universita[Citta] Partecipante[CittaResidenza] Partecipante[CittaNascita] zSi potrebbe introdurre unulteriore generalizzazione

6 Esercizio 1 Schema logico Lezione(Numero, Data, Argomento) Docente(Nome, Cognome, Ente) Universitario(Nome, Cognome, Ente, Materia, Universita) Universita(Nome, Citta) Citta(Nome, NumAbitanti, Regione) FattaDa(Lezione, NomeDoc, CognomeDoc, EnteDoc) Partecipante(Nome, Cognome,DataNascita, NumFigli, CittaResidenza, CittaNascita) Frequenta(Nome, Cognome, DataNascita, NumLezione)

7 Esercizio 2 Interrogazioni in SQL

8 Esercizio 2 Interrogazioni SQL zConsideriamo un semplice database relazionale con il seguente schema: Fornitori (F#, Nome, Città) Componenti (C#, Nome, Colore, Peso) Progetti (P#, Nome, Città) Forniture (F#, C#, P#, Quantità) zSignificato di una tupla della tabella Forniture: Il fornitore F# rifornisce il progetto P# della componente C# nella quantità Quantità

9 Esercizio 2 Interrogazioni SQL zQuery 1 Elencare in ordine crescente i codici dei fornitori del progetto con codice P1 zQuery 2 Elencare le forniture in quantità compresa tra 300 e 750, estremi inclusi zQuery 3 Elencare i codici delle componenti fornite da fornitori di Londra zQuery 4 Elencare i codici delle componenti fornite ai progetti da fornitori locali (stessa città del progetto) zQuery 5 Per ognuna delle componenti fornite ad un progetto, elencare: codice della componente, codice del progetto e corrispondente quantità totale

10 Esercizio 2 Interrogazioni SQL zQuery 6 Elencare i colori delle componenti fornite dal fornitore con codice F1 zQuery 7 Elencare i codici dei progetti riforniti interamente dal fornitore F1 zQuery 8 Elencare i codici dei fornitori che forniscono una stessa componente a tutti i progetti zQuery 9 Elencare i codici dei fornitori che forniscono tutte le merci fornite dal fornitore F1 zQuery 10 Elencare i nomi dei fornitori che forniscono tutte le merci fornite dal fornitore F1

11 Esercizio 2 Soluzione zQuery 1: Elencare in ordine crescente i codici dei fornitori del progetto P1 SELECT DISTINCT F# FROM Forniture WHERE P# = P1 ORDER BY F# zQuery 2: Elencare le forniture in quantità compresa tra 300 e 750 SELECT F#, C#, P#, Quantità FROM Forniture WHERE Quantità >= 300 AND Quantità <= 750 zQuery 3: Elencare i codici delle componenti fornite da fornitori di Londra SELECT DISTINCT C# FROM Forniture, Fornitori WHERE Forniture.F# = Fornitori.F# AND Città = Londra

12 Esercizio 2 Soluzione zQuery 4: Elencare i codici delle componenti fornite ai progetti da fornitori locali SELECT DISTINCT C# FROM Forniture, Fornitori, Progetti WHERE Forniture.F# = Fornitori.F# AND Forniture.P# = Progetti.P# AND Fornitori.Città = Progetti.Città zQuery 5: Per ognuna delle componenti fornite ad un progetto, elencare: codice della componente, codice del progetto e corrispondente quantità totale SELECT C#, P#, SUM (Quantità) FROM Forniture GROUP BY C#, P#

13 Esercizio 2 Soluzione zQuery 6: Elencare i colori delle componenti fornite dal fornitore F1 SELECT DISTINCT Colore FROM Componenti WHERE C# IN ( SELECT C# FROM Forniture WHERE F# = F1) zQuery 7: Elencare i codici dei progetti riforniti interamente da F1 SELECT DISTINCT P# FROM Forniture Ftura1 WHERE NOT EXISTS ( SELECT * FROM Forniture Ftura2 WHERE Ftura2.P# = Ftura1.P# AND Fu2.F# ~= F1 )

14 Esercizio 3 Progettare una base di dati per la gestione delle spese di un condominio

15 Specifiche I condominio scale appartamenti Ogni condominio ha un nome che lo identifica e un indirizzo e comprende una più scale cui sono associati più appartamenti zAd ogni scala sono associati codice un codice che lo identifica insieme al nome del condominio quota della scala un valore, detto quota della scala, che rappresenta la frazione di spese del condominio (in millesimi) che competono agli appartamenti della scala interno quota Ogni appartamento è identificato, nel rispettivo condominio, dalla scala e da un numero ( linterno ). Ad ogni appartamento è associata una quota (in millesimi) che indica la frazione delle spese (della scala) che sono di competenza dellappartamento

16 Specifiche II proprietario cognomecodice fiscale indirizzo Ogni appartamento ha un proprietario per il quale sono di interesse il cognome, il codice fiscale e l indirizzo al quale deve essere inviata la corrispondenza relativa allappartamento. Ogni persona ha un solo codice fiscale, ma potendo essere proprietario di più appartamenti potrebbe avere indirizzi diversi per appartamenti diversi. Di solito, anche chi è proprietario di molti appartamenti ha comunque solo uno o pochi indirizzi. In molti casi, lindirizzo del proprietario coincide con quello del condominio.

17 Specifiche III zPer la parte contabile, è necessario tenere traccia delle spese sostenute dal condominio e dei pagamenti effettuati dai proprietari spesa Ogni spesa è associata ad un intero condominio, oppure ad una scala o un singolo appartamento pagamento Ogni pagamento è relativo a uno e un solo appartamento saldo precedente saldo corrente Nella base di dati vengono mantenuti pagamenti e spese relative allesercizio finanziario in corso (annuale) mentre gli esercizi precedenti vengono sintetizzati attraverso il solo saldo precedente che per ciascun appartamento indica il debito o il credito del proprietario. In ogni istante esiste un saldo corrente per ciascun appartamento, definito come somma algebrica del saldo precedente e dei pagamenti (positivi) e delle spese addebitate (negative).

18 Il condominio: schema ER Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione Persona Spesa Pagamento Generale BloccoSingola proprietà saldo conto condominio conto scala conto appartamento (1,N) (1,1) (1,N) (0,1) (1,1)(0,N) (1,1) (0,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Indirizzo Data Descrizione Codice Importo Data Descrizione Codice CF Nome Cognome Quota Recapito (1,1)

19 Regole aziendali

20 Operazioni principali zOperazione 1 zOperazione 1: registrazione di una spesa per un condominio zOperazione 2 zOperazione 2: registrazione di una spesa per una scala zOperazione 3 zOperazione 3: registrazione di una spesa per un appartamento zOperazione 4 zOperazione 4: registrazione di un pagamento zOperazione 5 zOperazione 5: stampa del bilancio di ogni condominio con il totale degli accrediti e degli addebiti per ogni appartamento e calcolo del nuovo saldo Tavola delle operazioni

21 Carico Tavola dei volumi

22 Ridondanze zOccupazione di memoria zOccupazione di memoria Appartamenti x 4 byte = byte zOperazioni coinvolte yOp. 1: registrazione di una spesa di condominio yOp. 2: registrazione di una spesa di scala yOp. 3: registrazione di una spesa di appartamento yOp. 4: registrazione di un pagamento yOp. 5: stampa del bilancio Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione saldo conto condominio conto scala (1,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Quota conto appartamento

23 Operazione 1 Op. 1: registra una spesa per un condominio con ridondanza senza ridondanza Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione saldo conto condominio conto scala (1,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Quota conto appartamento

24 Operazione 2 Op. 2: registra una spesa per una scala con ridondanza senza ridondanza (1,1) Scala Appartamento Collocazione saldo conto scala (1,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Quota conto appartamento

25 Operazione 3 Op. 3: registra una spesa per un appartamento con ridondanza senza ridondanza Appartamento saldo (1,1) (0,N) Interno Saldo precedente Saldo corrente Quota conto appartamento

26 Operazione 4 Op. 4: registra un pagamento con ridondanza senza ridondanza Appartamento saldo (1,1) (0,N) Interno Saldo precedente Saldo corrente Quota

27 Operazione 5 Op. 5: calcolo del bilancio con ridondanza Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione saldo conto condominio conto scala (1,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Quota conto appartamento

28 Operazione 5 Op. 5: calcolo del bilancio senza ridondanza Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione saldo conto condominio conto scala (1,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Saldo corrente Quota conto appartamento

29 Scelta ridondanza zRisulta evidente che conviene rimuovere la ridondanza! Totali con ridondanza senza ridondanza

30 Gerarchie zTutte le operazioni distinguono i tre sottotipi di Spesa e quindi conviene eliminare la gerarchia eliminando il padre e riportando tutti gli attributi nelle figlie Spesa Generale BloccoSingola conto condominio conto scala conto appartamento (1,1) Importo Data Descrizione Codice Spesa Generale Spesa Blocco conto condominio conto scala conto appartamento (1,1) Importo Data Descrizione Codice Importo Data Descrizione Codice Spesa singola Importo Data Descrizione Codice

31 Schema ristrutturato Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione Persona Pagamento proprietà saldo conto condominio conto scala conto appartamento (1,N) (1,1) (1,N) (0,1) (0,N) (1,1) (0,N) Codice Quota Interno Saldo precedente Indirizzo Data Descrizione Codice Importo CF Nome Cognome Quota Recapito Spesa Generale Spesa Blocco (1,1) Importo Data Descrizione Codice Importo Data Descrizione Codice Spesa singola Importo Data Descrizione Codice Id Sono stati introdotti identificatori ad hoc (Id) per non usare chiavi complesse nel collegamento delle tabelle (chiavi composte o basate su stringhe)

32 Schema relazionale Scale Condomini Appartamenti Persone Recapiti Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione Persona proprietà (1,N) (1,1) (1,N) (0,1) Codice Quota Interno Saldo precedente Indirizzo CF Nome Cognome Quota Recapito Id

33 Schema relazionale Scale Condomini Appartamenti Pagamenti Spese_generali Condominio Composizione Indirizzo Nome (1,N) (1,1) Scala Appartamento Collocazione Pagamento saldo conto condominio conto scala conto appartamento (1,N) (1,1) (0,N) (1,1) (0,N) Interno Saldo precedente Data Descrizione Codice Importo Quota Spesa Generale Spesa Blocco (1,1) Importo Data Descrizione Codice Importo Data Descrizione Codice Spesa singola Importo Data Descrizione Codice Id Quota Codice Spese_blocco Spese_singole

34 Creazione delle tabelle SQL create schema condomini set schema condomini create table condomini ( id smallint not null primary key, nome varchar(20) not null unique, indirizzo varchar(50)) create table scale ( id smallint not null primary key, codice char(1) not null, condominio smallint not null references condomini(id), quota smallint not null, unique(codice,condominio)) create table persone ( id integer not null primary key, nome varchar(15) not null, cognome varchar(15) not null, CF char(16))

35 Creazione delle tabelle SQL II create table recapiti ( id integer not null primary key, indirizzo varchar(50) not null) create table appartamenti ( id integer not null primary key, interno char(4) not null, scala smallint not null references scale(id), proprietario smallint not null references persone(id), recapito smallint references recapiti(id), quota smallint not null, saldo decimal(6,2) not null, unique(interno,scala))

36 Creazione delle tabelle SQL III create table pagamenti ( codice integer not null primary key, data date not null, descrizione varchar(1000), importo decimal(7,2) not null, appartamento integer not null references appartamenti(id)) create table spesa_generale ( codice integer not null primary key, data date not null, descrizione varchar(1000), importo decimal(7,2) not null, condominio integer not null references condomini(id)) create table spesa_blocco ( codice integer not null primary key, data date not null, descrizione varchar(1000), importo decimal(7,2) not null, scala integer not null references scale(id))

37 Creazione delle tabelle SQL IV create table spesa_singola ( codice integer not null primary key, data date not null, descrizione varchar(1000), importo decimal(7,2) not null, appartamento integer not null references appartamenti(id))

38 Operazioni insert into spesa_generale(codice,data,descrizione, importo,condominio) values ((select max(codice)+1 from spesa_generale), :data, :descrizione,:importo, (select id from condomini where nome=:nome)) Op. 1: registra una spesa per un condominio insert into spesa_blocco(codice,data,descrizione, importo,scala) values ((select max(codice)+1 from spesa_blocco), :data, :descrizione,:importo, (select scale.id from scale, condomini where condomini.nome=:nome and scale.codice=:codice and scale.condominio=condomini.id)) Op. 2: registra una spesa per una scala

39 Operazioni insert into spesa_singola(codice,data,descrizione, importo,appartamento) values ((select max(codice)+1 from spesa_singola), :data, :descrizione,:importo, (select appartamenti.id from scale,condomini,appartamenti where condomini.nome=:nome and scale.codice=:codice and appartamenti.interno=:interno and scale.condominio=condomini.id and appartamenti.scala=scale.id)) Op. 3: registra una spesa per un appartamento

40 Operazioni insert into pagamenti(codice,data,descrizione, importo,appartamento) values ((select max(codice)+1 from pagamenti), :data, :descrizione,:importo, (select appartamenti.id from scale,condomini,appartamenti where condomini.nome=:nome and scale.codice=:codice and appartamenti.interno=:interno and scale.condominio=condomini.id and appartamenti.scala=scale.id)) Op. 4: registra un pagamento

41 Operazioni create view bilancio_condominio(id,bilancio) as select id, sum(importo)from condomini, spese_generali where condomini.id=spese_generali.condominio group by id create view tot_spese_blocco(id,tot) as select scale.id, sum(importo) from scale, spese_blocco where scale.id=spese_blocco.scala group by scale.id create view parte_scale_in_cond(id,tot) as select scale.id, bilancio*quota/1000 from scale,bilancio_condominio where scale.condominio= bilancio_condominio.id create view bilancio_scale(id,bilancio) as select tsb.id,tsb.tot + psic.tot from tot_spese_blocco as tsb, parte_scale_in_cond as psic where tsb.id= psic.id Op. 5: calcola bilancio

42 Operazioni create view tot_spese_singole(id,tot) as select appartamenti.id, sum(importo) from appartamenti, spese_appartamento where appartamenti.id=spese_blocco.appartamento group by appartamenti.id create view parte_app_in_scale(id,tot) as select appartamenti.id, bilancio*quota/1000 from appartamenti,bilancio_scale where appartamenti.scala=bilancio_scale.id create view tot_spese_appartamento(id,codice,tot) as select tss.id, tss.tot + pais.tot from tot_spese_singole as tss, parte_app_in_scale as pais where tss.id= pais.id create view tot_pag_appartamento(id,interno,tot) as select appartamenti.id, interno, sum(importo) from appartamenti, pagamenti where appartamenti.id=pagamenti.appartamento group by appartamenti.id, interno

43 Operazioni create view bilancio(condominio, scala, interno, crediti, debiti,saldo_precedente,nuovo_saldo) as select condominio.nome, scala.codice, appartamenti.interno, pagamenti.tot, spese.tot, appartamenti.saldo, appartamenti.saldo + pagamenti.tot - spese.tot from condomini, scale, appartamenti, tot_spese_appartamento as spese, tot_pag_appartamento as pagamenti where appartamenti.scala=scale.id and scale.condominio=condomini.id and spese.id=appartamenti.id and pagamenti.id=appartamenti.id order by condomini.nome, scale.codice, appartamenti.interno


Scaricare ppt "Memento zChi seguirà il modulo di e-learning? zCD di installazione del SW."

Presentazioni simili


Annunci Google