Prova Scritta di Modelli dei Dati di Nuova Generazione

Documenti analoghi
Prova Scritta di Modelli dei Dati di Nuova Generazione

Cap. 7 -Trigger e loro uso

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

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Primo Compitino di Basi di Dati

Prova Scritta di Basi di Dati

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

Prova Scritta di Basi di Dati

Basi di Dati e Sistemi Informativi A 1 A.A. 2009/ /09/10 -A Prof. Paolo Brunasti

ESAME di INFORMATICA e ARCHIVIAZIONE

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

Corso di. Basi di Dati I. 11. Esercitazioni in SQL: Altri esercizi

Caso di Studio: SITI CONTAMINATI

ESAME di INFORMATICA e ARCHIVIAZIONE

Tali regole vengono attivate in modo automatico al verificarsi di specifici eventi sulla. eseguono azioni sulla base di dati stessa.

Basi di dati: appello 14/07/06

Manuale SQL. Manuale SQL - 1 -

Basi di dati attive. Paolo Atzeni. Basi di dati attive

Basi di dati I Prova di autovalutazione 1 novembre 2016 Soluzioni

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

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

Basi di Dati Corso di Laura in Informatica Umanistica

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

Basi di Dati Corso di Laura in Informatica Umanistica

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Basi di Dati Attive. Basi di Dati Attive

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

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

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Corso di. Basi di Dati I. 10. Esercitazioni in SQL: Complementi

Laboratorio di Basi di Dati

Basi di Dati e Sistemi Informativi. Asserzioni, Viste e Trigger Basi di dati Attive

Le Basi di Dati Attive

SQL - Structured Query Language

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Basi di dati: appello 04/07/06

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

Basi di Dati: Corso di laboratorio

Esercitazione 4 SQL.

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

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

Basi di Dati Corso di Laura in Informatica Umanistica

Soluzione prova scritta di basi di dati del 30 Settembre 2002

Vincoli, procedure e regole attive in SQL. SQL: vincoli, trigger 1

Laboratorio di Basi di Dati Esercizio 8.4/9.1

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Le Basi di Dati Attive

Verifica di Informatica. Cognome e Nome: Classe 5ª Ci, Data

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

Caso di Studio: SITI CONTAMINATI

Aspetti avanzati nella definizione degli schemi DDL2 1

Basi di Dati - Informatica umanistica Esercitazione (Lab)

Basi di dati: appello 09/03/07

Basi di dati: appello 11/07/07

Basi di Dati: Elementi

BASE DI DATI. Esercizi Progettazione concettuale Progettazione logica Concetti avanzati SQL: Raggruppamento Nidificazione

Concettuale. Giuseppe Amato

PRODOTTO CARTESIANO Caso Generale

Caso di Studio: SITI CONTAMINATI

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

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

LA PROGETTAZIONE LOGICA

Corso di Basi di Dati A.A. 2015/2016

Fondamenti di Informatica 2

Stringhe di caratteri

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

Fondamenti di Informatica 2 Simulazione d esame dell 11 Dicembre 2009

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

Basi di dati: appello 07/02/06

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

Fondamenti di Informatica 2

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

Prova Scritta di Basi di Dati

Interrogazioni nidificate

Vincoli. Chiavi esterne Vincoli locali e globali Triggers Leggere capitolo 7 di Garcia- Molina et al. Lucidi derivati da quelli di Jeffrey D.

A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

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

Esame di Basi di Dati

Fondamenti di Informatica A. A / 1 9

Errata Corrige dell edizione 2007

Interrogazioni nidificate

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

Operazioni scatenanti. Nozione ed uso. Sintassi. Esempio

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

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

A.A. 2018/2019. Esercitazione 12. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

SQL: le funzioni di aggregazione

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

Nella relazione CINEMA, Nome è chiave secondaria. Nella relazione FILM, CodRegista, e CodProtagonista sono chiavi esterne sulla tabella PERSONE.

Basi di dati I 8 settembre 2011 Tempo a disposizione: un ora e trenta minuti. Libri chiusi.

