Sistemi Informativi Avanzati Anno Accademico 2011/2012 Prof. Domenico Beneventano

Documenti analoghi
Sistemi Informativi Avanzati Anno Accademico 2011/2012 Prof. Domenico Beneventano SQL-OLAP. Estensioni OLAP in SQL

Definizione e calcolo delle misure

Esercizio con attributo cross-dimensionale - transazionale

Estensioni del linguaggio SQL per interrogazioni OLAP

ESEMPIO DI PROVA PRATICA

Sistemi Informativi Avanzati Anno Accademico 2013/2014 Prof. Domenico Beneventano. Archi multipli

Sistemi Informativi Avanzati Anno Accademico 2012/2013 Prof. Domenico Beneventano. Archi multipli

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

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

ESEMPIO DI COPERTURA DI ARCHI OPZIONALI

Misure. Definizione delle misure

Misure. Definizione delle misure. Sistemi Informativi Avanzati Anno Accademico 2015/2016 Prof. Domenico Beneventano. Glossario delle Misure

ESEMPIO TELEFONATE. Esempio di progettazione con indicazioni per lo svolgimento della Tesina. DIAGRAMMA RELAZIONALE

Fatto Esame : Sintesi per la prima consegna

Schema Del DB Operazionale TELEFONATE

Il BACKUP è disponibile in

SCHEMA RELAZIONALE 1

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

ESEMPIO: RITARDI & BIGLIETTI

Lezione 7 SQL (II) Basi di dati bis Docente Mauro Minenna Pag.1

σ data 15/12/2013 data 20/12/2014

Le variabili logiche possono essere combinate per mezzo di operatori detti connettivi logici. I principali sono:

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

Algebra di Boole. Andrea Passerini Informatica. Algebra di Boole

Structured Query Language

QL (Query Language) Alice Pavarani

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

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

BASE DI DATI. Esercizio: Campionato corse Progettazione concettuale Progettazione logica. Informatica Umanistica Università di Pisa

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 1 OTTOBRE 2015 Tempo: 2h30m

Basi di dati I 6 settembre 2018 Tempo a disposizione: un ora e 45 minuti.

Estensioni del linguaggio SQL per interrogazioni OLAP

Prova Scritta di Basi di Dati

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 6 MARZO 2015 Tempo: 2h30m

ESEMPIO DI TRIGGER PER IL CONTROLLO DELLE PROPRIETÀ COPERTURA DI UNA GERARCHIA (ARGOMENTO SVOLTO IN CLASSE IL 25 MAGGIO 2011)

Basi di Dati: Elementi

Prova Scritta di Basi di Dati

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Esempio di progettazione di un DW

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

Esercitazione 7 Correzione della prova di autovalutazione

Basi di dati I 10 luglio 2017 Tempo a disposizione: un ora e 30 minuti.

Esercizio: Esame. In questo esercizio sono dettagliati tutti i passi richiesti per la prima consegna della tesina

ESERCIZI IN LOGO & COMPITI SCRITTI ANNO ACCADEMICO 2002/2003 PROF. DOMENICO BENEVENTANO. L esame consiste in una prova scritta formata da due parti:

Corso di Informatica - prova scritta del 28/01/2008

Basi di Dati: Corso di laboratorio

Basi di Dati. Concetti Avanzati

Basi di dati I Prova di autovalutazione 1 novembre 2016 Soluzioni

Dalla tabella alla funzione canonica

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

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

Prova Scritta di Basi di Dati

SQL - Sottointerrogazioni correlate

Sistemi Informativi Avanzati

D B M G D B M G 2. Sistemi informativi. Linguaggio SQL: costrutti avanzati

Interrogazioni complesse. SQL avanzato 1

Data warehouse Analisi dei dati

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

Esercitazione 4: Trigger in DB2

Database Lezione 2. Sommario. - Progettazione di un database - Join - Valore NULL - Operatori aggregati

INTRODUZIONE AI DBMS. Inoltre i fogli elettronici. Mentre sono poco adatti per operazioni di. Prof. Alberto Postiglione

INTRODUZIONE AI DBMS

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

INTRODUZIONE AL 2 TEST IN ITINERE. a.a

IL LINGUAGGIO SQL LE BASI

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

VISTE. 19/11/2015 Concetti Avanzati - SQL 71

Il Dimensional Fact Model

