Beruflich Dokumente
Kultur Dokumente
Il progetto prevede la realizzazione della base di dati per la gestione di una compagnia che
effettua trasporti marittimi.
La società, oltre ad avere una propria flotta di una decina di navi porta-container, utilizza
mediamente altri venti carghi noleggiati da armatori.
Ogni nave è identificata da un codice univoco di targa (numero IMO), il nome assegnatole e una
serie di caratteristiche tecniche (nazionalità, stazza, pescaggio, autonomia, ecc.). Per le navi
noleggiate si vogliono conoscere anche i dati anagrafici e i contatti delle società armatrici. E'
anche necessario registrare i relativi contratti di noleggio memorizzando il numero di
registrazione dell'atto, la data di stipula e il periodo di disponibilità del mezzo. Si noti che ogni
contratto è relativo al noleggio di una singola nave da una società armatrice, per un periodo di
tempo determinato nel contratto stesso, durante il quale la nave potrà compiere diverse
missioni.
Per ogni nave è anche definita la tipologia dell'equipaggio (crew-type) ovvero il numero e la
qualifica delle diverse figure che dovranno comporre il personale di bordo durante la
navigazione (e.g. un comandante, ufficiali, macchinisti, cuochi, marinai, ecc..). Per ogni
qualifica viene indicato se sono necessari patenti o certificazioni attestanti l'idoneità del
personale al ruolo da svolgere. Mediamente ogni nave dovrà imbarcare circa 25 persone
ripartite tra i vari ruoli.
La società organizza circa un centinaio di missioni ogni anno identificate da un numero
progressivo. Ogni missione prevede il trasporto di container, di proprietà di aziende clienti, da
un porto di partenza ad uno di destinazione, seguendo una specifica rotta. Una rotta è definita
da una serie ordinata di punti notevoli (mediamente un centinaio), che verranno attraversati
dalla nave durante la navigazione. Per ogni punto se ne conoscono le coordinate geografiche, la
data e l'ora, prevista ed effettiva, di attraversamento. Per i porti di partenza e di destinazione
(che rappresentano il primo e l'ultimo punto della rotta) saranno memorizzati rispettivamente i
tempi di partenza e di arrivo.
Il carico di una missione, che in base alla nave utilizzata varierà tra i 3000 e i 6000 container,
dovrà essere registrato memorizzando per ogni container trasportato, il codice, la tipologia del
contenuto, l'azienda proprietaria ed i dati del relativo contratto di trasporto. Da notare che il
contratto di trasporto, stipulato tra un'azienda cliente e la compagnia, è relativo ad una
specifica missione e può prevedere il trasporto di più container. Di ciascun contratto di
trasporto si vuole conoscere la data di sottoscrizione e il prezzo pattuito.
Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.
Per ogni dipendente si conosce la matricola, i dati anagrafici, e la mansione (in particolare se si
tratta di personale amministrativo o personale di bordo che potrà essere assegnato a missioni
di trasporto). Per il personale di bordo devono essere note le abilitazioni che possiede e i ruoli
che può assumere su una nave. Per ogni ruolo è definito il costo giornaliero della persona che
lo coprirà.
Le operazioni previste sul data base sono le seguenti:
1. Per ogni entità individuata, necessaria in fase di impianto, fornire gli statement di
inserimento, modifica ed eliminazione dei dati corrispondenti. Tenere presente che tali
operazioni potranno essere eseguite dai soli amministratori di sistema.
2. Verificare se una nave noleggiata è stata assegnata ad una missione che si svolge,
anche solo parzialmente, al di fuori del periodo di validità del contratto di noleggio.
3. Verificare se una nave è stata erroneamente assegnata a missioni che si svolgono in
periodi di tempo sovrapposti, anche solo parzialmente.
4. Data una nave e due missioni a cui è assegnata, una immediatamente successiva
all'altra, controllare che il porto di partenza della missione successiva coincida con il
porto di arrivo della missione precedente.
5. In fase di inserimento di un nuovo membro dell'equipaggio relativo ad una data
missione, verificare se:
a) il ruolo assegnato è previsto nel “crew-type” della nave assegnata alla missione;
b) il ruolo è ancora vacante;
c) il dipendente è effettivamente abilitato per quel ruolo.
6. Durante lo svolgimento di una missione, verificare il posizionamento della nave rispetto
alla rotta prevista e valutare l'anticipo o il ritardo rispetto al piano previsto (si ipotizza
l'esistenza di un automatismo per l'aggiornamento del DB al momento del passaggio
della nave su ogni punto notevole della rotta, per cui la verifica verrà “triggerata”
dalla stessa operazione automatica di aggiornamento).
7. Controllare se esiste il rischio di collisione tra le navi utilizzate (in pratica verificare
che non esistano punti geografici comuni a più rotte con tempi di attraversamento
pianificati uguali; opzionalmente, per essere più realistici, verificare che la differenza
dei tempi di attraversamento sui punti comuni, non sia inferiore ad un'ora; la ricerca
può essere limitata alle navi per le quali i periodi di navigazione previsti siano
sovrapposti)
8. Data una missione, verificare, in base ai contratti stipulati con i clienti, che il numero
complessivo dei container da trasportare, sia compreso tra lo 80% e il 100% della
capacità di carico della nave assegnata.
9. Viceversa, data una missione e noto il numero complessivo di container da trasportare,
definire una nave da assegnare, tra quelle che non sono impegnate in altre missioni,
che massimizzi il carico (ovvero che abbia la capacità di carico più piccola tra tutte
quelle che siano in grado di stivare il numero di container richiesti).
10. Relativamente all'operazione precedente, se la nave da assegnare è una nave
noleggiata, controllare, come definito nell'operazione 2, che la missione si sviluppi nel
periodo di validità del contratto di noleggio.
11. Calcolare il fatturato mensile in base ai contratti di trasporto stipulati
Individuare le regole di vincolo e di derivazione che possono essere applicate ai contenuti di
questa base di dati. L’individuazione dei vincoli e la loro implementazione costituiscono un
requisito fondamentale per lo sviluppo di un progetto realistico, e ne verrà tenuto conto
durante la valutazione finale.
Alcune delle funzionalità richieste potrebbero non essere realizzabili con singole query, ma
richiedere l’uso di strumenti più avanzati messi a disposizione dal DBMS, come le procedure
e/o i trigger, o richiedere l'utilizzo di applicazioni esterne.
NOTE:
1) il termine "flotta" definisce l'insieme delle navi che appartengono ad una determinata
“compagnia”.
il termine "navi" ha come sinonimi i termini "cargo" e "mezzo”. Esso si usa per differenziare due
distinte situazioni:
- indicare navi da trasporto di container ;
- indicare navi da noleggio .
2) il termine "carico" specifica l'insieme di container che una specifica nave trasporta .
3) il termine "qualifica" è sinonimo dei termini "ruolo" e "mansione" .
4) il termine "abilitazione" è sinonimo dei termini "patenti" e "certificazione" .
5) il termine "società'" è sinonimo del termine "compagnia" .
6) il termine "crew-type" specifica la tipologia dell'equipaggio presente in una determinata nave
durante una determinata missione .
7) il termine "dipendenti" viene usato in due contesti diversi:
-per il “personale amministrativo”.
-per il “personale di bordo” espresso anche con il termine “membro dell'equipaggio”;
8) il termine "contratto" viene usato in due contesti differenti, cioè per indicare:
- un “contratto di noleggio”;
- un “contratto di trasporto”;
9) il termine "rotta" viene utilizzato per indicare l'insieme dei “punti notevoli”.
Un punto notevole compone una rotta e può indicare:
- il porto di partenza di una nave ;
- il porto di destinazione di una nave .
Glossario dei termini:
Numero e tipologia
Crew-type
dell'equipaggio
Attività inerente al
Missione
trasporto di container
Per ogni nave è anche definita la tipologia dell'equipaggio (crew-type) ovvero il numero e la
qualifica delle diverse figure che dovranno comporre il personale di bordo durante la
navigazione (e.g. un comandante, ufficiali, macchinisti, cuochi, marinai, ecc..).
Operazione 2: Verificare se una nave noleggiata è stata assegnata ad una missione che si svolge,
anche solo parzialmente, al di fuori del periodo di validità del contratto di noleggio.
Operazione 3: Verificare se una nave è stata erroneamente assegnata a missioni che si svolgono in
periodi di tempo sovrapposti, anche solo parzialmente.
Per ogni ruolo è definito il costo giornaliero della persona che lo coprirà.
Operazione 4: Data una nave e due missioni a cui è assegnata, una immediatamente successiva
all'altra, controllare che il porto di partenza della missione successiva coincida con il porto di arrivo
della missione precedente.
Operazione 7: Controllare se esiste il rischio di collisione tra le navi utilizzate (in pratica verificare
che non esistano punti geografici comuni a più rotte con tempi di attraversamento pianificati
uguali; opzionalmente, per essere più realistici, verificare che la differenza dei tempi di
attraversamento sui punti comuni, non sia inferiore ad un'ora; la ricerca può essere limitata alle
navi per le quali i periodi di navigazione previsti siano sovrapposti)
Operazione 8: Data una missione, verificare, in base ai contratti stipulati con i clienti, che il
numero complessivo dei container da trasportare, sia compreso tra lo 80% e il 100% della capacità
di carico della nave assegnata.
Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.
Le frasi:
“Si noti che ogni contratto è relativo al noleggio di una singola nave da una società armatrice, per
un periodo di tempo determinato nel contratto stesso, durante il quale la nave potrà compiere
diverse missioni.”
“Per ogni nave è anche definita la tipologia dell'equipaggio (crew-type) ovvero il numero e la
qualifica delle diverse figure che dovranno comporre il personale di bordo durante la
navigazione (e.g. un comandante, ufficiali, macchinisti, cuochi, marinai, ecc..).”
la frase:
“La società, oltre ad avere una propria flotta di una decina di navi porta-container, utilizza
mediamente altri venti carghi noleggiati da armatori.”
Porta container
la frase:
“Il carico di una missione, che in base alla nave utilizzata varierà tra i 3000 e i 6000 container...”
identifica l'attributo carico trasportabile che può assumere valori numerici compresi tra 3000 e
6000.
Da noleggio
Le frase:
“Si noti che ogni contratto è relativo al noleggio di una singola nave da una società armatrice...”
Le frasi:
“Ogni missione prevede il trasporto di container, di proprietà di aziende clienti...”
“...da un porto di partenza ad uno di destinazione, seguendo una specifica rotta. Una rotta è
definita
da una serie ordinata di punti notevoli (mediamente un centinaio), che verranno attraversati
dalla nave durante la navigazione.”
“Da notare che il contratto di trasporto, stipulato tra un'azienda cliente e la compagnia, è relativo
ad una specifica missione e può prevedere il trasporto di più container.”
“Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.”
identificano associazioni con le entità nave, contratto di trasporto, personale di bordo, punto
notevole.
Vincolo: Quando in una istanza della relazione Compone il valore dell'attributo porto è uguale a p
il corrispondente valore dell'attributo data_attraversamento_pr deve essere maggiore o uguale
del relativo valore dell'attributo data dell'entità Contratto di Trasporto
Promozione del concetto “ruolo” a entità
La frase:
“...è definita la tipologia dell'equipaggio (crew-type) ovvero il numero e la
qualifica delle diverse figure che dovranno comporre il personale di bordo durante la
navigazione (e.g. un comandante, ufficiali, macchinisti, cuochi, marinai, ecc..).”
Le frasi:
“Per ogni qualifica viene indicato se sono necessari patenti o certificazioni attestanti l'idoneità del
personale al ruolo da svolgere.”
“Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.”
in particolare la frase:
“Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.”
Vincolo: Il numero di istanze dell'associazione ternaria Fa per uno specifico ruolo e una
determinata missione deve essere minore o uguale del valore dell'attributo numtot relativo a quel
ruolo e alla crew-type della corrispondente nave.
Promozione del concetto “abilitazione” a entità
la frase:
“Per ogni qualifica viene indicato se sono necessari patenti o certificazioni attestanti l'idoneità del
personale al ruolo da svolgere.”
Patente
Non ci sono frasi specifiche relativamente all’entità figlia “patente”.
Certificazione
Non ci sono frasi specifiche relativamente all’entità figlia “certificazione”.
La frase:
“Per ogni dipendente si conosce la matricola, i dati anagrafici, e la mansione (in particolare se si
tratta di personale amministrativo o personale di bordo che potrà essere assegnato a missioni di
trasporto).”
Personale amministrativo
Non ci sono frasi specifiche relativamente all’entità figlia “personale amministrativo”.
Personale di bordo
La frase:
“Per ogni missione deve anche essere assegnato il personale di bordo, selezionato tra i
dipendenti della compagnia, rispettando il “crew-type” definito per la nave associata alla
missione stessa.”
La frase:
“E' anche necessario registrare i relativi contratti di noleggio memorizzando il numero di
registrazione dell'atto, la data di stipula e il periodo di disponibilità del mezzo.”
identifica gli attributi data e disponibilità. L'attributo numero di registrazione distingue ogni
istanza dell'entità contratto di noleggio.
La frase:
“Si noti che ogni contratto è relativo al noleggio di una singola nave da una società armatrice, per
un periodo di tempo determinato nel contratto stesso, durante il quale la nave potrà compiere
diverse missioni.”
Vincolo: Non possono appartenere,anche parzialmente, più di venti contratti di noleggio allo
stesso periodo di validità
Promozione del concetto “contratto di trasporto” a entità
La frase:
“Di ciascun contratto di trasporto si vuole conoscere la data di sottoscrizione e il prezzo pattuito.”
Non sono definite chiavi, tuttavia, poiché un contratto è riferito a una specifica missione, la data di
stipula del contratto unitamente alla missione cui si riferisce rappresentano una chiave.
La frase:
“Da notare che il contratto di trasporto, stipulato tra un'azienda cliente e la compagnia, è relativo
ad una specifica missione e può prevedere il trasporto di più container.”
Vincolo: Non possono appartenere, anche parzialmente, più di dieci contratti di trasporto allo
stesso periodo di validità.
La frase:
“Il carico di una missione, che in base alla nave utilizzata varierà tra i 3000 e i 6000 container,
dovrà essere registrato memorizzando per ogni container trasportato, il codice, la tipologia del
contenuto, l'azienda proprietaria ed i dati del relativo contratto di trasporto.”
determina l'attributo società armatrice, la chiave identificativa per ogni istanza di società
armatrice, composta da:
*nome
*città
*indirizzo
La frase:
“Si noti che ogni contratto è relativo al noleggio di una singola nave da una società armatrice, per
un periodo di tempo determinato nel contratto stesso, durante il quale la nave potrà compiere
diverse missioni.”
definisce la chiave identificativa coordinata geografica per ogni istanza dell'entità punto notevole.
L'associazione compone tra l'entità punto notevole e l'entità missione include i seguenti attributi:
*data attraversamento prevista;
*data attraversamento effettiva;
*ora attraversamento prevista;
*ora attraversamento effettiva;
*porto (può assumere due valori booleani p=partenza o d=destinazione).
Nota: i tempi di partenza e di arrivo nei rispettivi porti coincido con l ora effettiva di
attraversamento.
REGOLE DI VINCOLO
RV1: Quando in una istanza della relazione “Compone” il valore dell'attributo “Porto” è uguale a
“p”, il corrispondente valore dell'attributo “Data_attraversamento_pr” deve essere maggiore o
uguale del relativo valore dell'attributo “Data” dell'entità “Contratto di Trasporto”.
RV2: Il numero di istanze dell'associazione ternaria “Fa”, per uno specifico ruolo e una
determinata missione, deve essere minore o uguale del valore dell'attributo “Numtot” relativo a
quel ruolo e alla corrispondente nave.
RV3: Non possono appartenere,anche parzialmente, più di venti contratti di noleggio allo stesso
periodo di validità.
RV4: Non possono appartenere,anche parzialmente, più di dieci contratti di trasporto allo stesso
periodo di validità.
RV5: La data e l'ora previste ed effettive di attraversamento di un punto notevole devono essere
minori di quelle del punto notevole successivo presente nella rotta.
REGOLE DI DERIVAZIONE
OPERAZIONI:
1. Per ogni entità individuata, necessaria in fase di impianto, fornire gli statement di
inserimento, modifica ed eliminazione dei dati corrispondenti. Tenere presente che tali
operazioni potranno essere eseguite dai soli amministratori di sistema.
2. Verificare se una nave noleggiata è stata assegnata ad una missione che si svolge, anche
solo parzialmente, al di fuori del periodo di validità del contratto di noleggio.
3. Verificare se una nave è stata erroneamente assegnata a missioni che si svolgono in periodi
di tempo sovrapposti, anche solo parzialmente.
4. Data una nave e due missioni a cui è assegnata, una immediatamente successiva all'altra,
controllare che il porto di partenza della missione successiva coincida con il porto di arrivo
della missione precedente.
5. In fase di inserimento di un nuovo membro dell'equipaggio relativo ad una data missione,
verificare se:
a. il ruolo assegnato è previsto nel “crew-type” della nave assegnata alla missione;
b. il ruolo è ancora vacante;
c. il dipendente è effettivamente abilitato per quel ruolo.
6. Durante lo svolgimento di una missione, verificare il posizionamento della nave rispetto
alla rotta prevista e valutare l'anticipo o il ritardo rispetto al piano previsto (si ipotizza
l'esistenza di un automatismo per l'aggiornamento del DB al momento del passaggio della
nave su ogni punto notevole della rotta, per cui la verifica verrà “triggerata” dalla stessa
operazione automatica di aggiornamento).
7. Controllare se esiste il rischio di collisione tra le navi utilizzate (in pratica verificare che non
esistano punti geografici comuni a più rotte con tempi di attraversamento pianificati
uguali; opzionalmente, per essere più realistici, verificare che la differenza dei tempi di
attraversamento sui punti comuni, non sia inferiore ad un'ora; la ricerca può essere
limitata alle navi per le quali i periodi di navigazione previsti siano sovrapposti)
8. Data una missione, verificare, in base ai contratti stipulati con i clienti, che il numero
complessivo dei container da trasportare, sia compreso tra lo 80% e il 100% della capacità
di carico della nave assegnata.
9. Viceversa, data una missione e noto il numero complessivo di container da trasportare,
definire una nave da assegnare, tra quelle che non sono impegnate in altre missioni, che
massimizzi il carico (ovvero che abbia la capacità di carico più piccola tra tutte quelle che
siano in grado di stivare il numero di container richiesti).
10. Relativamente all'operazione precedente, se la nave da assegnare è una nave noleggiata,
controllare, come definito nell'operazione 2, che la missione si sviluppi nel periodo di
validità del contratto di noleggio.
11. Calcolare il fatturato mensile in base ai contratti di trasporto stipulati
Nello Schema E/R definito sono presenti sia generalizzazioni, sia attributi multivalore; è necessario
eliminarli.
La prima generalizzazione che incontriamo riguarda le navi, ovvero una nave puo essere una
nave nolleggiata oppure una nave porta container. L'entità padre può essere accorpata nelle
entità figlie, poichè gli accessi al padre e alle figli sono distinti.
La seconda generalizzazione presente riguarda i dipendenti: un dipendente può essere un
personale amministrativo oppure un personale di bordo. Dato che gli accessi alle entità figlie e
all'entità padre sono contestuali, si può optare per l'accorpamento dell'entita figlie nel padre.
ANALISI DELLE RIDONDANZE
Schema E-R ristrutturato
Tavola degli Accessi:
Nell’operazione 4, data una nave e due missioni a cui è assegnata, una immediatamente
successiva all'altra, bisogna controllare che il porto di partenza della missione successiva coincida
con il porto di arrivo della missione precedente.
Perciò risulterà la seguente tabella degli accessi:
Il numero di accessi richiesti da tale calcolo è pari a 7. Contando 1 volta al giorno all’incirca
e 30 navi, per ogni nane ci saranno 2 missioni.
Per un totale di 30 accessi per le due diverse entità Navi al giorno avremo un totale di 60
accessi.
ENGINE = InnoDB
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
CONSTRAINT `fk_Ruolo_has_Abilitazione_Ruolo1`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Ruolo_has_Abilitazione_Abilitazione1`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
ENGINE = InnoDB
CONSTRAINT `fk_Abilitazione_has_Dipendente_Abilitazione1`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Abilitazione_has_Dipendente_Dipendente1`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
CONSTRAINT `fk_Missione_has_Dipendente_Missione1`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Missione_has_Dipendente_Dipendente1`
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Fa_Ruolo1`
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
ON DELETE NO ACTION
ON UPDATE NO ACTION,
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB