Prova Scritta di Basi di Dati



Documenti analoghi
Prova Scritta di Basi di Dati

Prova Scritta di Basi di Dati

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

Secondo Compitino di Basi di Dati

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

SQL - Funzioni di gruppo

Operazioni sui database

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

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

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

SQL (STRUCTURED QUERY LANGUAGE)

Definizione di domini

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

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

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

Basi di Dati Corso di Laura in Informatica Umanistica

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

Basi di Dati: Corso di laboratorio

Corso di Laboratorio di Basi di Dati

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

Istruzioni DML di SQL

Compito Basi di Dati. Tempo concesso: 90 minuti 08 Giugno 2006 Nome: Cognome: Matricola:

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

DBMS (Data Base Management System)

PROGRAMMA DI CLASSE 5AI

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

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

SQL Sintassi Dei Comandi

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Medicina e Chirurgia CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA ESAME

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

OR true null false true true true true null true null null false true null false NOT

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:

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

Il linguaggio SQL: query innestate

Prova scritta. Mercoledì 11 Febbraio Appello di Informatica II - Corso di Laurea in Ottica e Optometria A.A. 2007/2008

MEZZI CodM Tipo Targa AnnoI Assicurato

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Il linguaggio SQL: viste e tabelle derivate

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

SQL. Structured Query Language 1974: SEQUEL by IBM 1981: SQL by IBM : SQL ISO 9075:1992 SQL:1999 SQL:2003

MAX, SUM, AVG, COUNT)

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Volumi di riferimento

ESAME di INFORMATICA e ARCHIVIAZIONE

Il linguaggio SQL: le basi

Interrogazioni complesse. SQL avanzato 1

ESAME di INFORMATICA e ARCHIVIAZIONE


Corso sul linguaggio SQL

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

Prova scritta. Giovedì 02 Ottobre Appello di Informatica II - Corso di Laurea in Ottica e Optometria A.A. 2007/2008

Basi di dati 9 febbraio 2010 Compito A

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Esercizio 1. Cognome e nome:... Matricola:...

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

SQL prima 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 2011/12

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Modello E-R. Modello relazionale

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

Il Modello Relazionale

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

SQL (STRUCTURED QUERY LANGUAGE)

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

Vincoli di Integrità

Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

Data management a.a Il linguaggio SQL

CAPITOLO 4 ESERCIZI SU SQL

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

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

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Vincoli di integrità

a) Si progetti uno schema concettuale Entità-Relazioni per lo scenario più sotto descritto.

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

IL DAT A B A S E DI ALGE B R A N D O

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

User Tools: DataBase Manager

Esame di Basi di Dati, SOLUZIONE APPELLO 12/01/2010

SQL. Alcune note sulla definizione dei dati

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

Sistemi per la gestione di database: MySQL ( )

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

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Gestione delle tabelle

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

ESERCIZIO 1 (15 punti) Dato il seguente schema relazionale, che modella le informazioni relative ad un sistema di prenotazioni di biglietti aerei:

CONCETTO DI ANNIDAMENTO

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Capitolo 13. Interrogare una base di dati

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

IL MODELLO RELAZIONALE

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

Esercitazione 28 Gennaio 2013

Basi di Dati e Sistemi Informativi. Structured Query Language

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

Linguaggio SQL. Structured Query Language

Compito DA e BD. Tempo concesso: 90 minuti 12 giugno 03 Nome: Cognome: Matricola: Esercizio 1

Compito Basi di Dati. Tempo concesso: 90 minuti 18 Gennaio 2007 Nome: Cognome: Matricola:

SQL IL LINGUAGGIO DI INTERROGAZIONE

Transcript:

Prova Scritta di Basi di Dati 4 Giugno 2007 COGNOME: NOME: MATRICOLA: Si prega di risolvere gli esercizi direttamente sui fogli del testo, negli spazi indicati. Usare il foglio protocollo solo per la brutta copia. Esercizio Punti previsti 1 11 2 8 3 8 4 6 Totale 33 Punti assegnati