Prova Scritta di Basi di Dati

Basi di dati I 28 gennaio 2014 Compito A Tempo a disposizione: un ora e quarantacinque minuti.

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

Prova Scritta di Basi di Dati

Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Basi di Dati. SOLUZIONE della Prova Scritta del 12 Gennaio 2007

Esercitazioni Informatica A. M. M. Bersani

Basi di Dati Corso di Laura in Informatica Umanistica

Basi di Dati. Esercitazione SQL. 17 novembre 2011

formulare in SQL una interrogazione per ciascuno dei seguenti punti:

Basi di dati I 8 luglio 2016 Esame Compito A Tempo a disposizione: un ora e trenta minuti.

Architetture per l analisi dei dati

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

Primo Compitino di Basi di Dati

Basi di Dati: Corso di laboratorio

Misure (parte II) Gerarchie Incomplete

Compito Basi di Dati. Tempo concesso : 90 minuti 21 Gennaio 05 Nome: Cognome: Matricola: Esercizio 1

ATTRIBUTO o ASSOCIAZIONE?

Prova Scritta di Basi di Dati

Basi di dati. Gabriella Trucco

PROGRAMMAZIONE ANNO SCOLASTICO 2018/2019

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Data warehouse Analisi dei dati

Data warehouse: analisi dei dati

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola:

d. Cancellazione del valore 5 e. Inserimento del valore 1

Esercitazione Simulazione Compito

8 SQL : Check, Asserzioni,Viste

Riconoscere e formalizzare le dipendenze funzionali

Prova Scritta di Basi di Dati

Transcript:

Sistemi Informativi Avanzati Anno Accademico 2011/2012 Prof. Domenico Beneventano ESERCITAZIONI DEL 20 e 27 APRILE 2012 Sommario 1.1 VENDITA Dimensioni = { PROD, DATA,CASSA,COM }... 2 1.2 Esercizio A (20 Aprile 2012) : SCHEMA5: NS DATA, {PROD,DATA} CASSA... 5 1.2.1 Specifica dei pattern in SQL OLAP... 5 1.2.2 Cubo OLAP: Specifica dei pattern per dimensioni degeneri... 6 1.3 Aggregabilità in presenza di Dipendenze Funzionali tra le dimensioni... 7 1.3.1 Nota sulle Dipendenze Funzionali... 8 1.3.2 Soluzione... 9 1.4 Esercizio B (27 Aprile 2012)... 11 1.5 Cubo OLAP : specifica dei pattern... 12 1.6 Esercizio C : confronto FD tra dimensioni e attributi cross dimensionali... 14 1

1.1 VENDITA Dimensioni = { PROD, DATA,CASSA,COM } Si considerano 6 differenti DBO, cioè 6 DBO con differente schema. Per confrontarli si effettua uno schema di Fatto che ha SEMPRE le stesse dimensioni : { PROD, DATA,CASSA,COM} In questo modo si potrà in particolare discutere l effetto delle FD tra le dimensioni: infatti, i differenti schemi comportano differenti FD sulle dimensioni. MISURE: NUMEROVENDITE = COUNT(*) NUMEROCLIENTI = COUNT(DISTINCT NS), dove NS è il NumeroScontrino Di ogni DBO si considera il suo schema E/R ed il corrispondente schema relazionale SCHEMA1 VENDITA(NV,PROD,CASSA, COMM,NS,DATA) SCHEMA2 : NS DATA VENDITA(NV,PROD,CASSA, COMM, NS:SCONTRINO) SCONTRINO(NS,DATA) SCHEMA3 : NS DATA, NS CASSA VENDITA(NV,PROD, COMM, NS:SCONTRINO) SCONTRINO(NS,DATA,CASSA) SCHEMA4: NS DATA, PROD CASSA VENDITA(NV,PROD:PRODOTTO COMM, NS:SCONTRINO) SCONTRINO(NS,DATA) PRODOTTO(PROD, CASSA) SCHEMA5: NS DATA, {PROD,DATA} CASSA 2

