You are on page 1of 11

}  Database per la gestione delle ferrovie dello stato.

}  I treni gestiti sono identificati da un numero. Su ciascun treno sono


specificate le classi per le quali offre servizio (prima, seconda, lusso).
}  Le tratte che un treno può percorrere sono identificate dalla stazione di
partenza e dalla stazione di arrivo. Ogni stazione è identificata da un nome.
Ogni treno percorre diverse tratte in date e ore distinte. Il sistema memorizza
le tratte percorse dai treni.
}  Gli utenti sono identificati attraverso un username, hanno una password, una
email ed eventualmente una tessera fedeltà. Un utente può acquistare
biglietti per una tratta per uno specifico numero di posti ad un prezzo
stabilito dal sistema.
}  Il sistema informativo permette di definire particolari utenti di classe
business che usufruiscono di una percentuale di sconto nell’acquisto di
biglietti.
}  I treni gestiti sono identificati da un numero. Su ciascun treno sono
specificate le classi per le quali offre servizio (prima, seconda, lusso).

TRENO(numero,classe1,classe2,classe3)

CREATE TABLE Treno


(
numero char(10) PRIMARY KEY,
classe1 BIT not null,
classe2 BIT not null,
classeL BIT not null)
}  Le tratte sono identificate dalla stazione di partenza e di
arrivo. Ogni stazione è identificata da un nome e può avere
una città con la relativa regione.
CITTA(citta,regione)
citta STAZIONE(nome,citta)
CITTA FK: citta REFERENCES CITTA
TRATTA(stazPartenza,stazArrivo)
(1,N) regione
FK: stazPartenza REFERENCES STAZIONE
FK: stazArrivo REFERENCES STAZIONE
(0,1)

CREATE TABLE Citta (


citta CHAR(20) PRIMARY KEY,
regione CHAR(20) not null )
CREATE TABLE Stazione (
nome CHAR(20) PRIMARY KEY,
citta CHAR(20) REFERENCES Citta)
CREATE TABLE Tratta
(
stazpartenza CHAR(20) REFERENCES Stazione,
stazarrivo CHAR(20) REFERENCES Stazione,
PRIMARY KEY (stazpartenza,stazarrivo)
)
}  Ogni treno percorre diverse tratte in date e ore distinte

PERCORRE(numero,dataOra,stazPartenza,stazArrivo)
FK: numero REFERENCES TRENO
FK: stazPartenza,stazArrivo REFERENCES TRATTA not null

CREATE TABLE Percorre


(
numero CHAR (10) REFERENCES Treno,
data DATETIME,
stazpartenza CHAR (20) not null,
stazarrivo CHAR (20) not null,
PRIMARY KEY (numero,data),
FOREIGN KEY (stazpartenza,stazarrivo) REFERENCES Tratta
)
}  Gli utenti sono identificati attraverso un username, hanno una password, una
email ed eventualmente una tessera fedeltà. Utenti di classe business che
usufruiscono di una percentuale di sconto nell’acquisto di biglietti.

}  Un utente può acquistare biglietti per una tratta per uno specifico numero di
posti ad un prezzo stabilito dal sistema.

CLIENTE(username,pw,email,tessera)
BUSINESS(username,sconto)
FK: username REFERENCES CLIENTE
BIGLIETTO(cod,nposti,prezzo,username,
stazPartenza,stazArrivo)
FK: stazPartenza,stazArrivo REFERENCES TRATTA not null
FK: username REFERENCES CLIENTE not null
citta
CITTA

(1,N) regione

(0,1)
CREATE TABLE Treno (
numero CHAR(10) PRIMARY KEY,
classe1 BIT not null,
classe2 BIT not null,
classeL BIT not null )

CREATE TABLE Citta (


citta CHAR(20) PRIMARY KEY,
regione CHAR(20) not null )

CREATE TABLE Stazione (


nome CHAR(20) PRIMARY KEY,
citta CHAR(20) REFERENCES Citta )

CREATE TABLE Tratta (


stazpartenza CHAR(20) REFERENCES Stazione,
stazarrivo CHAR(20) REFERENCES Stazione,
PRIMARY KEY (stazpartenza,stazarrivo) )

CREATE TABLE Percorre (


numero CHAR(10) REFERENCES Treno,
data DATETIME,
stazpartenza CHAR(20) not null,
stazarrivo CHAR(20) not null,
PRIMARY KEY (numero,data),
FOREIGN KEY (stazpartenza,stazarrivo) REFERENCES Tratta
)
CREATE TABLE Cliente (
username CHAR(20) PRIMARY KEY,
pw CHAR(10) not null,
email CHAR(40) not null,
tessera CHAR(10) null )

CREATE TABLE Business (


username CHAR(20) PRIMARY KEY REFERENCES Cliente,
sconto int not null )

CREATE TABLE Biglietto (


codice INT PRIMARY KEY,
numposti INT not null,
prezzo money not null,
username CHAR(20) REFERENCES Cliente not null,
stazpartenza CHAR(20) not null,
stazarrivo CHAR(20) not null,
FOREIGN KEY (stazpartenza,stazarrivo) REFERENCES
Tratta )
TRATTA(stazPartenza,stazArrivo)
FK: stazPartenza REFERENCES STAZIONE
FK: stazArrivo REFERENCES STAZIONE
PERCORRE(numero,dataOra,stazPartenza,stazArrivo)
FK: numero REFERENCES TRENO
FK: stazPartenza,stazArrivo REFERENCES TRATTA not null

}  Per semplificare i riferimenti a TRATTA si introduce


numTratta come chiave primaria di TRATTA, mentre
stazPartenza,stazArrivo diventa alternativa

TRATTA(numTratta,stazPartenza,stazArrivo)
AK: stazPartenza,stazArrivo
FK: stazPartenza REFERENCES STAZIONE
FK: stazArrivo REFERENCES STAZIONE
PERCORRE(numero,dataOra, numTratta)
FK: numero REFERENCES TRENO
FK: numTrattaREFERENCES TRATTA not null
TRENO(numero,classe1,classe2,classeL)
STAZIONE(nome)
TRATTA(numTratta,stazPartenza,stazArrivo)
AK: stazPartenza,stazArrivo
FK: stazPartenza REFERENCES STAZIONE
FK: stazArrivo REFERENCES STAZIONE
PERCORRE(numero,dataOra,numTratta)
FK: numero REFERENCES TRENO
FK: numTratta REFERENCES TRATTA
CLIENTE(username,pw,email,tessera)
BUSINESS(username,sconto)
FK: username REFERENCES CLIENTE
BIGLIETTO(cod,nposti,prezzo,username,numTratta)
FK: numTratta REFERENCES TRATTA
FK: username REFERENCES CLIENTE
}  Creare un nuovo DB con il nuovo schema relazionale

}  Creare le tabelle relative al nuovo schema relazionale

CREATE TABLE Tratta


(
numtratta CHAR(5) PRIMARY KEY,
stazpartenza CHAR(20) REFERENCES Stazione not null,
stazarrivo CHAR(20) REFERENCES Stazione not null,
UNIQUE (stazpartenza,stazarrivo)
)

}  Creare il diagramma relazionale del nuovo DB