4. PROGETTAZIONE
• FASI DEL PROGETTO
1. Raccolta delle richieste dell’utente
• studio preliminare su convenienza, riflessi e settori coinvolti per l’organizzazione
• analisi del sistema informativo esistente
• definizione dei requisiti del nuovo sistema
• classificazione dei dati
• individuazione dei vincoli sui dati
• descrizione delle procedure da automatizzare
• volume iniziale e tasso di crescita dei dati
• sicurezza e grado di riservatezza dei dati
2. Progetto concettuale
• schema dei dati e delle relazioni tra essi (diagramma ER)
• operazioni da implementare
• vincoli impliciti ed espliciti su dati, procedure, tempi di risposta (vincoli di integrità, di dominio, ecc.)
3. Progetto logico
• strutturazione dei dati (approccio relazionale)
• stesura delle procedure
4. Progetto fisico
• descrizione dell’organizzazione fisica degli archivi (tabelle, indici ecc.)
• codifica delle operazioni e delle interfacce (procedure, menu ecc.)
5. PROGETTO CONCETTUALE
• PROGETTO CONCETTUALE
Dato da memorizzare → identificatore (sostantivo)
ENTITÀ → proprietà (attributi)
ENTITÀ ATTRIBUTO
• intensione, estensione • identificatore + dominio
• entità ISA • semplice, composto, multiplo
• chiave
• obbligatorio, opzionale
• costante, variabile
• derivato
Relazione matematica tra entità → identificatore (verbo)
ASSOCIAZIONE → cardinalità
ASSOCIAZIONE CARDINALITÀ
• intensione, estensione • 1:1
• diretta, inversa • 1:N oppure N:1
• totale, parziale • N:M
• univoca, multipla
• suriettiva, non suriettiva
ENTITÀ + ASSOCIAZIONI = DIAGRAMMI E-R (Entity-Relationship)
6. PROGETTO CONCETTUALE
• PROGETTO CONCETTUALE(*) 1/2
data
PRENOTA
N M
1 N
LETTORE PRENDE LIBRO
idLettore idLibro
cognome copia
data
nome titolo
indirizzo numPagine
telefono posizione
tipo casaEd
7. PROGETTO CONCETTUALE
• PROGETTO CONCETTUALE(*) 2/2
OPERAZIONI DA REALIZZARE:
Q1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i
relativi titoli
Q2. visualizzazione del cognome e nome dei lettori che hanno preso in prestito un
libro in una data assegnata
Q3. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e
telefono dei prenotanti
Q4. visualizzazione dei dati dei lettori che hanno prenotato almeno un libro
(*)
Porzione del progetto concettuale della base di dati BIBLIOTECA
8. PROGETTO LOGICO
• PROGETTO LOGICO
DEFINIZIONI
RELAZIONE R ⊆ D1X D2 X … DN Di : domini SCHEMA DI RELAZIONE
rJ : tuple nome + lista attributi
OPERAZIONI DELL’ALGEBRA RELAZIONALE
tra relazioni compatibili tra relazioni non compatibili
– RIDENOMINAZIONE ρB←A(R) – PRODOTTO CARTESIANO R1 X R2
– UNIONE R1 ∪ R2 – PROIEZIONE πA(R)
– DIFFERENZA R1 - R2 – RESTRIZIONE σP(R)
– INTERSEZIONE R1 ∩ R2 – GIUNZIONE R1 ▷◁ R2
– DIVISIONE R1 ÷ R2
IMPLEMENTAZIONE DEI DIAGRAMMI E-R
– entità → schema di relazione
– associazione 1:1 → chiave esterna su uno degli schemi di relazione ATTENZIONE
– associazione 1:N → chiave esterna su schema di relazione N AI VINCOLI DI
– associazione N:M → schema di relazione con chiavi esterne INEGRITÀ
9. PROGETTO LOGICO
• PROGETTO LOGICO(*) 1/2
DEFINIZIONE DEGLI SCHEMI DI RELAZIONE
LETTORE(IdLettore: INTERO LUNGO, Cognome: CHAR(20), Nome: CHAR(20), Indirizzo: CHAR(30),
Telefono: CHAR(15), Tipo: CHAR)
LIBRO(IdLibro: INTERO LUNGO, #Copia: INTERO, Titolo: CHAR(30), NumPagine: INTERO,
Posizione: CHAR(8), CasaEd:CHA(30), IdLettore: INTERO LUNGO, Data: DATA)
PRENOTA(IdPrenota: INTERO LUNGO, IdLettore: INTERO LUNGO, IdLibro: INTERO LUNGO,
Data: DATA)
NOTE:
I campi sottolineati sono campi chiave primaria
I campi in corsivo sono campi chiave esterna che implementano una relazione tra entità di tipo 1:N
I campi in carattere non grassetto sono campi esterni all'entità (appartenenti alla relazione 1:N)
LA RELAZIONE PRENOTA IMPLEMENTA LA CORRISPONDENTE RELAZIONE TRA ENTITÀ
• ciascuno schema di relazione è indicizzato sulla chiave primaria
• lo schema di relazione LIBRO contiene due chiavi esterne per le associazioni PRENDE e PRENOTA
• per brevità vengono omessi i vincoli impliciti ed espliciti
(*) Porzione del progetto logico della base di dati BIBLIOTECA
10. PROGETTO LOGICO
• PROGETTO LOGICO(*) 2/2
ESEMPI DI ESPRESSIONI DELL’ALGEBRA RELAZIONALE RELATIVE ALLE
OPERAZIONI INDIVIDUATE:
Q1. LETTORE ▷◁ LIBRO
Q2. πcognome, nome( σ data=[parametro_data]( LETTORE ▷◁ LIBRO))
Q3. LIBRO ▷◁ PRENOTA ▷◁ LETTORE
Q4. LETTORE ▷◁ ( πidLettore (PRENOTA))
(*)
Porzione del progetto logico della base di dati BIBLIOTECA
11. PROGETTO LOGICO
• ANOMALIE
PRENOTA
idLetto indiriz ca localit idLibr titol dat
re zo p a o o a
U1 I1 C1 L1 L1 T1 D1
U1 I1 C1 L1 L2 T2 D1
U1 I1 C1 L1 L3 T3 D4
U2 I2 C2 L2 L3 T3 D2
U3 I3 C3 L3 L2 T2 D3
U3 I3 C3 L3 L4 T4 D5
• inserimento – l’inserimento di un nuovo lettore obbliga ad inserire anche un
libro preso in prestito
• cancellazione – la cancellazione della tupla (U3, L2) ha un effetto diverso dalla
cancellazione della tupla (U2, L3)
• aggiornamento – dovendo modificare l’indirizzo di un lettore si è obbligati ad
aggiornare tutte le tuple
Le cause vanno ricercate nella indipendenza e ridondanza di alcuni dati
Il rimedio consiste nella NORMALIZZAZIONE
processo di trasformazione degli schemi di relazione in altri più piccoli aventi lo
stesso contenuto informativo ed esenti da un certo tipi (livelli) prestabiliti di anomalie
12. PROGETTO LOGICO
• NORMALIZZAZIONE 1/3
1FN
uno schema di relazione si dice in prima forma normale quando tutti gli attributi sono di tipo elementare
soluzione
attributo composto → si scompone in più attributi semplici
attributo multiplp → si trasforma in più righe, una per ogni molteplicità degli attributi multipli,
ripetendo la parte non multipla
ES. Si abbia il seguente insieme di dati riguardante le prenotazioni in una biblioteca
PRENOTA
idLetto indiriz ca localit idLibr titol dat idLibr titol dat idLibr titol dat
re zo p a o o a o o a o o a
U1 I1 C1 L1 L1 T1 D1 L2 T2 D1 L3 T3 D4
U2 I2 C2 L2 L3 T3 D2
U3 I3 C3 L3 L2 T2 D3 L4 T4 D5
Eliminando gli attributi composti e PRENOTA
idLetto indiriz ca localit idLibr titol dat
multipli si ottiene: re
U1
zo
I1
p
C1
a
L1
o
L1
o
T1
a
D1
U1 I1 C1 L1 L2 T2 D1
U1 I1 C1 L1 L3 T3 D4
U2 I2 C2 L2 L3 T3 D2
U3 I3 C3 L3 L2 T2 D3
U3 I3 C3 L3 L4 T4 D5
13. PROGETTO LOGICO
• NORMALIZZAZIONE 2/3
2FN
uno schema di relazione si dice in seconda forma normale quando
– è 1FN
– non esistono attributi che dipendono solo da una parte della chiave
soluzione
si estraggono gli attributi che dipendono da una stessa parte di chiave in uno schema di relazione a sé
stante ed associato allo schema rimanente che avrà cardinalità N (la parte di chiave diventa chiave
esterna)
ES. Nello schema di relazione Prenota, portato in 1FN nell’esempio precente, si ha:
idLettore → indirizzo
idLibro → titolo quindi estraendo ad esempio titolo ed editore, si avrà:
idLettore → indirizzo
LETTORE PRENOTA LIBRO
idLettore indirizzo cap localita idLettore idLibro data idLibro titolo
U1 I1 C1 L1 U1 L1 D1 L1 T1
U2 I2 C2 L2 U2 L3 D2 L2 T2
U3 I3 C3 L3 U3 L2 D3 L3 T3
U1 L2 D1 L4 T4
U1 L3 D4
U3 L4 D5
14. PROGETTO LOGICO
• NORMALIZZAZIONE 3/3
3FN
uno schema di relazione si dice in terza forma normale quando
– è 2FN
– non esistono attributi non-chiave che dipendono transitivamente dalla chiave
soluzione
si estraggono gli attributi che dipendono da altri attributi non chiave in uno o più schemi di relazione
associati allo schema originale (che avrà cardinalità N); i campi di “transizione” diventano rispettivamente
chiave esterna nello schema originale e chiave primaria nello schema derivato
ES. Nello schema di relazione Lettore, ricavato dalla normalizzazione in 2FN dell’esempio precente, si
ha:
idLettore → localita → cap (il cap non dipende direttamente da idLettore ma transitivamente attraverso localita)
quindi:
LETTORE LOCALITA PRENOTA LIBRO
localit ca
idLettore indirizzo localita idLettore idLibro data idLibro titolo
a p
U1 I1 L1 L1 C1 U1 L1 D1 L1 T1
U2 I2 L2 L2 C2 U2 L3 D2 L2 T2
U3 I3 L3 L3 C3 U3 L2 D3 L3 T3
U1 L2 D1 L4 T4
U1 L3 D4
U3 L4 D5
15. ESERCIZIO 1
sportello dello studente (1/2)
• Dato il seguente schema:
idDisponibilita
giorno
idInsegnante orainizio
cognome orafine
nome classe
materia materia
1 N
INSEGNANTE OFFRE DISPONIBILITA
1 1
N N
EFFETTUA LEZIONE RIFERITA
ora fine
ora inizio
allievo
data
idLezione
costruire gli schemi di relazione del relativo progetto logico
16. ESERCIZIO 1
sportello dello studente (2/2)
• Utilizzando gli schemi di relazione costruiti dal precedente diagramma ER, scrivere
le espressioni dell’algebra relazionale relative alle seguenti operazioni:
Q1: visualizzazione di un insegnante
Q2: visualizzazione di una disponibilità
Q3: visualizzazione di una lezione
Q4: elencare le disponibilità per insegnante
Q5: elencare le disponibilità per materia
Q6: elencare le disponibilità per classe
17. ESERCIZIO 2
campionato di calcio (1/2)
• Dato il seguente schema:
idSquadra idStadio
nome nome
allenatore citta
girone capienza
N 1
SQUADRA GIOCA STADIO
M
N N
INCONTRA
data
giornata
golSquadra1
golSquadra2
costruire gli schemi di relazione del relativo progetto logico
18. ESERCIZIO 2
campionato di calcio (2/2)
• Utilizzando gli schemi di relazione costruiti dal precedente diagramma ER, scrivere
le espressioni dell’algebra relazionale relative alle seguenti operazioni:
Q1: elencare le squadre che hanno sede in città nelle quali lo stadio ha capienza
superiore a 60000 persone
Q2: elencare le città nelle quali c’è più di uno stadio
Q3: elencare le quadre che hanno perso almeno unna volta con una difefrenza reti
superiore a 3
Q4: elencare gli stadi nei quali nessun incontro è terminato con un pareggio
Q5: elencare le squadre che hanno vinto tutti i derby disputati
20. SQL
Linguaggio per basi di dati che assolve alle funzioni di definizione,
manipolazione e memorizzazione dei dati
Può essere utilizzato interattivamente mediante opportune interfacce
utente oppure essere ospite di un linguaggio di programmazione, in
genere mediante apposite librerie
In SQL gli schemi di relazione vengono implementati in TABELLE in
cui ciascuna tupla diviene una RIGA; a differenza delle relazioni, le
righe possono essere duplicate
SQL consente una buona indipendenza logica e fisica
Le specifiche attualmente standardizzate sono l’ANSI X3.135 e l’ISO
9075 del 1992
21. CREATE TABLE
• CREAZIONE DI UNA TABELLA
CREATE TABLE tabella (attributo tipo [clausole] [, ...][,clausole])
PRINCIPALI TIPI PAROLE CHIAVE
SMALLINT EXTERNAL
INTEGER FILE
FLOAT COMPUTED BY
DOUBLE PRECISION PRIMARY KEY
DECIMAL | NUMERIC [(precision [, scale])] DEFAULT
DATE NULL| NOT NULL
CHAR | VARCHAR[(int)] USER
BLOB UNIQUE
COLLATE
CONSTRAINT
CREATE TABLE LETTORE(idLettore INTEGER NOT NULL, cognome VARCHAR(20) , nome
VARCHAR(20), indirizzo VARCHAR(30), telefono CHAR(15), tipo CHAR, PRIMARY KEY(idLettore));
22. CREATE INDEX
• CREAZIONE DI UN INDICE
CREATE INDEX indice ON tabella (attributo [, attributo])
PAROLE CHIAVE
EXTERNAL
FILE
COMPUTED BY
PRIMARY KEY
DEFAULT
NULL| NOT NULL
USER
UNIQUE
COLLATE
CONSTRAINT
CREATE UNIQUE INDEX Alfabetico ON Lettore (cognome, nome);
23. DROP
• CANCELLAZIONE DI UNA TABELLA
DROP TABLE tabella
• UNA TABELLA PUÓ ESSERE ELIMINATA SOLO DAL PROPRIETARIO O DALL’AMMINISTRATORE
• NON SI POSSONO ELIMINARE TABELLE CORRENTEMENTE APERTE O UTILIZZATE DA ALTRI OGGETTI
DROP TABLE Lettore;
• CANCELLAZIONE DI UN INDICE
DROP INDEX indice
• UN INDICE PUÓ ESSERE ELIMINATO SOLO DAL PROPRIETARIO O DALL’AMMINISTRATORE
• NON SI POSSONO ELIMINARE INDICI DI SISTEMA O CORRENTEMENTE APERTI
DROP INDEX Alfabetico;
24. GRANT e REVOKE
• SICUREZZA ED INTEGRITÀ DEI DATI
GRANT operazione ON oggetto TO utente
operazione operazione da consentire: ALTER|DELETE|INDEX|INSERT|SELECT|UPDATE|ALL
oggetto nome dell’oggetto su cui consentire l’operazione: ad esempio una tabella, un indice ecc.
utente identificatore dell’utente cui consentire l’operazione
GRANT UPDATE ON Libro TO Segreteria
REVOKE operazione ON oggetto FROM utente
operazione operazione da consentire: ALTER|DELETE|INDEX|INSERT|SELECT|UPDATE|ALL
oggetto nome dell’oggetto su cui consentire l’operazione: ad esempio una tabella, un indice ecc.
utente identificatore dell’utente cui consentire l’operazione
REVOKE UPDATE ON Libro FROM Segreteria
25. SELECT
• ESTRAZIONE DI DATI SELECT 1/9
SELECT [predicato] elencocampi FROM tabella [clausole]
predicato ALL, DISTINCT, DISTINCTROW, TOP
elenco campi * | tabella.* | [tabella.]campo1 [AS alias1] [, ...]
tabella Nome della tabella contenente i dati che si desidera recuperare
clausole [IN databaseesterno]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
SELECT * FROM Lettore;
SELECT DISTINCT cognome, nome FROM Lettore WHERE cognome<“D”;
SELECT cognome, titolo FROM Lettore, Libro WHERE Lettore.idLettore=Libro.idLettore;
26. SELECT
• ESTRAZIONE DI DATI SELECT 2/9
PREDICATO:
ALL Impostazione predefinita. seleziona tutti i record che soddisfano le condizioni dell'istruzione SQL
DISTINCT Omette i record che contengono dati duplicati nei campi selezionati. Per essere inclusi nei risultati della
query, i valori di ogni campo elencato nell'istruzione SELECT devono essere univoci. Numerosi impiegati
elencati in una tabella Impiegati, ad esempio, potrebbero avere lo stesso cognome.
DISTINCTROW Omette i dati basati su interi record duplicati e non solo su campi duplicati.
TOP Restituisce un certo numero di record che rientrano all'inizio o alla fine di un intervallo specificato tramite
una clausola ORDER BY. Se non si include la clausola ORDER BY, la query restituirà dalla tabella Studenti
un set arbitrario di record che soddisfano la clausola WHERE. Il predicato TOP non effettua una scelta tra
valori uguali. È possibile anche utilizzare la parola riservata PERCENT per ottenere una certa percentuale di
record che rientrino all'inizio o alla fine di un intervallo specificato tramite una clausola ORDER BY.
SELECT TOP 25 cognome, nome FROM Lettore WHERE tipo=“s” OR tipo=“S” ORDER BY idLettore;
27. SELECT
• ESTRAZIONE DI DATI SELECT 3/9
ELENCO CAMPI:
Nome del campo o dei campi da recuperare insieme agli alias dei nomi di campo, alle funzioni di aggregazione SQL, ai
predicati di selezione ALL, DISTINCT, DISTINCTROW, TOP o ad altre opzioni delle istruzioni SELECT.
[tabella].* tutti i campi;
[tabella.]campo un campo specifico
‘costante’ stesso valore per tute le righe risultato
funzione di aggregazione funzioni che calcolano varie statistiche su set di valori (Avg,Count,Min, Max,StDev,
StDevP,Sum,Var, VarP)
SELECT DISTINCTROW “Lettore:”, nome, cognome FROM Lettore WHERE tipo=“S” OR tipo=“s”
ORDER BY cognome DESC;
28. SELECT
• ESTRAZIONE DI DATI SELECT 4/9
ESPRESSIONETABELLA
Espressione che identifica una o più tabelle da cui vengono recuperati i dati. L'espressione può essere:
un singolo nome di tabella
un elenco di più tabelle; in questo caso viene fatto il prodotto cartesiano delle due tabelle
un nome di query memorizzata
un nome composto risultante da una JOIN (INNER, LEFT, RIGHT)
JOIN
Istruzione corispondente alla JOIN dell’algebra relazionale. Può essere INNER, LEFT, RIGHT in base alla eventuale suriettività
del risultato e della tabella di riferimento.
Combina in un campo comune i record di due tabelle se questi contengono valori corrispondenti: è quindi la base delle relazioni
1:N
La sua sintassi è:
SELECT elencocampi FROM tabella1 INNER JOIN tabella2 ON tabella1.campo1 operatorediconfronto tabella2.campo2
SELECT Lettore.cognome, Lettore.nome, Libro.titolo FROM Lettore
INNER JOIN Libro ON Lettore.idLettore = Libro.idLettore;
29. SELECT
• ESTRAZIONE DI DATI SELECT 5/9
CLAUSOLE
[IN databaseesterno] Specifica il database che contiene la tabella nel caso che questa sia contenuta in un altro database
[WHERE espressione ] Specifica quali record delle tabelle elencate nella clausola FROM sono influenzati dalla SELECT;
espressione deve assumere un valore logico e può essere composta con variabili, campi ed
operatori di confronto, operstori logici
[GROUP BY campiraggruppamento] Combina in un record singolo tutti i record con valori identici nell'elenco di campi
specificato. Se si include una funzione di aggregazione SQL, come Sum o Count, per ciascun
record viene creato un valore di riepilogo.
[HAVING criteriraggruppamento] Specifica i record che vengono visualizzati partendo dal risultato di GROUP BY. Dopo
che GROUP BY combina i record, la clausola HAVING visualizza tutti i record raggruppati tramite la
clausola GROUP BY che soddisfano le condizioni della clausola HAVING
[ORDER BY elencocampi ASC|DESC] Ordina i record risultanti da una query in base a uno o più campi specifici in ordine
crescente o decrescente
[WITH OWNERACCESS OPTION], [UNION...], [PLAN...] clausole specifiche delle varie versioni
30. SELECT
• ESTRAZIONE DI DATI SELECT 6/9
FUNZIONI DI AGGREGAZIONE
Permettono di calcolare varie statistiche su set di valori. È possibile utilizzare queste funzioni in una query ed in particolare
nella SELECT
Avg(espressione)
Count(espressione)
espressione rappresenta un'espressione stringa che identifica
Min, Max(espressione)
il campo che contiene i dati numerici di cui si vuole calcolare
StDev(espressione), StDevP(espressione) la media o un'espressione che esegue un calcolo utilizzando i
Sum(espressione) dati del campo
Var(espressione), VarP(espressione)
ALTRE PAROLE CHIAVE/OPERATORI
IS [NOT] NULL
LIKE
[NOT] NULL
AND, OR, NOT
AS
COLLATE
31. SELECT
• ESTRAZIONE DI DATI SELECT 7/9
ESEMPI DI VISUALIZZAZIONE DI UNA RELAZIONE 1:N
1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i relativi titoli; il tutto ordinato in base
al cognome del lettore
SELECT Lettore.*, Libro.titolo
FROM Lettore, Libro
WHERE Lettore.IdLettore=Libro.idLettore
ORDER BY Lettore.Cognome;
1. visualizzazione dell’elenco di tutti i lettori che hanno preso in prestito libri con i relativi titoli; il tutto ordinato in base al
cognome del lettore (con INNER JOIN)
SELECT Lettore.*, Libro.titolo
FROM Lettore
INNER JOIN Libro ON Lettore.idLettore = Libro.idLettore
ORDER BY Lettore.cognome;
32. SELECT
• ESTRAZIONE DI DATI SELECT 8/9
ESEMPI DI VISUALIZZAZIONE DI UNA RELAZIONE N:N
1. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e telefono dei prenotanti; il tutto ordinato in base al
cognome del lettore
SELECT Libro.titolo, Prenota.data, Lettore.cognome, Lettore.indirizzo, Lettore.telefono
FROM Libro, Prenota, Lettore
WHERE (Libro.idLibro = Prenota.idLibro) AND (Prenota.idLettore = Lettore.idLettore)
ORDER BY Libro.titolo;
1. visualizzazione dell’elenco dei libri prenotati con titolo, data, cognome e telefono dei prenotanti; il tutto ordinato in base al
cognome del lettore (con INNER JOIN)
SELECT Libro.titolo, Prenota.data, Lettore.cognome, Lettore.indirizzo, Lettore.telefono
FROM (Libro
INNER JOIN Prenota ON Libro.idLibro = Prenota.idLibro)
INNER JOIN Lettore ON Prenota.idLettore = Lettore.idLettore
ORDER BY Libro.titolo;
33. SELECT
• ESTRAZIONE DI DATI SELECT 9/9
ALTRI ESEMPI DI OPERAZIONI DI SELEZIONE
1. visualizzazione dei dati dei lettori che hanno prenotato almeno un libro; si utilizza la clausola IN anziché la JOIN
SELECT Lettore.*
FROM Lettore
WHERE Lettore.IdLettore
IN (SELECT DISTINCT Prenota.IdLettore
FROM Prenota)
ORDER BY Lettore.Cognome;
1. visualizzazione dell’elenco dei lettori e del numero di libri che hanno preso in prestito solo per chi ha preso più di un libro
SELECT DISTINCTROW Lettore.Cognome, Lettore.nome, count(Titolo)
FROM Lettore, Libro
WHERE Lettore.IdLettore=Libro.IdLettore
GROUP BY Lettore.Cognome, Lettore.Nome
HAVING count(Titolo)>=2
ORDER BY Lettore.Cognome;
34. CREATE VIEW
• ESTRAZIONE DI DATI
CREATE VIEW identificatore AS selezione
identificatore nome da assegnare alla VISTA
selezione istruzione SELECT che popola di dati la VISTA
• in questo modo si assegna un identificatore ad una operazione di selezione che può essere usata all’interno di altre
selezione
• in questo modo è possibile inoltre fornire e revocare diritti di accesso alla selezione
• analogamente agli altri oggetti una vista si elimina con il comando DROP
CREATE VIEW Prenotazioni AS
SELECT DISTINCTROW Lettore.*, Prenota.*, Libro.*
FROM Libro
INNER JOIN (Lettore
INNER JOIN Prenota
ON Lettore.idLettore = Prenota.idLettore)
ON Libro.idLibro = Prenota.idLibro;
35. JOIN
• ESTRAZIONE DI DATI JOIN 1/2
INNER, LEFT E RIGHT JOIN: elenco di lettori che hanno preso in prestito libri; il tutto ordinato in base al cognome del lettore
e prendendo come tabella di riferimento Lettore
1. solo il lettori che hanno preso in prestito almeno un libro
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Lettore INNER JOIN Libro ON Lettore.idLettore = Libro.idLettore
ORDER BY Lettore.cognome;
1. tutti i lettori (anche chi non ha preso libri in prestito) ed i relativi libri
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Lettore LEFT JOIN Libro ON Lettore.idLettore = Libro.idLettore
ORDER BY Lettore.cognome;
1. solo il lettori che hanno preso in prestito un libro e tutti i libri (anche quelli non presi in prestito)
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Lettore RIGHT JOIN Libro ON Lettore.idLettore = Libro.idLettore
ORDER BY Lettore.cognome;
36. JOIN
• ESTRAZIONE DI DATI JOIN 2/2
INNER, LEFT E RIGHT JOIN: elenco di lettori che hanno preso in prestito libri; il tutto ordinato in base al cognome del lettore
e prendendo come tabella di riferimento Libro
1. solo il lettori che hanno preso in prestito almeno un libro
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Libro INNER JOIN Lettore ON Libro.idLettore = Lettore.idLettore
ORDER BY Lettore.cognome;
1. tutti i lettori (anche chi non ha preso libri in prestito) ed i relativi libri
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Libro RIGHT JOIN Lettore ON Libro.idLettore = Lettore.idLettore
ORDER BY Lettore.cognome;
1. solo il lettori che hanno preso in prestito un libro e tutti i libri (anche quelli non presi in prestito)
SELECT Lettore.cognome, Lettore.nome, Libro.titolo
FROM Libro LEFT JOIN Lettore ON Libro.idLettore = Lettore.idLettore
ORDER BY Lettore.cognome;
37. INSERT
• INSERIMENTO DI DATI
INSERT INTO destinazione [(elencoattributi)] VALUES (elencovalori)
destinazione tabella, query o view in cui si vogliono inserire i dati
elencoattributi elenco dei nomi dei campi ai quali si riferiscono i dati
elencovalori elenco dei dat da inserire
• NORMALMENTE L’ISTRUZIONE INSERT PERMETTE DI INSERIRE DATI IN TUTTI I CAMPI DELLA DESTINAZIONE
• L’ELENCO DEI VALORI DEVE RISPETTARE COME NUMERO E TIPO DI DATI L’ORDINE DELLE COLONNE DELLA
TABELLA; IN QUESTO CASO NON È NECESSARIO SPECIFICARE elencoattributi; SE INVECE SI VOGLIONO
INSERIRE I DATI SOLO IN ALCUNI DEI CAMPI SI DEVONO SPECIFICARE TALI CAMPI IN elencoattributi; IN QUESTO
CASO L’ELENCO DEI VALORI DEVE RISPETTARE COME NUMERO E TIPO DI DATI L’ORDINE INDICATO IN
elencoattributi
INSERT INTO Lettore (idLettore, cognome, nome, telefono, tipo) VALUES (1234, "Rossi", "Mario",
"0773123456", "s");
38. INSERT
• INSERIMENTO DI DATI
INSERT INTO destinazione [(elenco1attr)] SELECT elenco2attr FROM tabella
destinazione tabella, query o view in cui si vogliono inserire i dati
elenco1attr elenco dei nomi dei campi ai quali si riferiscono i dati da inserire
elenco2attr elenco dei nomi dei campi ai quali si riferiscono i dati che vengono estratti
tabella tabella contenente i dati che vengono estratti
• I DUE ELENCHI DI ATTRIBUTI DEVONO CONTENERE, IN MANIERA ORDINATA, LO STESSO NUMERO E TIPO DI
ATTRIBUTI
INSERT INTO Lettore (idLettore, cognome, nome, telefono, tipo) SELECT Idlettore,Cognome,Nome,
Telefono, Tipo FROM CopiaLettore
39. DELETE
• CANCELLAZIONE DI DATI
DELETE FROM tabella WHERE espressione
tabella tabella da cui eliminare la riga
espressione espressione logica che determina la riga da cancellare
• LA CANCELLAZIONE DEI DATI PUÒ PORTARE AD UNA PERDITA DI CONSISTENZA DEGLI STESSI QUANDO NELLA
CANCELLAZIONE SONO COINVOLTE CHIAVI ESTERNE DI ASSOCIAZIONI
• IL CONTROLLO DI TALE FENOMENO PRENDE IL NOME DI INTEGRITÀ REFERENZIALE)
• IN GENERE I DBMS FORNISCONO DEI MECCANISMI DI IMPOSTAZIONE E CONTROLLO DELL’INTEGRITÀ
REFERENZIALE (IMPEDIMENTO DELLE CANCELLAZIONI, AGGIORNAMENTO A CATENA ECC.)
• LA CANCELLAZIONE PUÒ OVVIAMENTE AGIRE SU PIÙ RIGHE CONTEMPORANEAMENTE
DELETE FROM Lettore WHERE cognome=“Rossi”
40. UPDATE
• AGGIORNAMENTO DI DATI
UPDATE tabella SET attributo=esp [, attributo=espressione1] WHERE esp2
attributo nomi dei campi della riga da aggiornare
esp1 nuovi valori da dare ai campi
esp2 espressione logica che individua la riga da aggiornare
• IL VALORE DI UNA CHIAVE PRIMARIA NON PUÒ ESSERE AGGIORNATO
UPDATE Libro SET posizione=“S2R3” WHERE idLibro=12 34
41. ESERCIZIO 3
• Scrivere le interrogazioni SQL relative ai
questiti degli esercizi 1 e 2 formulando, se
necessario, delle opportune ipotesi
aggiuntive riguardo vincoli, campi da
visualizzare, ordinamenti
42. ESERCIZIO 4
• Date le tabelle relative ai seguenti schemi di relazione, in cui gli identificatori sottolineati
sono chiavi primarie e quelli in corsivo sono chiavi esterne delle rispettive tabelle:
LETTORE(idLettore, cognome, nome)
LIBRO(idLibro, titolo, autore)
PRELEVA(idPrenota, idLettore, idLibro, data)
scrivere le interrogazioni SQL per:
Q1: ottenere i codici dei lettori che hanno preso in prestito almeno un libro
Q2: ottenere i nomi ed i cognomi delle persone che hanno preso in prestito almeno un
libro
Q3: ottenere i nomi ed i cognomi delle persone che hanno preso in prestito almeno un
libro a partire dal 20/02/2002
Q4: ottenere i titoli dei libri presi in prestito da almeno una persona
Q5: ottenere tutti i titoli dei libri disponbili
Q6: ottenere i titoli dei libri con le rispettive persone che li hanno presi in prestito
Q7: ottenere i titoli dei libri presi in prestito in un dato giorno
Q8: ottenere gli autori dei libri presi in prestito dal sig. Mario Rossi
Q9: ottenere i nomi dei lettori che hanno preso in prestito libri di Svevo ma non di Manzoni
Q10: ottenere quanti libri diversi di un autore ha preso in prestito un dato lettore
43. APPUNTI SU BASI DI DATI
IMPLEMENTAZIONI
MS Access
MySql
(questa sezione è ancora solo una bozza)
44. Access
• CREAZIONE DI UNA TABELLA 1/2
In Microsoft ACCESS la creazione di una tabela può avvenire in più modi:
1. In maniera visuale; selezionare la cartella Tabelle; selezionare i tasti: Nuovo, Visualizzazione Struttura; a questo punto
inserire i nomi dei campi ed i relativi tipi, uno per riga;
Dopo aver selezionato il tasto Nuovo, sarebbe anche possibile optare per altre modalità di creazione (Visualizzazione Foglio
dati, Autocomposizione Tabella ecc.)
2. In maniera manuale usando SQL (istruzione CREATE TABLE); per inserire l’istruzione selezionare la cartella Query;
selezionare: Nuovo, Visualizzazione Struttura, Chiudi (per chiudere la finestra delle Tabelle); selezionare poi le voci di menu:
Query|Specifica SQL|Definizione dati; nella finestra che appare si digita e si esegue l’istruzione. La sintassi è:
CREATE TABLE tabella (attributo tipo [,clausole] [, ...])
La clausola per la definizione della chave primaria ha la sintassi:
CONSTRAINT nomedelvincolo PRIMARY KEY(campo [,campo])
La clausola per la definizione di un campo indicizzato ha la sintassi:
CONSTRAINT nomedelvincolo UNIQUE (campo [,campo])
I principali tipi utilizzabili sono: INTEGER, LONG, COUNTER, TEXT/STRING, DATA, FLOAT, OBJECT, ecc.
CREATE TABLE LETTORE(IdLettore COUNTER , Cognome STRING(20), Nome TEXT(20), Indirizzo
TEXT(30), Telefono TEXT(15), Tipo TEXT(1), CONSTRAINT Chiave PRIMARY KEY(Idlettore));
45. Access
• CREAZIONE DI UNA TABELLA 2/2
In Microsoft ACCESS la creazione di una tabela può avvenire in più modi:
3. Attraverso una istruzione SELECT; si prelevano i record da una tabella o query esistente e si inseriscono in una nuova tabella
che verrà definita in base alle righe ottenute.
SELECT elencoattributi INTO nuovatabella FROM origine
elencoattributi elenco dei campi da estrarre
nuovatabella nome della tabella da creare
origine tabella o query origine
SELECT Lettore.* INTO Copialet FROM Lettore;
46. Access
• CREAZIONE DI UNA MASCHERA 1/1
Quando una maschera viene creata su una query LEFT JOIN, automaticamente si basa sulla tabella di sinistra in quanto è la
tabella principale; la tabella di destra va eventualmente in una sottomaschera tramite un’associazione campo
master/secondario.
Per consentire l’aggiunta in una maschera con sottomaschere solo nella tabella della sottomaschera (tabella N) e non nella
tabella principale (tabella 1) è necessario impostare le seguenti proprietà nella maschera principale:
NO consenti aggiunte
NO consenti eliminazioni
SI consenti modifiche
BLOCCA tutti i campi
47. Access
• CREAZIONE DI UNA QUERY PASS-THROUGH 1/2
Per procedere alla creazione di una query pass-trough è necessario:
avere accesso ad un Server SQL
avere installato la libreria ODBC
PASSO 1: creazione di una fonte dati ODBC
1. Aprire il Pannello di Controllo di Windows
2. Aprire ODBC
3. Dalla cartella DSN utente selezionare Aggiungi
4. Selezionare il driver relativo al Sever SQL che contiene il database da interrogare
5. Selezionare Fine
6. Inserire nella maschera i dati richiesti:
Data Source Name Identificatore della sorgente di dati (deciso dall’utente)
Description Descrizione simbolica ad uso dell’utente
Network Protocol Eventuale protocollo di rete da utilizzare (se il Server SQL è remoto)
Database Identificatore del database da interrogare
Server Identificatore di rete del Server SQL
Username Nome utente assegnato per l’accesso al Server SQL
Password Password Nome utente assegnato per l’accesso al Server SQL
7. Selezionare il pulsante OK
N.B prima di selezionare OK è possibile effettuare un test della connessione (pulsante Test Connect)
48. Access
• CREAZIONE DI UNA QUERY PASS-THROUGH 2/2
PASSO 2: creazione della query pass-through
1 Nella finestra del database, scegliere la cartella Query, quindi il pulsante Nuovo
2 Selezionare Nuova query, Visualizzazione Struttura, OK, Chiudi nella finestra di dialogo Mostra tabella
3. Selezionare Query|Specifica SQL|Pass-Through
4. Selezionare le voci di menu Visualizza|Proprietà
5. Nella tavola delle proprietà della query, impostare la proprietà StringaConnessODBC per specificare informazioni sul database
al quale si desidera collegarsi; ad es.: “ODBC; DSN=biblioteca; UID=SYSDBA; PWD=masterkey; Hostname=LISERDB;
NetworkProt=TCP/IP; Database=c:interbasedidattico;”
NOTA: queste informazioni devono corrispondere a quelle inserite nella fonte dati ODBC creata nel passo 1; tali informazioni
possono essere recuperate anche attraverso il Generatore di stringhe di connessione ODBC (selezionando ... nella proprietà
StringaConnessODBC)
6. Impostare se necessario le altre proprietà (ad es. RestituisciRecord a No se la query non è del tipo che restituisce record)
7. Nella finestra Query SQL pass-through, digitare la query
NOTA: la sintassi della query deve essere conforme alle convenzioni adottate dal server di database SQL al quale si sta
inviando la query
8. Selezionare le voci di menu Visualizza|Foglio Dati per eseguire la query, oppure in alternativa utilizzare gli appositi pulsanti
(punto esclamativo e/o foglio dati)
9. Chiudere la query e salvare
NOTE: Da questo momento la query può essere utilizzata come fonte di dati per maschere, report, inserimenti, modifiche ecc.
Può succedere, inoltre, che in fase di esecuzione della query vengano visualizzate richieste di informazioni sul
database del server SQL (ad es. la password di accesso).
49. MySQL
Vedere il tutorial MySQL contenuto nel
capitolo 3 del Reference Manual Mysql 6.0 (
http://www.mysql.com sezione Documentation)