Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di database » Modulo di DB - Progetto di un database per un'agenzia turistica

Modulo di DB - Progetto di un database per un'agenzia turistica




Visite: 6092Gradito:apreciate 5-stela [ Grande appunti ]
Leggi anche appunti:

Database


Database Il database viene usato fortemente nelle imprese per gestire le

I Database Relazionali


I Database Relazionali allora cosa sono questi famigerati Database relazionali? il

I Database Relazionali


I Database Relazionali allora cosa sono questi famigerati Database relazionali?
immagine di categoria

Scarica gratis Modulo di DB - Progetto di un database per un'agenzia turistica

Modulo di DB

Progetto di un database per un'agenzia turistica

Specifiche sui dati

Si vuole rappresentare una base di dati per un'agenzia turistica che presenta diverse sedi . L'agenzia può propone offerte relative a una serie di località . Ogni offerta è contraddistinta da un codice (univoco soltanto rispetto a una data località), da una descrizione dei dettagli, dal costo, dal numero di posti disponibili e dalla località a cui si riferisce. Per ogni località, si vuole tenere traccia del codice identificativo, del nome della località, della regione e dello stato di appartenenza, di una breve descrizione delle attrattive. A ciascuna località si associa un flag che specifica se essa è o meno una località gettonata (lo è se il numero di prenotazioni che si riferiscono ad essa supera un certo valore). Nell'agenzia lavorano un certo numero di dipendenti caratterizzati dalle usuali informazioni anagrafiche. Dei dipendenti si vuole tener traccia delle informazioni relative al contratto di lavoro e della sede presso la quale lavorano. Tali dipendenti svolgono mansioni da impiegato oppure lavorano sul campo come operatori. Nel caso degli impiegati si vuole tenere traccia del tipo di impegno (part-time oppure a tempo pieno) e delle prenotazioni prese. Nel caso degli operatori, si vuole tenere traccia della mansione e delle offerte nel contesto delle quali essi lavorano. Un dipendente può essere sia un impiegato che un operatore (ad esempio, nel caso in cui lavori al mattino in ufficio e al pomeriggio come guida). Un'agenzia deve avere a disposizione personale con essa convenzionato che affianca gli operatori nelle località relative alle offerte di viaggio. Anche per questo tipo di personale si vuole tenere traccia dei dati anagrafici e della mansione. Infine, si vuole tenere traccia dei dati anagrafici relativi ai clienti che prenotano una data offerta.


Analisi dei requisiti

In questa fase l'interesse è volto all'analisi e alla ristrutturazione dei requisiti raccolti. Si giunge, in questo modo, ad un insieme omogeneo e non ambiguo di specifiche da utilizzare nella fase successiva che è quella della progettazione.

Il primo passo è stato quello di riorganizzare le specifiche, partizionandole in gruppi di frasi che si riferiscono ad informazioni omogenee. Inoltre si cerca di usare una terminologia opportuna, priva di ambiguità, facendo uso del glossario dei termini.

Al termine di questa fase, si ottengono le specifiche seguenti




Dati di carattere generale

Si vuole progettare il sistema informativo di un'agenzia turistica con diverse sedi.

Diversi tipi di persone sono coinvolte: i clienti ed il personale dell'agenzia.




Termine

Descrizione

Sinonimi

Termini collegati

Sede

Sede dell'agenzia in esame.

Filiale

Dipendente.

Dipendente

Personale che lavora per l'agenzia turistica.


Sede, Operatore, Impiegato.

Impiegato

Personale dell'agenzia che lavora come impiegato.


Dipendente, Prenotazione.

Operatore

Personale dell'agenzia che lavora come operatore turistico.


Dipendente, Offerta.

Personale in loco

Personale convenzionato con l'agenzia che affianca gli operatori in una data località.


Località.

Offerta

Proposta di viaggio effettuata dall'agenzia e relativa ad una determinata località.


Cliente, Località, Operatore.

Località

Luogo relativo ad una data offerta di viaggio.

