| Indice
Prefazione xiii
1 Introduzione ai sistemi di basi di dati 3
1.1 Gestione dei dati 4
1.2 Una prospettiva storica 5
1.3 File system contro DBSM 7
1.4 Vantaggi di un DBMS 8
1.5 Descrivere e memorizzare dati in un DBMS 9
1.5.1 Il modello relazionale 10
1.5.2 Livelli di astrazione in un DBMS 11
1.5.3 Indipendenza dei dati 13
1.6 Interrogazioni in un DBMS 14
1.7 Gestione delle transazioni 15
1.7.1 Esecuzione concorrente di transazioni 16
1.7.2 Transazioni incomplete e crash di sistema 17
1.7.3 Punti da ricordare 17
1.8 Struttura di un DBMS 17
1.9 Persone che lavorano con le basi di dati 19
1.10 Domande di riepilogo 20
Esercizi 21
Esercizi basati su progetto 22
Note bibliografiche 22
2 Il modello relazionale 23
2.1 Introduzione al modello relazionale 25
2.1.1 Creare e modificare relazioni usando SQL. 27
2.2 Vincoli di integrita' sulle relazioni 29
2.2.1 Vincoli di chiave 30
2.2.2 Vincoli di chiave esterna 31
2.2.3 Vincoli generali 33
2.3 Applicazione dei vincoli di integrita' 34
2.3.1 Transazioni e vincoli 36
2.4 Interrogare basi di dati relazionali 38
2.5 Introduzione alle viste 39
2.5.1 Viste, indipendenza dei dati, sicurezza 40
2.5.2 Aggiornamenti delle viste 40
2.6 Distruggere/alterare tabelle e viste 44
2.7 Domande di riepilogo 44
Esercizi 45
Esercizi basati su progetto 46
Note bibliografiche 46
3 Algebra relazionale 49
3.1 Introduzione 49
3.2 Algebra relazionale 51
3.2.1 Selezione e proiezione 51
3.2.2 Operazioni sugli insiemi 53
3.2.3 Rinominare i campi 54
3.2.4 Join 55
3.2.5 Divisione 57
3.2.6 Altri esempi di interrogazioni algebriche 58
3.3 Domande di riepilogo 64
Esercizi 65
Note bibliografiche 66
4 SQL 67
4.1 Introduzione 68
4.1.1 Organizzazione del capitolo 69
4.2 La forma di una interrogazione SQL base 70
4.2.1 Esempi di interrogazioni SQL di base 74
4.2.2 Espressioni e stringhe nel comando SELECT 76
4.3 UNION, INTERSECT e EXCEPT 78
4.4 Interrogazioni annidate 81
4.4.1 Introduzione alle interrogazioni annidate 81
4.4.2 Interrogazioni annidate correlate 83
4.4.3 Operatori di confronto tra insiemi 84
4.4.4 Altri esempi di interrogazioni annidate 85
4.5 Operatori di aggregazione 87
4.5.1 Le clausole GROUP BY e HAVING 90
4.5.2 Ulteriori esempi di interrogazioni con aggregazione 94
4.6 Valori null 97
4.6.1 Confronti usando valori null 98
4.6.2 Connettori logici AND, OR e NOT 98
4.6.3 Impatto sui costrutti SQL 98
4.6.4 Join esterni 99
4.6.5 Impedire l’uso dei valori null 100
4.7 Vincoli di integrita' complessi in SQL 100
4.7.1 Vincoli su singola tabella 100
4.7.2 Vincoli di dominio e tipi distinti 101
4.7.3 Asserzioni: VI su piu'tabelle 102
4.8 Trigger e basi di dati attive 103
4.8.1 Esempi di trigger in SQL 104
4.9 DESIGN DI BASI DI DATI ATTIVE 105
4.9.1 Perche' i trigger possono essere difficili da capire 105
4.9.2 Vincoli contro trigger 106
4.9.3 Altri usi dei trigger 106
4.10 Domande di riepilogo 107
Esercizi 108
Note bibliografiche 112
5 Il modello Entita'-Relazione 115
5.1 Progettazione di basi di dati e diagrammi ER 116
5.1.1 Oltre la progettazione ER 117
5.2 Entita', attributi e insiemi di entita' 118
5.3 Relazioni e insiemi di relazioni 119
5.4 Ulteriori caratteristiche del modello ER 122
5.4.1 Vincoli di chiave 122
5.4.2 Vincoli di partecipazione 124
5.4.3 Entita' deboli 124
5.4.4 Gerarchie di classi 126
5.4.5 Aggregazione 128
5.5 Progettazione concettuale con il modello ER 129
5.5.1 Entita' verso attributo 129
5.5.2 Entita' verso relazione 131
5.5.3 Relazioni binarie verso relazioni ternarie 132
5.5.4 Aggregazione verso relazioni ternarie 134
5.6 Progettazione concettuale per grandi organizzazioni 134
5.7 Case study: il negozio su Internet 135
5.7.1 Analisi dei requisiti 135
5.7.2 Progettazione concettuale 136
5.8 Domande di riepilogo 137
Esercizi 137
Note bibliografiche 140
6 La progettazione logica: dallo schema ER al relazionale 141
6.1 Da insiemi di entita' a tabelle 142
6.2 Da insiemi di relazioni (senza vincoli) a tabelle 142
6.3 Traduzione di insiemi di relazioni con vincoli di chiave 144
6.4 Traduzione di insiemi di relazioni con vincoli di partecipazione
146
6.5 Traduzione di insiemi di entita' deboli 148
6.6 Traduzione delle gerarchie di classi 149
6.7 Traduzione di diagrammi ER con aggregazione 150
6.8 Da ER a relazionale: altri esempi 151
6.9 Case study: il negozio su Internet 152
6.10 Domande di riepilogo 154
Esercizi 155
Note bibliografiche 155
7 La normalizzazione 157
7.1 Introduzione al raffinamento degli schemi 158
7.1.1 Problemi causati dalla ridondanza 158
7.1.2 Decomposizioni 160
7.1.3 Problemi relativi alla decomposizione 161
7.2 Dipendenze funzionali 162
7.3 Ragionare sulle DF 163
7.3.1 Chiusura di un insieme di DF 163
7.3.2 Chiusura degli attributi 165
7.4 Forme normali 165
7.4.1 Forma normale di Boyce-Codd 166
7.4.2 Terza forma normale 167
7.5 Proprieta' delle decomposizioni 169
7.5.1 Decomposizione senza-perdita 169
7.5.2 Decomposizione con conservazione delle dipendenze 171
7.6 Normalizzazione 172
7.6.1 Decomposizione in BCNF 172
7.6.2 Decomposizione in 3NF 174
7.7 Raffinamento dello schema nella progettazione di basi di dati 178
7.7.1 Vincoli su un insieme di entita' 179
7.7.2 Vincoli su un insieme di relazioni 179
7.7.3 Identificare gli attributi delle entita' 180
7.7.4 Identificare gli insiemi di entita' 181
7.8 Caso di studio: il negozio su Internet 182
7.9 Domande di riepilogo 184
Esercizi 184
Note bibliografiche 187
8 Applicazioni tradizionali 191
8.1 Accedere alle basi di dati dalle applicazioni 192
8.1.1 SQL incapsulato 193
8.1.2 Cursori 195
8.1.3 SQL dinamico 199
8.2 Introduzione a JDBC 199
8.2.1 Architettura 200
8.3 Classi e interfacce JDBC 202
8.3.1 Gestione dei driver JDBC 202
8.3.2 Connessioni 202
8.3.3 Esecuzione dei comandi SQL 204
8.3.4 ResultSet 205
8.3.5 Eccezioni e warning 207
8.3.6 Esame dei metadati della base di dati 208
8.4 SQLJ 209
8.4.1 Scrivere codice SQLJ 211
8.5 Stored procedure 212
8.5.1 Creare una semplice stored procedure 213
8.5.2 Chiamare le stored procedure 214
8.5.3 SQL/PSM 215
8.6 Caso di studio: il negozio di libri su Internet 217
8.7 Domande di riepilogo 219
Esercizi 220
Esercizi basati su progetto 221
Note bibliografiche 221
9 Applicazioni Internet 223
9.1 Introduzione 223
9.2 Concetti di base su Internet 224
9.2.1 Uniform Resource Identifiers 224
9.2.2 Hypertext Transfer Protocol (HTTP) 226
9.3 Documenti HTML 228
9.4 Documenti XML 229
9.4.1 Introduzione all’XML 230
9.4.2 DTD di XML 233
9.4.3 DTD specifici per un dominio 236
9.5 L’architettura delle applicazioni three-tier 237
9.5.1 Architetture single-tier e client-server 238
9.5.2 Architetture a tre livelli 240
9.5.3 Vantaggi dell’architettura a tre livelli 242
9.6 Il livello di presentazione 243
9.6.1 Moduli HTML 243
9.6.2 JavaScript 246
9.6.3 Fogli di stile 248
9.7 Il livello intermedio 250
9.7.1 CGI: Common Gateway Interface 251
9.7.2 Application server 253
9.7.3 Servlet 254
9.7.4 JavaServer Pages (JSP) 256
9.7.5 Mantenimento dello stato 257
9.8 Case study: la libreria su Internet 260
9.9 Domande di riepilogo 263
Esercizi 263
Esercizi basati su progetto 266
Note bibliografiche 267
10 File e indici 271
10.1 Memorizzazione esterna dei dati 272
10.2 Organizzazioni dei file e indicizzazione 273
10.2.1 Indici clustered 274
10.2.2 Indici primari e secondari 275
10.3 Strutture di dati per gli indici 276
10.3.1 Indici hash 276
10.3.2 Indici ad albero 277
10.4 Confronto tra organizzazioni di file 279
10.4.1 Modello di costo 280
10.4.2 File heap 281
10.4.3 File ordinati 282
10.4.4 File clustered 283
10.4.5 File heap con indice non clustered ad albero 284
10.4.6 File heap con indice hash non clustered 286
10.4.7 Confronto dei costi di I/O 287
10.5 Indici e miglioramento delle prestazioni 288
10.5.1 Impatto del carico di lavoro 288
10.5.2 Organizzazione con indici clustered 289
10.5.3 Chiavi di ricerca composite 291
10.5.4 Specificazione degli indici in SQL:1999 295
10.6 Domande di riepilogo 295
Esercizi 296
Note bibliografiche 298
11 Esecuzione delle interrogazioni 299
11.1 Il catalogo di sistema 300
11.1.1 Informazioni nel catalogo 301
11.2 Introduzione alla valutazione degli operatori 303
11.2.1 Tre tecniche comuni 303
11.2.2 Percorsi di accesso 304
11.3 Algoritmi per operazioni relazionali 306
11.3.1 Selezione 306
11.3.2 Proiezione 306
11.3.3 Join 307
11.3.4 Altre operazioni 309
11.4 Introduzione all’ottimizzazione delle interrogazioni 309
11.4.1 Piani di valutazione delle interrogazioni 310
11.4.2 Interrogazioni con operatori multipli: valutazione a cascata 312
11.4.3 L’interfaccia iteratore 313
11.5 Piani alternativi: un esempio motivante 314
11.5.1 Anticipare le selezioni 314
11.5.2 Usare gli indici 316
11.6 Cosa fa un tipico ottimizzatore 319
11.6.1 Piani alternativi considerati 319
11.6.2 Stima dei costi di un piano 320
11.7 Domande di riepilogo 321
Esercizi 322
Note bibliografiche 323
12 Progettazione fisica 325
12.1 Introduzione alla progettazione fisica delle basi di dati 326
12.1.1 Carichi di lavoro delle basi di dati 327
12.1.2 Progettazione fisica e decisioni di ottimizzazione 328
12.1.3 Necessita' dell’ottimizzazione delle basi di dati 328
12.2 Linee guida per la selezione degli indici 329
12.3 Semplici esempi di selezione degli indici 331
12.4 Clustering e indicizzazione 333
12.4.1 Co-clustering di due relazioni 334
12.5 Indici che permettono piani basati solo sugli indici 337
12.6 Strumenti di aiuto per la selezione dell’indice 338
12.6.1 Selezione automatica degli indici 338
12.7 Cenni sull’ottimizzazione delle basi di dati 339
12.7.1 Ottimizzazione degli indici 340
12.7.2 Ottimizzazione dello schema logico 341
12.7.3 Ottimizzazione di interrogazioni e viste 342
12.8 Scelte nell’ottimizzazione dello schema logico 343
12.8.1 Decidere per una forma normale piu'debole 343
12.8.2 Denormalizzazione 344
12.8.3 Scelta della decomposizione 344
12.8.4 Partizionamento verticale di relazioni BCNF 345
12.8.5 Decomposizione orizzontale 346
12.9 Scelte nell’ottimizzazione di interrogazioni e viste 347
12.10 Case study: il negozio su Internet 349
12.10.1 Ottimizzazione della base di dati 350
12.11 Domande di riepilogo 351
Esercizi 351
Note bibliografiche 355
13 Gestione delle transazioni 357
13.1 Le proprieta' “Acid” 358
13.1.1 Consistenza e isolamento 359
13.1.2 Atomicita' e durabilita' 360
13.2 Transazioni e programmi 360
13.3 Esecuzione concorrente di transazioni 361
13.3.1 Motivazione per l’esecuzione concorrente 362
13.3.2 Serializzabilita' 362
13.3.3 Anomalie dovute a esecuzione concorrente 363
13.3.4 Programmi che coinvolgono transazioni abortite 366
13.4 Controllo di concorrenza basato sui lock 367
13.4.1 Strict 2PL 367
13.4.2 Deadlock 370
13.5 Prestazioni dei protocolli di locking 370
13.6 Supporto alle transazioni in SQL 371
13.6.1 Creare e terminare transazioni 371
13.6.2 Su cosa dobbiamo mettere i lock ? 373
13.6.3 Caratteristiche delle transazioni in SQL 374
13.7 Introduzione al crash recovery 376
13.7.1 Rubare i frame e forzare le pagine 377
13.7.2 Passi relativi al ripristino durante la normale esecuzione 378
13.7.3 Cenni su ARIES 379
13.7.4 Atomicita': implementare il rollback 379
13.8 Domande di riepilogo 379
Esercizi 380
Note bibliografiche 382 |