A01
87
Salvatore Sessa
Ferdinando Di Martino
Michele Giordano
Databases relazionali
e architetture dei RDBMS
Introduzione ai databases relazionali
e all’uso di Access
Copyright © MMVI
ARACNE editrice S.r.l.
www.aracneeditrice.it
[email protected]
via Raffaele Garofalo, 133 A/B
00173 Roma
(06) 93781065
ISBN
978 –88–548–0583–5
I diritti di traduzione, di memorizzazione elettronica,
di riproduzione e di adattamento anche parziale,
con qualsiasi mezzo, sono riservati per tutti i Paesi.
Non sono assolutamente consentite le fotocopie
senza il permesso scritto dell’Editore.
I edizione: maggio 2006
Indice
1
Le basi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1 Le basi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Le basi di dati relazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Algebra relazionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Unione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3 Intersezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.4 Differenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.5 Prodotto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.6 Selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.7 Proiezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.8 Join naturale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.9 Viste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.10 Indici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
3
6
6
8
9
9
10
11
11
12
12
2
Relational Database Management System (RDBMS) . . . . . . . . . . . .
2.1 RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Le funzionalità del DBA . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Architetture client/server . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4 Funzioni di Data Warehouse . . . . . . . . . . . . . . . . . . . . . . .
15
15
15
15
17
21
3
Modelli concettuali e logici. Riduzioni in forma normale . . . . . . .
3.1 Modelli concettuali e logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Il diagramma Entità/Relazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Organizzazione dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Le forme normali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.1 Prima Forma normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2 Seconda Forma normale . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.3 Terza forma normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.4 Quarta forma normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 La progettazione logica dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23
24
30
31
32
33
35
37
40
VI
Indice
4
Il linguaggio SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 Il linguaggio SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 DDL (Data Definition Language) . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 CREATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 ALTER TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3 DROP TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.4 Altri comandi DDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 DML (Data Manipulation Language) . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Il comando SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2 Il comando INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3 Il comando UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.4 Il comando DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
43
44
44
45
46
46
47
47
57
58
59
5
Uso del RDBMS ACCESS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1 Il tool MICROSOFT ACCESS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Le tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2.1 La creazione di tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Le forme normali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 Relazioni tra tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.1 Le relazioni tra tabelle in MICROSOFT ACCESS . . . . . .
5.5 La gestione dei records in MICROSOFT ACCESS . . . . . . . . . . . .
5.6 Uso delle Query in MICROFOST ACCESS . . . . . . . . . . . . . . . . . .
61
61
62
62
68
74
74
80
85
6
Creare Query con QBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1 Le Query in MICROSOFT ACCESS . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Esempi d’uso di griglie QBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Query di selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Query a campi incrociati . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.3 Query di aggiornamento . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.4 Query di accodamento . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.5 Query di eliminazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
91
91
91
97
99
99
100
7
Maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1 Creazione e modifica delle maschere . . . . . . . . . . . . . . . . . . . . . .
7.1.1 Autocomposizione creazione maschere . . . . . . . . . . . . .
7.1.2 Creare una maschera in visualizzazione struttura . . . .
7.1.3 I controlli delle maschere . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.4 Intestazioni, sezioni dei dettagli, piè di pagina . . . . . . .
7.1.5 Altri tipi di maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Impostazioni delle proprietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Proprietà della formattazione . . . . . . . . . . . . . . . . . . . . . .
7.2.2 Proprietà barre di scorrimento . . . . . . . . . . . . . . . . . . . . .
7.2.3 Proprietà abilitazione e blocco dei controlli . . . . . . . . . .
7.3 Ricerca ed ordinamento dei dati . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3.1 Ordinamento rapido nel campo di una maschera . . . .
105
106
106
109
110
112
113
116
116
117
117
118
118
Indice
VII
7.3.2 Utilizzo dei filtri in base a maschera . . . . . . . . . . . . . . . . . 118
7.4 Stampa delle maschere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8
Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1 Impieghi dei report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.1.1 Nuovo report utilizzando Autocomposizione . . . . . . . .
8.1.2 Nuovo report in Visualizzazione Struttura . . . . . . . . . . .
121
121
121
124
9
Criteri di protezione del database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.1 Protezioni di accesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.2 Utenti e gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Riferimenti bibliografici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Introduzione
Questo libro deve essere visto come una introduzione ai RDBMS (Relational Data Base Management System) che è un tool software corredato
da funzionalità che permettono la gestione corretta e completa di database
relazionali. Il libro è organizzato in nove capitoli. I primi quattro Capitoli
sono dedicati, nell’ordine, ai concetti matematici fondamentali di basi di
dati, alle architetture dei RDBMS, alla progettazione logica dei dati ed al linguaggio SQL. I secondi cinque Capitoli sono dedicati ad una introduzione
all’uso di MICROSOFT ACCESS e trattano, nell’ordine, delle tabelle e loro
relazioni, della creazione di diversi tipi di query, delle maschere, dei report
e dei criteri di protezione.
Napoli, aprile 2006
Gli Autori
Salvatore Sessa
Ferdinando Di Martino
Michele Giordano
1
Le basi di dati
1.1 Le basi di dati
Per sistema informativo si intende quel sistema che permette la disponibilità e la gestione delle informazioni. L’esistenza di un sistema informativo è indipendente dalla sua automazione; lo dimostra il fatto che archivi
e servizi anagrafici esistono da vari secoli. Le informazioni possono essere scambiate in varie forme e modalità. Per gestire un complesso corposo e integrato di informazioni, è nata l’esigenza di individuare opportune
codifiche per la memorizzazione dei dati. Nei sistemi informativi le informazioni vengono rappresentate per mezzo di dati che hanno bisogno di
essere interpretate.
Una base di dati consiste genericamente in una collezione di dati utilizzati per rappresentare le informazioni di interesse per un sistema informativo. Ogni struttura (ad esempio una banca, una compagnia d’assicurazioni, un’azienda) possiede una propria base di dati che aggiorna con
una certa frequenza. Inoltre, quando viene introdotta una nuova procedura occorre anzitutto “ereditare” (= importare) i dati dalla vecchia procedura
con le necessarie trasformazioni. Questa caratteristica di stabilità porta ad
affermare che i dati costituiscono una “risorsa” per l’organizzazione che li
gestisce, un patrimonio significativo da sfruttare e proteggere. Le normative
attuali in fatto di privacy e tutela delle basi di dati lo dimostrano.
Sebbene la gestione dei dati abbia catalizzato, fin dalla nascita dell’informatica, l’attenzione delle applicazioni, solo negli anni settanta nascono
linguaggi specificatamente dedicati alla gestione dei dati. L’approccio “convenzionale” alla gestione dei dati consiste nello sfruttare la presenza di
archivi o file da memorizzare in modo persistente sulla memoria di massa. Tale approccio presenta due seri problemi: la ricerca dei dati e la loro
condivisione. Infatti con una simile metodologia di lavoro, ogni utente lavora con la propria copia “locale” dei dati e quindi con i relativi problemi di
ridondanza e di incoerenza. Le basi di dati sono state concepite per ovviare
ad inconvenienti di questo tipo.
2
1 Le basi di dati
Un sistema di gestione di basi di dati, detto DBMS (Data Base Management System) è un sistema software in grado di:
• gestire grandi quantità di dati, permetterne la condivisione e assicurarne la persistenza;
• assicurare la loro affidabilità e privatezza.
Una base di dati è una collezione di dati gestita da un DBMS. Quindi, un
DBMS si occupa di gestire basi di dati:
• di grandi dimensioni: un DBMS deve essere in grado di gestire memorie
secondarie;
• condivise: un DBMS deve permettere a più utenti di accedere contemporaneamente ai dati comuni. Per controllare l’accesso condiviso di più
utenti il DBMS dispone di un meccanismo apposito, detto controllo di
concorrenza;
• affidabili: un DBMS deve garantire l’integrità dei dati anche in caso
di malfunzionamento hardware e software, prevedendo almeno procedure di recupero dei dati. I DBMS forniscono, per tali scopi, procedure
di salvataggio e ripristino della base di dati (backup e recovery);
• con criteri di privatezza: i DBMS gestiscono un sistema di autorizzazioni
che definisce i diritti di ciascun utente ( amministratore, lettura, scrittura su archivi, ecc.).
Un modello di dati è un approccio formale utilizzato per organizzare i
dati e descriverne la struttura in modo che essa risulti comprensibile ad un
elaboratore.
Ogni modello di dati fornisce meccanismi di strutturazione, analoghi
ai costruttori di tipo dei linguaggi di programmazione, che permettono di
definire nuovi tipi sulla base di tipi elementari predefiniti.
Il modello relazionale dei dati permette di definire tipi per mezzo del
costruttore di relazione, che consente di organizzare i dati in insiemi di record a struttura fissa o righe. Una relazione viene spesso rappresentata mediante una tabella in cui le righe rappresentano specifici record e le colonne
corrispondono ai campi dei record.
Esistono, oltre al modello relazionale, altri modelli di database quali:
• il modello gerarchico in cui i dati sono strutturati su base gerarchica;
• il modello reticolare in cui i dati sono strutturati in forma reticolare;
• il modello ad oggetti che utilizza i principi del paradigma “object oriented”.
Tutti i modelli di basi di dati sono costituiti da una parte che rimane
invariata nel tempo, detta schema, e da una parte, costituita dai valori
effettivi, detta istanza.
Esiste una proposta di struttura standardizzata per i DBMS articolata
su tre livelli, detti esterno, logico e interno; per ciascun livello esiste uno
schema:
1.2 Le basi di dati relazionali
3
• lo schema logico (o concettuale), che costituisce la descrizione dell’intera base di dati secondo il modello logico adottato (relazionale o gerarchico o reticolare od a oggetti);
• lo schema interno (o fisico), che costituisce la rappresentazione dello
schema logico per mezzo di strutture fisiche di memorizzazione;
• lo schema esterno, che costituisce la descrizione di una porzione della
base di dati di interesse utilizzando viste (views), in base alle esigenze di
visualizzazione dell’utente.
L’architettura, così definita, garantisce l’indipendenza della progettazione logica dei dati da quella fisica ed esterna. In particolare:
• l’indipendenza fisica consente di interagire con il DBMS in modo indipendente dalla struttura fisica dei dati. In base a questa proprietà, è
possibile modificare le strutture fisiche senza influire sulle descrizioni
dei dati ad alto livello e quindi sui programmi che utilizzano i dati stessi;
• l’indipendenza logica consente di interagire con il livello esterno della base di dati in modo indipendente dal livello logico, in modo che
l’utente possa non avere conoscenza dello schema logico del database.
1.2 Le basi di dati relazionali
Il modello relazionale pone i suoi fondamenti nell’algebra relazionale.
Il modello relazionale risponde al requisito dell’indipendenza del modello logico da quello fisico. Gli utenti di database relazionale interagiscono solo col livello logico e quindi non è necessario che essi conoscano le
strutture fisiche della base di dati.
Questo requisito è responsabile del successo del modello relazionale
rispetto ai DBMS reticolare e gerarchico che obbligavano gli utilizzatori a
conoscerne, almeno a grandi linee, la struttura realizzativa.
In insiemistica una relazione è legata al concetto di prodotto cartesiano
tra due insiemi.
Il prodotto cartesiano
D1 × D2
di due insiemi D1 e D2 è l’insieme delle coppie ordinate (v1 , v2 ) tale che
v1 è un elemento di D1 e v2 è un elemento di D2 . Una relazione binaria è
un sottoinsieme del prodotto cartesiano di due insiemi, detti domini della
relazione. Estendendo il concetto di prodotto cartesiano D1 × D2 × . . . × Dn
di n insiemi, una relazione è costituita da un sottoinsieme di D1 × D2 × . . . ×
Dn .
Ad esempio, dati due insiemi A, B dove A = {1, 2, 3} e B = {h, k}, il
prodotto cartesiano è uguale all’insieme
A × B = {(1, h), (2, h), (3, h), (1, k), (2, k), (3, k)}
mentre una relazione possibile è {(1, h), (1, k), (3, h)}.
4
1 Le basi di dati
Come ulteriore esempio,consideriamo tre insiemi A, B, C dove A =
{1, 2, 3}, B = {h, k}, C = {SI,NO} una relazione possibile è:
{(1, h, SI), (1, k, N O), (2, k, N O), (3, h, SI)}
che costituisce un sottoinsieme del prodotto cartesiano A × B × C, formato
da tre elementi o 3-ple ordinate.
Il numero n degli insiemi che compongono il prodotto cartesiano è detto grado del prodotto cartesiano e della relazione. Il numero delle n-ple
della relazione è detta cardinalità della relazione.
Una relazione è un insieme di n-ple ordinate in quanto l’i-esimo valore di ogni n-pla appartiene all’esimo insieme (o dominio) del prodotto
cartesiano.
Adesso si consideri la relazione LAUREATI relativa agli studenti di un
corso di laurea che hanno superato l’esame di laurea.
LAUREATI=
(Rossi, Giulio, 1033, 10/10/1970, 11/04/1995),
(Bianchi, Laura, 1034, 30/12/1970,23/11/1995),
(Verdi, Ernesto, 1037, 04/08/1970,18/05/1994)
con LAUREATI ⊆ COGNOME × NOME × MATRICOLA × DATA × DATA. Il
dominio “data” compare due volte nel prodotto cartesiano indicando la data di nascita e la data di laurea. Per facilitare il riferimento ai domini della
relazione, è necessario definire un’applicazione dom: A → D tra la qualifica del dominio o attributo e il dominio stesso. Considerando l’esempio
precedente, si ha:
dom(Cognome) = Cognome
dom(Nome) = Nome
dom(Numero di Matricola) = Matricola
dom(Data Nascita) = Data
dom(Data Laurea) = Data
Mediante tale funzione, è possibile associare a ogni occorrenza del dominio della relazione un attributo univoco che qualifica il ruolo del dominio. Una n-pla può allora essere definita come un insieme di n-ple di
coppie (attributo, valore) e non più come una lista ordinata di valori.
Ad esempio, la prima n-pla della relazione LAUREATI può essere definita come: (Cognome,Rossi), (Nome,Giulio),(Matricola, 1033), (Data Nascita,
10/10/1970), (Data Laurea, 11/04/1995). Le relazioni possono, quindi, essere identificate da n-ple, in cui l’elemento è individuato tramite posizione
oppure tramite i suoi attributi. Le tabelle nascono dall’esigenza di rappresentare visivamente le relazioni presentandole in una forma più facilmente
comprensibile.
Le righe della tabella rappresentano le n-ple mentre le colonne ne rappresentano gli attributi o i campi. É importante chiarire che in una relazione
1.2 Le basi di dati relazionali
5
non vi è alcun ordinamento fra le n-ple che la compongono; nelle tabelle
che la rappresentano, l’ordine c’è per necessità, ma è occasionale in quanto due tabelle con le stesse righe, ma in ordine diverso, rappresentano la
stessa relazione. Inoltre le n-ple di una relazione sono distinte l’una dall’altra, in quanto tra gli elementi di un insieme non possono essere presenti
due elementi uguali; da cui si deduce che una tabella può rappresentare
una relazione solo se le righe che la formano sono diverse l’una dall’altra.
Un’importante caratteristica dei sistemi relazionali è la gestione dei valori nulli o ignoti; è possibile assegnare un valore nullo ad un attributo
di una riga di una tabella. Tale valore è detto null. Ad esempio, si prenda
la Tabella 1.1 (STUDENTI), i cui campi rappresentano, oltre al numero di
matricola, i voti ottenuti relativamente ai singoli esami.
Matricola
Inglese
Francese
Spagnolo
0015
0016
0017
0018
NULL
30
25
24
28
30
NULL
22
NULL
28
NULL
27
Le quattro istanze della relazione sono rappresentate come quattro record della tabella STUDENTI. I valori NULL, presenti in alcuni campi, stanno a significare o che lo studente non ha ancora effettuato l’esame oppure
che lo studente ha terminato i corsi senza superare l’esame. In ogni caso,
un dato NULL indica un valore non noto oppure inesistente. In un sistema
relazionale è anche necessario prevedere se un attributo di una tabella può
assumere un valore nullo oppure sapere che tale valore debba essere certo.
Una ulteriore caratteristica dei database relazionali sono i vincoli di
integrità, che permettono di rispettare rigidamente le regole di integrità
logica del database. I vincoli di integrità si dividono in:
• vincoli intra–relazionali, che impongono vincoli interni alle relazioni
(ad esempio, il sesso di un impiegato può assumere solo i valori “M”
ed “F”, il cognome non può assumere valore nullo, ecc.)
• vincoli extra–relazionali, che impongono vincoli tra le relazioni (ad esempio, il valore del campo dipartimento della tabella IMPIEGATI deve
essere compreso nell’insieme dei valori del campo dipartimento della
tabella DIPARTIMENTI).
Un vincolo intra–relazionale, al contrario di quello extra–relazionale,
trova il suo soddisfacimento rispetto alle singole relazioni del DBMS; esso
può essere suddiviso in:
• vincolo di n-pla: esso impone condizioni sui valori della singola n-pla
indipendentemente da quelli assunti dalle altre n-ple (ad esempio, il
campo lode della tabella ESAME può essere pari a “SI” solo se il campo
voto è pari a 30).