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



Documenti analoghi
11 - Progettazione Logica

Basi di Dati Corso di Laura in Informatica Umanistica

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

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

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:

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

Squadra Giocatore Partita Goal Ingresso Ingresso SELECT FROM WHERE AND AND SELECT FROM WHERE AND AND AND AND SELECT FROM WHERE AND AND

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

ESAME di INFORMATICA e ARCHIVIAZIONE

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

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

Volumi di riferimento

1. Schema concettuale della base di dati Lo schema concettuale (o statico) è uno dei due schemi del progetto concettuale di un sistema informativo.

SQL. DDL e vincoli. Basi di Dati 1 Esercitazione 4. Matteo Picozzi {picozzi@elet.polimi.it}

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

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

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

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

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

Informatica (Basi di Dati)

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

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

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

Progettazione Logica. Progettazione Logica

Basi di dati Appello del Compito A

M733 ESAME DI STATO DI ISTITUTO TECNICO COMMERCIALE CORSO DI ORDINAMENTO

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

Vincoli di Integrità

ESAME di INFORMATICA e ARCHIVIAZIONE

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

Progettaz. e sviluppo Data Base

Corso di Laboratorio di Basi di Dati

Si formulino le seguenti interrogazioni tramite il linguaggio SQL:

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Termine Descrizione Sinonimo Collegamenti Lettore Una persona che prende in Utente

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

Database. Appunti di Amaranto Oronzo e Giancane Diego Lezione dell Ing. Lucia Vaira 24/04/2014

MAX, SUM, AVG, COUNT)

Progettare una base di dati che permetta di gestire il problema descritto nel seguito, nei seguenti punti:

Esercizio ER 1. Soluzione ER 1

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

Database per la gestione delle ferrovie dello stato. I treni gestiti sono identificati da un numero. Su ciascun treno sono specificate le classi per

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Prova Scritta di Basi di Dati

Corso sul linguaggio SQL

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

Progetto PI , passo A.1 versione del 14 febbraio 2007

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

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

1 Database universitario 1.1 Elenco tabelle PERSONA (ID, is_studente, is_docente, nome, cognome) STUDENTE (matricola, persona references persona(id))

Esercitazione di Basi di Dati

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

Informatica Industriale Modello funzionale: Informazione Progettazione concettuale

Metodi per la Gestione dei Dati (lezioni di laboratorio)

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

Basi di dati I. Esercitazione proposta

Definizione di domini

Il linguaggio SQL: query innestate

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Voli aerei: specifica

CAPITOLO 7 ESERCIZI SUL MODELLO ER

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Progettazione concettuale

Basi di dati. Le funzionalità del sistema non vanno però ignorate

Data management a.a Il linguaggio SQL

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

database: modello entityrelationship

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

Esercitazione 28 Gennaio 2013

VIDES. Mariagrazia Rossi

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

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

MEZZI CodM Tipo Targa AnnoI Assicurato

RISOLUZIONE APPELLI DI SISTEMI INFORMATIVI

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Esercitazione SQL. Università degli Studi del Sannio Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica

Gli attributi di STUDENTE saranno: Matricola (chiave primaria), Cognome, Nome.

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

SQL: definizione schema

SQL Sintassi Dei Comandi

Capitolo 8. Esercizio 8.1

Soluzione DDL ed Algebra Relazionale

Un DataBase SQL per la Henry Books

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

CAPITOLO 9 ESERCIZI SULLA PROGETTAZIONE LOGICA

Basi di Dati. Progettazione del Modello ER. K. Donno - Progettazione del Modello ER

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

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

Basi di dati. Esercitazione ER. Paolo Papotti. Esercizio giugno 2005

DESIGN PATTERN ESERCITAZIONE PREPARAZIONE ALL ESAME, PARTE II INGEGNERIA DEL SOFTWARE. La soluzione corretta è la c)

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

Basi di Dati: Corso di laboratorio

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

M070 - ESAME DI STATO DI ISTITUTO TECNICO INDUSTRIALE

ESERCITAZIONE di INFORMATICA 2011/2012

SQL. Alcune note sulla definizione dei dati

UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria

Esercizi di progettazione E-RE

Esercizi di progettazione concettuale di una base di dati

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

Transcript:

Corso di Laurea in Ingegneria Gestionale Sapienza - Università di Roma Corso di Basi di Dati A.A. 2014/2015 Esercitazione su Progettazione Logica Tiziana Catarci, Andrea Marrella Ultimo aggiornamento : 21/02/2015

