Schema Del DB Operazionale TELEFONATE

Documenti analoghi
Esercizio con attributo cross-dimensionale - transazionale

Biglietti e Ritardi: schema E/R

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

! Un arco multiplo corrisponde ad un associazione molti-a-molti: il padre (libro) non determina funzionalmente il figlio (autore)

ESEMPIO: RITARDI & BIGLIETTI

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Caratteristiche dei linguaggi per Database

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Viene richiesto di MIN CARD(S,E) = 1 UPDATE DELETE MAX CARD(S,E) = 3 INSERT UPDATE

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Linguaggio SQL seconda parte

Basi di Dati. S Q L Lezione 4

PROVA SCRITTA DI TECNOLOGIA DATABASE 02/12/2004 Corso di Laurea Specialistica in Ingegneria Informatica - NOD PROF.

Esempio di database relazionale con l utilizzo del prodotto MySQL

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Esempi SQL con Access. Orazio Battaglia

Prova del 14/09/09. Considerare la seguente descrizione di un campeggio:

BASI DATI: algebra relazionale

Analysis Service. Dutto Riccardo IPSI - tel Dutto Riccardo - SQL Server 2008.

Basi di Dati: Corso di laboratorio

Concettuale. Giuseppe Amato

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

DATABASE PER IL WEB. Programmazione Web 1

Basi di Dati: Corso di laboratorio

Il BACKUP è disponibile in

Basi di Dati Corso di Laura in Informatica Umanistica

Biglietti: schema E/R. Biglietti: albero degli attributi

Interrogare una base di dati: Algebra relazionale e SQL. Alessandro Bardine Alessandro Ciaramella Vincenzo Galella Rudy Manganelli

SQL terza parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2010/11

Basi di dati I 19 settembre 2016 Tempo a disposizione: un ora e 45 minuti.

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005

Interrogazioni nidificate

Data warehouse in Oracle

<Nome Tabella>.<attributo>

1. DML RICORDIAMO. Contenuti: 2.1. Le principali operazioni su relazioni utilizzate nel DML

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

APPUNTI DELLA LEZIONE DI DATABASE DEL 26/10/2016 Studenti: Marco D'Amato, Adriano Luigi Piscopello Professore: Mario Bochicchio

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

Il linguaggio SQL: le viste

Elena Baralis 2007 Politecnico di Torino 1

SQL Avanzato. Interrogazioni e il valore NULL. Interrogazioni complesse, trigger, viste e modifiche dello schema. Giorgio Giacinto 2015

Cognome Nome Matricola Ordin.

DATABASE CLIENTIRAPPRESENTANTI

STUDIO. Esercizi proposti a lezione cap. 3 rev. dic da Ulmann, Widom Introduzione ai database. indirizzo. titolo. nome. recitain. attori.

Pag Politecnico di Torino 1

Data warehousing con SQL Server

Algebra Relazionale. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Basi di dati I 27 gennaio 2016 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi.

Esame di Basi di Dati, SOLUZIONE APPELLO 09/06/2009

Esercitazione seconda prova Esame di Stato Prova di Informatica Gestionale ITC Programmatori e Mercurio. Note introduttive

SCHEMA ER. Tutti i dati del carrello acquisti sono memorizzati nel database e quindi può essere costruito con più query.

Basi di Dati Corso di Laura in Informatica Umanistica

SQL/OLAP. Estensioni OLAP in SQL

Viste materializzate in Oracle e SQL esteso. Sistemi di gestione di basi di dati. Tania Cerquitelli e Paolo Garza 1.

Interrogazioni nidificate

D B M G. Linguaggio SQL: fondamenti. Istruzione SELECT: fondamenti. Elena Baralis 2007 Politecnico di Torino 1. Struttura di base

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Informatica. Dipartimento di Economia. Ing. Cristiano Gregnanin. 20 ottobre Corso di laurea in Economia

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

ESERCIZI SQL. Esercizio 1

SOLUZIONE AL TEMA DI INFORMATICA (PROGETTO ABACUS)

LO SVOLGIMENTO DEL TEMA DI INFORMATICA

APPUNTI LEZIONE 22 OTTOBRE 2015 Diagramma relazionale del DB /sitoweb/adventureworkslt_sia.

Il linguaggio SQL: query innestate

(Lezione SQL 2) Barbara Di Camillo Dipartimento di Ingegneria dell Informazione. Università degli Studi di Padova

L ALGEBRA RELAZIONALE (2) Lezione del 28/10/2008 Prof. Mario Bochicchio

Laboratorio di Basi di Dati

Data Base and Data Mining Group of Politecnico di Torino. Progetto di un data warehouse BOZZA di Soluzione. Ditta trasporti. anno trimestre mese

Basi di Dati. S Q L Lezione 2

Esercitazione: Interrogazioni SQL

Basi di dati attive. Una base di dati è ATTIVA quando consente la definizione e la gestione di regole di produzione (regole attive o trigger).

Eprogram ITIS V anno Unità 4 - Il linguaggio SQL

Progettazione logica

Microsoft Access (parte 5) Query. Query. Query. Query. Creare una query

