Sie sind auf Seite 1von 37

Analisi dei requisiti

Individuazione dei concetti relativi

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:

TERMINE DESCRIZIONE SINONIMI COLLEGAMENTI


Società Compagnia
Nave Cargo, mezzo
Compito che un membro
Ruolo dell'equipaggio svolge Qualifica
all'interno di una nave
Riconoscimento che
autorizza un dipendente
Abilitazione Patente, certificazione
ad esercitare uno
specifico ruolo
Personale di bordo Membro equipaggio
Luogo preciso all'interno
di una rotta identificato Porto di partenza, porto
Punto notevole
tramite coordinate di destinazione
geografiche
Contratto di trasporto,
Contratto
contratto di noleggio
Personale
Dipendente amministrativo,
personale di bordo
Container

Numero e tipologia
Crew-type
dell'equipaggio

Attività inerente al
Missione
trasporto di container

Importo da pagare per il


Costo giornaliero servizio svolto da un
membro dell'equipaggio

Ente proprietario dei


Azienda cliente
container da trasportare

Società che detiene


Società armatrice
l'esercizio della nave
Strutturazione dei requisiti

Frasi di carattere generale


Il progetto prevede la realizzazione della base di dati per la gestione di una compagnia che
effettua trasporti marittimi.

Frasi relative a: nave


La società, oltre ad avere una propria flotta di una decina di navi porta-container, utilizza
mediamente altri venti carghi noleggiati da armatori.
Per ogni nave si DEVONO sapere:
*codice IMO;
*nome;
*caratteristiche tecniche:
-nazionalità;
-stazza;
-pescaggio;
-autonomia.
*capacità di carico.

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.

Operazione 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).

Frasi relative a: ruolo


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 ruolo è definito il costo giornaliero della persona che lo coprirà.

Operazione 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.

Frasi relative a: abilitazione


Per ogni qualifica viene indicato se sono necessari patenti o certificazioni attestanti l'idoneità del
personale al ruolo da svolgere.

Frasi relative a: punto notevole


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 di ogni nave per una missione;
*se è un porto di partenza o destinazione.

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 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).

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)

Frasi relative a: contratto di noleggio


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.

Frasi relative a: contratto di trasporto


Di ciascun contratto di trasporto si vuole conoscere la data di sottoscrizione e il prezzo pattuito.

Operazione 11: Calcolare il fatturato mensile in base ai contratti di trasporto stipulati

Frasi relative a: dipendente


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.

Frasi relative a: container


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.

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.

Frasi relative a: missione


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.

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.

Operazione 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.

Frasi relative a: azienda cliente


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.

Frasi relative a: società armatrice


Per le navi noleggiate si vogliono conoscere anche i dati anagrafici e i contatti delle società
armatrici.
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.
Schema concettuale

Promozione del concetto “nave” a entità


La frase:
“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.)”

identifica gli attributi dell'entità nave.


L'attributo IMO rappresenta la chiave identificativa di ogni istanza nave.

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..).”

identificano associazioni verso entità missione, contratto, ruolo.

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.”

definisce una gerarchia.

Lo svolgimento dell'operazione 9 richiede l'aggiunta dell'attributo capacità nell'entità Nave,


mentre le operazioni 2,3 non definiscono altri attributi.

Dettaglio dei figli della gerarchia “nave”

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...”

identifica una relazione con contratto di noleggio.


Promozione del concetto “missione” a entità
La frase:
“La società organizza circa un centinaio di missioni ogni anno identificate da un numero
progressivo.”
identifica l'attributo numero progressivo che è la chiave di ogni istanza di missione.

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.

L'operazione 10 non definisce nessun altro attributo per l'entità Missione.

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..).”

identifica l'attributo “nome” dell'entità ruolo.

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.”

definiscono associazioni con le entità abilitazione e nave.


L'operazione 5 richiede nell'associazione fra Nave e Ruolo l'aggiunta dell' attributo
numtot(numero previsto dei dipendenti che svolgono un determinato ruolo in una specifica nave)

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.”

identifica una relazione ternaria tra ruolo, missione e personale di bordo.

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.”

identifica l'attributo nome dell'entità, inoltre individua una gerarchia.

Dettaglio dei figli della gerarchia “abilitazione”

Patente
Non ci sono frasi specifiche relativamente all’entità figlia “patente”.