Destinazione

Personale in loco, Offerta.

Cliente

Persona che prenota una data offerta di viaggio proposta da un'agenzia.


Offerta.


Tabella 1 : Glossario dei termini

Dati sulla Sede

Per la sede si vuole tener traccia del codice che la identifica, dell'indirizzo e dei recapiti telefonici.


Dati sul Cliente

Per il cliente teniamo traccia di alcuni dati anagrafici, quali il nome, il cognome,

l'età, l'indirizzo, il telefono ed il codice fiscale (che lo identifica).


Dati sui Dipendenti

I dipendenti possono essere impiegati oppure possono lavorare sul campo come operatori. Dei dipendenti si vuole tener traccia delle usuali informazioni anagrafiche e di quelle relative al contratto di lavoro.


Dati sugli Impiegati

Per gli impiegati si vuole tener traccia del tipo di impegno (part-time o full-time) e delle prenotazioni registrate.



Dati sugli Operatori

Per gli operatori si vuole conservare l'informazione relativa alla mansione e alle offerte nel contesto delle quali lavorano.



Dati sugli Personale in loco

Per il Personale in loco si vuole tener traccia dei dati anagrafici e della mansione.



Dati sull' Offerta

Ogni offerta è contraddistinta da un codice (univoco solo rispetto alla località), dai dettagli, dal costo, dal numero di posti disponibili e dalla località di destinazione.


Dati sulla Località

Per la località si deve tener traccia del codice identificativo, del nome della località, della regione e dello stato di appartenenza, di una breve descrizione delle attrattive e del fatto che sia o meno una località gettonata.




Progettazione concettuale


Dopo aver completato la fase dell'analisi delle specifiche è possibile passare alla costruzione del modello concettuale della base dei dati. In questo modello tutti quei concetti che hanno un'esistenza autonoma sono rappresentati mediante le entità del modello E-R, mentre quei concetti che legano le entità individuate sono rappresentate mediante le relazioni del modello E-R.

Si parte da uno schema a scheletro che contiene i principali concetti dell'applicazione e poi si procede per raffinamenti successivi.























Figura 1: Schema scheletro del modello E-R


I concetti principali sono il Cliente, l'Offerta, la Località dell'offerta, il Dipendente, la Sede e l'Operatore in loco.

Tra queste entità esistono le relazioni di Prenotazione, di Destinazione, di Contratto, di Contesto lavoro e di Collocazione.


A partire dal seguente schema, mediante dei raffinamenti si ottiene il modello E-R.




IdOfferta

 

 

(1,N)

 

Codice

 

Sede

 

 

Indirizzo

 

Data di nascita

 

CF

 

Cognome

 

Stipendio

 

Dettaglio

 

(1,N)

 

(1,N)

 

Mansione

 

Nome

 

Data stipula

 

Operatore



 

Impiegato

 

Dipendente

 

Offerta

 


Figura 2: Schema del Modello E-R





ENTITA'

DESCRIZIONE

ATTRIBUTI

IDENTIFICATORE

Cliente

Persona che richiede una prenotazione di un'offerta viaggio.

CF, Nome, Cognome, Indirizzo, Recapito Telefonico.

CF.

Offerta

Offerta di viaggio proposta dall'agenzia

IdOfferta, Località, Dettaglio, Costo, Posti.

IdOfferta, Località.

Località

Località di destinazione dell'offerta

IdLocalità, Nome, Attrattive, Regione, Stato, Richiesta.

IdLocalità.

Dipendente

Personale dipendente dell'agenzia.

CF,Nome,Cognome, DataNascita,Indirizzo.

CF.

Impiegato

Personale con ruolo di impiegato.

Tipo.

Vedi  Dipendente

Operatore

Personale con ruolo di operatore turistico.

Mansione.

Vedi  Dipendente

Sede

Sede dell'agenzia.

Codice, Indirizzo, Telefono.

Codice.

Personale in loco

Personale convenzionato che residente in una località turistica e che affianca gli operatori dipendenti in diverse mansioni

