1
2
PRODUZIONE DEL SOFTWARE
Lo sviluppo di un progetto è un sistema di attività tese ad ottenere un risultato che chiameremo prodotto.
Normalmente compaiono le seguenti attività:
Attività di studio
Studia l’area di competenza del progetto per conoscere approfonditamente la materia.
Attività di ideazione
definisce le caratteristiche generali del prodotto Attività di progettazione
consolidamento della fase precedente tramite disegni,modelli e prototipi Attività di realizzazione
crea realmente i primi esemplari del prodotto Attività di produzione
termina il progetto ed inizia la produzione.
Il prodotto di un progetto informatico è l’insieme di moduli software(programmi) e degli archivi elettronici(dati) idoneo a soddisfare gli obiettivi definiti.
3
I FATTORI DI QUALITA’ DI UN PROGETTO INFORMATICO
Correttezza cioè aderenza del progetto a ciò che è stato richiesto.
Leggibilità comprensione del progetto mediante una lettura dall’alto verso il basso.
Efficienza impiego ottimale delle risorse utilizzate da un progetto ad esempio il tempo di esecuzione veloce, memoria impiegata minima.
Generalità l’ampiezza della classe di problemi di cui il progetto rappresenta la soluzione
robustezza attitudine di un progetto a rispondere a situazioni di errore senza provocare comportamenti indesiderati tipo la terminazione dei processi.
Esistono norme ufficiali,emanate da organismi internazionali, che determinano la qualità. I due principali sono:ISO(International Standards Organization) e IEEE(Institute of Electrical and Electronic engineers)
4
METODOLOGIA A CASCATA
CONOSCENZA DEGLI OBIETTIVI ANALISI
PROGETTAZIONE REALIZZAZIONE
DOCUMENTAZIONE PROVE FORMAZIONE
PRODUZIONE
Alcune fasi vengono eseguite in sequenza, altre in parallelo, cioè in contemporanea, in quanto non necessitano l’una dei risultati dell’altra.
La metodologia fornisce la struttura e la sequenza delle attività da svolgere, però da sola essa non è sufficiente, serve indicare il tempo previsto per lo svolgimento di ogni attività.
La tempificazione serve per pianificare le risorse umane( in inglese project
management), cioè a definire quante persone ed in quali tempi concluderanno le attività.
Questo rende possibile la stima dei costi del progetto.
5
Conoscenza degli obiettivi:
O analisi preliminare,deve portare il progettista ad essere esperto della materia di pertinenza del progetto,per ottenere questo è necessario poter disporre di esperti della materia ai quali fare l’intervista conoscitiva.
Analisi:
questa fase ha il compito di determinare e descrivere dettagliatamente tutte le componenti del progetto.
Essa deve curare tre componenti:
Scopi del progettoquesti devono essere i più univoci e determinati possibile, se un problema si presenta molto complesso va suddiviso in sottoproblemi più semplici.
i dati determinare quali siano le informazioni necessarie affinché il progetto funzioni:
Dati di input:descrivere con precisione i dati che bisognerà elaborare e le relazioni che si stabiliscono tra essi.
Dati di output: descrivere con precisione i risultati del progetto e in che modo devono essere presentati.
le funzioni determinare quali siano le operazioni che il sistema dovrà svolgere sui dati in ingresso per ottenere i risultati in uscita.
Flusso di dati tra funzioni abbinare ad ogni funzione quali dati utilizza in input e quali dati produce in output.
6
Progettazione:
Algoritmo, scelta della struttura dati, scelta del linguaggio
.
definire e descrivere dettagliatamente le caratteristiche del sistema informatico del progetto.
i risultati principali di questa fase sono:
- le specifiche per la creazione degli archivi elettronici
- le specifiche per lo sviluppo dei moduli software del progetto.
Realizzazione:
Dopo lo studio, l’ideazione e la concretizzazione delle scelte del progetto, si arriva alla realizzazione del prodotto del progetto.
Trattandosi di un progetto informatico il prodotto è costituito da moduli
software(programmi) e dagli archivi elettronici utilizzati dai programmi stessi.
7
Documentazione:
Documentare ha come obiettivo fornire a tutti gli utenti del nuovo sistema tre tipi di documenti da consultare nel corso della loro attività lavorativa:
manuale utente per descrivere tutte le funzionalità del progetto manuale elettronico help il linea
manuale operativo che si rivolge ai gestori del sistema e serve a spiegare come funziona il sistema del progetto.
Prove:
per verificare il grado di aderenza del progetto alle necessità indicate dall’utente committente e rimuovere eventuali errori
Formazione:
di tutti gli utenti del nuovo sistema attraverso dei corsi affinché possano operare conoscendo le caratteristiche del progetto
Produzione:
Rilascio del progetto, attivandolo presso gli utenti e controllando che i processi elaborativi producano i risultati attesi.
8
MODELLAZIONE DEI DATI
Modellare i dati significa costruire una rappresentazione semplificata della realtà osservata, individuandone gli elementi caratterizzanti e i legami intercorrenti tra essi.
La progettazione di un modello di dati avviene a tre livelli diversi:
livello concettuale rappresentare la realtà dei dati e le relazioni tra essi attraverso uno schema indipendente dalle applicazioni.
livello logico rappresentare il modo attraverso il quale i dati sono organizzati negli archivi, si descrive quindi la composizione ed il formato dei dati
livello fisico rappresenta l’effettiva installazione degli archivi elettronici indicando l’ubicazione dei dati nelle memorie di massa.
9
MODELLO E/R
(entity/relationschip)Il modello entità/associazioni(modello concettuale) è uno strumento utile nel realizzare il passaggio dalla descrizione di un problema allo schema formale degli archivi.
Gli elementi di un modello E/R sono:
Entità oggetto che è di interesse per la realtà che si vuole modellare.
Per esempio una persona, un modello di automobile,una prova sostenuta da uno studente.
Le entità possono essere classificate secondo un criterio di omogeneità definendo il tipo di entità attraverso un nome.
Per esempio gli studenti di una classe sono classificabili nel tipo entità studente, diversi modelli di automobile sono classificabili nel tipo entità automobile.
Ogni elemento di una classe viene definito istanza dell’entità.
Cosi ciascun studente rappresenta un’istanza dell’entità studente.
Nella rappresentazione grafica un’entità è identificata da un rettangolo contenente all’interno il nome dell’entità.
studente automobile persona
10
Associazioneè un legame che definisce un’interazione tra le entità.
Ogni associazione ha due versi con specifici significati;
esempio, tra l’entità persona e l’entità automobile esiste un’associazione che può essere descritta secondo 2 versi:una persona può possedere una o più automobili e un’automobile e posseduta da 1 persona.
Gli attributi descrivono le proprietà delle entità e delle associazioni esempio di attributi per l’entità automobile sono:modello,produttore,cilindrata,prezzo listino.
Le caratteristiche di ogni attributo sono :
Formato:tipo di valore che assume,i formati base sono carattere,numerico,data/ora.
Dimensione
La chiave primaria è un attributo che consente di distinguere un’istanza dall’altra per la stessa entità.
Esempio codice di un prodotto è la matricola di un dipendente.
persona automobile
11
ASSOCIAZIONI TRA ENTITA’
L’associazione tra entità può essere obbligatoria quando il legame tra le due entità deve essere sempre presente opzionale quando può essere presente
Per esempio nell’associazione tra entità persona e entità contocorrente,dato che non tutte le persone hanno un conto corrente il verso persona conto corrente e
opzionale, ma ogni conto corrente e necessariamente intestato a una persona quindi il verso conto corrente persona è obbligatorio.
Si indica l’opzionalità con il tratteggio,l’obbligatorietà con una linea continua PERSONA_ _ _ _ _ _ _ _ ______________CONTO CORRENTE Il grado di un verso può essere
1 a 1 :ogni istanza della prima entità corrisponde ad una sola istanza della seconda entità e viceversa persona_____________________codice fiscale
1 a Molti: conto corrente_ _ _ _ _ _______movimenti
ogni conto può effettuare un o più operazioni, ma ogni movimento deve riferirsi ad un solo conto corrente.
Molti a Molti studenti _ _ _ _ _ _ _ _ _ _ _ _materia
Uno studente può essere verificato su una o più materie e una materia può essere oggetto di verifica per uno o più studenti.
12
MODELLO LOGICO
Il modello logico si ricava applicando alcune regole di derivazione:
• 1:ogni entità diventa un archivio;
• 2:ogni attributo di un’entità diventa un campo nell’archivio, cioè il nome di un campo nella struttura record;
• 3:ogni campo del record eredita le caratteristiche dell’attributo dell’entità da cui deriva;
• 4:l’identificatore univoco di un’entità diventa la chiave primaria nel record dell’archivio derivato;
• 5:l’associazione 1:1 diventa un archivio unico, il cui tracciato record contiene i campi corrispondenti agli attributi della prima e della seconda entità;
• 6:l’identificatore univoco dell’entità di partenza nell’associazione 1 a molti diventa chiave esterna dell’entità di arrivo associata, cioè l’attributo che è identificatore univoco diventa un campo nel record del secondo archivio;
• 7:l’associazione con grado molti a molti diventa un nuovo archivio (in aggiunta agli archivi derivati dalle due entità), il cui record contiene gli identificatori univoci delle due entità e gli eventuali attributi dell’associazione.
13
In generale dall’associazione:
1 a 1 del modello concettuale viene derivato un unico archivio che contiene gli attribbuti della prima e della seconda entità.
A ogni cittadino è assegnato uno e un solo codice fiscale:
1 a molti viene tradotto creando le tabelle delle entità e aggiungendo agli attribbuti dell’entità <a molti> la chiave (esterna) dell’entità a <uno>.
Ogni contratto può essere sottoscritto da uno o più dipendenti, e ogni dipendente deve essere regolato da un solo contratto di lavoro:
molti a molti si traduce in due archivi che rappresentano le entità ed un terzo archivio contenente le chiavi delle due entità più gli eventuali attribbuti dell’associazione.
Ogni docente può insegnare in una sola classe o più classi e ogni classe deve avere uno o più docenti:
contratto dipendente
docente classe
Codfisc. cittadino
14
ESEMPIO DI ANALISI DI UN PROBLEMA
Passi:
1:analisi dei dati 2:modello E/R
3:derivazione del modello logico 4:analisi del problema
TESTO DEL PROBLEMA
produrre il modello dei dati per la costruzione di un archivio anagrafico e descrivere le funzioni più importanti per la sua gestione.
ANALISI DEI DATI
esempi di archivi anagrafici sono:
soci di un circolo
cittadini di un comune clienti di una azienda fornitori di un’azienda
in ogni caso la gestione di un archivio anagrafico deve prevedere tre operazioni fondamentali:
l’inserimento - la cancellazione - la modifica
15
Per delimitare il campo di applicazione, si supponga di operare sull’archivio anagrafico dei clienti di un’azienda.
Le principali informazioni che vanno registrate per ogni cliente sono:
cognome nome indirizzo cap
località provincia telefono partita iva.
Queste sono necessarie per le intestazioni delle fatture e per la stampa di elenchi e di indirizzi.
Per facilitare la gestione su un archivio magnetico è opportuno associare ad ogni cliente un codice che può essere un numero progressivo che viene assegnato ad ogni nuovo cliente.
16
Per la definizione dell’entità cliente si possono indicare, quindi, i seguenti attributi:
codice cliente,ragione sociale,indirizzo, località, provincia.
E’ opportuno inserire una nuova entità località descritta dai seguenti attributi:
codice località,cap, nome località, sigla della provincia.
Tale scelta permette di ottenere un’indicazione univoca per descrizioni diverse della medesima località: per esempio Mte Bianco e M. Bianco si riconducono all’unica dizione Monte Bianco.
MODELLO E/R
Ogni cliente deve essere residente in una località ma ogni località può essere residenza di uno o più clienti .
Applicando le regole di derivazione del modello logico, l’associazione uno a molti viene realizzata introducendo tra gli attributi dell’archivio clienti la chiave esterna codice località.
ARCHIVI
Località(codicelocalità,cap,nomelocalità,siglaprovincia)
Cliente(codicecliente,regionesociale,indirizzo,telefono,codicelocalità,partitiva,codiceag ente,fido);
le chiavi primarie delle due relazioni sono codicecliente e codicelocalità descrizione dei dati
località cliente
17
DESCRIZIONE DEI DATI
Archivio campo chiave formato dimensione
località codice primaria numerico 4
cap carattere 5
nome carattere 30
sigla provincia carattere 2
Clienti codice primaria numerico 4
cognome carattere 30
nome carattere 15
indirizzo carattere 30
partita iva carattere 11
numtel carattere 10
codice località esterna numerico 4
18
ANALISI DEL PROBLEMA
Il problema si può scomporre in due parti principali:
- gestione località - Gestione clienti
Dove per gestione si intende la possibilità di modificare i dati contenuti nell’archivio.
Tale possibilità si articola in 4 funzioni:
1 inserimento di un record
2 modifica del contenuto di un record 3 cancellazione di un record
4 visualizzazione di uno o più record.
19
ESEMPIO
Testo del problema
Le informazioni sulle opere d’arte di molti artisti di epoche diverse,devono essere
catalogate e registrate in un archivio. In una stessa città ci possono essere più musei.
Le opere possono essere di tipo diverso:tele,sculture,ecc. Uno stesso artista può
avere opere in tanti musei, così come in un museo, in genere, ci sono opere di artisti diversi.Per sapere l’epoca di riferimento dell’artista si potrebbe registrare la data di nascita e la data di morte(quest’ultima è vuota se l’artista è vivente).L’opera inserita nell’archivio può assumere un’identificazione numerica, come una specie di
numerazione del catalogo delle opere.
Individuare le entità, gli attributi e le associazioni, motivando le scelte effettuate, disegnare il modello E/R con i versi delle associazioni.
Definire gli archivi utilizzando le regole di derivazione e descrivere le caratteristiche di ciascun archivio con uno schema del tipo:
Archivio | campo | chiave | formato | dimensione |
……….. …….. …….. ………. ……….
20
Analisi dei dati
Le entità che possono essere individuate nel problema sono:
Artista,per rappresentare le informazioni riguardanti gli autori delle opere da catalogare;
Museo, per i diversi musei dove si trovano le opere catalogate;
Città, per le informazioni sulle località che sono sedi dei musei;
Opera, per informazioni riguardanti le opere degli artisti.
Gli attributi sono:
Per artista: codice artista, cognome, nome, data nascita, data morte, nazionalità;
Per città: codice città, descrizione, nazione;
Per opera: numero di catalogo, titolo,tipo(tela,scultura,ecc.), anno di realizzazione.
Tra l’entità artista e l’entita opera esiste un’associazione uno a molti, perché un artista può realizzare più opere e ciascuna opera si riferisce a un solo artista.
Tra l’entità museo e l’entità opera si può stabilire un’associazione uno a molti, perché ci possono essere tante opere nello stesso museo, ma un’opera è collocata in un solo museo.
Tra l’entità città e l’entità museo esiste un’associazione uno a molti, perché in una citta ci possono essere più musei, ma un museo si trova ovviamente in una sola città.
21
Modello E/R:
Ogni città può essere sede di uno o più musei,ogni museo deve essere ubicato in una sola città.
Ogni museo può essere proprietario di una o più opere, ogni opera deve essere conservata in un solo museo.
Ogni artista può essere l’autore di una o più opere, ogni opera deve essere eseguita da un solo artista.
MUSEO OPERA ARTISTA
CITTA’
22
Utilizzando le regole di derivazione si passa del modello concettuale al modello logico, cioè agli archivi, introducendo le chiavi primarie(grassetto) e le chiavi
esterne(sottolineate) per rappresentare le associazioni.
ARCHIVI:
- ARTISTI chiaveartista,cognome,nome,datanascita,datamorte,nazionalità;
- CITTA’ chiavecittà,descrizione,codicecittà;
- MUSEI chiavemuseo,denominazione,codicecittà;
- OPERE numerocatalogo,titolo,tipo,anno,codicemuseo,codiceartista.
L’associazione uno a molti tra città e museo è stata rappresentata aggiungendo agli attributi dell’entità a molti(museo) la chiave esterna corrispondente alla chiave primaria dell’entità a uno (città).
La chiave esterna codicecittà è associata alla chiave primaria chiavecittà.
In modo analogo sono state aggiunte le chiavi esterne codicemuseo e codice artista in opera per rappresentare le associazioni uno a molti rispettivamente tra museo e opera e tra artista e opera.
La chiave esterna codicemuseo corrisponde alla chiave primaria chiavemuseo,la chiave esterna codiceartista è associata alla chiave primaria chiaveartista.
23
Lo schema seguente illustra le caratteristiche degli archivi e dei campi del record.
Artisti chiaveartista primaria carattere 5
cognome carattere 30
nome carattere 30
datanascita data/ora 8
datamorte data/ora 8
nazionalità carattere 15
Città chiavecittà primaria carattere 5
descrizione carattere 30
nazione carattere 15
Musei chiavemuseo primaria carattere 5
denominazione carattere 40
codicecittà esterna carattere 5
Opere numerocatalogo primaria numerico 5
titolo carattere 30
tipo carattere 15
anno numerico 4
codicemuseo esterna carattere 5
codiceartista esterna carattere 5
24
DATABASE
I database sono archi di dati organizzati attraverso tecniche di modellazione e gestiti sulle memorie di massa dei computer attraverso software (DBMS: DataBase
Management System).
MODELLO RELAZIONALE
Il modello relazionale rappresenta il DataBase come un insieme di tabelle sulle quali si possono effettuare operazioni , e tra le quali possono essere stabilite associazioni.
La relazione rappresenta un’entità(tabella), dove ogni riga è un’istanza, e le colonne gli attributi dell’entità.
I requisiti fondamentali che caratterizzano il modello relazionale sono:
• Tutte le righe della tabella contengono lo stesso numero di colonne(attributi);
• Gli attributi rappresentano informazioni elementari non scomponibili;
• I valori assunti da un campo sono tutti dello stesso tipo;
• In una relazione, ogni riga è diversa da tutte le altre.
25
Le tabelle vengono ricavate dal modello E/R applicando le regole di derivazione del modello logico, che riscriviamo in riferimento alle strutture di dati del modello relazionale:
• 1:ogni entità diventa una relazione;
• 2:ogni attributo di un’entità diventa un attributo della relazione, cioè il nome di una colonna della tabella;
• 3:ogni attributo della relazione eredita le caratteristiche dell’attributo dell’entità da cui deriva;
• 4:l’identificatore univoco di un’entità diventa la chiave primaria della relazione derivata;
• 5:l’associazione 1:1 diventa un’unica relazione, che contiene gli attributi della prima e della seconda entità;
• 6:l’identificatore univoco dell’entità di partenza nell’associazione 1 a molti diventa chiave esterna dell’entità di arrivo associata, cioè i suoi attributi identificatori
univoci diventano attributi della seconda relazione;
• 7:l’associazione con grado molti a molti diventa una nuova relazione (in aggiunta alle relazioni derivate dalle entità), composta dagli identificatori univoci delle due entità e dagli eventuali attributi dell’associazione
.
26
SQL
STRUCTURED QUERY LANGUAGE
SQL viene usato da tutti i prodotti DBMS (DATABASE MANAGEMENT SYSTEM) tipo Oracle, Informix, Sql server,Access.
Secondo la terminologia del linguaggio SQL un DataBase è costituito da TABELLE, che rappresentano le relazioni; gli ATTRIBUTI le colonne delle tabelle e i
RECORD le righe.
SQL consente all’utente di:
- definire la struttura di un DataBase (funzioni DDL) (data definition language)
- modificare i dati contenuti nel DataBase, con operazioni di inserimento, variazione e cancellazione (funzioni DML) (data manipulation language)
- gestire i controlli degli accessi e i permessi per gli utenti (funzioni DCL) (data control language)
- porre interrogazioni al DataBase (funzioni di QUERY LANGUAGE) - definire tabulati di uscita dei risultati (REPORT)
27
IDENTIFICATORI E TIPI DI DATI
Identificatori (nomi di tabelle o attributi) =max 18 caratteri e devono iniziare con una lettera OPERATORI ARITMETICI + - / * LOGICI = < >
Dati
CHARACTER(n) CHAR(n) stringa di lunghezza n n da 1 a 15000
DATE data nella forma MM/GG/AA
TIME ora nella forma HH:MM
INTEGER(p) INT(p) numero intero con precisione p p da 1 a 45
SMALLINT numero intero con precisione 5 da –32768 a +32767 INTEGER numero intero con precisione 10
da – 2147483648 a + 2147483647 DECIMAL(p,s) DEC(p,s) numero decimale con precisione p e s cifre decimali
REAL numero reale con mantissa di precisione 7
FLOAT(O DOUBLE PRECISION) numero decimale con mantissa di precisione 15 FLOAT(p) numero reale con mantissa di precisione p p da 1 A 45
28
COMANDI PER DEFINIRE LE TABELLA
Le tabelle vengono CREATE con il comando CREATE TABLE seguito dal nome della tabella e dall’elenco degli attributi. Per ogni attributo occorre specificare il nome e il tipo di dato.
ESEMPIO
Creare una tabella contenente i dati dei dipendenti di un’azienda (MATRICOLA,COGNOME E NOME , CODICE FISCALE, DATA DI ASSUNZIONE,FILIALE IN CUI LAVORA, FUNZIONE
ALL’INTERNO DELL’AZIENDA,LIVELLO,STIPENDIO BASE,INDIRIZZO CON VIA,CAP,CITTA’, PROVINCIA )
CREATE TABLE PERSONALE (MATRICOLA CHAR(5),
COGNOME CHAR(30),
NOME CHAR(20),
CODFIS CHAR(16) NOT NULL, ASSUNTO DATE,
FILIALE SMALLINT,
FUNZIONE CHAR(15),
LIVELL SMALLINT,
STIPBASE INTEGER,
VIA CHAR(25),
CAP CHAR(5),
CITTA CHAR(20),
PROV CHAR(2) );
Accanto alla definizione dell’ attributo si può inserire la clausola NOT NULL, per indicare che nelle operazioni di inserimento o aggiornamento quell’attributo deve essere riempito tutto con caratteri NON NULLI
29
ESEMPIO
Creare una tabella contenente i dati dei dipendenti di un’azienda (MATRICOLA,COGNOME E NOME , CODICE FISCALE, DATA DI ASSUNZIONE,FILIALE IN CUI LAVORA, FUNZIONE
ALL’INTERNO DELL’AZIENDA,LIVELLO,STIPENDIO BASE,INDIRIZZO CON VIA,CAP,CITTA’, PROVINCIA )
CREATE TABLE PERSONALE (MATRICOLA CHAR(5), COGNOME CHAR(30),
NOME CHAR(20),
CODFIS CHAR(16) NOT NULL, ASSUNTO DATE,
FILIALE SMALLINT, FUNZIONE CHAR(15), LIVELL SMALLINT, STIPBASE INTEGER,
VIA CHAR(25),
CAP CHAR(5),
CITTA CHAR(20),
PROV CHAR(2) );
Accanto alla definizione dell’ attributo si può inserire la clausola NOT NULL, per indicare che nelle operazioni di inserimento o aggiornamento quell’attributo deve essere riempito tutto con caratteri NON NULLI
30
Le Tabelle vengono modificate con i comandi
ALTER TABLE
:- ADD:AGGIUNGI COLONNA
-
DROP:
ELIMINA COLONNA ESEMPIOALTER TABLE PERSONALE ADD NASCITA DATE;
ALTER TABLE PERSONALE DROP STIPBASE;
DROP TABLE
:CANCELLA TABELLA EsempioDROP TABLE PERSONALE;
31
COMANDI PER MANIPOLARE TABELLE
I valori degli attributi nelle righe delle tabelle possono essere inseriti,aggiornati o cancellati rispettivamente con i comandi : INSERT, UPDATE E DELETE.
Per Inserire i valori di una nuova riga della tabella personale si usa il comando:
INSERT INTO PERSONALE
(MATRICOLA,COGNOME,NOME,CODFISC,NASCITA,ASSUNTO,FILIALE,FUNZIONE, LIVELLO,STIPBASE,VIA,CAP,CITTA,PROV)
VALUES(‘AX232’,’ESPOSITO’,’GENNARO’,’YERG71GE3E32ERFF’,’05/11/1971’,’12/03/
1989’,3,’IMPIEGATO’,5,890,’VIA ROMA 132’,’20100’,’NAPOLI’,’NA’);
Per cambiare livello al dipendente con matricola aaa11 occorre dare il comando:
UPDATE PERSONALE SET LIVELLO = 6
WHERE MATRICOLA = ‘AAA11’
;
32
Per cancellare dalla tabella personale i dati del dipendente con matricola aaa11 si usa il comando:
DELETE FROM PERSONALE WHERE MATRICOLA = ‘AAA11’;
Se si vuole aumentare del 5% lo stipendio di tutti i dipendenti sopra il 5° livello occorre dare il comando:
UPDATE PERSONALE
SET STIPBASE = STIPBASE * 1.05 WHERE LIVELLO >5;
--- Nelle versioni moderne dei DBMS le operazioni di creazione, modifica, cancellazione
tabelle (DDL) e di inserimento, modifica, cancellazione dati (DML) vengono effettuate attraverso un’interfaccia grafica interattiva che facilita il compito dell’utente che può anche non conoscere la sintassi delle istruzioni.
33
IL COMANDO SELECT
Questo comando da la possibilità di porre interrogazioni al database per ritrovare le informazioni che interessano.
La struttura generale del comando SELECT è la seguente:
SELECT …………
FROM ………..
WHERE ………..
Accanto alla parola SELECT vengono indicati i nomi degl’attributi (colonne) da elencare;
Dopo FROM vengono indicati i nomi delle tabelle su cui deve operare il comando select;
Dopo WHERE si specifica la condizione che deve essere soddisfatta dai campi delle righe: possono comparire anche più condizioni combinate con gli operatori AND, OR, NOT.
Per esempio l’elenco con cognome, nome, codice fiscale dei dipendenti con funzione di impiegato si ottiene con il comando SELECT nella forma:
SELECT cognome, nome, codfisc FROM personale
WHERE funzione = ‘impiegato’;
34
Se è necessario elencare tutti gli attributi di un record è sufficiente inserire dopo la parola select il carattere *.
Il comando select possiede due predicati ALL e DISTINCT.
ALL indica la richiesta di ottenere come risultato dell’interrogazione tutte le righe che soddisfano le condizioni contenute nel comando.
Questo predicato è di default.
Quindi le due seguenti istruzioni si equivalgono:
SELECT ALL * SELECT *
FROM personale FROM personale
WHERE prov = ‘NA’; WHERE prov ‘NA’;
DISTINCT se viene attivato, le righe duplicate nella tabella risultante vengono ridotte a una
Per esempio se si desidera ottenere l’elenco di tutte le professioni presenti tra i
dipendenti della tabella personale, specificando una sola volta il tipo di professione anche quando è riferita a più dipendenti:
SELECT DISTINCT funzione FROM personale;
35
Il comando select nella forma:
SELECT funzione from personale;
Produrrebbe l’elenco di tutte le professioni dei dipendenti ripetendo tante volte la stessa professione in righe diverse, tante quanti sono i dipendenti che svolgono quella
funzione.
La tabella che si ottiene come risultato dell’interrogazione con SELECT normalmente possiede un’intestazione delle colonne che riporta i nomi degli attributi; se si vuole modificare tale intestazione, occorre dichiarare la stringa della nuova intestazione insieme alla clausola AS.
Per esempio per ottenere l’elenco delle diverse province da cui provengono i dipendenti della tabella personale, intestando la colonna del risultato con il titolo provincia, si deve scrivere:
SELECT DISTINCT Prov AS provincia;
Esempio
Visualizzare il nominativo dei dipendenti, lo stipendio base con l’intestazione di colonna attuale ed una nuona colonna intestata nuovo nuovo dove aggiungeremo allo stipendio base un aumento del 5%:
SELECT cognome, nome, stipbase AS attuale, stipbase *1.05 AS nuovo FROM personale;
36
Le condizioni scritte dopo il comando WHERE finora trattate come costanti, possono essere inserite anche come parametri, questo al fine di utilizzare la stessa
interrogazione più volte per condizioni diverse.
IN Access questo è possibile inserendo dopo WHERE il parametro tra parentesi quadre:
Al momento dell’esecuzione viene richiesto all’utente di inserire, in modo interattivo attraverso una finestra di dialogo, il tipo di condizione che deve soddisfare:
SELECT cognome, nome, codfisc SELECT cognome, nome, codfisc
FROM personale FROM personale
WHERE funzione = ‘impiegato’; WHERE funzione =[tipo funzione];
37
LE OPERAZIONI RELAZIONALI NEL LINGUAGGIO SQL Le operazioni relazionali agiscono su una relazione per ottenerne una nuova.
In sostanza esse consentono di effettuare interrogazioni alla base di dati per ottenere le informazioni desiderate estraendo da una tabella una sottotabella,oppure
combinando tra loro due o più tabelle e generando così nuove relazioni.
Le operazioni di selezione, proiezione, congiunzione su una base di dati relazionale vengono realizzate attraverso il comando SELECT.
SELEZIONE:consente di ricavare da una relazione un’altra relazione contenente solo le righe che soddisfano ad una certa condizione, questo in SQL viene realizzato utilizzando la clausola WHERE
Per esempio per ottenere l’elenco con tutti i dati dei dipendenti che svolgono la
funzione di dirigente, si si opera sulla tabella personale estraendo le righe per le quali l’attributo funzione contiene il valore dirigente.
Select *
from personale
where funzione = ‘dirigente’;
PROIEZIONE:permette di ottenere una relazione contenente solo alcuni attributi della relazione di partenza e si realizza indicando accanto alla parola select l’elenco degli attributi richiesti.
Esempio:elenco di tutti i dipendenti con cognome, nome, codice fiscale Select cognome, nome, codfisc
from personale
38
La CONGIUNZIONE (join) di due tabelle secondo un attributo comune viene effettuata indicando i nomi ( separati da virgola ) delle tabelle dopo la parola FROM; e scrivendo dopo la parola WHERE i nomi degli attributi che si
corrispondono nelle due tabelle (legati tra loro dal segno =).
Per esempio si supponga di aver creato accanto alla tabella personale anche la tabella sede che ha tre attributi :codfil,descrizione,indirizzo;codfil è chiave primaria.
Tra la relazione sede e la relazione personale viene stabilita un’associazione uno a molti e l’attributo filiale nella tabella personale diventa chiave esterna.
Per ottenere l’elenco di tutti i dipendenti con la descrizione e l’indirizzo della filiale dove lavorano, bisogna effettuare la congiunzione delle tabelle personale e sede secondo gli attributi comuni filiale e codfil.
SELECT *
FROM personale, sede WHERE filiale = codfil;
Per maggiore chiarezza è possibile scrivere il nome degli attributi preceduti dal nome della tabella di appartenenza e il punto.
SELECT *
FROM personale, sede
WHERE personale.filiale = sede.codfil;
39
Se si vuole conservare la tabella risultante dall’operazione,occorre aggiungere al comando SELECT la clausola INTO seguita dal nome da assegnare alla nuova tabella.
Per esempio se si desidera creare una nuova tabella di nome manager contenente le informazioni per i soli dipendenti che hanno la funzione di dirigente:
SELECT * INTO manager FROM personale
WHERE funzione= ‘dirigente’;
Le colonne della nuova tabella presentano gli stessi nomi, formati e dimensioni degli attributi della tabella di origine.
Se si vogliono aggiungere le righe della tabella risultante alle righe di una tabella già esistente, si deve usare il comando INSERT INTO seguito dal nome della tabella e dalla frase SELECT che determina le righe da aggiungere nella tabella.
Se si vogliono aggiungere alla tabella personale le righe provenienti da un’altra tabella contenente i dati dei nuovi assunti:
INSERT INTO personale SELECT *
FROM nuoviassunti;
40
LE FUNZIONI DI AGGREGAZIONE COUNT:conta il numero di righe presenti in una tabella.
essa richiede come argomento dopo la parola SELECT o il nome di un’attributo oppure il carattere (*):nel primo caso non vengono conteggiate le righe che hanno valore NULL nella colonna dell’attributo specificato; nel secondo caso la funzione calcola il numero delle righe tabella,comprese quelle con campi NULL.
SELECT COUNT (*) SELECT COUNT (livello)
FROM personale; FROM personale;
Se si vuole conoscere il numero di valori diversi tra loro nella colonna X che soddisfano alla condizione scritta dopo WHERE bisogna usare COUNT (DISTINCT X)
Per esempio se si vuole conoscere a quanti livelli diversi appartengono i dipendenti che abitano in provincia di Napoli:
SELECT COUNT(DISTINCT livello) FROM personale
WHERE prov = ‘NA’
La clausola DISTINCT non può essere usata nella forma COUNT(*)
41
SUM:restituisce la somma di tutti i valori contenuti in una colonna specificata come argomento della funzione:l’attributo deve essere di tipo numerico.
Per esempio se si vuole la somma degli stipendi base dei dipendenti che appartengono al 6 livello:
SELECT SUM (stipbase) FROM personale
WHERE livello = 6;
L’argomento della funzione può anche essere un’espressione numerica contenente i nomi di attributi numerici.
AVG: calcola la media dei valori (numerici) contenuti in una determinata colonna della tabella.
Per esempio se si vuole lo stipendio medio dei dipendenti che svolgono funzione di impiegato:
SELECT AVG (stipbase) FROM personale
WHERE funzione = ‘impiegato’;
MIN e MAX: restituiscono il valore minimo e massimo tra i valori della colonna specificata come argomento della funzione.
Esempi:
SELECT MIN (stipbase), MAX (stipbase) SELECT MIN (cognome),MAX (cognome) FROM personale; FROM personale;
42
ORDINAMENTI E RAGGRUPPAMENTI
ORDER BY:nel comando SELECT per ottenere i risultati di un’interrogazione ordinati secondo i valori contenuti in una o più colonne tra quelle elencate accanto la parola SELECT.
L’ordinamento può essere crescente o decrescente; le parole chiave che li rappresentano sono ASC crescente(per default), DESC decrescente.
Elenco alfabetico dei dipendenti, con cognome, nome,codice fiscale e data di nascita:
SELECT cognome, nome, codfis, nascita FROM personale
ORDER BY cognome, nome;
Elenco dei dipendenti in ordine decrescente di stipendio base e, a parità di stipendio, in ordine di cognome:
SELECT cognome, stipbase FROM personale
ORDER BY stipbase DESC, cognome;
43
GROUP BY :nelle funzioni di aggregazione SUM, COUNT, AVG,MIN, MAX è
possibile estendere la struttura del comando SELECT con l’aggiunta della clausola GROUP BY per raggruppare un insieme di righe aventi lo stesso valore nelle
colonne indicate:questa opzione produce una riga di risultati per ogni raggruppamento.
Lista delle funzioni dei dipendenti con la somma degli stipendi e il numero dei dipendenti appartenenti alle diverse funzioni:
SELECT funzione, SUM (stipbase), COUNT(*) FROM personale
GROUP BY funzione;
Elenco dei livelli esistenti tra i dipendenti che svolgono la funzione di impiegato con il numero di dipendenti per ciascun livello:
SELECT livello, COUNT (livello) AS conteggio FROM personale
WHERE funzione = ‘impiegato’
GROUP BY livello;
44
Con la clausola HAVING è possibile sottoporre ad una o più condizioni i gruppi creati con la clausola GROUP BY.
La condizione scritta dopo HAVING normalmente controlla il valore restituito dalle funzioni di aggregazione( count, sum, avg, min, max).
Elenco delle funzioni dei dipendenti con lo stipendio medio per ciascuna funzione, dopo aver raggruppato i dipendenti per funzione, purché i dipendenti con quella funzione siano più di 2:
SELECT funzione, AVG (stipbase) FROM personale
GROUP BY funzione HAVING COUNT (*) >2
45
CONDIZIONI DI RICERCA
Queste condizioni vengono utilizzate insieme alle clausole WHERE e HAVING Segni del confronto =, <, >, <>, >=, <=.
Operatori logici AND, OR, NOT.
BETWEEN:controlla se un valore è compreso all’interno di un intervallo di valori,inclusi gli estremi.
Elenco dei dipendenti (con cognome, nome, funzione) che sono stati assunti tra la data 1/1/1998 e la data 31/12/2002:
SELECT cognome, nome, funzione FROM personale
WHERE assunto BETWEEN 01/01/1998 AND 31/12/2002;
IN:controlla se un valore appartiene ad un insieme specificato di valori.
Elenco dei dipendenti che risiedono nelle province di Milano, Napoli, Torino, Potenza, Palermo:
SELECT *
FROM personale
WHERE prov IN (‘MI’, ‘NA’, ‘TO’, ‘PZ’, ‘PA’);
46
LIKE: confronta il valore di un attributo di tipo carattere con una stringa che può contenere dei caratteri jolly:
_ (underscore) per indicare un singolo carattere qualsiasi in quella posizione della stringa:
% (percento) per indicare una sequenza qualsiasi di caratteri in quella posizione della stringa;
Esempio:
LIKE ‘BIT%’vengono ricercate tutte le stringhe che iniziano con i caratteri ‘BIT;
LIKE ‘%BIT’ ’vengono ricercate tutte le stringhe che finiscono con i caratteri ‘BIT;
LIKE ‘%BIT%’ ’vengono ricercate tutte le stringhe che contengono i caratteri ‘BIT;
LIKE ‘_BIT’ controlla le stringhe di 4 caratteri che finiscono in ‘PAR’;
Se LIKE viene utilizzato senza caratteri jolly equivale all’operatore =.
Elenco cognome e filiale dei dipendenti con il cognome che inizia con ‘ES’
SELECT cognome, filiale FROM personale
WHERE cognome LIKE ‘ES%’;
47
INTERROGAZIONI NIDIFICATE
In SQL è possibile costruire delle interrogazioni nidificate (subquery) inserendo un comando SELECT all’interno di un altro comando SELECT.
La condizione scritta dopo il comando WHERE confronta il valore di un attributo con il risultato di un altro comando SELECT.
Elenco con cognome e nome dei dipendenti che hanno lo stipendio base inferiore allo stipendio medio di tutti i dipendenti :
SELECT cognome, nome FROM personale WHERE stipbase <
(SELECT AVG (stipbase) FROM personale);
Ricercare i dipendenti,elencando in ordine alfabetico cognome, nome e descrizione della filiale dove lavorano, per i quali lo stipendio risulta uguale al valore massimo tra tutti gli stipendi dei dipendenti con la funzione di impiegato:
SELECT cognome, nome, descrizione FROM personale, sede
WHERE filiale = codfil AND stipbase = ( SELECT MAX (stipbase) FROM personale
WHERE funzione = ‘impiegato’) ORDER BY cognome, nome;
48
n
Nella costruzione di una SUBQUERY si possono usare le clausole:
ANY:la condizione di ricerca è vera se il confronto è vero per almeno uno dei valori restituiti.
Esempio Elenco dipendenti che non sono impiegati e che hanno lo stipendio superiore a quello di uno qualsiasi tra gli impiegati:
SELECT cognome, nome, funzione FROM personale
WHERE funzione <> ‘impiegato’
AND stipbase > ANY ( SELECT stipbase FROM personale
WHERE funzione = ‘impiegato’);
ALL:la condizione di ricerca è vera se il confronto è vero per tutti i valori restituiti.
Esempio Elenco dipendenti che non sono impiegati e che hanno lo stipendio superiore a quello di tutti gli impiegati:
SELECT cognome, nome, funzione FROM personale
WHERE funzione <> ‘impiegato’
AND stipbase > ALL ( SELECT stipbase
FROM personale
WHERE funzione = ‘impiegato’);
49
IN:la condizione di ricerca è vera se il valore di un attributo è compreso tra quelli restituiti dalla SELECT nidificata..
Esempio Elenco dipendenti che lavorano nelle filiali che hanno più di 10 dipendenti:
SELECT cognome, nome FROM personale
WHERE filiale IN ( SELECT filiale
FROM personale GROUP BY filiale
HAVING COUNT (*) > 10);
EXISTS:la condizione di ricerca è vera se la SELECT nidificata produce una o più righe come risultato.
Esempio Elenco dipendenti solo se esistono dipendenti di sesto livello:
SELECT cognome, nome FROM personale
WHERE EXISTS ( SELECT stipbase
FROM personale WHERE livello= 6);
50
Problema n° 1
Testo del problema
Le informazioni relative alle attività sportive studentesche devono essere organizzate in una base di dati.Gli studenti, dei quali si conservano le informazioni
anagrafiche,frequentano gli istituti superiori, e possono partecipare a una o più
manifestazioni sportive (specialità sportive diverse, giornate diverse,campionati che durano per mesi o gare di un giorno.) Per ogni attività sportiva le scuole indicano un professore che svolge la funzione di riferimento e di allenatore:ogni professore
segue una sola manifestazione, ma una stessa manifestazione può essere seguita da professori diversi di scuole diverse.
Definire il modello del database e rappresentare le seguenti interrogazioni:
Numero di studenti che partecipano ad una determinata manifestazione sportiva.
Elenco anagrafico degli allenatori di un’attività sportiva.
Elenco delle scuole (denominazione) con il numero di studenti che partecipano.
Elenco delle scuole (denominazione, indirizzo, telefono) che hanno almeno uno studente che partecipa ad una determinata manifestazione sportiva.
Elenco allenatori (cognome nome) e scuole (denominazione) di appartenenza in ordine alfabetico.
Numero degli studenti di una determinata scuola che partecipano a ciascuna delle manifestazioni sportive.
51
Le ENTITA’ che possono essere individuate nel problema sono:
- ISTITUTO istituti di appartenenza di alunni e professori.
- STUDENTE studenti delle diverse scuole che partecipano alla manifestazione.
- PROFESSORE professori che svolge la funzione di allenatore.
- MANIFESTAZIONE attività sportive.
ATTRIBUTI:
ISTITUTO codice istituto, denominazione, indirizzo, telefono.
STUDENTE codice studente, cognome, nome, data nascita.
PROFRSSORE codice professore, cognome, nome.
MANIFESTAZIONE codice manifestazione, descrizione, luogo,data inizio per i tornei e campionati o di svolgimento per le gare di una giornata.
ASSOCIAZIONI:
ISTITUTO – STUDENTI UNO A MOLTI: ogni istituto può essere la scuola di uno o più studenti, ogni studente deve essere iscritto in un solo istituto.
STUDENTE – MANIFESTAZIONE MOLTI A MOLTI:ogni studente può essere il
partecipante di una o più manifestazioni, ogni manifestazione deve essere seguita da uno o più studenti.
MANIFESTAZIONE – PROFESSORE UNO A MOLTI:ogni manifestazione può essere seguita da uno o più professori, come da vincolo nel testo del problema,ogni professore può essere l’allenatore di una sola manifestazione.
ISTITUTO – PROFESSORE UNO A MOLTI :ogni istituto può essere la sede di uno o più professori,ogni professore deve avere la cattedra in un solo istituto.
52
MODELLO E/R
STUDENTE ISTITUTO
MANIFESTAZIONE PROFESSORE
Iscritto in Scuola di
Curata da Allenatore in
Sede di
Docente presso Partecipante a
Seguita da
Utilizzando le regole di derivazione si passa dal modello concettuale al modello logico, cioè alle tabelle:le associazioni uno a molti si rappresentano introducendo le chiavi esterne nelle tabelle studenti e professori per indicare l’istituto di appartenenza; nella tabella professori viene aggiunta anche un’altra chiave esterna per l’associazione con l’entità manifestazioni; l’associazione molti a molti tra studenti e manifestazioni genera una nuova tabella iscrizioni che contiene le chiavi primarie di studenti e manifestazioni più l’attributo data di iscrizione.
53
istututi codice istituto primaria carattere 4
denominazione carattere 35
indirizzo carattere 25
telefono carattere 12
studenti codicestu primaria numerico 5
cognstu carattere 30
nomestu carattere 20
datanascita data/ora 8
classe numerico 1
codiceistituto esterna carattere 4
manifestazioni codicemanif primaria carattere 3
descrizione carattere 25
luogo carattere 20
datainizio data/ora 8
professori codiceprof primaria numerico 3
cognprof carattere 30
nomeprof carattere 20
codiceistituto esterna carattere 4
codicemanif esterna carattere 3
Iscrizioni codicestud esterna numerico 5
codicemanif esterna carattere 3
dataisciz data/ora 8
54
INTERROGAZIONI
Numero degli studenti che partecipano a una determinata manifestazione sportiva:
SELECT COUNT (*)
FROM manifestazioni, iscrizioni
WHERE manifestazioni.codicemanif = iscrizione.codicemanif AND descrizione = [manifestazione da controllare];
Elenco anagrafico degli allenatori di una manifestazione:
SELECT cognprof, nomeprof
FROM manifestazioni, professori
WHERE manifestazioni.codicemanif = professori.codicemanif AND descrizione = [manifestazione da controllare]
ORDER BY cognprof, nomeprof;
Elenco delle scuole con il numero di studenti che partecipano:
SELECT denominazione, COUNT (DISTINCT codicestud) FROM studenti, istituti
WHERE studenti.codiceistituto = istituti.codiceistituto GROUP BY denominazione;
55
Elenco delle scuole (denominazione, indirizzo, telefono) che hanno almeno uno studente che partecipa ad una determinata manifestazione sportiva:
SELECT denominazione, indirizzo, telefono
FROM manifestazioni, iscrizioni, studenti, istituti
WHERE manifestazioni.codicemanif = iscrizione.codicemanif AND studenti.codicestud =iscrizioni.codicestud
AND studenti.codiceistituto = istituti.codiceistituto AND descrizione = [manifestazione da controllare];
GROUP BY denominazione, indirizzo, telefono HAVING COUNT (*) >0;
Elenco allenatori e scuole di appartenenza in ordine alfabetico:
SELECT cognprof, nomeprof, denominazione FROM professori, istituti
WHERE professori.codiceistituto = istituti.codiceistituto ORDER BY cognprof, nomeprof;
Numero studenti di una determinata scuola che partecipano a ciascuna delle manifestazioni SELECT descrizione, COUNT (*)
FROM manifestazioni, iscrizioni, studenti, istituti
WHERE manifestazioni.codicemanif = iscrizione.codicemanif AND studenti.codicestud =iscrizioni.codicestud
AND studenti.codiceistituto = istituti.codiceistituto AND descrizione = [scuola da controllare];
GROUP BY descrizione;
56
Problema n° 2
Testo del problema
Si vogliono organizzare le informazioni relative ai clienti, ai loro rappresentanti e alle fatture emesse.Ogni rappresentante ha tanti clienti, mentre a un cliente corrisponde un solo rappresentante. Per semplicità si supponga di registrare solo la data e
l’importo totale di ogni fattura, senza specificare le righe di dettaglio sugli articoli venduti.
Definire il modello del database e rappresentare le seguenti interrogazioni:
Elenco dei clienti di un rappresentante.
Numero dei clienti affidati a un determinato rappresentante.
Cognome e nome del rappresentante di un determinato cliente.
Elenco delle fatture di un codice cliente prefissato, in ordine di data.
Fatturato raggruppato per codice rappresentante.
Numero delle fatture emesse raggruppate per codice rappresentante.
Nome del cliente e data di emissione per la fattura con importo massimo.
Nome del rappresentante corrispondente alla fattura con importo massimo.
Codice e nome dei clienti per i quali il fatturato totale è superiore a una cifra prefissata.
Codice e nome dei rappresentanti per i quali il numero delle fatture è superiore a un numero prefissato.
57
ANALISI DEI DATI
Le entità che possono essere individuate nel problema sono:
CLIENTE clienti ai quali vengono emesse fatture;
RAPPRESENTANTE agenti ai quali sono assegnati clienti;
FATTURA vendite effettuate dai rappresentanti.
ATTRIBUTI
CLIENTE codicecliente, ragione sociale, indirizzo, telefono, partitaIVA;
RAPPRESENTANTE codi rappresentante, cognome, nome, zona assegnata;
FATTURA numero fattura, data emissione, importo.
ASSOCIAZIONI
RAPPRESENTANTE – CLIENTE UNO A MOLTI: ogni rappresentante ha tanti clienti, ad un cliente corrisponde un solo rappresentante.
CLIENTE – FATTURA UNO A MOLTI: per lo stesso cliente si possono emettere più fatture, ma ciascuna fattura è intestata a un solo cliente.
58
MODELLO E/R
CLIENTE RAPPRESENTANTE
FATTURA
Ogni rappresentante può essere agente per uno o più clienti, ogni cliente deve essere affidato a un solo rappresentante.
Ogni cliente può essere l’intestatario di una o o più fatture, ogni fattura deve essere emessa per un solo cliente.
Tabelle
RAPPRESENTANTI:codicerap,cognomerap, nomerap, zona;
CLIENTI:codicecli, ragionesociale, indirizzo, telefono, paritaiva,codicerap;
FATTURE:numerofatt, datafatt, importo, codicecli.
59
Problema n° 3 Testo del problema
Un’agenzia di viaggi intende organizzare in un database tutte le informazioni riguardanti la sua attività:i viaggi o vacanze, le organizzazioni turistiche o tour operator, i clienti dei propri servizi, le nazioni, località o città che sono destinazione dei viaggi/vacanze.
Tutte le attività proposte ai clienti sono dei pacchetti: ciascuno di essi si riferisce a
un’organizzazione turistica, e riguardano una precisa zona del mondo o nazione o città. Ci possono essere offerte di viaggi con la stessa destinazione da parte di organizzazioni diverse.
Per esempio ci può essere una crociera nel mediterraneo proposta dall’organizzazione turistica A, oppure un soggiorno di una settimana a Vienna offerta dall’organizzazione turistica B.
Di ogni pacchetto offerto occorre conoscere modalità e prezzi; di ogni località o nazione è opportuno tenere memorizzate informazioni su condizioni climatiche, moneta, ecc.
Un cliente può naturalmente acquistare in date diverse molti viaggi o vacanze.
Definire il modello del database e rappresentare le seguenti interrogazioni:
Elenco dei viaggi/vacanza con prezzo inferiore a un prezzo prefissato.
Elenco dei soggiorni con prezzo in una località prefissata.
Elenco dei clienti, con nome e indirizzo, che hanno fatto un viaggio con una determinata destinazione.
Numero dei pacchetti offerti da un’organizzazione turistica prefissata.
Elenco delle organizzazioni turistiche, con nome e telefono, che hanno almeno 5 pacchetti in archivio.
Elenco di tutte le nazioni o località con il numero di pacchetti che si riferiscono ad esse.
60
ANALISI DEI DATI
Le entità che possono essere individuate nel problema sono:
- NAZIONI stati che sono destinazione dei pacchetti vacanze;
- ORGANIZZAZIONE società di turismo che offrono i viaggi vacanza;
- CLIENTE anagrafica clienti per l’agenzia di viaggi;
- PACCHETTO pacchetti di viaggio o soggiorno.
ATTRIBUTI:
NAZIONE codice della nazione,denominazione dettagliata dello stato o della località, moneta, clima.
ORGANIZZAZIONE codice dell’organizzazione, nome, telefono.
CLIENTE codice cliente, cognome, nome, indirizzo, telefono.
PACCHETTO codice pacchetto, modalità, prezzo.
ASSOCIAZIONI:
NAZIONI - PACCHETTO UNO A MOLTI: ci possono essere più viaggi tra quelli offerti che hanno come destinazione una certa nazione.
ORGANIZZAZIONE - PACCHETTO UNO A MOLTI:una stessa organizzazione può offrire più pacchetti, però ogni pacchetto deve essere inteso come un’offerta che per le sue caratteristiche è riferita a una precisa organizzazione, anche se ha come destinazione una località comune ad altri pacchetti.
VIAGGIO - CLIENTE MOLTI A MOLTI:un cliente può acquistare in date diverse più viaggi e lo stesso pacchetto viene acquistato da più clienti.
61
Modello E/R
ORGANIZZAZIONE PACCHETTO CLIENTE
NAZIONE
Ogni organizzazione può essere la proponente di uno o più pacchetti, ogni pacchetto deve essere offerto da una sola organizzazione.Ogni nazione o località può essere la destinazione di uno o più pacchetti, ogni pacchetto deve essere riferito a una sola nazione o località.Ogni pacchetto può essere acquistato da uno o più clienti, ogni cliente deve essere acquirente di uno o più pacchetti.
Utilizzando le regole di derivazione si passa dal modello concettuale al modello logico:
Le associazione uno a molti si rappresentano introducendo le chiavi esterne nelle tabelle PACCHETTI per indicare l’organizzazione proponente e la nazione di destinazione;
L’associazione molti a molti genera una nuova tabella ACQUISTI che contiene le chiavi
primarie di PACCHETTI e CLIENTI più eventuali attributi dell’associazione come la data in cui il cliente ha acquistato il pacchetto.
62
nazioni codicenaz primaria carattere 3
denominazione carattere 20
moneta carattere 15
clima carattere 30
clienti codicecli primaria numerico 4
cognome carattere 30
nome carattere 20
indirizzo carattere 25
telefono carattere 12
organizzazioni codiceorg primaria carattere 4
nomeorg carattere 30
teleforg carattere 12
Pacchetti codicepac primaria carattere 5
descrizione carattere 50
modalità carattere 40
prezzo numerico 12
codicenaz esterna carattere 3
codiceorg esterna carattere 4
Acquisti codicecli esterna numerico 4
codicepac esterna carattere 5
dataacquisto data/ora 8
63
INTERROGAZIONI
Elenco dei viaggi con prezzo inferiore a un prezzo prefissato.
Select *
from pacchetti
where prezzo < [prezzo massimo];
Elenco dei soggiorni con prezzo in una località prefissata.
Select descrizione, modalità, prezzo from nazioni, pacchetti
where nazioni.codicenaz = pacchetti.codicenaz and denominazione=[località da controllare];
Elenco dei clienti, con cognome, nome e indirizzo, che hanno fatto un viaggio con una determinata destinazione.
Select cognome, nome, indirizzo
from nazioni, pacchetti, acquisti,clienti
where nazioni.codicenaz = pacchetti.codicenaz
and pacchetti.codicepac = acquisti.codicepac and acquisti.codicecli = clienti.codicecli
and denominazione = [località da controllare];
64
Numero di pacchetti offerti da un’organizzazione turistica prefissata.
Select count (*)
from pacchetti,organizzazioni
where pacchetti.codiceorg = organizzazioni.codiceorg and nomeorg = [organizzazione da controllare];
Elenco delle organizzazioni turistiche, con nome e telefono, che hanno almeno 5 pacchetti in archivio.
Select nomeorg, teleforg
from pacchetti,organizzazioni
where pacchetti.codiceorg = organizzazione.codiceorg group by nomeorg, teleforg
having count (*) > 4;
Elenco di tutte le nazioni con il numero di pacchetti che si riferiscono ad esse.
Select denominazione, count (*) from nazioni, pacchetti
where nazioni.codicenaz = pacchetti.codicenaz group by denominazione;
65
66
67
68
69
70