Versione 1.0. (Iniziamo ad interrogare il DB)

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

ESERCITAZIONI ACCESS

Transcript:

Prova Scritta di Modelli dei Dati di Nuova Generazione 2 Luglio 2008 NOME: COGNOME: Si prega di risolvere gli esercizi direttamente sui fogli del testo, utilizzando protocolli solo nel caso di mancanza di spazio. Esercizio Punti previsti 1 15 2 10 3 8 Totale 33 Punti assegnati 1

Esercizio 1 Si vuole realizzare un applicazione di basi di dati per la gestione di un campeggio. Il campeggio dispone di un certo numero di piazzole, ognuna identificata da un numero ed appartenente ad un certo settore. Alcune piazzole sono raggiungibili in macchina (e quindi utilizzabili da tende, roulotte e camper) altre solo a piedi (e quindi utilizzabili solo da tende). Nelle prime viene alloggiata un unica tenda/roulotte/camper mentre le seconde possono ospitare piu` tende. Delle piazzole raggiungibili in macchina si vuole memorizzare se dotate di presa per l elettricita` e di rubinetto per l acqua potabile, oltre alla superficie in metri quadrati. Delle piazzole raggiungibili a piedi interessa memorizzare il numero massimo di tende ospitabili nella piazzola. I clienti del campeggio effettuano dei soggiorni con una certa data di inizio e di fine (presunta, nel caso di soggiorni ancora in corso), durante i quali viene loro assegnata una piazzola. Si noti che poiche vengono mantenute anche le informazioni su soggiorni conclusi, un cliente puo` visitare piu` volte il campeggio. Di ogni cliente interessa memorizzare codice fiscale, nome, cognome, indirizzo, data di nascita, estremi del documento di identita` (tipo, numero, ente che l ha rilasciato, data di rilascio). In ogni suo soggiorno il cliente potra` avere un certo numero di accompagnatori, dei quali si vuole memorizzare nome e cognome e, se di eta` inferiore a 12 anni, data di nascita, e disporra` di una certa attrezzatura. Per ogni soggiorno, si vuole memorizzare il tipo di attrezzatura utilizzata dal cliente per il soggiorno (tenda, roulotte, ) e, nel caso il cliente disponga di un veicolo, il tipo, il modello e il numero di targa del veicolo. Si vogliono infine memorizzare le piazzole assegnate ai clienti in ogni loro soggiorno e se e stato richiesto l utilizzo della presa di elettricita`. Si richiede di: 1. Progettare uno schema ER per il dominio applicativo precedente, motivando le scelte effettuate Vincoli: Non ci possono essere soggiorni contemporanei (cioe` che si sovrappongono temporalmente) dello stesso cliente In ogni piazzola in ogni data ci deve essere un numero di soggiorni <= alla sua capacita` (1 nel caso di piazzole raggiungibili in macchina, numtende per le piazzole raggiungibili a piedi) I soggiorni nelle piazzole raggiungibili a piedi devono avere come tipo_attr tenda In un soggiorno puo` essere utilizzata l elettricita` solo se la piazzola corrispondente e` dotata di presa per l`elettricita` 2