CF, Nome, Cognome, Indirizzo, DataNascita, Mansione.

CF.

Tabella 2: Porzione del dizionario dati-Entità



Relazione

Entità partecipanti

Descrizione

Attributi

Destinazione

Offerta

Località (1,N)

Associa ogni offerta ad una località.


Prenotazione

Cliente (1,N)

Offerta (0,N)

Impiegato (0,N)

Associa ad un cliente l'offerta prenotata in una determinata data e con un anticipo sul costo e registrata da un impiegato.

DataPrenotazione, Anticipo.

Contratto

Sede (1,N)

Dipendente


Ogni sede dell'agenzia ha del personale dipendente legato ad essa da un contratto.

Data stipula, Stipendio.

Collocazione

Personale in loco

Località (0,N)

Associa ad ogni località relativa ad un offerta di viaggio, il personale convenzionato, ivi residente.


Contesto lavoro

Operatore (1,N)

Offerta (1,N)

Associa a ciascun operatore una o più offerte nel contesto delle quali lavora 


Tabella 3: Porzione del dizionario dati-Entità


Concetto

Tipo

Volume
Sede
E
Offerte
E
Località
E
Dipendente
E
Operatore
E
Impiegato
E
Personale in loco
E
Cliente
E
Prenotazione
R
ContestoLavoro
R
Tabella 4: Tavola dei volumi
Operazione
Descrizione
Frequenza
Tipo
O1
Inserimento di un nuovo cliente.
200 al giorno
OL
O2
Inserimento di una nuova offerta di viaggio su  data una località.
5 al mese
OL
O3
Inserimento di un nuovo impiegato
1 al mese
OL
O4
Ricerca di tutte le offerte relative ad una località.
200 al giorno
OL
O5
Trovare gli operatori che sono anche impiegati.
1 al mese
OL
O6
Ricerca dell'impiegato che ha registrato una data prenotazione.
10 al mese
OL
O7
Ricerca della sede presso cui lavora un dipendente.
1 al mese
OL
O8
Ricerca degli operatori convenzionati di una località turistica.
10 volte al mese
OL
O9
Statistica sulle località più gettonate.
2 volte all'anno
B
Tabella 5: Tavola delle frequenze




Traduzione verso il modello relazionale


Per definire lo schema relazionale bisogna tradurre lo schema Entità-Relazione in modo da ottenere un insieme di relazioni. Prima di fare questo bisogna effettuare la ristrutturazione dello schema E-R.

Nel caso trattato bisogna risolvere la generalizzazione (totale e sovrapposta) e togliere gli attributi composti. La generalizzazione si trasforma in due relazioni uno ad uno che legano rispettivamente l'entità padre (Dipendente) con le due entità figlie (Impiegato ed Operatore).





Lo schema in basso è lo schema ristrutturato, in cui è stata risolta la generalizzazione e sono stati eliminati gli attributi composti.

Codice

 

Sede

 

 

Stipendio

 

 

 

Dettaglio

 

(1,N)

 

Data stipula

 

Offerta

 

Figura 3: Schema del Modello E-R ristrutturato




A questo punto bisogna tradurre in relazioni le associazioni insieme alle entità, presenti nello schema ristrutturato.

Le associazioni molti a molti vengono necessariamente tradotte in relazioni.

Nel caso esaminato ci sono due associazioni molti a molti come Prenotazione, che coinvolge le entità Cliente, Offerta e Impiegato e Contesto Lavoro che coinvolge le entità Offerta e Operatore.


Le associazioni restanti sono tutte associazioni uno a molti. In specifico abbiamo l'associazione Collocazione, che lega le entità Personale in loco e Località, Destinazione che lega Offerta e Località, Contratto che lega Dipendente con Sede e infine le associazioni R1 e R2, venute fuori dalla risoluzione della generalizzazione.

Ognuna di queste associazioni uno a molti può essere risolta introducendo, come nuovo attributo, in una delle relazioni, relative alle entità coinvolte, l'identificatore dell'altra entità.