Laboratorio di Basi di Dati prova totale 20 febbraio 2013

SQL - Sottointerrogazioni

SISTEMI OPERATIVI, RETI, INTERNET

MICROSOFT EXCEL / OPENOFFICE CALC LE FORMULE CONDIZIONALI

Basi di Dati: Corso di laboratorio

ALGEBRA RELAZIONALE. L algebra relazionale

SQL: DDL, VI, Aggiornamenti e Viste

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

B a s i d i D a t i ( M o d u l o T e o r i a ) P r o v a s c r i t t a

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 28 Giugno 05 Nome: Cognome: Matricola: Esercizio 1

ACCESS Esercitazione (query complesse) Ing. Cosimo Orlacchio

Basi di dati: appello 28/02/06

Impresa di raccolta e riciclaggio di materiali metallici e di rifiuti.

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

Rappresentazione dell Informazione

La progettazione di un database non ha un unica soluzione. Quella proposta può essere quindi variata in base all esperienza del programmatore.

Relazioni e tabelle. Introduzione alle Basi di Dati Relazionali. Relazioni uno a uno. Esempio

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Misure. Definizione delle misure

User Tools: DataBase Manager

TUTORIAL IMPORTAZIONE DATI DA FOGLIO EXCELL WINKHOUSE

Le query di comando e di servizio in Access

Basi di Dati. Basi di Dati

Interrogazioni con ANY e ALL. Operatori ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL. Interrogazioni con ANY e ALL

Trigger. Basi di dati attive. Trigger: regole che specificano azioni attivate automaticamente dal DBMS al verificarsi di determinati eventi

Transcript:

Schema Del DB Operazionale TELEFONATE Costruire lo Schema di Fatto per analizzare le chiamate considerando come dimensioni TelefonoDA e TelefonoA, Data e Fascia, intesa come FasciaOraria della chiamata e calcolata in base a Ora sulla base della seguente codifica: Fascia = CASE WHEN Ora BETWEEN 0 AND 6 THEN 'Notte' WHEN Ora BETWEEN 7 AND 13 THEN 'Mattina' WHEN Ora BETWEEN 14 AND 20 THEN 'Pomeriggio' WHEN Ora BETWEEN 21 AND 23 THEN 'Sera' Considerare come misure il Costo, la Durata, il Numero (di chiamate effettuate) e la MediaOraria (ovvero il numero medio di telefonate fatte in un ora). Progettazione concettuale Fatto CHIAMATA Key = { Data, Ora, Minuto, DaPrefisso, APrefisso} Albero degli attributi: Riportiamo l albero degli attributi così come ottenuto automaticamente dallo strumento case WAND.

Osservazioni: 1) Il nome della radice viene sintetizzato con il nome del fatto (CHIAMATA) invece di esplicitare tutta la relativa key: Data + Ora + Minuto + DaPrefisso + APrefisso 2) L aspetto più importante sono i due nodi a. DaPrefisso + DaNumero b. APrefisso + ANumero Che derivano dalle due foreign key presenti in chiamata e riferite a telefono: essendo la chiave di telefono composta da Prefisso e Numero, il relativo nodo è identificato da questi due attributi. Dopo aver eliminato i nodi che non vogliamo prendere in considerazione durante l analisi (il numero di telefono e il minuto della chiamata) si ottiene il seguente schema di fatto:

Osservazioni: 1) Un attributo dimensionale deve essere semplice, ovvero non può essere composto da due o più campi, quindi al nodo DaPrefisso + DaNumero facciamo corrispondere un attributo dimensionale DaTelefono : I valori di tale attributo dimensionale si otterranno come combinazione (ad esempio, come concatenazione) dei valori dei due singoli attributi DaPrefisso e DaNumero; stessa cosa per il nodo APrefisso + ANumero che corrisponderà all attributo dimensionale ATelefono 2) Le due dimensioni DaTelefono e ATelefono possono essere rappresentate tramite la gerarchia condivisa Telefono Dimensioni : { Data, FasciaOraria, DaTelefono, ATelefono } Le dimensioni non contengono la chiave del Fatto CHIAMATA quindi lo schema è temporale: le misure indicate devono essere ottenute con una funzione di aggregazione Glossario delle misure: Costo Durata Numero = SUM(Chiamata.Costo) = SUM(Chiamata.Durata) = COUNT(*) MediaOraria = AVG ( <NumeroChiamatePerOgniOra>), dove <NumeroChiamatePerOgniOra> riporta per ogni ora il relativo numero di chiamate, ovvero si ottiene raggruppando su ora ed effettuando un conteggio. Per esempio, con