ESERCIZIO D ESAME 1) Si effettui la progettazione concettuale della base di dati secondo la specifica che segue fornendo un diagramma ER. Si vuole costruire un applicazione che memorizzi i dati relativi allo svolgimento del campionato di calcio di Serie A. Per ogni partita in programma, si vogliono descrivere la giornata in cui si è svolta, il risultato finale, il numero progressivo della partita nella giornata (es. prima partita, seconda partita, ecc), la data ed il numero della giornata. Si suppone che le partite relative ad una giornata siano giocate tutte nella stessa data. Inoltre, per ogni partita, si vogliono conoscere - il nome, il cognome e la città di nascita dell arbitro della partita ; - le squadre coinvolte nella partita (distinguendo se la squadra ha giocato in casa o in trasferta), con nome, città della squadra e allenatore. Si memorizzi, per ogni giornata, quanti punti ha ogni squadra. Si devono poi distinguere le partite giocate regolarmente da quelle rinviate. Per quelle rinviate, rappresentare la data in cui si sono effettivamente giocate ed evidenziare se tali partite vengono giocate in una città diversa da quella della squadra ospitante; per queste ultime si vuole rappresentare la città in cui si svolgono, nonché il motivo della variazione di sede. Infine si vogliono conoscere i giocatori che giocano in ogni squadra con i loro nomi e cognomi, la loro data e città di nascita e il loro ruolo principale. Si vuole sapere, per ogni partita, i giocatori che hanno giocato, i ruoli di ogni giocatore (i ruoli dei giocatori possono cambiare di partita in partita). Si vogliono rappresentare anche i seguenti vincoli : 1) non ci possono essere più di 5 giocatori in una squadra che giocano nello stesso ruolo e 2) se una squadra gioca in casa una partita, allora è ospite nella partita successiva

ESERCIZIO D ESAME 2) Si effettui la progettazione logica del diagramma ER realizzato con riferimento alla domanda 1 3) Si fornisca il codice DDL di creazione delle tabelle.

Come tradurre le specifiche in un diagramma E-R? Un primo passo che si può mettere in atto per migliorare la comprensione della specifica consiste nel riorganizzare in gruppi omogenei i dati mostrati nella specifica stessa: FRASI RELATIVE ALLA PARTITA E ALLA GIORNATA Per ogni partita in programma, si vogliono descrivere la giornata in cui si è svolta, il risultato finale, il numero progressivo della partita nella giornata (es. prima partita, seconda partita, ecc), la data ed il numero della giornata. Si suppone che le partite relative ad una giornata siano giocate tutte nella stessa data. Si devono poi distinguere le partite giocate regolarmente da quelle rinviate. Per quelle rinviate, rappresentare la data in cui si sono effettivamente giocate ed evidenziare se tali partite vengono giocate in una città diversa da quella della squadra ospitante; per queste ultime si vuole rappresentare la città in cui si svolgono, nonché il motivo della variazione di sede FRASI RELATIVE ALL ARBITRO Per ogni partita, si vogliono conoscere il nome, cognome e città di nascita dell arbitro della partita 4

Come tradurre le specifiche in un diagramma E-R? FRASI RELATIVE ALLE SQUADRE Per ogni partita, si vogliono conoscere le squadre coinvolte nella partita (distinguendo se la squadra ha giocato in casa o in trasferta), con nome, città della squadra e allenatore. Si memorizzi, per ogni giornata, quanti punti ha ogni squadra. non ci possono essere più di 5 giocatori in una squadra che giocano nello stesso ruolo. Se una squadra gioca in casa una partita, allora è ospite nella partita successiva FRASI RELATIVE AI GIOCATORI Infine si vogliono conoscere i giocatori che giocano in ogni squadra con i loro nomi e cognomi, la loro data e città di nascita e il loro ruolo principale. Si vuole sapere, per ogni partita, i giocatori che hanno giocato ed i ruoli di ogni giocatore (i ruoli dei giocatori possono cambiare di partita in partita) 5

SCHEMA CONCETTUALE Gioca Casa Ospite Vincoli Esterni 1. In una squadra, il numero di giocatori con la stesso ruolo DEVE ESSERE inferiore a cinque 2. La prossima partita di una squadra che ha giocato come ospite DEVE 6 Esercitazioni di Basi di Dati A.A.08\09 Esercizio : Immobili ESSERE in casa

SCHEMA CONCETTUALE RISTRUTTURATO Gioca Casa Ospite 7 Esercitazioni di Basi di Dati A.A.08\09 Esercizio : Immobili

Vincoli sullo schema ristrutturato In una squadra, il numero di giocatori con la stesso ruolo DEVE ESSERE inferiore a cinque La prossima partita di una squadra che ha giocato come ospite DEVE ESSERE in casa Ogni istanza di Partita partecipa ad ISA-P-G oppure ad ISA-P-R ma non ad entrambe (dovuto all eliminazione della generalizzazione) 8