Schema Relazionale


A valle del ragionamento si riporta lo schema relazione finale.


Cliente( CF, Nome, Cognome, Indirizzo, RecapitoTelefonico)


Località( IdLocalità, Nome, Regione, Stato, Attrattive, Richieta)


Offerta (IdOfferta, Località, Dettaglio, Costo, Posti)


Prenotazione (CF, IdOfferta, Località, Impiegato, DataPrenotazione, Anticipo)


Sede (Codice, Telefono, Indirizzo)


Dipendente (CF, Nome, Cognome, DataNascita, Indirizzo, Sede, DataContratto, Stipendio)


Impiegato (Dipendente, Tipo)


Operatore (Dipendente , Mansione)


ContestoLavoro (Operatore, Offerta, Località)


PersonaleInLoco (CF, Nome, Cognome, Indirizzo, DataNascita, Mansione, Località)



Per evidenziare i vincoli di integrità referenziale, è mostrato nella pagina seguente il cammino di join. Per ciascuna tabella vengono mostrati soltanto i campi che incorrono nei vincoli di integrità referenziale, le chiavi primarie sono in grassetto.












Figura 4: Cammino di Join



















Implementazione fisica del DB su Oracle


Bisogna fare delle considerazioni che riguardano l'allocazione del tablespace per ciascuna tabella che sarà implementata in Oracle.

Per ciascuna tabella è stato considerato prima di tutto il volume iniziale cioè il numero di tuple presenti al momento della creazione della tabella stessa. Subito dopo è stato considerato il parametro intervallo di crescita in termini di numero di righe che saranno inserite nella tabella in un certo intervallo temporale. Infine bisogna precisare la frequenza delle attività di aggiornamento e di inserimento.


Ad esempio, se consideriamo la tabella Cliente, si parte da un numero iniziale di righe pari a 100.

Sono previsti 200 inserimenti al giorno, quindi l'attività di inserimento ha una frequenza alta, mentre quella di aggiornamento ha una frequenza bassa.

Le stesse considerazioni sono state fatte per le altre tabelle.




CREAZIONE DELLE TABELLE


CREATE TABLE 'TEMPES06'.'CLIENTE' ('CF' VARCHAR2(20 byte) NOT NULL,

'NOME' VARCHAR2(50 byte) NOT NULL,

'COGNOME' VARCHAR2(50 byte) NOT NULL,

'INDIRIZZO' VARCHAR2(100 byte) NOT NULL,

'TELEFONO' VARCHAR2(15 byte),

CONSTRAINT 'PK_CLIENTE' PRIMARY KEY('CF') USING INDEX

TABLESPACE 'USERS'

STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 24K NEXT 0K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0)

LOGGING ;