Esercizio 1 Si vuole progettare una base di dati per la gestione delle prenotazioni delle navi della compagnia In Mezzo al Mar. Ogni nave della flotta è identificata da un nome proprio ed è caratterizzata dalle sue dimensioni, capacità, intesa come numero massimo di persone, velocità e km percorsi. Ogni nave offre dei posti in poltrona, cabine di diverse tipologie e posti auto/moto. Nel caso di un posto in poltrona si vuole sapere il numero identificativo ad essa assegnato ed il nome della sala in cui la poltrona si trova. Nel caso di una cabina, la base di dati deve memorizzare il numero identificativo, il nome del ponte in cui si trova, il numero di posti letto, se è dotata di servizi interni e se è presente un oblò. Inoltre, per ogni posto auto si tiene traccia del livello in cui si trova e del numero identificativo ad esso assegnato. In generale, per ogni posto (poltrona, cabina, o posto auto) si vuole sapere lo stato (se disponibile per prenotazione) ed il costo. Inoltre, il numero assegnato a ciascuna sistemazione (cabina, poltrona, posto autom/moto) e` unico all interno di ogni nave. Le navi della compagnia In Mezzo al Mar coprono diverse tratte. Ogni tratta è caratterizzata dal porto di partenza, d arrivo ed il corrispondente chilometraggio. La base di dati deve memorizzare gli orari di partenza ed arrivo con cui le navi percorrono le tratte ed il giorno della settimana in cui la percorrono. Si assume che una nave possa percorrere una tratta una sola volta alla settimana. I clienti che effettuano le prenotazioni sono caratterizzati dal codice fiscale, nome, cognome, ed uno o più numeri di telefono. Ogni prenotazione e` identificata da un codice alfanumerico. Per ogni prenotazione si vogliono memorizzare il cliente che l ha effettuata, la data di prenotazione, la data del viaggio, i posti assegnati al cliente in una certa nave (anche piu` di uno), la tratta di interesse e l importo totale dovuto dal cliente. Per ogni posto prenotato, il cliente deve fornire codice fiscale, nome e cognome, ed età del passeggero che occuperà il posto. Inoltre, nel caso di prenotazione di un posto auto è necessario fornire il modello e la targa dell automobile o motocicletta. Un posto può essere prenotato solo se disponibile. Si richiede di: a) Definire uno schema ER per la situazione sopra descritta (ristrutturare le specifiche se necessario). Precisare la cardinalità delle associazioni e degli attributi (se diversa da quella di default) ed i vincoli di identificazioni.

Assumo che la disponibilità` di un posto indichi se un posto e` agibile (quindi utilizzabile). La disponibilità` non dipende quindi dallo specifico viaggio.

b) Fornire, come documentazione aggiuntiva allo schema ER, il tipo delle eventuali generalizzazioni presenti nello schema e l elenco dei vincoli di integrità non rappresentabili nello schema ER proposto. Generalizzazione su Posto: totale, esclusiva Vincoli: Non indico i vincoli di dominio perche` in genere nella progettazione concettuale vengono specificati a parte. 1. I km percorsi da una nave devono essere superiori o uguali al chilometraggio di almeno una tratta coperta dalla nave 2. In Tratta: orap < oraa 3. In Prenotazione: datap <= datav, imptot >= somma costi dei posti prenotati nel contesto della prenotazione, la tratta corrispondente deve essere coperta dalla nave di cui vengono prenotati i posti 4. + vincoli banali (ad esempio eta >0, costo >0) c) Generare lo schema ristrutturato corrispondente allo schema ER definito al punto a), e presentare l insieme dei vincoli di integrita per lo schema ristrutturato. Ci sono due costrutti da ristrutturare: tel in Cliente generalizzazione di Posto Presento solo i costrutti ristrutturati, tutto il resto rimane uguale. Nuovi vincoli: 5. In Posto, Sala <> NULL sse tipo = Poltrona, Ponte, Nletto, Servizi, Oblo <> NULL sses tipo = cabina, livello <> NULL sse tipo = auto/moto

CLIENTE (1,n) rispondea (1,n) TELEFONO Num Disponibile costo numero POSTO Tipo Sala (0,1) Ponte (0,1) NLetto Servizi Oblo livello (0,1) (0,1) (0,1) (0,1) d) Realizzare uno schema relazionale corrispondente allo schema ristrutturato definito al punto c), indicando le chiavi, primarie ed alternative, le chiavi esterne, gli attributi che possono essere nulli ed i vincoli di integrita per tale schema, indicando la tipologia di ciascuno di essi. Nave(Nome, Dim, Capacita, Vel, Km) Tratta(portoP, PortoA, Km) Posto(NomeNave Nave, Num, Disponibile, Costo, Tipo, Sala 0, Ponte 0, NLetto 0, Servizi 0, Oblo 0, Livello 0 ) Cliente(CF, Nome, Cogn) Prenotazione(Cod, DataP, DataV, ImpTot, Cliente Cliente, portop Tratta, portoa Tratta, km Tratta ) Copre(NomeNave Nave, portop Tratta, portoa Tratta, km Tratta, orap, oraa, giorno) RelativaA(codPren Prenotazione, NomeNave Posto, numposto Posto, CF, nome, cogn, eta, targa 0, modello 0 ) Telefono(numero) RispondeA(Cliente Cliente, numero Telefono) VINCOLI 1. asserzione 2. check su tupla 3. check su tupla, asserzione, asserzione 4. check su attributo 5. asserzione e) Discutere eventuali ottimizzazioni allo schema Aggiungere un codice identificativo alle tratte ridurrebbe la ridondanza (poiche esistono chiavi esterne su tratte). Telefono si puo` eliminare

Esercizio 2 Si consideri il seguente schema relazionale, relativo alle proiezioni cinematografiche effettuate presso il cinema Odeon: La relazione Sala mantiene le informazioni relative alle sale di proiezione; ognuna di esse ha un nome ed è caratterizzata da un certo numero di posti a sedere. La relazione Film contiene i dati dei film. Ogni film è identificato da un codice, ha un titolo, un regista, un anno di uscita nelle sale cinematografiche (che può non essere noto) e una durata espressa in minuti. Inoltre, per ogni film si vuole mantenere il relativo genere (ad esempio: commedia, animazione, fantascienza). La relazione Proietta mantiene le informazioni riguardo la programmazione del cinema, con le indicazioni della data e dell orario di proiezione dei film nelle diverse sale. La relazione Personale mantiene i dati anagrafici dei dipendenti del cinema. Infine, la relazione AssisteProiez contiene i dati del personale che ha assistito una determinata proiezione di un film e l indicazione del ruolo, ovvero la mansione (ad esempio: maschera, assistente alla sicurezza, cassiere) ricoperto dall addetto durante la proiezione. Si richiede di formulare le seguenti interrogazioni, in algebra relazionale: a) Trovare i titoli ed il genere dei film proiettati nella sala Corallo a dicembre 2007 nella fascia serale (ovvero fra le 20 e le 24). JOIN indica l operazione di theta-join, per semplicita di scrittura (ma voi dovete utilizzare il simbolo corretto nelle prove scritte!) Π titolo, genere (σ nomes= Corallo orainizio >= 20 data >= 1/1/07 data <= 31/12/07 (Film JOIN codfilm = Film Proietta)) b) Trovare le sale in cui è stato proiettato almeno 2 volte lo stesso film. Π nomes (σ Data <> D OraInizio <> O (Proietta JOIN ρ Data,OraInizio D,O Proietta)) c) Trovare le sale in cui sia stato proiettato almeno un film di genere drammatico e nessun film di genere horror. R = sale in cui e` stato proiettato almeno un film di genere drammatico R = Π nomes (σ genere = drammatico (Film JOIN film=codfilm Proietta)) S = sale in cui e` stato proiettato almeno un film di genere horror R = Π nomes (σ genere = horror (Film JOIN film=codfilm Proietta)) Soluzione: R - S

d) Determinare le sale con almeno 30 posti in cui sono stati proiettati tutti i film di Dario Argento. Nel seguito, NJ indica l operazione di join naturale, per semplicita di scrittura (ma voi dovete utilizzare il simbolo corretto nelle prove scritte!) R = sale con almeno 30 posti e film proiettati R = Π nomes,film (σ nposti > = 30 (Sala NJ Proietta JOIN film=codfilm Film)) S = codice film di Dario Argento S = Π codfilm (σ regista = Dario Argento (Film)) Soluzione : R : S

Esercizio 3 In riferimento allo schema proposto nel contesto dell Esercizio 2: presentare i comandi SQL corrispondenti alle seguenti operazioni: a) Trovare i titoli ed il genere dei film proiettati nella sala Corallo a dicembre 2007 nella fascia serale (ovvero fra le 20 e le 24). SELECT titolo, genere FROM Proietta JOIN Film ON film = codfilm WHERE nomes = Corallo AND data BETWENN DATE 01/01/2007 AND DATE 31/12/2007 AND orainizio > = 20; b) Determinare il codice fiscale della persona che ha assistito al minor numero di film di durata superiore a 3 ore, con stipendio superiore alla media degli stipendi di tutti gli assistenti. SELECT codfisc FROM Personale NATURAL JOIN AssisteProiez NATURAL JOIN Proietta JOIN Film ON film = codfilm WHERE durata > = 3 AND StipMensile > (SELECT AVG(stipMensile) FROM Personale NATURAL JOIN AssisteProiez) GROUP BY codfisc HAVING count(*) <= (SELECT COUNT(*) FROM AssisteProiez NATURAL JOIN Proietta JOIN Film ON film = codfilm WHERE durata > = 3 GROUP BY codfisc); c) Aggiornare le proiezioni dei film di durata superiore alla durata media dei film con il loro stesso genere, indicando come sala di proiezione la nuova sala Ambra. UPDATE Proietta SET nomes = Ambra WHERE film in (SELECT codfilm FROM Film F WHERE durata > (SELECT AVG(durata) FROM Film WHERE genere = F. genere));