2. Presentare gli statement di creazione dello schema logico in SQL-2003, motivando le scelte effettuate. Traducendo Soggiorno come tabella tipata, ogni soggiorno sara` identificato dal suo identificatore e il vincolo di identificazione verra` incluso nel controllo che non ci siano soggiorni dello stesso cliente che si sovrappongono temporalmente. Per tale motivo, l identificazione esterna non verra` tradotta in vincoli FK-PK. Si decide di tradurre ogni entita` come tipo e tabella tipata. Per quanto riguarda le associazioni: In viene tradotta inserendo un riferimento (di tipo multiinsieme) agli accompagnatori nel soggiorno Assegn viene tradotta inserendo un riferimento alla piazzola nel soggiorno Tenendo conto anche di considerazione precedente sull identificazione, Fa viene tradotta inserendo un riferimento al cliente nel soggiorno. CREATE TYPE t_cliente AS (codfisc CHAR(16), nome VARCHAR(20), cognome VARCHAR(20), indirizzo VARCHAR(50), datan DATE, documento ROW(tipo CHAR, num VARCHAR(10), rilda VARCHAR(20), rilil DATE) ) NOT FINAL; CREATE TYPE t_accompagnatore AS (nome VARCHAR(20), cognome VARCHAR(20), datan DATE) NOT FINAL; CREATE TYPE t_piazzola AS (num DECIMAL(4), settore CHAR) NOT FINAL NOT INSTANTIABLE; CREATE TYPE t_pp UNDER t_piazzola AS (numtende DECIMAL(2)) NOT FINAL; CREATE TYPE t_pm UNDER t_piazzola AS (elettricita BOOLEAN, acqua BOOLEAN, mq DECIMAL(3,1)) NOT FINAL; CREATE TYPE t_soggiorno AS (cliente REF(t_cliente), datain DATE, datafine DATE, piazzola REF(t_piazzola), accompagnatori REF(t_accompagnatore) MULTISET SCOPE Accompagnatori, tipoattr CHAR, veicolo ROW(modello VARCHAR(30), targa CHAR(10))) NOT FINAL; 3

CREATE TABLE Clienti OF t_cliente (REF IS idc, PRIMARY KEY (codfisc) CHECK (documento.tipo IN ( c, p, g, e ))); CREATE TABLE Accompagnatori OF t_accompagnatore (REF IS ida, UNIQUE(nome, cognome,datan)); CREATE TABLE Piazzole OF t_piazzola (REF IS idp, PRIMARY KEY (num)): CREATE TABLE PP OF t_pp UNDER Piazzole; CREATE TABLE PM OF t_pm UNDER Piazzole; CREATE TABLE Soggiorni OF t_soggiorno (REF IS ids, cliente WITH OPTIONS SCOPE Clienti, piazzola WITH OPTIONS SCOPE Piazzole CHECK (tipoattr IN ( r, t, c ))); Nota: ci vorrebbero i vincoli di NOT NULL per gli attributi (non su datan in Accompagnatori e per veicolo in Soggiorno) 4