CREATE TABLE 'TEMPES06'.'LOCALITA' ('IDLOCALITA' VARCHAR2(20 byte) NOT NULL,

'NOME' VARCHAR2(50 byte) NOT NULL,

'REGIONE' VARCHAR2(50 byte),

'STATO' VARCHAR2(50 byte) NOT NULL,

'ATTRATTIVE' VARCHAR2(100 byte) NOT NULL,

'RICHIESTA' NUMBER(1),

CONSTRAINT 'PK_LOCALITA' PRIMARY KEY('IDLOCALITA') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS

255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




CREATE TABLE 'TEMPES06'.'OFFERTA' ('IDOFFERTA' VARCHAR2(20 byte) NOT NULL,

'LOCALITA' VARCHAR2(20 byte) NOT NULL,

'DETTAGLIO' VARCHAR2(100 byte) NOT NULL,

'COSTO' NUMBER(10) NOT NULL,

'POSTI' NUMBER(10),

CONSTRAINT 'FK_OFFERTA_LOCALITA' FOREIGN KEY('LOCALITA')

REFERENCES 'TEMPES06'.'LOCALITA'('IDLOCALITA'),

CONSTRAINT 'PK_OFFERTA' PRIMARY KEY('IDOFFERTA', 'LOCALITA') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




CREATE TABLE 'TEMPES06'.'PRENOTAZIONE' ('CLIENTE' VARCHAR2(20 byte) NOT NULL,

'IDOFFERTA' VARCHAR2(20 byte) NOT NULL,

'LOCALITA' VARCHAR2(20 byte) NOT NULL,

'DATAPRENOTAZIONE' DATE NOT NULL,

'ANTICIPO' NUMBER(10) NOT NULL,

'IMPIEGATO' VARCHAR2(20 byte) NOT NULL,

CONSTRAINT 'FK_PRENOTAZIONE_IMPIEGATO' FOREIGN KEY('IMPIEGATO')

REFERENCES 'TEMPES06'.'IMPIEGATO'('DIPENDENTE'),

CONSTRAINT 'FK_PRENOTAZIONE_OFFERTA' FOREIGN KEY('IDOFFERTA','LOCALITA')

REFERENCES 'TEMPES06'.'OFFERTA'('IDOFFERTA', 'LOCALITA'),

CONSTRAINT 'PK_PRENOTAZIONE' PRIMARY KEY('CLIENTE', 'IDOFFERTA',

'LOCALITA','IMPIEGATO') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




CREATE TABLE 'TEMPES06'.'SEDE' ('CODICE' VARCHAR2(20 byte) NOT NULL,

'INDIRIZZO' VARCHAR2(100 byte) NOT NULL,

'TELEFONO' VARCHAR2(15 byte),

CONSTRAINT 'PK_SEDE' PRIMARY KEY('CODICE') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




CREATE TABLE 'TEMPES06'.'DIPENDENTE' ('CF' VARCHAR2(20 byte) NOT NULL,

'NOME' VARCHAR2(50 byte) NOT NULL,

'COGNOME' VARCHAR2(50 byte) NOT NULL,

'INDIRIZZO' VARCHAR2(100 byte) NOT NULL,

'DATANASCITA' DATE NOT NULL,

'DATASTIPULA' DATE NOT NULL,

'STIPENDIO' NUMBER(10) NOT NULL,

'SEDE' VARCHAR2(20byte) NOT NULL,

CONSTRAINT 'FK_DIPENDENTE_SEDE' FOREIGN KEY('SEDE')

REFERENCES 'TEMPES06'.'SEDE'('CODICE'),

CONSTRAINT 'PK_DIPENDENTE' PRIMARY KEY('CF') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 24K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




CREATE TABLE 'TEMPES06'.'IMPIEGATO' ('DIPENDENTE' VARCHAR2(20 byte) NOT NULL,

'TIPO' VARCHAR2(10 byte) NOT NULL,

CONSTRAINT 'FK_IMPIEGATO_DIPENDENTE' FOREIGN KEY('DIPENDENTE')

REFERENCES 'TEMPES06'.'DIPENDENTE'('CF'),

CONSTRAINT 'PK_IMPIEGATO' PRIMARY KEY('DIPENDENTE') USING INDEX

TABLESPACE 'USERS'

STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;





CREATE TABLE 'TEMPES06'.'OPERATORE' ('DIPENDENTE' VARCHAR2(20 byte) NOT NULL, 'MANSIONE' VARCHAR2(20 byte) NOT NULL,

CONSTRAINT 'FK_OPERATORE_DIPENDENTE' FOREIGN KEY('DIPENDENTE')

REFERENCES 'TEMPES06'.'DIPENDENTE'('CF'),

CONSTRAINT 'PK_OPERATORE' PRIMARY KEY('DIPENDENTE') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;



CREATE TABLE 'TEMPES06'.'CONTESTOLAVORO' ('OPERATORE' VARCHAR2(20byte) NOT NULL, 'IDOFFERTA' VARCHAR2(20 byte) NOT NULL,

'LOCALITA' VARCHAR2(20 byte) NOT NULL,

CONSTRAINT 'FK_CONTESOLAVORO_OFFERTA' FOREIGN KEY('IDOFFERTA','LOCALITA')

REFERENCES 'TEMPES06'.'OFFERTA'('IDOFFERTA', 'LOCALITA'),

CONSTRAINT 'FK_CONTESTOLAVORO_OPERATORE' FOREIGN KEY('OPERATORE')

REFERENCES 'TEMPES06'.'OPERATORE'('DIPENDENTE'),

CONSTRAINT 'PK_CONTESTOLAVORO' PRIMARY KEY('OPERATORE', 'IDOFFERTA', 'LOCALITA')

USING INDEX

TABLESPACE 'USERS'

STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 16K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;





CREATE TABLE 'TEMPES06'.'PERSONALEINLOCO' ('CF' VARCHAR2(20 byte)

NOT NULL, 'NOME' VARCHAR2(50 byte) NOT NULL,

'COGNOME' VARCHAR2(50 byte) NOT NULL,

'DATANASCITA' DATE NOT NULL,

'INDIRIZZO' VARCHAR2(100 byte) NOT NULL,

'MANSIONE' VARCHAR2(10 byte) NOT NULL,

'LOCALITA' VARCHAR2(20 byte) NOT NULL,

CONSTRAINT 'FK_PERSONALEINLOCO_LOCALITA' FOREIGN KEY('LOCALITA')

REFERENCES 'TEMPES06'.'LOCALITA'('IDLOCALITA'),

CONSTRAINT 'PK_PERSONALEINLOCO' PRIMARY KEY('CF') USING INDEX

TABLESPACE 'USERS' STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0) PCTFREE 10 INITRANS 2 MAXTRANS 255)

TABLESPACE 'USERS' PCTFREE 5 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 24K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;






IMPLEMENTAZIONE DELLE OPERAZIONI


Inserimento di un cliente.


Create or replace procedure InsertCliente (

cf_in IN cliente.cf %type,

nome_in IN cliente.nome%type,

cognome_in IN cliente.cognome%type,

indirizzo_in IN cliente.indirizzo%type,

telefono_in IN cliente.telefono%type) as


begin

insert into cliente(cf, nome, cognome, indirizzo, telefono)

values (cf_in, nome_in, cognome_in, indirizzo_in, telefono_in);

commit;

end InsertCliente;



begin

InsertCliente(' MGBVFVB55YTGFRG', 'Carlo', 'Bianco', ' Via Rossi 40-Napoli', '081569874');

end;



La registrazione di una prenotazione effettuata da un cliente, relativa ad una data offerta presso

una data località

L'inserimento nella tabella prenotazione è un'operazione più delicata dal momento che una prenotazione relativa ad una delle offerte proposte dall'agenzia può avvenire solo se ci sono ancora dei posti liberi. L'idea è quella di considerare una funzione InsertPren che restituisce un una stringa che riporta un messaggio di prenotazione registrata (nel caso in cui c'è un posto libero) o di offerta esaurita (in caso contrario).

All'interno di questa funzione viene richiamata una funzione che effettua il conteggio sulle      prenotazioni già registrate relative alla stessa offerta e alla stessa località per la quale si desidera registrare la prenotazione. Essa restituisce FALSE se le prenotazioni hanno esaurito i posti, TRUE in caso contrario.



create or replace function InsertPren (

cf_in IN prenotazione.cliente%type,

idofferta_in IN prenotazione.idofferta%type,

località_ in IN prenotazione.località %type,

dataprenotazione_in IN prenotazione.dataprenotazione %type,

anticipo_in IN prenotazione.anticipo %type,

impiegato_in IN prenotazione.impiegato %type)

return varchar2 is

begin

declare

info varchar2(100);

begin

if not (controlloposti(località_in,

idofferta_in)) then

info: ='offerta esaurita';

return info;

else insert into prenotazione (cliente,idofferta,località,dataprenotazione,anticipo,impiegato)

values (cf_in, idofferta_in, località_ in, dataprenotazione_in, anticipo_in, impiegato_in);

commit;

info:= 'Prenotazione avvenuta';

return info;

end if

end;

end InsertPren;






create or replace function ControlloPosti (

idof_in IN prenotazione.idofferta%type,

loc_ in IN prenotazione.località %type)

return boolean is

begin

declare

numPosti number (10);

numPren number (10);

begin

select posti into numPosti from offerta

where offerta.idofferta=idof_in and offerta.località=loc_in;


select count (cliente) into numPren from prenotazione

where prenotazione. offerta.idofferta=idof_in and prenotazione.località=loc_in;


if numPosti=numPren then

return false;

else

return true;

end if;

end;

end controlloPosti;



Viene riportato di sotto il test effettuato.


create or replace procedure test as

begin

declare

info varchar2(100);

begin

info:=InsertPren ('GNG', '1','LAV',TO_DATE('01-02-04','DD-MM-YY'),100,'CCC')

DBMS_OUTPUT.PUT_LINE (info

end;

end;

end test;



Inserimento di un dipendente con ruolo di impiegato.


Create or replace procedure InsertDipendente(

cf_in IN dipendente.cf %type,

nome_in IN dipendente.nome%type,

cognome_in INdipendente.cognome%type,

DataNascita_in INdipendente.DataNascita %type,

indirizzo_in IN dipendente.indirizzo%type,

sede_in IN dipendente.sede%type,

DataStipula dipendente.DataStipula%type,

stipendio_in IN dipendente.stipendio%type) as


begin

insert into dipendente (cf, nome, cognome,DataNascita, indirizzo,sede,DataStipula,stipendio)

values (cf_in, nome_in, cognome_in,DataNascita_in,indirizzo_in,sede_in,DataStipula_in,

stipendio_in);

commit;

end InsertDipendente;



Create or replace procedure InsertImpiegato(

cf_in IN impiegato.cf %type,

tipo_in impiegato.tipo%type) as


begin

insert into impiegato(cf,tipo)

values (cf_in, tipo_in);

commit;

end InsertImpiegato;





Seleziona il dettaglio ed il costo relativo a tutte le offerte presso una fissata località e con un costo inferiore un valore prefissato.


select offerta.dettaglio || ' ' || to char (offerta.costo)

from offerta, località

where (località.nome nomelocalità' and offerta.costo <='valorecosto' and

offerta.località=località.idlocalità);


Ricerca i dipendenti dell'agenzia turistica che sono sia impiegati che operatori, per essi stampare

il nome, il cognome e la mansione che svolgono come operatori.


select dipendente.nome ||' '|| dipendente.cognome

from dipendente, impiegato, operatore

where(dipendente.cf =operatore.dipendente and dipendente.cf=impiegato.dipendente and       

impiegato.tipo= ' part time'); /*Si osservi che la ricerca all'interno della tabella impiegato viene fatta              

solo per quelle righe per le quali il campo tipo è 'part time', per il

fatto che solo un impiegato che lavora part time può svolgere anche la

mansione di operatore nel tempo restante*/



Ricerca il nome ed il cognome dell'impiegato che ha curato la prenotazione relativa ad un dato

cliente.


select dipendente.nome ||' '|| dipendente.cognome

from cliente, prenotazione, dipendente

where(cliente.nome='nomecliente' and cliente.cognome='cognomecliente' and

cliente.cf=prenotazione.cliente and prenotazione.impiegato=dipendente.cf);





L'agenzia turistica vuole tenere memoria di quali siano le località più gettonate tramite il campo

Richiesta della tabella Località. Inizialmente e cioè quando si popola la tabella tale campo è

nullo, per ogni Località.

L'agenzia turistica, inoltre, vuole avere una Classifica delle Località destinzione delle offerte di

viaggio proposte. Il Data Base, prevede una tabella Classifica, che ha due attributi: IdLocalità e

NumPren (numero di prenotazioni). Inizialmente tale tabella presenta gli identificativi di tutte le

Località, ma il valore del NumPren è nullo per ciascuno di essi.


Si ricorre ad un trigger sia per settare ad '1' il valore del campo Richiesta nella tabella Località

sia per tracciare la Classifica sulle Località .


In corrispondenza di una data località tale campo vale '1', se il numero di prenotazioni registrate

per offerte che hanno come destinazione quella località risulta maggiore di 10.





CREATE TABLE'TEMPES06'.'CLASSIFICA ('IDLOCALITA' VARCHAR2 (20 byte) NOT NULL,       'NUMPREN' NUMBER (10)

CONSTRAINT 'FK_CLASSIFICA _LOCALITA' FOREIGN KEY('IDLOCALITA')

REFERENCES 'TEMPES06'.'LOCALITA'('IDLOCALITA'),

CONSTRAINT 'PK_CLASSIFICA' PRIMARY KEY('IDLOCALITA') USING INDEX

TABLESPACE 'USERS' PCTFREE 20 PCTUSED 0 INITRANS 2 MAXTRANS 255

STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS

2147483645 PCTINCREASE 0)

LOGGING;




Create or replace trigger Classifica after insert on Prenotazione

declare

nomevar località.IdLocalità %type;

numvar number(10);

cursor curs is select

IdLocalità, count (cliente) as numclienti

from Località, Prenotazione

where Prenotazione.Località=Località.IdLocalità;

group by IdLocalità;

begin

open curs;

loop

Fetch curs into nomevar,numvar;

Exit when curs notfound%;

if numvar>10 then

update Località set richiesta=1;

where IdLocalità=nomevar;

update Classifica set NumPren=numvar

where IdLocalità =nomevar;

end if;

end loop;

end;



A questo punto per ottenere la Classifica, bisogna ordinare la tabella sul valore del campo NumPren:


Select

from Classifica

Order by NumPren desc


Si vuole creare una vista riepilogo sui dipendenti dell'agenzia.


Select distinct dipendente.nome, dipendente.cognome, operatore.mansione, impiegato.tipo

from (dipendente outer join operatore on dipendente.cf=operatore.dipendente) outer join

impiegato on dipendente.cf =impiegato.dipendente;



Si vogliono selezionare tutti gli operatori in loco relativi alla località più gettonata


Select località.nome, personaleInLoco.nome,personaleInLoco.cognome

from personaleInLoco,localita, classifica

where (localita.Idlocalita=personaleInLoco.localita) and (classifica.IdLocalita=localita.IdLocalita)

and (localita.IdLocalita=(select IdLocalità from classifica

where NumPren =(select max(NumPren)from classifica)));







Conclusioni

Questo progetto può essere inserito in uno più vasto che tenga conto di aspetti non trattati in questa sede.

Ad esempio si può tenere in considerazione il rilascio di eventuali fatture al cliente che effettua la prenotazione e la gestione delle revoche delle prenotazioni stesse.

L'agenzia, inoltre, deve avere a sua disposizione delle viste sui voli proposti da diverse compagnie aeree, sugli orari dei treni e dei trasporti via mare.

Essa deve poter fornire al cliente informazioni che riguardano il clima, la cucina, la moneta di una determinata località turistica. Il cliente deve anche conoscere le eventuali precauzioni mediche che deve prendere per viaggi in località esotiche.

Un'ultima considerazione riguarda le attività di backup del DB progettato. Si presuppone che durante l'anno, l'attività di inserimento sia molto frequente nel periodo maggio-luglio, in concomitanza con le vacanze estive, e nel, periodo novembre-dicembre, in concomitanza delle festività natalizie. Pertanto in questi periodi l'attività di backup rivolta all'intero DB, viene effettuata con frequenza elevata, (ogni due giorni). Nel periodo restante, invece la frequenza è bassa (ogni quindici giorni).



Scarica gratis Modulo di DB - Progetto di un database per un'agenzia turistica
Appunti su: database agenzia viaggi, attributi composti informatica,



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...