Certificazione
Non ci sono frasi specifiche relativamente all’entità figlia “certificazione”.

Promozione del concetto “dipendente” a entità

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).”

identifica la chiave identificativa matricola e l'attributo dati anagrafici composto da:


*nome
*cognome
*data di nascita

Inoltre definisce un'associazione con l'entità “abilitazione” nell'eventualità in cui si tratti di


personale di bordo, quindi è specificata una gerarchia.

Dettaglio dei figli della gerarchia “dipendente”

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.”

determina un'associazione con le entità ruolo e missione.

Promozione del concetto “contratto di noleggio” a entità

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.”

identifica associazioni con società armatrice e contratto di noleggio.

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.”

identifica gli attributi data e prezzo.

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.”

identifica associazioni con le entità missione e container.

Vincolo: Non possono appartenere, anche parzialmente, più di dieci contratti di trasporto allo
stesso periodo di validità.

Promozione del concetto “container” a entità

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.”

identifica la chiave primaria codice e gli attributi tipologia e azienda.


Inoltre definisce un'associazione con contratto di trasporto.
L'operazione 8 non definisce nessun altro attributo per l'entità Container.

Promozione del concetto “società armatrice” a entità


La frase:
“Per le navi noleggiate si vogliono conoscere anche i dati anagrafici e i contatti delle società
armatrici.”

determina l'attributo società armatrice, la chiave identificativa per ogni istanza di società
armatrice, composta da:
*nome
*città
*indirizzo

Inoltre specifica l'associazione con l'entità contatti.

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.”

identifica un'associazione con contratto di noleggio.

Promozione del concetto “punti notevoli” a entità


La frase :
“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.”

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.

Vincolo: 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.
DOCUMENTAZIONE DELLE ENTITA'
ENTITA' DESCRIZIONE ATTRIBUTI IDENTIFICATORE
Nave Nome,capacità,caratt.tec targa
niche(autonomia,stazza,n
azionalità,pescaggio)
Porta Container
Da Noleggio
Ruolo Compito che un membro costo nomer
dell'equipaggio svolge
all'interno di una nave
Dipendente dati matricola
anagrafici(nome,cognom
e,data nascita,luogo
nascita)
Personale
Amministrativo
Personale Di Bordo
Abilitazione Riconoscimento che nome,tipo
autorizza un dipendente
ad esercitare uno
specifico ruolo
Missione Attività inerente al num
trasporto di container
Punto Notevole Luogo preciso all'interno coordinata_geografica
di una rotta identificato
tramite coordinate
geografiche
Contratto Di Noleggio data,disp nreg
Contratto Di Trasporto prezzo num,datact
Società Armatrice Società che detiene data fondazione nome,città,indirizzo
l'esercizio della nave
Contatti telefono,fax,e-mail nome,città,indirizzo
Container tipologia codice,azienda

DOCUMENTAZIONI DELLE RELAZIONI

RELAZIONE DESCRIZIONE ENTITA' COINVOLTE ATTRIBUTI


Fa Parte Assegna i ruoli su una Nave,Ruolo numtot
nave
Possiede Associa l'abilitazione che Ruolo,Abilitazione
si ha per il ruolo
Ha Associa ad ogni membro Abilitazione,Personale
del personale di bordo Di Bordo
tutte le abilitazioni che
possiede
Fa Associa il ruolo al Ruolo,Personale Di
dipendente che svolge Bordo,Missione
una determinata missione
Usufruisce Specifica i contatti che Società
una determinata società Armatrice,Contatti
armatrice possiede
Esegue Specifica il contratto di Contratto Di
noleggio stipulato dalla Noleggio,Missione
nave da noleggio che fa
quella missione
Appartiene Associa alla missione il Missione,Contratto Di
contratto di trasporto Trasporto
Stipula Specifica il contratto di Contratto Di
noleggio stipulato dalla Noleggio,Società
società armatrice Armatrice
Compie Specifica la missione che Missione, Nave
una determinata nave
compie
Compone Specifica l'insieme dei Missione, Punto Porto,data_attraversame
punti notevoli(rotta) che Notevole nto_eff,data_attraversa
compongono una mento_pr,ora_attraversa
determinata missione. mento_eff,ora_attravers
amento_eff
Compongono Specifica quanti container Container, Contratto di
ci sono in quel contratto Trasporto
di trasporto

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

RD1 – Calcolo del fatturato mensile


