La nuova edizione italiana del “classico” di Elmasri e Navathe presenta un aggiornamento puntuale di tutte le tecnologie e una nuova ristrutturazione dei contenuti. Pensato per un primo corso di basi di dati, offre una panoramica ampia e dettagliata dei principali argomenti introduttivi per la progettazione, l’implementazione e la gestione delle basi di dati.
La nuova edizione italiana è stata curata da Silvana Castano, Dipartimento di Informatica e Comunicazione, Università degli Studi di Milano.
Gli autori
Ramez A. Elmasri (autore) insegna all’Università del Texas ad Arlington, ed è autore di oltre 70 pubblicazioni. Ha lavorato per Honeywell e per l’Università di Houston, è stato condirettore del Journal of Parallel and Distributed Databases e membro del comitato direttivo dell’International Conference on Conceptual Modeling. Negli ultimi vent’anni ha svolto ricerche finanziate da NSF, NASA, Texas Instruments, Honeywell, Digital Equipment Corporation in molte aree dei sistemi di basi di dati e nell’area dell’integrazione dei sistemi e del software.
Shamkant B. Navathe (autore) è professore e coordinatore del gruppo di ricerca sulle basi di dati al College of Computing del Georgia Institute of Technology Ha lavorato in precedenza con IBM e Siemens ed è stato consulente per varie aziende, fra cui Digital Equipment Corporation, Hewlett-Packard ed Equifax. È stato condirettore di ACM Computing Surveys ed IEEE Transactions on Knowledge and Data Engineering, e attualmente è nei comitati di redazione di Information Systems e Distributed and Parallel Databases.
Questo libro presenta i concetti fondamentali necessari per progettare, implementare e usare i sistemi di basi di dati e le relative applicazioni. L’approccio scelto mette in particolare rilievo i fondamenti della modellazione e della progettazione di basi di dati, i linguaggi e le funzioni dei sistemi di gestione e le tecniche di implementazione di questi
sistemi. Il libro è stato pensato per un utilizzo in ambito accademico, ma costituisce anche un valido riferimento come libro di consultazione. I lettori dovrebbero già avere
una certa familiarità con i concetti elementari della programmazione e delle strutture dati, e conoscere gli aspetti basilari dell’architettura dei calcolatori.
La trattazione inizia con l’introduzione della terminologia e dei concetti base, prosegue presentando i principi della modellazione concettuale delle basi di dati e approfondendo
gli aspetti più importanti dei fondamenti delle basi di dati.
Novità della sesta edizione
La sesta edizione presenta le seguenti caratteristiche.
La sequenza dei capitoli è stata riorganizzata per consentire al docente di presentare progetti ed esercizi di laboratorio fin dall’inizio del corso.
Il materiale relativo a SQL, lo standard delle basi di dati relazionali, è stato anticipato nel libro ai Capitoli 4 e 5 per consentire al docente di focalizzarsi su questo importante
argomento all’inizio del corso.
I capitoli relativi alla teoria della normalizzazione sono stati riorganizzati in modo tale che il Capitolo 11 illustri i concetti della normalizzazione in modo intuitivo, mentre l’Apparato di Approfondimento Algoritmi di progettazione di basi di dati relazionali e altre dipendenze (disponibile on-line sul sito Web del volume) presenti le teorie e gli algoritmi di normalizzazione in modo formale.
Il libro è caratterizzato dai seguenti aspetti chiave.
Un’organizzazione autonoma e flessibile che può essere adattata alle specifiche esigenze individuali.
Un facile interprete per l’algebra e il calcolo relazionale.
Una raccolta di materiale integrativo, inclusa una significativa documentazione per docenti e studenti, quali diapositive PowerPoint, illustrazioni del testo e manuali con
soluzione per i docenti.
Organizzazione della sesta edizione
La sesta edizione è caratterizzata da significativi cambiamenti dell’intera organizzazione e da miglioramenti dei singoli capitoli. Il libro è articolato in cinque parti come segue:
La prima parte (Capitoli 1 e 2) comprende i capitoli introduttivi.
La presentazione relativa alle basi di dati relazionali e a SQL è stata spostata nella seconda parte del libro (Capitoli da 3 a 6); il Capitolo 3 descrive il modello relazionale
da un punto di vista formale e i vincoli delle basi di dati relazionali; il materiale su SQL (Capitoli 4 e 5) precede l’algebra e il calcolo relazionale (Capitolo 6), in
modo da consentire ai docenti di anticipare l’avvio delle attività di progetto con SQL qualora lo desiderino (questa riorganizzazione trova riscontro in uno studio nel quale
si afferma che l’apprendimento di SQL da parte degli studenti è più efficace se questo argomento è presentato prima dei linguaggi relazionali formali).
La modellazione Entità-Associazione e la progettazione di basi di dati sono state collocate nella terza parte (Capitoli da 7 a 11), che può comunque essere presentata
prima della seconda parte qualora il tema centrale del corso sia la progettazione di basi di dati.
La quarta parte comprende i capitoli sulle tecniche di programmazione per le basi di dati (Capitolo 12) e sulla programmazione Web di basi di dati con PHP (Capitolo
13).
La quinta parte (Capitoli 14, 15 e 16) comprende i capitoli relativi all’organizzazione dei file, all’indicizzazione, alle tecniche hash e ai concetti di gestione delle transazioni.
Contenuti della sesta edizione
Nella prima parte sono descritti i concetti fondamentali propedeutici a una corretta comprensione dei modelli, dei sistemi e dei linguaggi delle basi di dati. I Capitoli 1 e 2
introducono le basi di dati e i loro utenti tipici, i concetti, la terminologia e l’architettura dei sistemi DBMS.
La seconda parte analizza il modello dei dati relazionale, lo standard SQL e i linguaggi relazionali formali. Il Capitolo 3 descrive il modello relazionale, i suoi vincoli di
integrità e le operazioni di aggiornamento. Il Capitolo 4 illustra le parti fondamentali dello standard SQL per le basi di dati relazionali, incluse le operazioni di definizione e
manipolazione dei dati e le interrogazioni SQL di base. Il Capitolo 5 discute le interrogazioni SQL più complesse e i concetti di trigger, asserzioni, viste e modifiche dello
schema in SQL. Il Capitolo 6 esamina le operazioni dell’algebra relazionale e introduce il calcolo relazionale.
La terza parte verte sui vari aspetti collegati alla modellazione concettuale e alla progettazione delle basi di dati. Nel Capitolo 7 si illustrano i concetti di modello Entità-
Associazione (ER) e di diagramma ER, discutendo il loro ruolo nella progettazione concettuale di basi di dati. Il Capitolo 8 è dedicato all’astrazione dei dati e ai concetti
relativi alla modellazione semantica dei dati, dove si mostrano possibili estensioni al modello ER arrivando così al modello di dati EER e ai relativi diagrammi EER. I concetti
presentati nel Capitolo 8 comprendono le sottoclassi, la specializzazione, la generalizzazione e i tipi unione (categorie). Nei Capitoli 7 e 8 è stata introdotta anche la
notazione dei diagrammi delle classi UML. Il Capitolo 9 tratta la progettazione di basi di dati relazionali attraverso la traduzione da schemi ER ed EER a schemi relazionali.
Nel Capitolo 10 si presenta una panoramica delle diverse fasi del processo di progettazione delle basi di dati in contesto aziendale per la realizzazione di applicazioni di basi
di dati di medie e grandi dimensioni. La terza parte si conclude con il Capitolo 11, dove viene presentata la normalizzazione a livello intuitivo, definendo anche le nozioni di
dipendenza multivalore e di dipendenza di join.
La quarta parte è relativa alle tecniche di programmazione per le basi di dati. Il Capitolo 12 tratta argomenti inerenti alla programmazione SQL, come embedded SQL, SQL
dinamico, ODBC, SQLJ, JDBC e SQL/CLI. Il Capitolo 13 introduce la programmazione Web per le basi di dati utilizzando esempi con il linguaggio di scripting PHP.
La quinta parte descrive le strutture fisiche di memorizzazione e i relativi metodi di accesso impiegati nei sistemi di basi di dati, oltre alla la gestione di transazioni. Il Capitolo
14 illustra i metodi di organizzazione su disco di file di record, comprese le funzioni hash di tipo statico e dinamico. Il Capitolo 15 analizza le tecniche di indicizzazione
dei file, con riferimento alle strutture dati ad albero B e B+ e ai file grid. Il Capitolo 16 introduce le tecniche utilizzate nei sistemi di gestione delle transazioni e definisce i
concetti di ripristinabilità e serializzabilità di uno schedule.
Linee guida per l’uso di questo libro
Se l’enfasi del corso è rivolta alla progettazione di basi di dati, il docente dovrebbe anticipare la presentazione dei Capitoli 7 e 8, illustrandoli prima delle basi di dati relazionali.
Un corso che copra l’intero ciclo di vita delle basi di dati, compresa la progettazione e l’implementazione, deve trattare la progettazione concettuale (Capitoli 7 e 8), le
basi di dati relazionali (Capitoli 3, 4 e 5), la traduzione da modello ER a modello relazionale (Capitolo 9), la normalizzazione (Capitolo 11) e la realizzazione di programmi
applicativi con SQL (Capitolo 12). È possibile includere anche il Capitolo 13 qualora l’enfasi del corso sia sulla programmazione e sulla realizzazione di applicazioni basi di
dati su Web. In questo caso, è necessario acquisire documentazione supplementare per quanto riguarda gli specifici linguaggi e DBMS relazionali impiegati. Il libro è stato
pensato in modo da rendere possibile l’esposizione degli argomenti seguendo percorsi diversi.
Sommario
Prefazione all’edizione italiana XIX
Prefazione XXI
Parte 1 Introduzione alle basi di dati1
Capitolo 1 Basi di dati e utenti di basi di dati 3
1.1 Introduzione 4
1.2 Un esempio 6
1.3 Caratteristiche dell’approccio con basi di dati 9
1.3.1 Natura autodescrittiva di un sistema di basi di dati 10
1.3.2 Separazione tra programmi e dati e astrazione dei dati 10
1.3.3 Supporto di viste multiple dei dati 13
1.3.4 Condivisione dei dati e gestione delle transazioni in ambiente multiutente 13
1.4 Gli attori in scena 14
1.4.1 Amministratori 14
1.4.2 Progettisti 14
1.4.3 Utenti finali 15
1.4.4 Analisti di sistema e programmatori di applicazioni (ingegneri del software) 16
1.5 I lavoratori dietro le quinte 16
1.6 Vantaggi dell’uso di un DBMS 17
1.6.1 Controllo della ridondanza 17
1.6.2 Divieto all’accesso non autorizzato 18
1.6.3 Memorizzazione persistente degli oggetti di un programma 18
1.6.4 Strutture di memorizzazione per l’esecuzione efficiente di interrogazioni 19
1.6.5 Backup e recovery 19
1.6.6 Disponibilità di numerose interfacce utente 20
1.6.7 Rappresentazione di associazioni complesse fra dati 20
1.6.8 Imposizione di vincoli di integrità 20
1.6.9 Permesso di eseguire inferenze e azioni tramite regole 21
1.6.10 Altre conseguenze di un approccio fondato su basi di dati 21
1.7 Breve storia delle applicazioni di basi di dati 22
1.7.1 Prime applicazioni di basi di dati con sistemi reticolari e gerarchici 23
1.7.2 Flessibilità applicativa delle basi di dati relazionali 23
1.7.3 Applicazioni orientate agli oggetti ed esigenza di basi di dati più complesse 24
1.7.4 Interscambio di dati su Web per il commercio elettronico utilizzando XML 24
1.7.5 Estensione delle funzionalità delle basi di dati per nuove applicazioni 24
1.7.6 Basi di dati e Information Retrieval 26
1.8 Quando non usare un DBMS 26
Questionario di verifica 27
Esercizi 27
Capitolo 2 Concetti e architettura di un sistema di basi di dati 29
2.1 Modelli dei dati, schemi e istanze 29
2.1.1 Categorie di modelli dei dati 30
2.1.2 Schemi, istanze e stato di una base di dati 31
2.2 Architettura a tre livelli e indipendenza dei dati 33
2.2.1 Architettura a tre livelli 33
2.2.2 Indipendenza dei dati 35
2.3 Linguaggi e interfacce di basi di dati 36
2.3.1 Linguaggi dei DBMS 37
2.3.2 Interfacce dei DBMS 38
2.4 Ambiente di un sistema di basi di dati 40
2.4.1 Moduli componenti un DBMS 40
2.4.2 Programmi di utilità di un sistema di basi di dati 43
2.4.3 Strumenti, ambienti applicativi e funzioni di comunicazione 43
2.5 Architetture centralizzate e client/server per i DBMS 44
2.5.1 Architetture centralizzate dei DBMS 44
2.5.2 Architetture client/server 45
2.5.3 Architetture client/server a due livelli per DBMS 46
2.5.4 Architetture client/server a tre livelli per applicazioni Web 48
2.6 Classificazione dei sistemi di gestione di basi di dati 49
Questionario di verifica 53
Esercizi 53
Parte 2 Il modello relazionale e SQL55
Capitolo 3 Il modello relazionale e i vincoli per le basi di dati relazionali 57
3.1 Concetti del modello relazionale 57
3.1.1 Domini, attributi, tuple e relazioni 58
3.1.2 Caratteristiche delle relazioni 60
3.1.3 Notazione del modello relazionale 63
3.2 Vincoli del modello relazionale e schemi di basi di dati relazionali 64
3.2.1 Vincoli di dominio 65
3.2.2 Vincoli di chiave e vincoli sui valori nulli 65
3.2.3 Basi di dati e schemi di basi di dati relazionali 67
3.2.4 Integrità, integrità referenziale e chiavi esterne 70
3.2.5 Altri tipi di vincoli 72
3.3 Operazioni di aggiornamento, transazioni e gestione delle violazioni dei vincoli 72
3.3.1 Operazione di inserimento 73
3.3.2 Operazione di cancellazione 74
3.3.3 Operazione di modifica 75
3.3.4 Concetto di transazione 76
Questionario di verifica 76
Esercizi 77
Capitolo 4 Concetti essenziali di SQL 81
4.1 Tipi di dati e definizione dei dati in SQL 83
4.1.1 Concetti di schema e di catalogo in SQL 83
4.1.2 Il comando CREATE TABLE in SQL 84
4.1.3 Domini e tipi di dati per gli attributi in SQL 84
4.2 Specificazione dei vincoli di base in SQL 88
4.2.1 Specificazione di vincoli e di valori predefiniti per gli attributi 88
4.2.2 Specificazione dei vincoli di chiave e di integrità referenziale 89
4.2.3 Attribuzione di un nome ai vincoli 90
4.2.4 Specificazione di vincoli sulle tuple usando CHECK 91
4.3 Interrogazioni fondamentali in SQL 91
4.3.1 La struttura SELECT-FROM-WHERE delle interrogazioni fondamentali in SQL 91
4.3.2 Nomi di attributi ambigui, assegnazione di alias e variabili di tupla 94
4.3.3 Assenza della clausola WHERE e utilizzo dell’asterisco 96
4.3.4 Le tabelle come insiemi in SQL 97
4.3.5 Confronti di sottostringhe e operatori aritmetici 99
4.3.6 Ordinamento dei risultati delle interrogazioni 101
4.3.7 Discussione e riepilogo delle interrogazioni SQL fondamentali 102
4.4 Comandi INSERT, DELETE e UPDATE in SQL 102
4.4.1 Il comando INSERT 102
4.4.2 Il comando DELETE 104
4.4.3 Il comando UPDATE 104
4.5 Ulteriori funzioni di SQL 105
Questionario di verifica 107
Esercizi 107
Capitolo 5 SQL avanzato: interrogazioni complesse, trigger, viste e modifiche dello schema 109
5.1 Interrogazioni SQL più complesse 109
5.1.1 Confronti che coinvolgono NULL e la logica a tre valori 109
5.1.2 Interrogazioni nidificate e confronti di tuple e di insiemi/multinsiemi 111
5.1.3 Interrogazioni nidificate correlate 113
5.1.4 Funzioni EXISTS e UNIQUE in SQL 114
5.1.5 Insiemi espliciti e ridenominazione degli attributi in SQL 117
5.1.6 Tabelle collegate via join in SQL 118
5.1.7 Funzioni di aggregazione in SQL 120
5.1.8 Raggruppamento: le clausole GROUP BY e HAVING 122
5.1.9 Discussione e riepilogo delle interrogazioni SQL 125
5.2 Specifica di vincoli mediante asserzioni e di azioni mediante trigger 126
5.2.1 Specifica di vincoli generali mediante asserzioni in SQL 127
5.2.2 Introduzione ai trigger in SQL 128
5.3 Viste (tabelle virtuali) in SQL 129
5.3.1 Il concetto di vista 129
5.3.2 Specificazione delle viste 130
5.3.3 Implementazione e aggiornamento delle viste 131
5.4 Istruzioni di modifica degli schemi in SQL 134
5.4.1 Il comando DROP 134
5.4.2 Il comando ALTER 135
Questionario di verifica 136
Esercizi 136
Capitolo 6 L’algebra relazionale e il calcolo relazionale 139
6.1 Operazioni relazionali unarie: selezione e proiezione 140
6.1.1 L’operazione di SELEZIONE 140
6.1.2 L’operazione di PROIEZIONE 142
6.1.3 Sequenze di operazioni e operazione di RIDENOMINAZIONE 144
6.2 Operazioni insiemistiche dell’algebra relazionale 145
6.2.1 Le operazioni di UNIONE, INTERSEZIONE e DIFFERENZA 145
6.2.2 L’operazione di PRODOTTO CARTESIANO 148
6.3 Operazioni relazionali binarie: JOIN e DIVISIONE 150
6.3.1 L’operazione di JOIN 150
6.3.2 Operazioni di EQUIJOIN e JOIN NATURALE 151
6.3.3 Un insieme completo di operazioni dell’algebra relazionale 154
6.3.4 L’operazione di DIVISIONE 154
6.3.5 Notazione per gli alberi di interrogazione 156
6.4 Operazioni relazionali aggiuntive 159
6.4.1 Proiezione generalizzata 159
6.4.2 Funzioni aggregate e raggruppamento 159
6.4.3 Operazioni di chiusura ricorsiva 161
6.4.4 Operazioni di JOIN ESTERNO 162
6.4.5 L’operazione di UNIONE ESTERNA 164
6.5 Esempi di interrogazioni in algebra relazionale 165
Questionario di verifica 168
Esercizi 168
Parte 3 Modellazione concettuale, progettazione e normalizzazione di basi di dati 171
Capitolo 7 Uso del modello Entità-Associazione (ER) per modellare i dati 173
7.1 Uso di modelli dei dati concettuali di alto livello per la progettazione di basi di dati 174
7.2 Un’applicazione esemplificativa di basi di dati 176
7.3 Tipi di entità, insiemi di entità, attributi e chiavi 178
7.3.1 Entità e attributi 178
7.3.2 Tipi di entità, insiemi di entità, chiavi e insiemi di valori 181
7.3.3 Progettazione concettuale iniziale della base di dati AZIENDA 184
7.4 Tipi di associazione, insiemi di associazioni, ruoli e vincoli 185
7.4.1 Tipi di associazione, insiemi di associazioni e istanze di associazione 186
7.4.2 Grado di un’associazione, nomi di ruolo e associazioni ricorsive 186
7.4.3 Vincoli sui tipi di associazione 189
7.4.4 Attributi di tipi di associazione 192
7.5 Tipi di entità debole 192
7.6 Raffinamento della progettazione ER per la base di dati AZIENDA 193
7.7 Diagrammi ER, convenzioni di denominazione e problemi di progettazione 194
7.7.1 Riepilogo della notazione dei diagrammi ER 194
7.7.2 Denominazione appropriata dei costrutti dello schema 195
7.7.3 Scelte per la progettazione concettuale ER 197
7.7.4 Notazioni alternative per i diagrammi ER 198
7.8 Un esempio di notazione alternativa: i diagrammi delle classi UML 198
7.9 Tipi di associazione di grado maggiore di due 201
7.9.1 Scelta tra associazioni binarie e associazioni ternarie (o di grado più elevato) 201
7.9.2 Vincoli su associazioni ternarie (o di grado maggiore) 205
Questionario di verifica 206
Esercizi 206
Capitolo 8 Modellazione Entità-Associazione estesa (modello EER) 213
8.1 Sottoclassi, superclassi ed ereditarietà 214
8.2 Specializzazione e generalizzazione 216
8.2.1 Specializzazione 216
8.2.2 Generalizzazione 218
8.3 Vincoli e caratteristiche delle gerarchie di specializzazione e generalizzazione 219
8.3.1 Vincoli su specializzazione e generalizzazione 219
8.3.2 Gerarchie e reticoli di specializzazioni e generalizzazioni 222
8.3.3 Uso della specializzazione e della generalizzazione nella modellazione concettuale di dati 226
8.4 Modellazione di tipi UNIONE attraverso l’uso di categorie 227
8.5 Uno schema EER esemplificativo UNIVERSITÀ, scelte progettuali e definizioni formali 229
8.5.1 La base di dati esemplificativa UNIVERSITÀ 229
8.5.2 Scelte progettuali per la specializzazione/generalizzazione 232
8.5.3 Definizioni formali per i concetti del modello EER 233
8.6 Un esempio di notazione alternativa: rappresentazione della specializzazione/ generalizzazione nei diagrammi delle classi UML 234
8.7 Concetti di astrazione dei dati, rappresentazione della conoscenza e ontologia 235
8.7.1 Classificazione e istanziazione 236
8.7.2 Identificazione 237
8.7.3 Specializzazione e generalizzazione 238
8.7.4 Aggregazione e associazione 238
8.7.5 Ontologie e Web semantico 240
Questionario di verifica 241
Esercizi 242
Capitolo 9 Progettazione di basi di dati relazionali attraverso la traduzione da schemi ER ed EER a schemi relazionali 249
9.1 Progettazione di basi di dati relazionali attraverso la traduzione da ER a relazionale 249
9.1.1 Algoritmo di traduzione da ER a relazionale 249
9.1.2 Discussione e riepilogo delle regole di traduzione per i costrutti dei modelli 256
9.2 Traduzione dei costrutti del modello EER in relazioni 257
9.2.1 Traduzione della specializzazione o generalizzazione 258
9.2.2 Traduzione delle sottoclassi condivise (ereditarietà multipla) 261
9.2.3 Traduzione delle categorie (tipi unione) 261
Questionario di verifica 263
Esercizi 263
Capitolo 10 Metodologia pratica di progettazione di basi di dati e uso dei diagrammi UML 265
10.1 Il ruolo dei sistemi informativi nelle organizzazioni 266
10.1.1 Il contesto organizzativo per l’uso di sistemi di basi di dati 266
10.1.2 Il ciclo di vita dei sistemi informativi 268
10.1.3 Il ciclo di vita dei sistemi di basi di dati 269
10.2 Il processo di progettazione e implementazione delle basi di dati 270
10.2.1 Fase 1: raccolta e analisi dei requisiti 273
10.2.2 Fase 2: progettazione concettuale della base di dati 275
10.2.3 Fase 3: scelta di un DBMS 285
10.2.4 Fase 4: mapping del modello dei dati (progettazione logica della base di dati) 288
10.2.5 Fase 5: progettazione fisica della base di dati 288
10.2.6 Fase 6: implementazione e ottimizzazione del sistema di base di dati 289
10.3 Uso dei diagrammi UML come supporto alla progettazione della base di dati 290
10.3.1 UML come standard di specifica della progettazione 290
10.3.2 UML per la progettazione di applicazioni di basi di dati 291
10.3.3 I diversi tipi di diagrammi UML 292
10.3.4 Un esempio di modellazione e progettazione: una base di dati universitaria 298
10.4 Rational Rose, uno strumento di progettazione basato su UML 300
10.4.1 Rational Rose per la progettazione di basi di dati 300
10.4.2 Rational Rose Data Modeler 300
10.4.3 La modellazione dei dati tramite Rational Rose Data Modeler 302
10.5 Strumenti automatici per la progettazione di basi di dati 306
Questionario di verifica 309
Capitolo 11 Dipendenze funzionali e normalizzazione per basi di dati relazionali 313
11.1 Linee guida informali di progettazione di schemi di relazione 314
11.1.1 Assegnazione di una semantica esplicita agli attributi delle relazioni 315
11.1.2 Informazioni ridondanti nelle tuple e anomalie di aggiornamento 318
11.1.3 Valori nulli nelle tuple 320
11.1.4 Generazione di tuple spurie 321
11.1.5 Sommario delle linee guida di progettazione 324
11.2 Dipendenze funzionali 324
11.2.1 Definizione di dipendenza funzionale 325
11.3 Forme normali basate su chiavi primarie 328
11.3.1 Normalizzazione delle relazioni 328
11.3.2 Uso pratico delle forme normali 329
11.3.3 Definizioni di chiavi e attributi che partecipano alle chiavi 330
11.3.4 Prima forma normale 330
11.3.5 Seconda forma normale 334
11.3.6 Terza forma normale 335
11.4 Definizioni generali di seconda e terza forma normale 336
11.4.1 Definizione generale di seconda forma normale 337
11.4.2 Definizione generale di terza forma normale 339
11.4.3 Interpretazione della definizione generale di terza forma normale 339
11.5 Forma normale di Boyce e Codd 340
Questionario di verifica 343
Esercizi 343
Parte 4 Tecniche di programmazione p er basi di dati 347
Capitolo 12 Introduzione alle tecniche di programmazione per SQL 349
12.1 Trigger e concetti di basi di dati attive 350
12.1.1 Modello generalizzato per le basi di dati attive e trigger di Oracle 350
12.1.2 Problemi di progettazione e implementazione per le basi di dati attive 355
12.1.3 Esempi di regole attive a livello di istruzione in STARBURST 357
12.1.4 Applicazioni potenziali delle basi di dati attive 359
12.1.5 Trigger in SQL-99 360
12.2 Programmazione per le basi di dati: tecniche e problematiche 360
12.2.1 Approcci alla programmazione per basi di dati 361
12.2.2 Conflitto di impedenza 361
12.2.3 Sequenza tipica di interazione nella programmazione per basi di dati 362
12.3 Embedded SQL, SQL dinamico e SQLJ 363
12.3.1 Il reperimento di tuple singole con embedded SQL 363
12.3.2 Reperimento di insiemi di tuple con embedded SQL mediante cursori 367
12.3.3 Specificazione di interrogazioni al momento dell’esecuzione usando SQL dinamico 369
12.3.4 SQLJ: incapsulamento di comandi SQL in Java 370
12.3.5 Reperimento di insiemi di tuple in SQLJ mediante iteratori 373
12.4 Programmazione per basi di dati con chiamate di funzione: SQL/CLI e JDBC 375
12.4.1 Programmazione per basi di dati con SQL/CLI usando C come linguaggio ospite 376
12.4.2 JDBC: chiamate di funzione SQL per la programmazione Java 380
12.5 Stored procedure per basi di dati e SQL/PSM 384
12.5.1 Funzioni e stored procedure per basi di dati 385
12.5.2 SQL/PSM: estensione di SQL per specificare moduli memorizzati persistenti 386
12.6 Confronto dei tre approcci 388
Questionario di verifica 389
Esercizi 389
Capitolo 13 Programmazione di basi di dati su Web con il linguaggio PHP 391
13.1 Un semplice esempio in PHP 391
13.2 Caratteristiche di base di PHP 394
13.2.1 Variabili, tipi di dato e costrutti di programmazione in PHP 395
13.2.2 Vettori in PHP 396
13.2.3 Funzioni in PHP 398
13.2.4 Variabili server e form in PHP 400
13.3 Introduzione alla programmazione PHP per le basi di dati 401
13.3.1 Connessione a una base di dati 402
13.3.2 Raccolta di dati dalle form e inserimento di record 404
13.3.3 Interrogazioni per il reperimento di dati da una base di dati 405
Questionario di verifica 406
Esercizi 406
Parte 5 M emorizzazione dei dati, i ndici e i ntroduzione alle transazioni407
Capitolo 14 Memorizzazione su disco, organizzazioni di file e tecniche hash 409
14.1 Introduzione 409
14.1.1 Gerarchie di memorie e dispositivi di memorizzazione 410
14.1.2 Memorizzazione di basi di dati 412
14.2 Dispositivi di memoria secondaria 413
14.2.1 Descrizione dell’hardware dei dispositivi a disco 413
14.2.2 Dispositivi di memorizzazione a nastro magnetico 418
14.3 Bufferizzazione di blocchi 419
14.4 Collocazione su disco dei record di un file 421
14.4.1 Record e tipi di record 421
14.4.2 File, record a lunghezza fissa e record a lunghezza variabile 422
14.4.3 Ripartizione dei record in blocchi e confronto tra record con spanning e record senza spanning 424
14.4.4 Allocazione dei blocchi di un file su disco 424
14.4.5 Header dei file 425
14.5 Operazioni sui file 426
14.6 File di record non ordinati (file heap) 429
14.7 File di record ordinati (file sorted) 430
14.8 Tecniche hash 433
14.8.1 Hash interno 434
14.8.2 Hash esterno per file su disco 437
14.8.3 Tecniche hash che consentono un’espansione dinamica dei file 439
14.9 Altre organizzazioni primarie dei file 444
14.9.1 File di record misti 444
14.9.2 Alberi B e altre strutture dati come organizzazione primaria 444
14.10 Rendere parallelo l’accesso al disco attraverso l’uso della tecnologia RAID 445
14.10.1 Miglioramento dell’affidabilità con RAID 446
14.10.2 Miglioramento delle prestazioni con RAID 447
14.10.3 Organizzazioni e livelli RAID 448
14.11 Nuovi sistemi di memorizzazione 449
14.11.1 Storage Area Network 449
14.11.2 Memorizzazione in rete 450
14.11.3 Sistemi di memorizzazione iSCSI 451
Questionario di verifica 452
Esercizi 453
Capitolo 15 Indici per file 457
15.1 Tipi di indici ordinati a un solo livello 457
15.1.1 Indici primari 458
15.1.2 Indici di cluster 461
15.1.3 Indici secondari 462
15.1.4 Riepilogo 466
15.2 Indice multilivello 466
15.3 Indici dinamici multilivello implementati con alberi B e alberi B+ 471
15.3.1 Alberi di ricerca e alberi B 472
15.3.2 Alberi B+ 477
15.4 Indici su chiavi multiple 486
15.4.1 Indice ordinato su più attributi 486
15.4.2 Hash partizionato 487
15.4.3 File a griglia 487
15.5 Altri tipi di indici 488
15.5.1 Indici hash 488
15.5.2 Indici bitmapped 489
15.5.3 Indici basati su funzione 492
15.6 Alcune questioni generali riguardanti gli indici 493
15.6.1 Confronto tra indici logici e indici fisici 493
15.6.2 Discussione 494
15.6.3 Memorizzazione di relazioni per colonna 495
Questionario di verifica 495
Esercizi 496
Capitolo 16 Introduzione alla gestione delle transazioni 499
16.1 Introduzione alla gestione delle transazioni 499
16.1.1 Confronto tra sistemi monoutente e sistemi multiutente 499
16.1.2 Transazioni, item della base di dati, operazioni di lettura e scrittura e buffer del DBMS 500
16.1.3 Perché è necessario il controllo di concorrenza 502
16.1.4 Perché è necessario il controllo di affidabilità 505
16.2 Concetti di transazione e di sistema 506
16.2.1 Stati delle transazioni e ulteriori operazioni 507
16.2.2 Il log di sistema 508
16.2.3 Punto di commit di una transazione 509
16.3 Proprietà auspicabili delle transazioni 510
16.4 Supporto alle transaziono in SQL 511
Questionario di verifica 513
Esercizi 514
Bibliografia 515
Indice analitico 553