3. Presentare gli statement SQL per le seguenti operazioni: a) Inserire le informazioni relative ad un nuovo soggiorno effettuato dal cliente con carta di identita` AZ302456 rilasciata il 16 ottobre 2005 dal comune di Genova, con inizio 1 Luglio 2008 e termine 2 Luglio 2008 senza accompagnatori e con unica attrezzatura una tenda singola. INSERT INTO Soggiorni SELECT idc, DATE 01-Lug-08, DATE 02-Lug-08, NULL, MULTISET[], t, NULL FROM ClientI WHERE documento.tipo= c AND documento.num= AZ302456 AND documento.rilda= comune di Genova AND documento.rilil = DATE 16-Ott-05 ; b) Determinare il nome proprio dei bambini di eta` inferiore ad un anno che hanno effettuato (come accompagnatori) soggiorni in piazzole raggiungibili solo a piedi di durata superiore a tre giorni nell ultimo mese. SELECT E->nome FROM Soggiorni s, UNNEST(s.accompagnatori) T(E) WHERE s.piazzola IS OF t_pp AND CURRENT_DATE datain > INTERVAL 30 DAYS AND datafine datain > > INTERVAL 3 DAYS; Oppure SELECT E->nome FROM Soggiorni s, UNNEST(s.accompagnatori) T(E) WHERE s.piazzola IN (SELECT idp FROM PP) AND CURRENT_DATE datain > INTERVAL 30 DAYS AND datafine datain > > INTERVAL 3 DAYS; c) Determinare, per ogni cliente che ha effettuato piu di un soggiorno nel campeggio, il numero di soggiorni effettuati, il numero medio di accompagnatori e la durata del soggiorno piu` lungo che ha effettuato. SELECT cliente->codf, COUNT(*) AS nums, AVG(CARDINALITY(accompagnatori)) AS numma, MAX((dataFine datain) DAYS) AS maxd FROM Soggiorni GROUP BY cliente HAVING COUNT(*) >=2; 5

Esercizio 2 Si consideri il seguente schema relazionale Apparecchio(numSerie, marca, modello, anno, nomeprop, telprop) Riparazione(codR, numserie Apparecchio, data, tecnico, importotot) Voce(codR Riparazione, codguasto, descrguasto, importo) Gli apici rappresentano le relazioni riferite dalle chiavi esterne. Gli attributi sottolineati costituiscono chiavi primarie quelli in italico chiavi alternative. Il pedice O denota un attributo opzionale. Scrivere in SQL:2003 uno o più trigger per ottenere i seguenti comportamenti. Per ciascun trigger, scegliere una modalità di esecuzione appropriata e fornirne una giustificazione (almeno uno dei trigger progettati deve essere di tipo FOR EACH STATEMENT). 1. Assicurare che il valore contenuto nell attributo importotot della relazione Riparazione corrisponda alla somma degli importi delle singole voci relative a tale riparazione. CREATE TRIGGER CheckImporto AFTER INSERT ON Voce REFERENCES NEW TABLE AS NT FOR EACH STATEMENT UPDATE Riparazione R SET importotot = (SELECT SUM(importo) FROM Voce WHERE codr=r.codr) WHERE codr IN (SELECT codr FROM NT) AND importotot <> (SELECT SUM(importo) FROM Voce WHERE codr=r.codr) Trigger analoghi per DELETE ON Voce, UPDATE ON Voce, UPDATE OF importotot 2. Garantire che la data di una riparazione sia successiva al primo gennaio dell anno di produzione dell apparecchio. (Evitando il rollback della transazione). CREATE TRIGGER dataok AFTER INSERT ON Riparazione REFERENCES NEW ROW AS R FOR EACH ROW WHEN YEAR(R.data) < (SELECT anno FROM Apparecchio WHERE numserie = R.numSerie) DELETE FROM Riparazione WHERE codr=r.codr Trigger analoghi per UPDATE OF anno ON Apparecchio, UPDATE OF data ON Riparazione 6

3. Impedire che a voci di riparazioni effettuate nella stessa data su apparecchi della stessa marca e modello siano assegnati importi differenti. CREATE TRIGGER stessoimporto AFTER INSERT ON Voce REFERENCES NEW ROW AS R FOR EACH ROW WHEN EXISTS (SELECT * FROM Voce NATURAL JOIN Riparazione NATURAL JOIN Apparecchio WHERE importo <> R.importo AND data = R.data AND (marca, modello) = (SELECT marca, modello FROM Riparazione NATURAL JOIN Apparecchio WHERE codr= R.codR )) DELETE FROM Riparazione WHERE codr=r.codr Trigger analogo per UPDATE ON Voce,UPDATE ON Riparazione, UPDATE ON Apparecchio 4. Impedire che siano inserite più riparazioni per lo stesso apparecchio nella stessa data. (Evitando il rollback della transazione). CREATE TRIGGER no2rip AFTER INSERT ON Riparazione REFERENCES NEW ROW AS R FOR EACH ROW WHEN EXISTS (SELECT * FROM Riparazione WHERE numserie = R.numSerie AND data = R.data AND codr<>r.codr) DELETE FROM Riparazione WHERE codr=r.codr Discutere le eventuali interazioni tra i trigger progettati.. 7

Esercizio 3 Si consideri una base di dati spaziale che contiene alcune informazioni relative alla rete di distribuzione del gas metano di un azienda municipalizzata della Liguria: Il territorio viene classificato in area stradale, area edificata, area verde e area servizi (ciascuna con estensione poligonale). L area servizi si classifica ulteriormente in: stazione ferroviaria, scuola, università, ospedale, teatro e ufficio pubblico. La classificazione partiziona tutta la regione Liguria. La rete di distribuzione è suddivisa in tratte, identificate da un codice e descritte dai seguenti attributi: lunghezza, pressione a regime e pressione massima. Si memorizza inoltre il nodo di partenza, il nodo di arrivo della tratta e il tracciato tra i due nodi. Si memorizzano inoltre i nodi della rete di cui si conosce la posizione sul territorio e la tipologia, che puo` essere diramazione, stazione di pompaggio o contatore. Per i contatori si memorizza inoltre il numero del contatore, l indirizzo e il cognome e nome dell utente. Si rappresentino inoltre i seguenti vincoli: un nodo diramazione o stazione di pompaggio deve essere ubicato in un area stradale, un nodo di tipo contatore deve essere invece ubicato in un area edificata. Infine, ogni tratta della rete di distribuzione deve essere contenuta totalmente nella regione Liguria. a) Si progetti lo schema concettuale ER per la base di dati sopra descritta, indicando anche i vincoli di integrita non esprimibili nello schema. Vincoli spaziali principali -------------------------------- 1. La classificazione delle aree partiziona tutta la regione Liguria. 2. un nodo diramazione o stazione di pompaggio deve essere ubicato in un area stradale, 3. un nodo di tipo contatore deve essere invece ubicato in un area edificata. 4. ogni tratta della rete di distribuzione deve essere contenuta totalmente nella regione Liguria 5. La localizzazione dei nodi di partenza e arrivo di una tratta devono corrispondere ai punti di partenza e arrivo del tracciato della tratta 8

