Basi Di Dati, 09/12/2003



Похожие документы
Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

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

Data management a.a Il linguaggio SQL

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

DBMS (Data Base Management System)

Corso di Sistemi di Elaborazione delle informazioni

Introduzione ai database relazionali

SQL/OLAP. Estensioni OLAP in SQL

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

Capitolo 13. Interrogare una base di dati

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Lezione V. Aula Multimediale - sabato 29/03/2008

Database 3 affitto veicoli. Testo del quesito

Operazioni sui database

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

SQL - Funzioni di gruppo

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

ESAME di INFORMATICA e ARCHIVIAZIONE

Sistemi per la gestione di database: MySQL ( )

Organizzazione degli archivi

Architettura MVC-2: i JavaBeans

Le query di raggruppamento

Esercitazione Simulazione Compito

Le query. Lezione 6 a cura di Maria Novella Mosciatti

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Volumi di riferimento

Prova scritta del corso di Basi di dati attive 17 Dicembre Agenzia

TEORIA sulle BASI DI DATI

Istruzioni DML di SQL

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Dispensa di database Access

Informatica per le discipline umanistiche 2 lezione 10

Le Basi di Dati. Le Basi di Dati

Prova Scritta di Basi di Dati

Basi di dati II prova intermedia 16 Marzo 2006 Compito 1

Esercizio data base "Biblioteca"

ALGEBRA RELAZIONALE RIEPILOGO

Basi di Dati. Conversione Modello ER in Modello Relazionale. K. Donno - Conversione Modello ER in Modello Relazionale

Organizzazione delle informazioni: Database

Esercizio sui data base "Gestione conti correnti"

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Progettazione di una base di dati Ufficio della Motorizzazione

Database 1 biblioteca universitaria. Testo del quesito

Corso di Basi di Dati

Il linguaggio SQL: viste e tabelle derivate

Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto:

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

database: modello entityrelationship

1.Tutte 2.Spesso P.IVAe le CF volte che si visualizza i dati un fornitore si mostranoanche. La mensa. La mensa

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Microsoft Access. Microsoft Access

COGNOME MATRICOLA. Con vincoli di integrita referenziale: INTERVENTO.CodTecnico à TECNICO.Codice INTERVENTO.MatCaldaia à CALDAIA.

GERARCHIE RICORSIVE - SQL SERVER 2008

Introduzione all Algebra Relazionale

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

TOP DOWN. Compiti in classe proposti Modulo 1 JUVENILIA SCUOLA. Iacobelli Ajme Marrone

Data warehousing con SQL Server

MODULO 5 DATA BASE PROGRAMMA. Progettazione rapida introduzione alla progettazione di DB

Basi di Dati Corso di Laura in Informatica Umanistica

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 23 Settembre 03 Nome: Cognome: Matricola:

Lezione 2. Il modello entità relazione

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

OSSIF WEB. Manuale query builder

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Dominio applicativo. Analisi e ricognizione delle fonti dati

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Progettazione di un Database

Introduzione alla teoria dei database relazionali. Come progettare un database

SQL Server. Applicazioni principali

Rassegna sui principi e sui sistemi di Data Warehousing

Definizione di domini

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Dati relazionali e XML

A.S. 2010/2011 M070 - ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

Sistemi centralizzati e distribuiti

Gli operatori relazionali

marca (1,n) (1,1) nome prezzou prodotto nome responsabile quantità nome datai dataf (0,n) vendite (0,n) (0,n) (0,n) tempo acquisti quantità (0,n)

Basi di Dati corso C Esercitazione 18/12/2002 Autonoleggio tempo: 3 ore

Informatica I per la. Fisica

Progettazione di Database. Un Esempio

Data warehousing con SQL Server

Uso delle tabelle e dei grafici Pivot

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

Passo 2: avviare Access e creare una tabella per ogni tipo di entità Costruire la tabella per l entità cliente.

Il Modello Relazionale