Fatturato=∑prezzo
Prezzo: costo di un contratto di trasporto.

RD2 – Verifica carico compreso tra l'80 e il 100 per cento


(Capacità/100)*80 <= Numero container <= Capacità

TAVOLA DEI VOLUMI:

CONECETTO TIPO VOLUME


Nave E 30
Ruolo E 25
Dipendente E 300
Abilitazione E 10
Missione E 100/anno
Contratto di Trasporto E =>100/anno
Container E 3000/6000
Contratto di Noleggio E >30/anno
Società Armatrice E 20
Contatti E 40
Punti Notevoli E 100
Fa Parte R 750
Possiede R 25(?)
Compone R 10000
Compongono R 300000/600000
Fa R 300
Fa R 7500
Ha R 3000
Appartiene R 100(ALMENO)
Riferito R >=30
Stipula R 30
Usufruisce R 40
Compie R 10000

TAVOLA DELLE OPERAZIONI:

OPERAZIONE TIPO FREQUENZA


1 I 1/giorno
2 B 8/mese
3 B 8/mese
4 I 1/giorno
5 I 1/giorno
6 B 8/mese
7 B 8/mese
8 B 8/mese
9 B 8/mese
10 B 8/mese
11 B 1/mese

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

RISTRUTTURAZIONE SCHEMA E/R:

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:

Concetto Costrutto Accesso Tipo


Nave da Noleggio E 1 L
Porta Container E 1 L
CompieP R 1 L
CompieN R 1 L
Missione E 1 L
Compone R 1 L
Punto Notevole E 1 L

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.

Traduzione al modello relazionale


SCHEMA RELAZIONALE:
Nave Da Noleggio(targan,nomen,autonomia,capacità,pescaggio,stazza,nazionalità)
Porta Container( targap,nomep,autonomia,capacità,pescaggio,stazza,nazionalità)
Ruolo(nomer,costo)
FaParteN( nomer,targan,numtot )
FaParteP(nomer,targap,numtot)
Abilitazione(nomea,tipo)
Ha(matricola,nomea,tipo)
Dipendente(matricola,nome,data_nascita,luogo_nascita,tipo)
Fa(nomer,num,matricola)
Missione(num)
Compone(num,cordgeog,dataattrpr,dataattreff,oraattrpr,oraattreff,porto)
Punto Notevole(coordinata_geografica)
Container(codice,azienda,tipologia)
Contratto Di Trasporto(datact,num,prezzo)
Appartiene (num,numct)
Contratto Di Noleggio(nreg,data,disp)
Esegue (num,nreg)
Società Armatrice (nomes,città,indirizzo,data_fondazione)
Stipula (nreg,nomes,città,indirizzo)
Compongono (codice,azienda,datact,numct)
CompieP (num,targap)
CompieN (num,tragan)

Vincoli di integrità referenziale


I vincoli di integrità referenziale sono individuati nel modello relazionale attraverso caratteri evidenziati.

Creazione Tabelle in SQL:


CREATE TABLE IF NOT EXISTS `navi mercantili`.`Nave da noleggio` (

`targan` INT(11) NOT NULL,

`nomen` VARCHAR(45) NOT NULL,

`nazionalità` VARCHAR(45) NOT NULL,

`autonomia` INT(11) NOT NULL,

`capacità` INT(11) NOT NULL,

`pescaggio` INT(11) NOT NULL,

`stazza` INT(11) NOT NULL,

PRIMARY KEY (`targan`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Porta container` (

`targap` INT(11) NOT NULL,

`nomep` VARCHAR(45) NOT NULL,

`nazionalità` VARCHAR(45) NOT NULL,

`autonomia` INT(11) NOT NULL,

`capacità` INT(11) NOT NULL,

`pescaggio` INT(11) NOT NULL,

`stazza` INT(11) NOT NULL,

PRIMARY KEY (`targap`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Ruolo` (

`nomer` VARCHAR(45) NOT NULL,

`costo` INT(11) NOT NULL,

PRIMARY KEY (`nomer`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`FaparteN` (


`targan` INT(11) NOT NULL,

`nomer` VARCHAR(45) NOT NULL,

`numtot` INT(11) NOT NULL,

PRIMARY KEY (`targan`, `nomer`),

INDEX `fk_Nave da noleffio_has_Ruolo_Ruolo1_idx` (`nomer` ASC),

INDEX `fk_Nave da noleffio_has_Ruolo_Nave da noleffio_idx` (`targan` ASC),

CONSTRAINT `fk_Nave da noleffio_has_Ruolo_Nave da noleffio`

FOREIGN KEY (`targan`)

REFERENCES `navi mercantili`.`Nave da noleggio` (`targan`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Nave da noleffio_has_Ruolo_Ruolo1`

FOREIGN KEY (`nomer`)

REFERENCES `navi mercantili`.`Ruolo` (`nomer`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`FaparteP` (

`nomer` VARCHAR(45) NOT NULL,

`targap` INT(11) NOT NULL,

`numtot` INT(11) NULL DEFAULT NULL,

PRIMARY KEY (`nomer`, `targap`),

INDEX `fk_Ruolo_has_Porta container_Porta container1_idx` (`targap` ASC),

INDEX `fk_Ruolo_has_Porta container_Ruolo1_idx` (`nomer` ASC),

CONSTRAINT `fk_Ruolo_has_Porta container_Ruolo1`

FOREIGN KEY (`nomer`)

REFERENCES `navi mercantili`.`Ruolo` (`nomer`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Ruolo_has_Porta container_Porta container1`


FOREIGN KEY (`targap`)

REFERENCES `navi mercantili`.`Porta container` (`targap`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Abilitazione` (

`nomea` VARCHAR(45) NOT NULL,

`tipo` VARCHAR(45) NOT NULL,

PRIMARY KEY (`nomea`, `tipo`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Possiede` (

`nomer` VARCHAR(45) NOT NULL,

`nomea` VARCHAR(45) NOT NULL,

`tipo` VARCHAR(45) NOT NULL,

PRIMARY KEY (`nomer`, `nomea`, `tipo`),

INDEX `fk_Ruolo_has_Abilitazione_Abilitazione1_idx` (`nomea` ASC, `tipo` ASC),

INDEX `fk_Ruolo_has_Abilitazione_Ruolo1_idx` (`nomer` ASC),

CONSTRAINT `fk_Ruolo_has_Abilitazione_Ruolo1`

FOREIGN KEY (`nomer`)

REFERENCES `navi mercantili`.`Ruolo` (`nomer`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Ruolo_has_Abilitazione_Abilitazione1`

FOREIGN KEY (`nomea` , `tipo`)

REFERENCES `navi mercantili`.`Abilitazione` (`nomea` , `tipo`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Dipendente` (

`matricola` INT(11) NOT NULL,

`nome` VARCHAR(45) NOT NULL,

`datanascita` DATE NOT NULL,

`tipo` VARCHAR(45) NOT NULL,

PRIMARY KEY (`matricola`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Ha` (

`nomea` VARCHAR(45) NOT NULL,

`tipo` VARCHAR(45) NOT NULL,

`matricola` INT(11) NOT NULL,

PRIMARY KEY (`nomea`, `tipo`, `matricola`),

INDEX `fk_Abilitazione_has_Dipendente_Dipendente1_idx` (`matricola` ASC),

INDEX `fk_Abilitazione_has_Dipendente_Abilitazione1_idx` (`nomea` ASC, `tipo` ASC),

CONSTRAINT `fk_Abilitazione_has_Dipendente_Abilitazione1`

FOREIGN KEY (`nomea` , `tipo`)

REFERENCES `navi mercantili`.`Abilitazione` (`nomea` , `tipo`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Abilitazione_has_Dipendente_Dipendente1`

FOREIGN KEY (`matricola`)

REFERENCES `navi mercantili`.`Dipendente` (`matricola`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Missione` (


`num` INT(11) NOT NULL,

PRIMARY KEY (`num`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Fa` (

`num` INT(11) NOT NULL,

`matricola` INT(11) NOT NULL,

`nomer` VARCHAR(45) NOT NULL,

PRIMARY KEY (`num`, `matricola`, `nomer`),

INDEX `fk_Missione_has_Dipendente_Dipendente1_idx` (`matricola` ASC),

INDEX `fk_Missione_has_Dipendente_Missione1_idx` (`num` ASC),

INDEX `fk_Fa_Ruolo1_idx` (`nomer` ASC),

CONSTRAINT `fk_Missione_has_Dipendente_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Dipendente_Dipendente1`

FOREIGN KEY (`matricola`)

REFERENCES `navi mercantili`.`Dipendente` (`matricola`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Fa_Ruolo1`

FOREIGN KEY (`nomer`)

REFERENCES `navi mercantili`.`Ruolo` (`nomer`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`CompieP` (


`num` INT(11) NOT NULL,

`targap` INT(11) NOT NULL,

PRIMARY KEY (`num`, `targap`),

INDEX `fk_Missione_has_Porta container_Porta container1_idx` (`targap` ASC),

INDEX `fk_Missione_has_Porta container_Missione1_idx` (`num` ASC),

CONSTRAINT `fk_Missione_has_Porta container_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Porta container_Porta container1`

FOREIGN KEY (`targap`)

REFERENCES `navi mercantili`.`Porta container` (`targap`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`CompieN` (

`num` INT(11) NOT NULL,

`targan` INT(11) NOT NULL,

PRIMARY KEY (`num`, `targan`),

INDEX `fk_Missione_has_Nave da noleffio_Nave da noleffio1_idx` (`targan` ASC),

INDEX `fk_Missione_has_Nave da noleffio_Missione1_idx` (`num` ASC),

CONSTRAINT `fk_Missione_has_Nave da noleffio_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Nave da noleffio_Nave da noleffio1`

FOREIGN KEY (`targan`)

REFERENCES `navi mercantili`.`Nave da noleggio` (`targan`)


ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Contratto di noleggio` (

`nreg` INT(11) NOT NULL,

`data` DATE NOT NULL,

`disp` INT(11) NOT NULL,

PRIMARY KEY (`nreg`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Esegue` (

`num` INT(11) NOT NULL,

`nreg` INT(11) NOT NULL,

PRIMARY KEY (`num`, `nreg`),

INDEX `fk_Missione_has_Contratto di noleggio_Contratto di noleggio_idx` (`nreg` ASC),

INDEX `fk_Missione_has_Contratto di noleggio_Missione1_idx` (`num` ASC),

CONSTRAINT `fk_Missione_has_Contratto di noleggio_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Contratto di noleggio_Contratto di noleggio1`

FOREIGN KEY (`nreg`)

REFERENCES `navi mercantili`.`Contratto di noleggio` (`nreg`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;


CREATE TABLE IF NOT EXISTS `navi mercantili`.`Punto notevole` (

`cordgeog` INT(11) NOT NULL,

PRIMARY KEY (`cordgeog`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Compone` (

`num` INT(11) NOT NULL,

`cordgeog` INT(11) NOT NULL,

`dataattrpr` VARCHAR(45) NOT NULL,

`dataattreff` VARCHAR(45) NOT NULL,

`oraattrpr` VARCHAR(45) NOT NULL,

`oraattreff` VARCHAR(45) NOT NULL,

`porto` TINYINT(4) NOT NULL,

PRIMARY KEY (`num`, `cordgeog`),

INDEX `fk_Missione_has_Punto notevole_Punto notevole1_idx` (`cordgeog` ASC),

INDEX `fk_Missione_has_Punto notevole_Missione1_idx` (`num` ASC),

CONSTRAINT `fk_Missione_has_Punto notevole_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Punto notevole_Punto notevole1`

FOREIGN KEY (`cordgeog`)

REFERENCES `navi mercantili`.`Punto notevole` (`cordgeog`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Contratto di trasporto` (

`numct` INT(11) NOT NULL,


`datact` DATE NOT NULL,

`prezzo` REAL NOT NULL,

PRIMARY KEY (`numct`, `datact`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Appartiene` (

`num` INT(11) NOT NULL,

`numct` INT(11) NOT NULL,

PRIMARY KEY (`num`, `numct`),

INDEX `fk_Missione_has_Contratto di trasporto_Contratto di traspor_idx` (`numct` ASC),

INDEX `fk_Missione_has_Contratto di trasporto_Missione1_idx` (`num` ASC),

CONSTRAINT `fk_Missione_has_Contratto di trasporto_Missione1`

FOREIGN KEY (`num`)

REFERENCES `navi mercantili`.`Missione` (`num`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Missione_has_Contratto di trasporto_Contratto di trasporto1`

FOREIGN KEY (`numct`)

REFERENCES `navi mercantili`.`Contratto di trasporto` (`numct`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Container` (

`codice` INT(11) NOT NULL,

`azienda` VARCHAR(45) NOT NULL,

`tipologia` VARCHAR(45) NOT NULL,

PRIMARY KEY (`codice`, `azienda`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;


CREATE TABLE IF NOT EXISTS `navi mercantili`.`Riferito` (

`nreg` INT(11) NOT NULL,

`targan` INT(11) NOT NULL,

PRIMARY KEY (`nreg`, `targan`),

INDEX `fk_Contratto di noleggio_has_Nave da noleffio_Nave da nolef_idx` (`targan` ASC),

INDEX `fk_Contratto di noleggio_has_Nave da noleffio_Contratto di _idx` (`nreg` ASC),

CONSTRAINT `fk_Contratto di noleggio_has_Nave da noleffio_Contratto di no1`

FOREIGN KEY (`nreg`)

REFERENCES `navi mercantili`.`Contratto di noleggio` (`nreg`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Contratto di noleggio_has_Nave da noleffio_Nave da noleffio1`

FOREIGN KEY (`targan`)

REFERENCES `navi mercantili`.`Nave da noleggio` (`targan`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Società armatrice` (

`nomes` VARCHAR(45) NOT NULL,

`città` VARCHAR(45) NOT NULL,

`indirizzo` VARCHAR(45) NOT NULL,

`datafondazione` DATE NOT NULL,

`e-mail` VARCHAR(45) NOT NULL,

`telefono` INT(11) NOT NULL,

PRIMARY KEY (`nomes`, `città`, `indirizzo`))

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Compongono` (


`numct` INT(11) NOT NULL,

`datact` DATE NOT NULL,

`codice` INT(11) NOT NULL,

`azienda` VARCHAR(45) NOT NULL,

PRIMARY KEY (`numct`, `datact`, `codice`, `azienda`),

INDEX `fk_Contratto di trasporto_has_Container_Container3_idx` (`codice` ASC, `azienda` ASC),

INDEX `fk_Contratto di trasporto_has_Container_Contratto di traspo_idx` (`numct` ASC, `datact` ASC),

CONSTRAINT `fk_Contratto di trasporto_has_Container_Contratto di trasporto3`

FOREIGN KEY (`numct` , `datact`)

REFERENCES `navi mercantili`.`Contratto di trasporto` (`numct` , `datact`)

ON DELETE NO ACTION

ON UPDATE NO ACTION,

CONSTRAINT `fk_Contratto di trasporto_has_Container_Container3`

FOREIGN KEY (`codice` , `azienda`)

REFERENCES `navi mercantili`.`Container` (`codice` , `azienda`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

CREATE TABLE IF NOT EXISTS `navi mercantili`.`Stipula` (

`nreg` INT(11) NOT NULL,

`nomes` VARCHAR(45) NOT NULL,

`città` VARCHAR(45) NOT NULL,

`indirizzo` VARCHAR(45) NOT NULL,

PRIMARY KEY (`nreg`, `nomes`, `città`, `indirizzo`),

INDEX `fk_Contratto di noleggio_has_Società armatrice_Società ar_idx` (`nomes` ASC, `città` ASC,


`indirizzo` ASC),

INDEX `fk_Contratto di noleggio_has_Società armatrice_Contratto d_idx` (`nreg` ASC),

CONSTRAINT `fk_Contratto di noleggio_has_Società armatrice_Contratto di 1`

FOREIGN KEY (`nreg`)

REFERENCES `navi mercantili`.`Contratto di noleggio` (`nreg`)

ON DELETE NO ACTION
ON UPDATE NO ACTION,

CONSTRAINT `fk_Contratto di noleggio_has_Società armatrice_Società arma1`

FOREIGN KEY (`nomes` , `città` , `indirizzo`)

REFERENCES `navi mercantili`.`Società armatrice` (`nomes` , `città` , `indirizzo`)

ON DELETE NO ACTION

ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = latin1;

Statement di inserimento dati:


INSERIMENTO DATI NAVI DA NOLEGGIO:
INSERT INTO `nave da
noleggio` VALUES ('targan', 'nomen', 'nazionalità', 'autonomia', 'capacit
à', 'pescaggio', 'stazza')
VALUES ('234', 'MSC', 'Italia', '100', '19000', '17', '500')
INSERT INTO `nave da
noleggio` VALUES ('targan', 'nomen', 'nazionalità', 'autonomia', 'capacit
à', 'pescaggio', 'stazza') VALUES ('345', 'NYK
Hermes', 'USA', '45', '11000', '10', '300') INSERT INTO `nave da
noleggio` VALUES ('targan', 'nomen', 'nazionalità', 'autonomia', 'capacit
à', 'pescaggio', 'stazza') VALUES ('456', 'Eugen
Maersk', 'Marocco', '75', '13000', '13', '800')

INSERIMENTO DATI NAVI PORTACONTAINER:


INSERT INTO `porta
container` VALUES ('targap', 'nomep', 'nazionalità', 'autonomia', 'capacità', 'p
escaggio', 'stazza')
INSERT INTO `porta container` VALUES ('123', 'MOL
Triumph', 'Giappone', '100', '19000', '16', '500')
INSERT INTO `porta container` VALUES ('456', 'MSC
Diana', 'Svizzera', '70', '15000', '13', '700')
INSERT INTO `porta container` VALUES ('789', 'CSCL
GLOBE', 'Italia', '95', '21000', '15', '500')

INSERIMENTO DATI CONTAINER:


INSERT INTO `container` VALUES ('codice', 'azienda', 'tipologia')
INSERT INTO `container` VALUES ('1', 'Del Giudice', 'Medicinali')
INSERT INTO `container` VALUES ('2', 'Rossi', 'Armi')
INSERT INTO `container` VALUES ('3', 'Palermo', 'Spezie')

INSERIMENTO DATI CONTRATTO DI NOLEGGIO:


INSERT INTO `contratto di noleggio` VALUES ('nreg', 'data', 'disp')
INSERT INTO `contratto di noleggio` VALUES ('123', '14/05/2000', '12')
INSERT INTO `contratto di noleggio` VALUES ('546', '06/11/2011', '5')

INSERIMENTO DATI CONTRATTO DI TRASPORTO:


INSERT INTO `contratto di trasporto` VALUES ('numct', 'datact', 'prezzo')
INSERT INTO `contratto ditrasporto` VALUES ('235', '15/08/2017', '150')
INSERT INTO `contratto di trasporto` VALUES ('459', '26/10/2000', '350')
INSERT INTO `contratto di trasporto` VALUES ('124', '31/11/2014', '800')
INSERIMENTO DATI DIPENDENTE:
INSERT INTO `dipendente` VALUES ('matricola', 'nome', 'datanascita', 'tipo')
INSERT INTO `dipendente` VALUES ('235866', 'Luigi
Rossi', '21/06/1995', 'Operaio')
INSERT INTO `dipendente` VALUES ('234578', 'Paolo Di
Giovanni', '13/08/1960', 'Impiegato')
INSERT INTO `dipendente` VALUES ('123644', 'Antonio
Iulianella', '05/02/1954', 'Operaio')

INSERIMENTO DATI MISSIONE:


INSERT INTO `missione` VALUES ('num')
INSERT INTO `missione` VALUES ('2')
INSERT INTO `missione` VALUES ('3')

INSERIMENTO DATI PUNTO NOTEVOLE:


INSERT INTO `punto notevole` VALUES ('cordgeog')
INSERT INTO `punto notevole` VALUES ('101115')
INSERT INTO `punto notevole` VALUES ('235689')
INSERT INTO `punto notevole` VALUES ('121478')

INSERIMENTO DATI RUOLO:


INSERT INTO `ruolo` VALUES ('nomer', 'costo')
INSERT INTO `ruolo` VALUES ('Macchinista', '15')
INSERT INTO `ruolo` VALUES ('Meccanico', '23')
INSERT INTO `ruolo` VALUES ('Trasportatore', '20')

INSERIMENTO DATI SOCIETA’ ARMATRICE:


INSERT INTO `società
armatrice` VALUES ('nomes', 'città', 'indirizzo', 'datafondazione', 'e-
mail', 'telefono')
INSERT INTO `società armatrice` VALUES ('Augusta Due', 'Roma', 'Via Ville di
Fano 45', '21/06/1995', 'augusta2@gmail.com', '123456789')
INSERT INTO `società armatrice` VALUES ('Gruppo Amoretti', 'Genova', 'Via Roma
12', '19/05/2003', 'amoretti@virgilio.it', '256488631')
INSERT INTO `società armatrice` VALUES ('Finaval ', 'Salisburgo', 'Via Tinez
13', '31/10/1991', 'finival@hotmail.it', '215648465')

Das könnte Ihnen auch gefallen