Schema Logico Parte 1 ARBITRO(CF, Cognome, Nome, Città) inclusione : Arbitro[CF] Partita[Arbitro] PARTITA(NumeroPartita, NumeroGiornata, Risultato, Arbitro, Casa, Ospite) foreign key : Partita[NumeroGiornata] Giornata[Numero] foreign key : Partita[Arbitro] Arbitro[CF] foreign key : Partita[Casa] Squadra[Nome] foreign key : Partita[Ospite] Squadra[Nome] GIORNATA(Numero, Data) inclusione : Giornata[Numero] inclusione : Giornata[Numero] SQUADRA(Nome, Città, Allenatore) inclusione : Squadra[Nome] inclusione : Squadra[Nome] Partita[NumeroGiornata] Posizione[Giornata] Giocatori[Squadra] Posizione[Squadra] 9

Schema Logico Parte 2 GIOCATORI(CF, Cognome, Nome, Ruolo, CittàNascita, DataNascita, Squadra) foreign key : Giocatori[Squadra] Squadra[Nome] PARTECIPAZIONE(Giocatori, Partita, Giornata, Ruolo) foreign key : Partecipazione[Giocatori] Giocatori[CF] foreign key : Partecipazione [Partita,Giornata] Partita[NumeroPartita,NumeroGiornata] POSIZIONE(Squadra, Giornata, Punteggio) foreign key : Posizione[Squadra] Squadra[Nome] foreign key : Posizione[Giornata] Giornata [Numero] PARTITAGIOCATA(Partita, Giornata) foreign key : PartitaGiocata[Partita,Giornata] Partita[NumeroPartita, NumeroGiornata] 10

Schema Logico Parte 3 PARTITARINVIATA(Partita, Giornata,Data) foreign key : PartitaRinviata[Partita,Giornata] Partita[NumeroPartita, NumeroGiornata] PARTITAINCAMPONEUTRO(Partita, Giornata, Motivo, Città) foreign key : PartitaInCampoNeutro[Partita,Giornata] PartitaRinviata[NumeroPartita, NumeroGiornata] Vincoli Esterni 1. In una squadra, il numero di giocatori con la stesso ruolo DEVE ESSERE inferiore a cinque 2. La prossima partita di una squadra che ha giocato come ospite DEVE ESSERE in casa Vincoli di Generalizzazione 3. PartitaRinviata[Partita,Giornata] PartitaGiocata[Partita,Giornata] = O 4. Partita[Partita,Giornata] = PartitaRinviata[Partita,Giornata] U PartitaGiocata[Partita,Giornata] 11

ARBITRO(CF, Cognome, Nome, Città) inclusione : Arbitro[CF] Partita[Arbitro] CREATE TABLE Arbitro( CF CHAR(10) PRIMARY KEY Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Città CHAR(20) NOT NULL, check ( CF in SELECT Arbitro FROM Partita) ) 12

PARTITA(NumeroPartita, NumeroGiornata, Risultato, Arbitro, Casa, Ospite) foreign key : Partita[NumeroGiornata] Giornata[Numero] foreign key : Partita[Arbitro] Arbitro[CF] foreign key : Partita[Casa] Squadra[Nome] foreign key : Partita[Ospite] Squadra[Nome] CREATE TABLE Partita( NumeroPartita INT, NumeroGiornata INT, Risultato CHAR(4) NOT NULL, Arbitro CHAR(10) NOT NULL, Casa CHAR(20) NOT NULL, Ospite CHAR(20) NOT NULL, PRIMARY KEY (NumeroPartita,NumeroGiornata), FOREIGN KEY (NumeroGiornata) REFERENCES Giornata(Numero) FOREIGN KEY (Arbitro) REFERENCES Arbitro(CF) FOREIGN KEY (Casa) REFERENCES Squadra(Nome) FOREIGN KEY (Ospite) REFERENCES Squadra(Nome)) 13

GIORNATA(Numero, Data) inclusione : Giornata[Numero] inclusione : Giornata[Numero] Partita[NumeroGiornata] Posizione[Giornata] CREATE TABLE Giornata( Numero INT PRIMARY KEY, Data DATE NOT NULL, check ( Numero in SELECT NumeroGiornata FROM Partita), check ( Numero in SELECT Giornata FROM Posizione) ) 14

SQUADRA(Nome, Città, Allenatore) inclusione : Squadra[Nome] inclusione : Squadra[Nome] Giocatori[Squadra] Posizione[Squadra] CREATE TABLE Squadra( Nome CHAR(20) PRIMARY KEY, Città CHAR(20) NOT NULL, Allenatore CHAR(20) NOT NULL, check ( Nome in SELECT Squadra FROM Giocatori), check ( Nome in SELECT Squadra FROM Posizione) ) 15