VENDITA(NV,PROD:PRODOTTO COMM, NS:SCONTRINO) SCONTRINO(NS,DATA:DATA) DATA(DATA) PRODOTTO(PROD) ALLACASSA(PROD:PRODOTTO, DATA:DATA, CASSA) SCHEMA6: NS DATA, {PROD,DATA} CASSA, CASSA COMM Si toglie COMM da VENDITA e si reifica ALLACASSA: VENDITA(NV,PROD:PRODOTTO NS:SCONTRINO) SCONTRINO(NS,DATA:DATA) DATA(DATA) PRODOTTO(PROD) ALLACASSA(PROD:PRODOTTO, DATA:DATA, CASSA:CASSA) CASSA(CASSA, COMM) NUMEROCLIENTI = COUNT(DISTINCT NS), dove NS è il NumeroScontrino La presenza della FD: NS DATA comporta che 1) NUMEROCLIENTI è aggregabile rispetto a DATA 2) NUMEROCLIENTI non è aggregabile rispetto alle altre dimensioni Nel seguito si vuole discutere come le FD tra le dimensioni influenzino l aggregabilità della misura NUMEROCLIENTI. 3

Nota. Nella specifica del compito scritto: Consideriamo un DBO con il seguente schema E/R ed il corrispondente schema relazionale (nello schema relazionale ci possono essere vincoli di integrità aggiuntivi) Questo significa che viene dato lo schema E/R ma per non complicarlo molto, alcune cose particolari vengono aggiunte solo nello schema relazionale, cioè vengono considerate come aggiunte allo schema relazionale: queste aggiunte riguardano chiavi, FD sia elencate esplicitamente che date attraverso l aggiunta di tabelle Ad esempio nel compito scritto, invece di riportare lo schema E/R dello SCHEMA6 che risulta complicato a causa della reificazione introdotta per esprimere la FD: CASSA COMM, viene dato il seguente schema E/R più semplice senza la FD: CASSA COMM e tale FD viene aggiunta allo schema relazionale (ricordiamo che la FD è un vincolo di integrità) VENDITA(NV,PROD:PRODOTTO NS:SCONTRINO) SCONTRINO(NS,DATA:DATA) DATA(DATA) PRODOTTO(PROD) ALLACASSA(PROD:PRODOTTO, DATA:DATA, CASSA,COMM) FD: CASSA COMM Si noti che ALLACASSA(PROD:PRODOTTO, DATA:DATA, CASSA,COMM) FD: CASSA COMM È equivalente a ALLACASSA(PROD:PRODOTTO,DATA:DATA, CASSA:CASSA) CASSA(CASSA, COMM) Estremizzando il discorso: per specificare lo SCHEMA5 si può considerare uno schema costituito dalla sola entità VENDITA (quindi il relazionale costituito da una sola relazione VENDITA) ed aggiungere nel relazionale le due FD: VENDITA(NV,PROD,CASSA, COMM,NS,DATA) {PROD,DATA} CASSA NS DATA Questo può essere utile per creare i dati di prova del DBO (come abbiamo fatto ad esempio in http://www.dbgroup.unimo.it/sia/20aprile2012.sql) In questo caso lo schema E/R e del tutto incompleto in quanto non contiene, non esprime praticamente niente. Normalmente nel compito si cerca di dare uno schema E/R il più completo possibile, lasciando fuori due tipologie di FD 1) Quelle più semplici, classico esempio DATA MESE, MESE ANNO 2) Quelle più complicate, quali CASSA COMM nello schema precedente 4

1.2 Esercizio A (20 Aprile 2012) : SCHEMA5: NS DATA, {PROD,DATA} CASSA La presenza della FD: NS DATA comporta che 1) NUMEROCLIENTI è aggregabile rispetto a DATA 2) NUMEROCLIENTI non è aggregabile rispetto alle altre dimensioni Quindi NUMCLIENTI è calcolabile per i pattern che contengono { PROD, CASSA,COMM } P0= {PROD, CASSA,COMM,DATA} P1= {PROD, CASSA,COMM } A questi pattern verranno aggiunti quelli equivalenti grazie alla FD tra le dimensioni. Il risultato finale sarà che NUMCLIENTI è calcolabile per tutti i pattern che contengono {PROD,COM}. Prendendo in considerazione le FD tra le dimensioni, cioè la sola FD2: {PROD,DATA} CASSA e per ciascuno dei due pattern P0 e P1 si controlla se grazie a tali FD si possono ricavare dei pattern equivalenti e quindi tali per cui NUMCLIENTI sia calcolabile anche per tali pattern. Per FD2: {PROD,DATA} CASSA il primo pattern P0 è equivalente a P2= {PROD, COMM,DATA}. Quindi NUMCLIENTI è calcolabile per i pattern P0= {PROD, CASSA,COMM,DATA} P1= {PROD, CASSA,COMM } P2= {PROD, COMM,DATA} Individuati l insieme di pattern P per i quali NUMCLIENTI è calcolabile, si vuole ora scrivere una espressione per individuare P sia in SQL OLAP che nel cubo OLAP: in questo modo sarà possibile visualizzare NUMCLIENTI solo per i pattern in P (oppure visualizzarlo in modo diverso per i restanti pattern: segno, indicazione * oppure un colore diverso) 1.2.1 Specifica dei pattern in SQL OLAP Ricordiamo che in SQL OLAP, dato un pattern P = {A1,., An}, un suo sub pattern P1={A1,, Ak}, con k <= n è individuato dalla condizione C_P1: G(A1)=0 AND G(Ak)=0 AND G(Ak+1)=1 AND G(An)=1 Dove G =GROUPING. Per individuare un insiemi di pattern, si deve effettuare la somma logica (l OR) delle condizioni. Quindi per individuare l insieme di pattern per i quali NUMCLIENTI è calcolabile P0={PROD, CASSA,COMM,DATA} P1={PROD, CASSA,COMM} P2= {PROD, COMM,DATA} Si dovrà scrivere in SQL OLAP G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 0 G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 1 G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 OR OR Anche se non necessario, l espressione si può semplificare tramite i teoremi dell Algebra Booleana o con le mappe di Karnaugh (http://it.wikipedia.org/wiki/mappa_di_karnaugh). Ad esempio G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 0 G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 1 OR è equivalente a G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 e quindi la precedente espressione si può semplificare in G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 5

La semplificazione non è necessaria, ha il solo scopo di ridurre il codice SQL da scrivere SELECT COM, PROD,CASSA,DATA, NUMCLIENTI = CASE WHEN ( G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 ) THEN SUM(NC) ELSE 99999 END, NVENDITE=SUM(NVENDITE) FROM FACT_TABLE GROUP BY PROD,CASSA,DATA,COM WITH CUBE Oppure, per realizzare solo l insieme di pattern per i quali NUMCLIENTI è calcolabile SELECT COM, PROD,CASSA,DATA, NUMCLIENTI = SUM(NC), NVENDITE=SUM(NVENDITE) FROM FACT_TABLE GROUP BY PROD,CASSA,DATA,COM WITH CUBE HAVING ( G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0) Ricordiamo che lo scopo delle interrogazioni SQL OLAP, oltre a quello di effettuare alcune analisi direttamente in SQL, cioè senza usare uno specifico sistema OLAP, è anche quello di verificare i risultati: ad esempio, nel nostro caso grazie alla precedente interrogazione possiamo verificare se il calcolo della misura NUMCLIENTI è corretta (effettuando un confronto con i risultati ottenuti nel DBO). Inoltre le interrogazioni SQL OLAP servono anche per verificare il passo successivo di realizzazione ed alimentazione del Cubo OLAP. 1.2.2 Cubo OLAP: Specifica dei pattern per dimensioni degeneri Per scrivere i pattern in Analysis Service si deve riscrivere G(A)=0 e G(A)=1 in termini di condizioni sui membri dei livelli in cui è mappato l attributo A. Nel nostro esempio, vogliamo riscrivere G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 Nel caso più semplice in cui A corrisponde all unico livello della dimensione D (ovvero nel caso in cui la dimensione sia degenere) e la dimensione D ha il livello speciale (ALL) allora G(A)=0 equivale a D.CURRENTMEMBER.LEVEL.ORDINAL <> 0 G(A)=1 equivale a D.CURRENTMEMBER.LEVEL.ORDINAL = 0 Si noti che senza il livello speciale (ALL) G(A)=1 non può essere ottenuto e quindi non si riesce ad ottenere il totale per quella Dimensione. Quindi per scrivere : G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 Si deve tradurre ciascun pattern e poi mettere in OR le espressioni ottenute PROD.CURRENTMEMBER.LEVEL.ORDINAL <> 0 AND CASSA.CURRENTMEMBER.LEVEL.ORDINAL <> 0 AND COMM.CURRENTMEMBER.LEVEL.ORDINAL <> 0 OR PROD.CURRENTMEMBER.LEVEL.ORDINAL <> 0 AND CASSA.CURRENTMEMBER.LEVEL.ORDINAL = 0 AND COMM.CURRENTMEMBER.LEVEL.ORDINAL <> 0 AND DATA.CURRENTMEMBER.LEVEL.ORDINAL <> 0 6

1.3 Aggregabilità in presenza di Dipendenze Funzionali tra le dimensioni Nella sezione precedente è stato determinato che NUMCLIENTI è calcolabile per i pattern P0= {PROD, CASSA,COMM,DATA} P1= {PROD, CASSA,COMM } P2= {PROD, COMM,DATA} Ora, considerato che NUMCLIENTI è aggregabile rispetto a DATA, verifichiamo se togliendo DATA da P2= {PROD, COMM,DATA} NUMCLIENTI è ancora calcolabile? La risposta è positiva quindi NUMCLIENTI è calcolabile anche per P3= {PROD, COMM } In definitiva NUMCLIENTI è calcolabile per i pattern P0= {PROD, CASSA,COMM,DATA} P1= {PROD, CASSA,COMM } P2= {PROD, COMM,DATA} P3= {PROD, COMM } Espressione SQL OLAP: G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 0 OR G(PROD)=0 AND G(CASSA)=0 AND G(COMM)=0 AND G(DATA) = 1 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 0 OR G(PROD)=0 AND G(CASSA)=1 AND G(COMM)=0 AND G(DATA) = 1 Semplificando questa espressione si ottiene G(PROD)=0 AND G(COMM)=0. In definitiva NUMCLIENTI è calcolabile per tutti i pattern che contengono PROD e COMM, cioè che contengono {PROD,COM}. Riassumendo: la FD: NS DATA comporta che NUMCLIENTI è calcolabile per i pattern che contengono { PROD, CASSA,COMM }. Questo insieme si può estendere considerando la FD tra le dimensioni FD2: {PROD,DATA} CASSA concludendo che NUMCLIENTI è calcolabile per tutti i pattern che contengono {PROD,COM}. E' possibile calcolare questo risultato con un altro procedimento, che generalmente risulta più semplice : il procedimento è quello di semplificare prima P0 sulla base delle FD tra le dimensioni e quindi considerare le non aggregabilità; In presenza di FD tra le dimensioni, per calcolare l insieme dei pattern per i quali NUMCLIENTI è calcolabile si procede come segue: 1) Si considera l insieme delle dimensioni, cioè il pattern primario P0= {PROD, CASSA,COMM,DATA} 2) Si semplifica P0 considerando le FD tra le dimensioni, nell esempio FD2:{PROD,DATA} CASSA P0_key= {PROD, CASSA,COMM,DATA} Per semplificazione si intende l eliminazione di una dimensione Di tale che esista una FD tra le dimensioni X Di. Con queste eliminazioni si individua tra tutti i pattern equivalenti a P0 quello più piccolo ; tale insieme viene indicato con P0_key. 3) Si considera P0_key ; dato che NUMCLIENTI è non aggregabile rispetto a PROD, CASSA e COMM allora è calcolabile per tutti i pattern di P0_key che contengono PROD, CASSA e COMM. In termini più generali, data una misura M sia M_NA = { D1,, Dk } l insieme delle dimensioni per le quali M è non aggregabile; allora M può essere calcolato per ogni sottoinsieme che contiene M_NA P0_key Nel nostro esempio NUMEROCLIENTI_NA = {PROD, CASSA,COMM } e quindi l intersezione risulta {PROD, COMM }: Si ottiene quindi lo stesso risultato visto in precedenza. 7

Questo discorso può essere generalizzato: si può verificare che una qualsiasi misura è sempre aggregabile rispetto ad una dimensione in P0 ma non in P0_key (nel nostro esempio rispetto a CASSA) e pertanto il controllo delle non aggregabilità può essere effettuato rispetto a P0_key. In definitiva il procedimento che seguiremo è così schematizzabile: 1) Si considera l insieme delle dimensioni, cioè il pattern primario P0 = {D1,, Dn }. 2) Si semplifica P0 considerando le FD tra le dimensioni. Per semplificazione si intende l eliminazione di una Di tale che esista una FD tra le dimensioni X Di. Con queste eliminazioni si individua tra tutti i pattern equivalenti a P0 quello più piccolo ; tale insieme viene indicato con P0_key. Algoritmo di semplificazione di P0 P0_key = P0; FOR i=1 to i=n, se esiste una FD : X Di, dove X P0, Di P0 togliere Di da P0_key : P0_key = P0_key { Di } 3) Si valutano le aggregabilità delle misure rispetto alle sole dimensioni in P0_key : misura M non aggregabile per M_NA = {D1,, Dk }, Di P0_key 4) allora M si può calcolare per i pattern di P0 che contengono M_NA = { D1,, Dk }. Tale insieme è caratterizzato da 1.3.1 Nota sulle Dipendenze Funzionali G(D1) = 0 AND AND G(Dk) = 0 Dato P0 = {D1,, Dn } se consideriamo P0 come una relazione P0(D1,, Dn) l operazione di semplificare P0 = {D1,, Dn } equivale a calcolare una chiave P0_key di P0: intuitivamente P0_key è tra tutti i pattern equivalenti a P0 quello più piccolo (ricordiamo il concetto di chiave: una chiave deve essere minimale pag 74 del libro di Sistemi Informativi) Si noti che P0_key Di, per ogni i. Il problema di individuare P0_key è quindi riconducibile al problema di trovare una chiave (e, più in generale, le chiavi) di una relazione, dato un insieme di FD. Il problema è discusso in Sezione 5.2. RAGIONAMENTO SULLE DIPENDENZE FUNZIONALI del libro di Sistemi Informativi dove è anche presentato un algoritmo generale per individuare le chiavi (Algoritmo KEY) Esempio: P0(A,B,C) con le seguenti tre FD: A B, B C, C A P0 ha tre chiavi : chiave1 = A, chiave2=b e chiave3=c In questo caso il nostro algoritmo di semplificazione di P0 dato in precedenza non funzionerebbe, in quanto restituirebbe P0_key vuoto! Questo è dovuto alla particolarità dell esempio: si ha un ciclo sulle FD, cioè partendo da A si arriva ad A. In definitiva, l algoritmo dato per la semplificazione di P0 funziona salvo casi particolari. 8