Транскрипт:

Basi Di Dati, 09/12/2003 Una concessionaria di auto nuove ed usate vuole automatizzare alcune delle sue attività. L attività che la concessionaria vuole automatizzare riguarda la gestione delle auto nuove, usate, di cortesia ed in riparazione presso l officina. La concessionaria tratta diversi modelli di auto appartenenti anche a case automobilistiche differenti e gestisce gli interventi dell officina solo se il cliente effettua una prenotazione dell intervento su un auto. In tale prenotazione il cliente può richiedere, per un preciso periodo, un auto di cortesia tra quelle disponibili alla concessionaria nel periodo indicato. E necessario tener traccia: di tutti i contratti di vendita di auto nuove ed usate (data, numero contratto, prezzo, termini di pagamento, ecc), delle prenotazioni di intervento richieste all officina (auto, cliente, guasto, giorno, ora), delle auto di cortesia assegnate ai clienti che ne hanno fatto espressa richiesta ed infine degli interventi effettuati dall officina su qualunque auto gestita dalla concessionaria (interventi su auto nuove, usate, in riparazione e di cortesia). Per la progettazione del database i responsabili della concessionaria si rivolgono ad una software house specializzata. 1. Si definisca un diagramma ER che modelli la realtà commentandolo ed indicando le ipotesi fatte. 2. Si derivi dal diagramma ER il modello relazionale corrispondente. 3. Si implementino in linguaggio SQL o si esprimano mediante algebra relazionale le seguenti interrogazioni: a. Elenco degli interventi effettuati nel 2003 su auto FIAT in riparazione e di cortesia. b. Totale fatturato (nuovo ed usato) per casa automobilistica nel primo trimestre dell anno 2003. c. Elenco della spesa media sostenuta dai clienti per le auto nuove ed usate che hanno richiesto interventi dall officina negli ultimi 10 anni dalla data di acquisto.

MODELLO ER Le entità del diagramma er sono: Cliente (CodiceFiscale, Nome, Cognome, Indirizzo, DatadiNascita); TipoIntervento (CodiceIntervento, CostoListino, Guasto, Descrizione); Auto (NumTelaio, CodiceImmatricolazione, AnnoImmatricolazione, CasaAutomobilistica, Targa). L entità auto si può specializzare in Auto di Cortesia, in Auto in Riparazione e Auto in vendita, quest ultima caratterizzata dal flag S/N che sta ad indicare se l auto in vendita è nuova (S) o usata (N). Le auto di cortesia vengono cedute in prestito ai clienti che ne fanno richiesta in seguito ad un intervento: abbiamo ipotizzato che un cliente possa richiedere in prestito più di un auto di cortesia. Il cliente acquista, stipulando un contratto di vendita, un auto in vendita. L autofficina effettua interventi su qualunque auto della concessionaria: sia su auto nuove, usate, in riparazione e di cortesia.

MODELLO RELAZIONALE Dal diagramma ER ricaviamo ora il modello relazionale sfruttando le regole dell algoritmo di mapping. Per tradurre la specializzazione precedentemente definita abbiamo scelto di creare oltre alla tabella AUTO anche le tabelle AUTODICORTESIA e AUTOINVENDITA che usano come chiave primaria la stessa chiave primaria dell entità padre AUTO. Otteniamo le seguenti tabelle: CLIENTE CODICE FISCALE NOME COGNOME DATADINASCITA INDIRIZZO TIPOINTERVENTO CODICEINTERVENTO COSTOLISTINO GUASTO DATAINT ORAINT CFCLIENTE DESCRIZIONE AUTO NUMTELAIO COD_IMMATRICOLAZIONE ANNO_IMMATR CASA MODELLO TARGA AUTO DI CORTESIA NUMTELAIO AUTO IN VENDITA NUMTELAIO S/N AUTO IN RIPARAZIONE NUMTELAIO PRENOTA CALENDARIO CFCLIENTE_RICHIEDENTE NUMTELAIO_AUTOCORTESIA ACQUISTA NUMCONTRATTO CFACQUIRENTE NUMTELAIO_AUTOINVEN PREZZO DATA TERMINIPAGAMENTO ESEGUITOSU CODINTERVENTO NUMTELAIOAUTO COSTOEFFETTIVO GUASTOEFFETTIVO DATA ORA