Esercizio 4 Si consideri la relazione R(ABCDEF) ed il seguente insieme G di dipendenze funzionali: AB CD EAF C F B a) Determinare se l insieme delle dipendenze G è minimale. Se non lo è, generare un insieme di dipendenze minimale equivalente a G. b) Determinare le chiavi dello schema. c) Verificare se lo schema è in BCNF o in 3NF, giustificando la risposta. d) Presentare una decomposizione 3NF lossless join dello schema originale, che preserva le dipendenze. e) La decomposizione 3NF ottenuta al passo precedente, è anche BCNF? Se lo è preserva le dipendenze? L insieme non e minimale. L insieme minimale equivalente e`: AB C AB D F B Sicuramente AF appartengono alla chiave. AF+ = AFBCD, quindi AF e` chiave ed e` anche l unica Lo schema non e` in BCNF (F non e` chiave o superchiave), non e` in 3NF (B non e` primo). Decomposizione in 3NF: R1(ABC) R2(ABD) R3(FB) Metto insieme schemi che derivano da dip funzionali con la stessa parte sinistra: R4(ABCD) R3(FB) Aggiungo schema con attributi chiave: R4(ABCD) AB CD chiave AB R3(FB) F B chiave F R5(AF) chiave AF Non ci sono schemi da eliminare, quindi questa e` la decomposizione finale. E anche in BCNF.

CREATE TABLE Nome Tabella ( [ LIKE Nome Tabella, ] spec_col 1,...,spec_col n ) [, PRIMARY KEY (Lista Nomi Colonne)] [, UNIQUE (Lista Nomi Colonne)] [, FOREIGN KEY (Lista Nomi Colonne) REFERENCES Nome Tabella Riferita [ON DELETE { NO ACTION RESTRICT CASCADE SET NULL SET DEFAULT } ] [ON UPDATE { NO ACTION RESTRICT CASCADE SET NULL SET DEFAULT } ] ] [, FOREIGN KEY ] [CHECK Condizione]; : : : [CHECK Condizione]; ); CREATE TABLE Nome Tabella [ WITH DATA ] AS Query; spec_col i = Nome Colonna i Dominio i { [GENERATED ALWAYS AS Espressione ] [DEFAULT Valore Default] [NOT NULL] [PRIMARY KEY] [UNIQUE] [CHECK Condizione] } CREATE ASSERTION Nome Vincolo CHECK Condizione; DROP TABLE Nome Tabella {RESTRICT CASCADE}; ALTER TABLE Nome Tabella ADD COLUMN spec_col; ALTER TABLE Nome Tabella ALTER COLUMN Nome Colonna { SET DEFAULT Valore default DROP DEFAULT }; ALTER TABLE Nome Tabella DROP COLUMN Nome Colonna {RESTRICT CASCADE}; SELECT [DISTINCT] R i1.c 1,,R in.c n FROM R 1,,R n WHERE Condizione [ GROUP BY Lista Nomi Colonne [HAVING Condizione su aggregazione] ] [ ORDER BY Lista Nomi Colonne ]; Clausola FROM puo anche contenere operazioni di JOIN: - Nome Relazione CROSS [ LEFT OUTER RIGHT OUTER INNER ] JOIN Nome Relazione - Nome Relazione [ LEFT OUTER RIGHT OUTER INNER ] JOIN Nome Relazione ON Predicato - Nome Relazione [ LEFT OUTER RIGHT OUTER INNER ] JOIN Nome Relazione USING Lista Nomi Colonne - Nome Relazione NATURAL [ LEFT OUTER RIGHT OUTER INNER ] JOIN Nome Relazione Condizione e una combinazione booleana di predicati, inclusi i seguenti: - C BETWEEN v 1 AND v 2 - C IN (v 1,,v n ), C IN sq - C LIKE pattern, con pattern stringa di caratteri che puo contenere i caratteri speciali % e _ - EXISTS sq, NOT EXISTS sq - ANY sq, ALL sq - UNION, INTERSECT, EXCEPT tra query

Funzioni di gruppo: - MAX, MIN, SUM, AVG, COUNT - Per ciascuna due versioni f(distinct Nome Colonna) f(nome Colonna) - Per COUNT: COUNT(*) COUNT(DISTINCT Nome Colonna) COUNT(Nome Colonna) INSERT INTO Nome Tabella [ ( C 1,..., C n ) ] { VALUES (e 1,..., e n ) sq } ; DELETE FROM Nome Tabella [alias] [ WHERE Condizione ]; UPDATE Nome Tabella [alias] SET C 1 = { e 1 NULL },, C n = { e n NULL } [ WHERE Condizione ]; CREATE VIEW Nome [ ( Lista Nomi Colonne ) ] AS Query [ WITH [ { LOCAL CASCADED} ] CHECK OPTION];