Sistemi Informativi L-B 18 giugno 2009 Risoluzione Tempo a
Transcript
Sistemi Informativi L-B 18 giugno 2009 Risoluzione Tempo a
Sistemi Informativi L-B 18 giugno 2009 Risoluzione Tempo a disposizione: 2 ore 1) Progettazione concettuale (5 punti) PORTI Nome id: Nome PORTO_PARTENZA 1-N P CONTINENTE SARDEGNA 0-N 0-N TR_CO TR_SA 1-1 TRATTE id: TR_CO.CONTINENTE TR_SA.SARDEGNA 1-N TIPI_POSTI Descrizione id: Descrizione 1-N TR_TR TRAGHETTI Nome PostiPersone PostiAuto id: Nome 1-1 1-N TR_PA 1-1 PARTENZE id: OR_PA.ORARI TR_PA.TRAGHETTI 1-1 OR_PA 1-N PR_TI NumPosto[1-N] LIVELLI Sigla id: Sigla PRENOTAZIONI ID Nome Cognome Tel Email[0-1] id: ID 1-1 PREZZI Importo 0-N 1-1 1-N 1-1 1-N LI_OR 1-1 ORARI Data Ora id: Data Ora 0-N 1-1 Commenti: • • • • • • 1/2 La principale difficoltà dell’esercizio riguarda la corretta modellazione degli orari dei traghetti e delle relative prenotazioni. La soluzione proposta si caratterizza per i seguenti elementi: La presenza di una serie di entità “statiche” di supporto, quali TIPI_POSTI, LIVELLI e ORARI. Quest’ultima si rende necessaria per associare a ciascuna partenza un ben determinato livello (associare direttamente PARTENZE a LIVELLI non sarebbe corretto, in quanto i livelli non dipendono dai traghetti ma solo da data e ora) La presenza di un’entità TRATTE, che non distingue tra porto di partenza e di arrivo. Questa entità permette di rappresentare correttamente le specifiche sui traghetti (ogni traghetto opera su una singola tratta) e sui prezzi (i prezzi dipendono anche dalla tratta) Le PARTENZE sono univocamente definite da un traghetto e da un orario. La reificazione di PARTENZE (che altrimenti si sarebbe potuta rappresentare come un’associazione tra ORARI e TRAGHETTI) si rende necessaria a causa delle associazioni con PRENOTAZIONI e PORTI. Quest’ultima ha lo scopo di esplicitare qual è il porto di partenza Ogni prenotazione ha come proprietà i dati del cliente, una partenza (associazione PR_PA) e un tipo di posto (associazione PR_TI). I biglietti sono rappresentati nell’associazione PR_TI mediante un attributo multi-valore. L’esercizio è un ulteriore esempio del “pattern” libro-copia di libro, in cui la corretta soluzione richiede di distinguere tra aspetti statici e dinamici. In questo caso la coppia di entità che realizza il pattern è TRAGHETTI-PARTENZE 0-N PR_PA Sistemi Informativi L-B 18 giugno 2009 Risoluzione 2) Progettazione logica e normalizzazione (3 punti) Dato lo schema concettuale in figura E1 K1 A id: K1 1-1 P E2 K2 B C[0-N] id': K2 E3 D 0-N R1 e considerando che: a) tutti gli attributi sono di tipo INT; b) la gerarchia viene collassata verso il basso; c) l’associazione R1 non viene tradotta separatamente; d) un’istanza di E3 non è mai associata tramite R1 a istanze di E1 con A=10; si progettino gli opportuni schemi relazionali e si definiscano tali schemi facendo uso dell’SQL di DB2; per gli eventuali vincoli non esprimibili a livello di schema si predispongano opportune query di verifica da eseguire prima di effettuare inserimenti di tuple, allo scopo di evitare che tali inserimenti violino i vincoli stessi. CREATE TABLE E2 ( K1 INT NOT NULL PRIMARY KEY, A INT NOT NULL CONSTRAINT Punto_d CHECK (A <> 10), K2 INT NOT NULL UNIQUE, B INT NOT NULL, K1R1 INT NOT NULL REFERENCES E3 ); CREATE TABLE E3 ( K1 INT NOT NULL PRIMARY KEY, A INT NOT NULL CONSTRAINT Punto_d CHECK (A <> 10), D INT NOT NULL K1R1 INT NOT NULL REFERENCES E3 ); CREATE TABLE E2C ( K1 INT NOT NULL REFERENCES E2, C INT NOT NULL, PRIMARY KEY (K1,C) ); Per garantire che un valore di K1 non sia presente contemporaneamente in E2 ed E3, all’atto dell’inserimento di una tupla (k1, …) in E2 (analogamente quando si inserisce in E3) va eseguita la query: SELECT * FROM E3 -- ok se non restituisce nessuna tupla WHERE K1 = k1; Per quanto riguarda il vincolo al punto d), si noti che esso di fatto impedisce istanze di E1 in cui A=10. Se infatti vi fosse un’istanza con A=10, questa sarebbe necessariamente associata a un’istanza di E3 e il vincolo sarebbe violato. E’ quindi sufficiente inserire nelle due relazioni E2 ed E3 la clausola CHECK (A<>10). 3) DB fisico (2 punti) Si vedano le slides del corso “DB fisico”, pp. 24-26. 2/2