Si implementino in linguaggio SQL o si esprimano mediante algebra relazionale le seguenti interrogazioni: 1. Elenco degli interventi effettuati nel 2003 su auto FIAT in riparazione e di cortesia Scegliamo inizialmente di effettuare i JOIN tra la tabella AUTO e AUTODICORTESIA e AUTO e AUTOINRIPARAZIONE, unendo i risultati. Successivamente eseguiamo il JOIN con la tabella ESEGUITOSU. L interrogazione restituisce tutti i record in cui esiste una corrispondenza tra le tabelle, ovvero l elenco completo di tutte le auto (sia di cortesia che in riparazione) che hanno subito un intervento. Raffiniamo ulteriormente l interrogazione, selezionando tra tutte le righe quelle che soddisfano la condizione casautomobilistica= fiat e data=??/??/2003, con il carattere? che può rappresentare qualsiasi singolo carattere. Generiamo infine una vista, scegliendo tra quelle presenti le colonne opportune: nel nostro caso abbiamo scelto ESEGUITOSU.GUASTOEFFETTIVO e AUTO.MODELLO. Il risultato conclusivo è: B <ESEGUITOSU.GUASTOEFFETTIVO, AUTO.MODELLO>(ơ<casa= fiat and data=??/??/2003 >(ESEGUITOSU <ESEGUITOSU.NUMTELAIOAUTO=A.NUMTELAIO>) A ((AUTO <AUTO.NUMTELAIO=AUTODICORTESIA.NUMTELAIO>AUTODICORTESIA) U (AUTO <AUTO.NUMTELAIO=AUTOINRIPARAZIONE.NUMTELAIO> AUTOINRIPARAZIONE)) SQL SELECT FROM WHERE ESEGUITOSU.GUASTOEFFETTIVO, AUTO.MODELLO AUTO, AUTOINRIPARAZIONE, ESEGUITOSU AUTO.CASA= fiat AND ESEGUITOSU.DATA=# / /2003# AND AUTO.NUMTELAIO=AUTOINRIPARAZIONE.NUMTELAIO AND AUTOINRIPARAZIONE.NUMTELAIO=ESEGUITOSU.NUMTELAIOAUTO UNION SELECT FROM WHERE ESEGUITOSU.GUASTOEFFETTIVO, AUTO. MODELLO AUTO, AUTODICORTESIA, ESEGUITOSU AUTO.CASA= fiat AND ESEGUITOSU.DATA=# / /2003# AND AUTO.NUMTELAIO=AUTODICORTESIA.NUMTELAIO AND AUTODICORTESIA.NUMTELAIO=ESEGUITOSU.NUMTELAIOAUTO 2. Totale fatturato (nuovo ed usato) per casa automobilistica nel primo trimestre dell anno 2003. Effettuando il join tra le tabelle AUTO e AUTOINVENDITA, imponendo come condizione di join AUTOINVENDITA.NUMTELAIO=AUTO.NUMTELAIO otteniamo tutti i record in cui esiste una corrispondenza tra le due tabelle, ovvero l elenco di tutte le auto in vendita, correlato dei campi CASA, TARGA, MODELLO, ANNO_IMMATR, COD_IMMATRICOLAZIONE. Effettuiamo un secondo join con la tabella ACQUISTA: otteniamo così l elenco di tutte le auto oggetto di un contratto di vendita. La condizione imposta sarà: AUTOINVENDITA.NUMTELAIO=ACQUISTA.NUMTELAIO_AUTOINVEN. Raffiniamo ulteriormente la query selezionando quelle vendute tra il 01/01/2003 e il 31/03/2003, estremi inclusi. Infine operiamo con il raggruppamento, scegliendo come attributo di raggruppamento CASA, calcolando per ciascuna di essa il fatturato totale, facendo la somma dei relativi prezzi.

<AUTO.CASA>F<sum ACQUISTA.PREZZO>(ơ<01/01/2003 ACQUISTA.DATA 31/03/2003> (ACQUISTA < ACQUISTA.NUMTELAIO_AUTOINVEN=AUTOINVENDITA.NUMTELAIO> (AUTOINVENDITA <AUTOINVENDITA.NUMTELAIO=AUTO.NUMTELAIO>AUTO))) SQL SELECT SUM(ACQUISTA.PREZZO) FROM ACQUISTA, AUTOINVENDITA, AUTO WHERE ACQUISTA.DATA BETWEEN #01/01/2003# AND #31/03/2003# AND ACQUISTA.NUMTELAIO_AUTOINVEN=AUTOINVENDITA.NUMTELAIO AND AUTOINVENDITA.NUMTELAIO=AUTO.NUMTELAIO GROUP BY AUTO.CASA 3. Elenco della spesa media sostenuta dai clienti per le auto nuove ed usate che hanno richiesto interventi dall officina negli ultimi 10 anni dalla data di acquisto. Generiamo la nostra interrogazione partendo dal join tra le tabelle CLIENTE e TIPOINTERVENTO, imponendo come condizione di join CLIENTE.CODICEFISCALE=TIPOINTERVENTO.CFCLIENTE. Otteniamo un elenco di tuple con tutti i clienti che hanno effettuato la prenotazione di un intervento sulla propria (o sulle proprie) auto. Proseguiamo con un secondo join tra le tabelle TIPOINTERVENTO e ESEGUITOSU, imponendo come condizione TIPOINTERVENTO.CODICEINTERVENTO=ESEGUITOSU.CODINTERVENTO. Effettuiamo infine un join con la tabella ACQUISTA (condizione di join: ACQUISTA.CFACQUIRENTE=CLIENTE.CODICEFISCALE) in modo tale da ricavare anche i dettagli riguardo la data di stipula del contratto. Selezioniamo ora tutti gli interventi che sono stati effettuati a 10 anni dalla data di acquisto imponendo la condizione: ACQUISTA.DATA TIPOINTERVENTO.DATAINT ACQUISTA.DATA + 00/00/0010. Infine calcoliamo la media con la funzione raggruppamento, scegliendo come attributo di raggruppamento il codice fiscale di ciascun cliente. Otteniamo così l interrogazione completa: <CLIENTE.CODICEFISCALE>F<AVG ESEGUITOSU.COSTOEFFETTIVO> (ơ< ACQUISTA.DATA TIPOINTERVENTO.DATAINT ACQUISTA.DATA + 00/00/0010>(ESEGUITOSU < ESEGUITOSU.CODINTERVENTO = TIPOINTERVENTO.CODICEINTERVENTO >( TIPOINTERVENTO <TIPOINTERVENTO.CFCLIENTE=CLIENTE.CODICEFISCALE > (ACQUISTA < ACQUISTA.CFACQUIRENTE=CLIENTE.CODICEFISCALE >CLIENTE)))) SQL SELECT AVG(ESEGUITOSU.COSTOEFFETTIVO), DateAdd ( yyyy, 10, ACQUISTA.DATA) AS DATA2 FROM ACQUISTA, CLIENTE, TIPOINTERVENTO, ESEGUITOSU WHERE TIPOINTERVENTO.DATAINT BETWEEN ACQUISTA.DATA AND DATA2 AND ACQUISTA.CFACQUIRENTE=CLIENTE.CODICEFISCALE AND CLIENTE.CODICEFISCALE=TIPOINTERVENTO.CFCLIENTE AND TIPOINTERVENTO.CODICEINTERVENTO= ESEGUITOSU.CODINTERVENTO GROUP BY CLIENTE.CODICEFISCALE

Abbiamo utilizzato nell ultima query la funzione DateAdd: DateAdd (tipocalcolo, valore, data) Fornisce una data che è il risultato tra data e valore il cui significato è indicato da tipocalcolo. Es. DateAdd( m, 7, data_nascita) Addiziona 7 mesi alla data di nascita, ottenendo la data corrispondente.

Errori di modellazione L errore di modellazione più ricorrente è quello di aver strutturato il diagramma ER in modo tale da non individuare quali auto da cortesia siano disponibili per la cessione temporanea a un cliente che ne effettua richiesta o quali auto siano in riparazione. Quella di non distinguere una gerarchia di auto (di cortesia, in vendita e in riparazione) può ulteriormente complicare la realizzazione delle successive interrogazioni. In alcuni casi è stata considerata un unica entità auto senza effettuare una ulteriore specializzazione e senza utilizzare un flag o un altro metodo alternativo per distinguere un auto nuova da una usata. In alcuni diagrammi sono assenti alcune relazioni di notevole rilievo: CLIENTE INTERVENTO AUTODICORTESIA, AUTOINRIPARAZIONE. Usare un modello troppo esemplificato può portare a non effettuare alcune interrogazioni di rilievo, come ad esempio quella di verificare quali auto di cortesia siano state assegnate. Sempre a questo scopo nella relazione CLIENTE richiede AUTODICORTESIA è fondamentale inserire come attributo della relazione il calendario, che semplifica l esecuzione di alcune query sulle date. Errori di notazione: esempi di cardinalità errate nel diagramma ER Errori di mapping ER-Relazionale Innanzitutto occorre ricordare la necessità di avere una congruenza tra modello ER e modello relazionale: è obbligatorio non solo utilizzare la stessa notazione, ma rispettare nell applicazione dell algoritmo di mapping le cardinalità espresse nel diagramma ER. Tra quelli analizzati emergono soprattutto errori di traduzione: - CLIENTE (0,N) effettua (1,1) PRENOTAZIONE: nella tabella CLIENTE è assente la chiave esterna codiceprenotazione - PRENOTAZIONE (1,1) richiede (1,1) AUTODICORTESIA: nessuna chiave è stata inglobata né nella tabella PRENOTAZIONE né in AUTODICORTESIA. - CLIENTE (1,N) acquista (1,1) AUTO: è stata tradotta erroneamente come una relazione M:N. - PRENOTAZIONE (0,1) include (0,N) AUTODICORTESIA: manca la chiave esterna IDPRENOTAZIONE nella tabella AUTODICORTESIA.

Errori SQL o algebra relazionale Tra quelli riscontrati emergono numerosi errori di notazione, ne riportiamo alcuni effettuando alcune considerazioni. - Nell operazione di JOIN esprimere sempre e correttamente la relativa condizione di JOIN; - Utilizzare correttamente la funzione di aggregazione: <attributo di raggruppamento>f<lista delle funzioni>. Evitare errori del tipo <modello, prezzo> F <SUM prezzo>; - Sarebbe utile evitare ambiguità nelle interrogazioni usando la notazione TABELLA.CAMPO e non CAMPO.TABELLA; - Nelle query sql utilizzare correttamente i caratteri speciali: AND DATASTIPULA=# / /2003# non AND DATASTIPULA= / /2003. Inoltre quando date e orari fanno parte di una condizione di query vanno delimitati dal carattere cancelletto #. Ricordiamo i caratteri speciali da utilizzare nelle query SQL: % sostituisce un arbitrario numero di lettere _ sostituisce una arbitraria lettera - Errore di notazione: per selezionare tutte le colonne di una tabella si usa SELECT * FROM TABELLA non SELECT *.TABELLA; - Quando si effettuano operazioni di raggruppamento inserire il GROUP BY TABELLA.CAMPO.