Ristrutturazione -------------------- Si ristruttura l entita` area Area Cod Estensione Tipo Tipo_servizi (0,1) b) Si progetti lo schema logico nel modello logico basato su Simple Feature Specification di OGC per la base di dati sopra descritta. Si presenti inoltre lo statement SQL per la creazione della porzione di schema relativa alle tratte della rete di distribuzione, inclusi eventuali vincoli di tipo CHECK. Area(Cod, estensione:polygon, tipo, tipo_servizi_0) Tratta(Cod, tracciato: LINESTRING, lun, pr, pm, nodop Nodo, nodoa Nodo ) Nodo(Cod, loc: POINT, tipo, ind, nome, cognome) CREATE TABLE tratta (cod VARCHAR(5), tracciato LINESTRING CHECK (tracciato.within(liguria)) lung NUMERIC(6,2), pr NUMERIC(6,2), pm NUMERIC(6,2), nonop VARCHAR(5) REFERENCES Nodo, nonoa VARCHAR(5) REFERENCES Nodo); Nel codice precedente assumo che Liguria sia una costante contenente la descrizione geometrica dell estensione ligure. c) Si presenti lo statement SQL per determinare il codice delle coppie di tratte tra loro adiacenti, insieme al punto di adiacenza (inteso come geometria). SELECT T1.Cod, T2.Cod,T1.tracciato.intersection(T2.tracciato) FROM Tratta T1, Tratta T2 WHERE T1.tracciato.touches(T2.tracciato) ; 9

10

SINTASSI SQL 2003 CREATE TYPE Nome AS ( Dichiarazioni_attributi) [INSTANTIABLE NOT INSTANTIABLE] [FINAL NOT FINAL]; CREATE TYPE Nome UNDER Nome_superclasse ( Dichiarazioni_attributi) [FINAL NOT FINAL]; CREATE TABLE Nome OF Nome_Tipo [( [<opzioni attributi>] [<vincoli a livello tabella>] [<identificazione>] )] <identificazione> := REF IS <nome colonna tabella> <opzioni attributi> := <nome attributo> WITH OPTIONS <opzione> <opzione> := <clausola default> <vincolo per attributo> Funzioni - Dereferenziazione DEREF - Riferimento - Trigger SQL-2003 CREATE TRIGGER Nome {BEFORE AFTER} Evento ON Relazione [REFERENCING {OLD AS Var NEW AS Var OLD AS Var NEW AS Var}] [FOR EACH {ROW STATEMENT}] [WHEN Condizione ] Comandi SQL con Evento: INSERT, DELETE, UPDATE [OF Lista Attributi] Condizione: clausola WHERE SQL Se l azione comprende piu di un comando: BEGIN ATOMIC END; 11

CLASSI CON METODI SIMPLE FEATURE SPECIFICATION OGC 12