1.3.2 Soluzione Per i 6 differenti schemi dati in precedenza si riporta la discussione per le dipendenze funzionali tra le dimensioni e la misura NUMCLIENTI SCHEMA1 Non ci sono FD tra le dimensioni, quindi P0_key = P0 = {PROD, CASSA,COMM,DATA} Non ci sono FD del tipo NS Dimensione: NUMCLIENTI è non aggregabile rispetto a PROD, CASSA,COMM,DATA NUMCLIENTI è calcolabile per i pattern che contengono {PROD, CASSA,COMM,DATA} cioè solo per P0 = {PROD, CASSA,COMM,DATA} Tale insieme di pattern (che in questo caso è un unico pattern) è caratterizzato da G(PROD) = 0 AND G(CASSA) = 0 AND G(COMM) = 0 AND G(DATA) = 0 SCHEMA2 : NS DATA Non ci sono FD tra le dimensioni, quindi P0_key = P0 = {PROD, CASSA,COMM,DATA} Per la FD NS DATA: NUMCLIENTI è non aggregabile rispetto a PROD, CASSA,COMM NUMCLIENTI è calcolabile per i pattern che contengono {PROD, CASSA,COMM }. Tale insieme di pattern è caratterizzato da G(PROD) = 0 AND G(CASSA) = 0 AND G(COMM) = 0 SCHEMA3 : NS DATA, NS CASSA Non ci sono FD tra le dimensioni, quindi P0_key = P0 = {PROD, CASSA,COMM,DATA} Per le FD NS DATA e NS CASSA: NUMCLIENTI è non aggregabile rispetto a PROD, COMM NUMCLIENTI è calcolabile per i pattern che contengono {PROD, COMM }. Tale insieme di pattern è caratterizzato da G(PROD) = 0 AND G(COMM) = 0 9