GIOCATORI(CF, Cognome, Nome, Ruolo, CittàNascita, DataNascita, Squadra) foreign key : Giocatori[Squadra] Squadra[Nome] CREATE TABLE Giocatori( CF CHAR(10) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Ruolo CHAR(20) NOT NULL, CittàNascita CHAR(20) NOT NULL, DataNascita DATE NOT NULL, Squadra CHAR(20) NOT NULL, FOREIGN KEY (Squadra) REFERENCES Squadra(Nome)) 16

PARTECIPAZIONE(Giocatore, Partita, Giornata, Ruolo) foreign key : Partecipazione[Giocatori] Giocatori[CF] foreign key : Partecipazione [Partita,Giornata] Partita[NumeroPartita,NumeroGiornata] CREATE TABLE Partecipazione( Giocatore CHAR(20), Partita INT, Giornata INT, Ruolo CHAR(20) NOT NULL, PRIMARY KEY (Giocatore,Partita,Giornata), FOREIGN KEY (Giocatori) REFERENCES Giocatori(CF), FOREIGN KEY (Partita,Giornata) REFERENCES Partita(NumeroPartita,NumeroGiornata)) 17

POSIZIONE(Squadra, Giornata, Punteggio) foreign key : Posizione[Squadra] Squadra[Nome] foreign key : Posizione[Giornata] Giornata [Numero] CREATE TABLE Posizione( Squadra CHAR(20), Giornata INT, Punteggio INT NOT NULL, PRIMARY KEY (Squadra,Giornata), FOREIGN KEY (Squadra) REFERENCES Squadra(Nome), FOREIGN KEY (Giornata) REFERENCES Giornata(Numero)) 18

PARTITAGIOCATA(Partita, Giornata) foreign key : PartitaGiocata[Partita,Giornata] Partita[NumeroPartita,NumeroGiornata] CREATE TABLE PartitaGiocata( Partita INT, Giornata INT, PRIMARY KEY (Partita,Giornata), FOREIGN KEY (Partita,Giornata) REFERENCES Partita(NumeroPartita,NumeroGiornata)) 19

PARTITARINVIATA(Partita, Giornata,Data) foreign key : PartitaRinviata[Partita,Giornata] Partita[NumeroPartita, NumeroGiornata] CREATE TABLE PartitaRinviata( Partita INT, Giornata INT, Data DATE NOT NULL, PRIMARY KEY (Partita,Giornata), FOREIGN KEY (Partita,Giornata) REFERENCES Partita(NumeroPartita,NumeroGiornata)) 20

PARTITAINCAMPONEUTRO(Partita, Giornata, Motivo, Città) foreign key : PartitaInCampoNeutro[Partita,Giornata] PartitaRinviata[Partita, Giornata] CREATE TABLE PartitaInCampoNeutro( Partita INT, Giornata INT, Motivo CHAR(20) NOT NULL, Città CHAR(20) NOT NULL, PRIMARY KEY (Partita,Giornata), FOREIGN KEY (Partita,Giornata) REFERENCES PartitaRinviata(Partita, Giornata)) 21

PartitaRinviata[Partita,Giornata] PartitaGiocata[Partita,Giornata] = O CREATE ASSERTION PARTITARINVIATA_DISJOINT_PARTITAGIOCATA( check ( NOT EXISTS ( SELECT Partita,Giornata FROM PartitaRinviata INTERSECT SELECT Partita,Giornata FROM PartitaGiocata ) ) 22

Partita[Partita,Giornata] = PartitaRinviata[Partita,Giornata] U PartitaGiocata[Partita,Giornata] CREATE ASSERTION PG_PR_COMPLETE_Partita ( check ( (1 = SELECT count(*) FROM PartitaRinviata, Partita WHERE PartitaRinviata.Partita = Partita.NumeroPartita AND PartitaRinviata.Giornata = Partita.NumeroGiornata) OR (1 = SELECT count(*) FROM Partita, PartitaGiocata WHERE PartitaGiocata.Partita = Partita.NumeroPartita AND PartitaRinviata.Giornata = Partita.NumeroGiornata) ) ) 23

In una squadra, il numero di giocatori con la stesso ruolo DEVE ESSERE inferiore a cinque CREATE ASSERTION CINQUE_GIOCATORI ( check ( 5 >= all SELECT count(ruolo) FROM Giocatori GROUP BY Squadra,Ruolo ) ) 24

La prossima partita di una squadra che ha giocato come ospite DEVE ESSERE in casa CREATE ASSERTION OSPITE_CASA ( check ( NOT EXISTS ( SELECT NumeroPartita,NumeroGiornata FROM Partita P WHERE Ospite in (SELECT P1.Ospite FROM Partita P1 WHERE P1.Giornata = P.Giornata + 1)) )) 25