devo ottenere (rispetto a Data e FAsciaOraria) Questo esempio mette in evidenza che in uno schema temporale l espressione che definisce una misura può essere anche complesso. Le misure devono essere calcolate considerando il raggruppamento sulle dimensioni. Ricaviamo le dimensioni calcolate, ovvero ottenute tramite elaborazione da attributi dello schema relazionale 1) L attributo dimensionale Fascia verrà calcolata sulla base della codifica introdotta 2) L attributo dimensionale Telefono varrrà calcolato come concatenazione di Prefisso + Numero Per ognuna delle dimensioni calcolate verrà definite una vista che riporta la dimensione calcolata e gli attributi usati nella sua definizione: create view Fascia(Ora, Fascia) as select DISTINCT Ora, Fascia = CASE WHEN Ora BETWEEN 0 AND 6 THEN 'Notte' WHEN Ora BETWEEN 7 AND 13 THEN 'Mattina' WHEN Ora BETWEEN 14 AND 20 THEN 'Pomeriggio' WHEN Ora BETWEEN 21 AND 23 THEN 'Sera' END From CHIAMATA create view NumeroIntero(Prefisso,Numero,NumeroIntero)

as select Prefisso,Numero CAST ( Prefisso AS VARCHAR ) + CAST( Numero AS VARCHAR ) AS NumeroIntero From TELEFONO Note: 1) Queste viste sono create nello stesso DB operazionale; siccome c e già una tabella Telefono non posso avere una vista chiamata Telefono si usa NumeroIntero 2) L operazione di casting CAST ( Prefisso AS VARCHAR ) serve per convertire il Prefisso che è un intero in una stringa in modo da poterlo combinare tramite l operatore + di concatenazione di stringhe Come verranno usate queste viste? Se serve la fascia oraria relativa ad un ora, farò il join tra la trabella T che contiene l ora e la vista Fascia, join su T.ora=Fascia.Ora! Ad esempio, per calcolare Costo = SUM(Chiamata.Costo) rispetto alla fascia oraria: Mentre per calcolare Costo = SUM(Chiamata.Costo) rispetto al telefono chiamante devo inserire anche la vista NumeroIntero:

A questo punto possiamo esplicitare il calcolo delle misure considerando il raggruppamento sulle dimensioni. Dimensioni : { Data, FasciaOraria, DaTelefono, ATelefono } Data DaTelefono ATelefono FasciaOraria dalla tabella CHIAMATA dalla tabella CHIAMATA + join con la view NumeroIntero dalla tabella CHIAMATA + join con la view NumeroIntero dalla tabella CHIAMATA + join con la view Fascia Il join tra queste viste deve essere fatto sulla base delle FK definite nello schema operazionale, ovvero sulla base degli attributi Prefisso,Numero Importante: DaTelefono e ATelefono sono due valori indipendenti e quindi per selezionare devo inserire due volte la view NumeroIntero; in altre parole ho due FK, devo inserire due volte la view NumeroIntero Ultima cosa è definire il calcolo della misura MediaOraria = AVG ( <NumeroChiamatePerOgniOra>), dove <NumeroChiamatePerOgniOra> riporta per ogni ora il relativo numero di chiamate, ovvero si ottiene raggruppando su ora ed effettuando un conteggio.

In altre parole <NumeroChiamatePerOgniOra> si ottiene dalla seguente interrogazione (vista): e quindi la MediaOraria si otterrà come AVG (NChiamate Ora.Numero). Ad esempio per valutare questo valore rispetto alla Fascia Oraria

La media è calcolata considerando Numero come intero: per avere anche i valori decimali devo fare un casting di tale attributo ad un tipo real (quale DECIMAL) : Facciamo lo stesso calcolo considerando Data e Ora

e quindi facciamo il join con FASCIA per calcolare la MediaOraria (per valutare il risultato si seleziona una data specifica )

In questo esempio è stato illustrato l uso delle viste per un calcolo complesso: dovendo calcolare la media di un conteggio e non potendolo fare direttamente in SQL perché le funzioni aggregate non possono essere innestate, si usa una vista intermedia per calcolare il conteggio e quindi si applica la media sui valori di tale vista. In realtà in questo caso specifico si può anche calcolare la MediaOraria come segue, senza ricorrere alla vista intermedia:

e per evitare il solito problema della divisione tra interi:

Progettazione Logica (Star Schema)

GENERAZIONE DI TUPLE Uso del tool:

La data contiene anche il time : In effetti potevamo non riempire Ora e Minuto e ottenerlo dalla Data, tramite la funzione DATEPART update Chiamata set Ora = DATEPART ( hour, data ) update Chiamata set Minuto = DATEPART ( minute, data ) Verifichiamo:

La data contiene anche il time : come ottenere in Data solo la data (ovvero con un time =00: )? Questo è fondamentale altrimenti i due valori la stessa data (2004-05-27) con time diverso e considerato differente come si può verificare dalla query: Dal manuale si individua la funzione CONVERT. update chiamata set data=convert(varchar,data,105) verifichiamo

anche con : update Chiamata set DaPrefisso = (select Prefisso from NumeroIntero where NumeroIntero.NumeroIntero=Chiamata.DaTel) update Chiamata set DaNumero = (select Numero from NumeroIntero where NumeroIntero.NumeroIntero=Chiamata.DaTel)

update Chiamata set APrefisso = (select Prefisso from NumeroIntero where NumeroIntero.NumeroIntero=Chiamata.ATel) update Chiamata set ANumero = (select Numero from NumeroIntero where NumeroIntero.NumeroIntero=Chiamata.ATel) Verifichiamo Orale le due colonne temporanee si possono eliminare