SCHEMA4: NS DATA, PROD CASSA Per la FD PROD CASSA tra le dimensioni, P0_key ={PROD, COMM,DATA} Si noti che questo è lo SCHEMA2 con in più la FD PROD CASSA tra le dimensioni; le non aggregabilità vengono valutate direttamente con riferimento a P0_key Per la FD NS DATA: NUMCLIENTI è non aggregabile rispetto a PROD, COMM NUMCLIENTI è calcolabile per i pattern di P0_key che contengono {PROD, COMM }. Tale insieme di pattern è caratterizzato da: G(PROD) = 0 AND G(COMM) = 0 Nello schema di Fatto risultante verrà indicata per NUMCLIENTI la non aggregabilità rispetto a PROD, COMM. SCHEMA5: NS DATA, {PROD,DATA} CASSA Per la FD {PROD,DATA} CASSA tra le dimensioni, P0_key ={PROD, COMM,DATA} Si noti che questo è lo SCHEMA2 con in più la FD PROD CASSA tra le dimensioni; le non aggregabilità vengono valutate direttamente con riferimento a P0_key Per la FD NS DATA: NUMCLIENTI è non aggregabile rispetto a PROD, COMM NUMCLIENTI è calcolabile per i pattern di P0_key che contengono {PROD, COMM }. Tale insieme di pattern è caratterizzato da G(PROD) = 0 AND G(COMM) = 0 Nello schema di Fatto risultante verrà indicata per NUMCLIENTI la non aggregabilità rispetto a PROD, COMM. (vedere eserciziob ) SCHEMA6: NS DATA, {PROD,DATA} CASSA, CASSA COMM Per le FD {PROD,DATA} CASSA e CASSA COMM tra le dimensioni, P0_key ={PROD, DATA} Si noti che questo è lo SCHEMA2 con in più le due FD tra le dimensioni; le non aggregabilità vengono valutate direttamente con riferimento a P0_key Per la FD NS DATA: NUMCLIENTI è non aggregabile rispetto a PROD NUMCLIENTI è calcolabile per i pattern di P0_key che contengono {PROD }. Tale insieme di pattern è caratterizzato da G(PROD) = 0 Nello schema di Fatto risultante verrà indicata per NUMCLIENTI la non aggregabilità rispetto a PROD, COMM. (vedere esercizioc ) 10

1.4 Esercizio B (27 Aprile 2012) Si prende in esame lo SCHEMA5: NS DATA, {PROD,DATA} CASSA considerando il caso di una dimensione PRODOTTO non più degenere ma con una gerarchia associata; VENDITA( NV,PROD,CASSA, COMM,NS,DATA) {PROD,DATA} CASSA NS DATA PRODOTTO(PROD,TIPO:TIPO) TIPO(TIPO,CAT:CATEG,GRUPPO) CATEG(CAT,REP) E questo è appunto lo schema del DBO dato (http://www.dbgroup. unimo.it/sia/aprile272012.bak) Si noti che nello schema per laa tabella PRODOTTO ci sono erroneamente anche CAT,REP e GRUPPO; questo è un refuso della costruzione del DB: per costruire c dei dati di prova, si riporta prima una tabella PRODOTTO con tutti gli attributi che servono PRODOTTO(PROD,TIPO,CAT,GRUPPO, REP) Si riempie quindi PRODOTTO rispettando le FD E alla finee riporto tutto nelle tabelle TIPOO e CATEG, Ad esempio: insert into CATEG select DISTINCT CAT, REP R from PRODOTTO Schema di Fatto VENDITA: come discusso in precedenza per NUMCLIENTI viene indicataa la non aggregabilità rispetto a PROD, COMM. SnowFlake Schema FACT_TABLE(PRODOTTO:dtPRODOTTO, DATA,COMM, CASSA, NUMVENDITE, NUMCLIENTI) dtprodotto(prodotto,tipo:dttipo) dttipo(tipo,gruppo, CAT:dtCAT) dtcat(cat, REP) ) 11

1.5 Cubo OLAP : specifica dei pattern Nella precedente sezionee abbiamo visto come specificaree i pattern per p dimensioni degeneri. Nel caso generale occorre considerare che una dimensione del cubo ha più di d un livelloo e che per tradurre t una dimensione dello schema di fatto si usano più dimensioni del cubo: Nel nostro Cubo VENDITA si avranno quindi due dimensioni GRUPPO, con livelli GRUPPO, TIPO, PROD, indicando i livelli da quelloo superiore: GRUPPO (livello= =1), TIPO (livello=2) e PROD (livello=3) REP, con livelli REP (livello= 1), CAT, TIPO, PROD (livello=4) Ogni cella del cubo è individuata da un valore (membro secondo la terminologt gia AS) per ogni dimensione (sia le dimensioni classiche che la dimensione particolare Measures) : Ad esempio l ultima cella in basso a destra (con visualizzato il valore 25) è individuata come segue: Dimensione DATA: membro D5 (del livello DATA.DATA) Dimensione CASSA: membro ALL CASSA (del livello CASSA.( ALL)) Dimensione REP: membro ALL REP (del livello REP.(ALL)) Dimensione COMM: membro COM1 (del livello COMM.COM) Dimensione GRUPPO: membro P5 (del livello GRUPPO.Prod) Dimensione Measures: membro NumVendite (del livello Measures. MeasuresLevel) 12

Ogni membro ha una Key (per individuare il membro) e un Name (valore che viene visualizzato): nei nostri esempi non usando chiavi surrogate Key e Name coincidono. Per ogni cella del cubo la funzione DIMENSION N.CURRENTMEMBER restituisce il membro di DIMENSIONN corrispondente allaa cella corrente. Ad esempio, se GRUPPO.CURRENTMEMBER è il membro P7 (del livello GRUPPO.Prod) ), allora [GRUPPO].CurrentMember.name : è il nome del membro, ovvero cosa viene visualizzato [GRUPPO].CurrentMember.level: è il i livello ; per un livello si può ottenere il nome e la posizione: [GRUPPO].CurrentMember.level.name = PROD [GRUPPO].CurrentMember.level.ordinal =3 G(PROD)=0 equivale a GRUPPO.CURRENTMEMBER.LEVEL.ORDINAL = 3 REP.CURRENTMEMBER.LEVEL. ORDINAL = 4 OR La condizione GRUPPO.CURRENTMEMBER.LEVEL.ORDINAL = 3 si può scrivere attraverso la funzione booleana IsLeaf che applicata ad un membro è true se il membro è una foglia, false altrimenti, quindi IsLeaf(GRU UPPO. CURRENTMEMBER) equivale a GRUPPO.CURRENTMEMBER.LEVEL.ORDINALL = 3 G(PROD)=0 equivale quindi a IsLeaf(GRUPPO. CURRENTMEMBER) OR IsLeaf(REP. CURRENTMEMBER) G(PROD)=0 AND G(COMM)=0 equivale in definitiva a (IsLeaf(GRUPPO. CURRENTMEMBER) OR IsLeaf( (REP. CURRENTMEMBER) ) AND IsLeaf(COMM. CURRENTMEMBER) Questa espressione definisce quindii i pattern all interno del Cubo Olap O per i quali NUMCLIENTI è calcolabile, allora verrà usata per definire una nuova misura (membro calcolato) come Iif(( (IsLeaf(GRUPPO. CURRENTMEMBER) OR IsLeaf(REP. CURRENTMEMBER) ) AND IsLeaf(COMM. CURRENTMEMBER), [Measures].[Nc], 99999 ) 13

1.6 Esercizio C : confronto FD tra dimensioni e attributi cross dimensionali Si prende in esame lo SCHEMA6: NS DATA, {PROD,DATA}} CASSA, CASSA COMM C (considerando ancora la dimensione PRODOTTO con una gerarchiaa associata come nell ESERCIZIO B) e si confrontano due differenti soluzioni 1. Schema di Fatto Vendita con dimensioni {PROD,DATA, CASSA, COMM } 2. Schema di Fatto Vendita con dimensioni {PROD,DATA } e attributo cross dimensionale Riportiamo le specifiche: Consideriamo un DBO con il seguente schema E/R edd il corrispondente schema relazionale (nello schema relazionale ci possono essere vincoli di integrità aggiuntivi): VENDITA(NV,PROD: PRODOTTO NS:SCONTRINO) SCONTRINO(NS,DATA:DATA) DATA(DATA) PRODOTTO(PROD,TIPO:TIPO) ALLACASSA(PROD:PRODOTTO, DA ATA:DATA, CASSA,COMM) FD: CASSA COMM TIPO(TIPO,CAT:CATEG,GRUPPO) CATEG(CAT,REP) 1. Progetto Concettuale e Logico dello Schema di Fatto Vendita con dimensioni {PROD,DATA, CASSA, COMM } e misure NUMVENDITEE e NUMCLIENTI. 2. Progetto Concettuale e Logico dello Schema di Fatto Vendita con dimensioni {PROD,DATA, } e misure NUMVENDITE e NUMCLIENTI. 14