Prefazione... 1 Contenuti... 1 Ringraziamenti... 2 1 SQL Procedurale/SQL-PSM (Persistent Stored Modules)... 3 1.1 Dichiarazione di funzioni e procedure... 3 1.2 Istruzioni PSM... 4 2 Vincoli e Trigger... 9 2.1 Vincoli di chiave primaria... 9 2.2 Vincoli di chiave esterna... 10 2.3 Vincoli check su singoli attributi... 12 2.4 Vincoli check su intere tuple di attributi... 13 2.5 Asserzioni... 13 2.6 Trigger... 14 2.6.1 Proprietà dei Trigger... 19 2.6.2 Analisi di terminazione... 20 2.6.3 Modi di esecuzione dei trigger rispetto alle transazioni... 20 3 SQL nei linguaggi di programmazione... 21 4 Hardware... 23 4.1 Disco rigido... 23 4.1.1 Tempo di accesso ai dati: latenza del disco... 24 4.1.2 Densità del disco... 27 4.1.3 Affidabilità del disco... 28 RAID livello 0 (striping)... 29 RAID livello 1 (mirroring)... 30 RAID livello 4 (striping con parità)... 30 RAID livello 5 (striping con parità distribuita)... 31 4.2 Organizzazione dei record nei blocchi... 32 4.2 Gestore del buffer e delle transazioni... 37 4.3 DBMS e File System... 40 4.1.1 Organizzazione dei records nei file... 40 5 Indici... 43 5.1 Tipi di indici... 43 5.2 Indici ISAM... 43
II Indice 5.2.1 Indici Primari... 43 5.2.1.1 Indice denso... 44 5.2.1.2 Indice sparso... 45 5.2.1.3 Indice denso con possibili chiavi duplicate... 47 5.2.1.4 Indice sparso con possibili chiavi duplicate... 48 5.2.1.5 Cancellazione da un file con indice caso indice denso... 49 5.2.1.6 Cancellazione da un file con indice sparso... 50 5.2.1.7 Inserimento in un file con indice sparso... 53 5.2.1.8 Inserimento in un file con indice denso... 54 5.2.2 Indici Secondari... 55 5.2.2.1 Indici secondari con valori duplicati... 56 5.3 Indici B+-Tree... 59 5.3.1 Alberi binari di ricerca... 59 5.3.2 Alberi n-ari di ricerca... 59 5.3.3 B+-Tree... 60 5.3.3.1 Organizzazione dei nodi intermedi... 60 5.3.3.2 Organizzazione dei nodi foglia... 61 5.3.3.3 Operazione di ricerca... 61 5.3.3.4 Operazioni di inserimento e cancellazione... 61 Inserimento in un B+-Tree... 61 Algoritmo di inserimento Gestione delle chiavi nelle foglie... 62 Algoritmo di inserimento Gestione delle chiavi nei nodi non foglia... 64 Cancellazione da un B+-Tree... 67 Algoritmo di cancellazione Gestione delle chiavi nelle foglie... 67 Algoritmo di cancellazione Gestione delle chiavi nei nodi non foglia... 67 5.3.3.5 Efficienza del B+-Tree... 68 5.4 Dati geografici... 70 5.4.1 Condizioni di ricerca composte... 71 5.4.2 File grid... 73 6 Hashing... 75 6.1 Hashing statico... 75 6.1.1 Inserimento... 76 6.1.2 Cancellazione... 76 6.1.3 Dimesionamento dei bucket... 77
III 6.1.4 Costo dell accesso ai dati... 78 6.2 Hashing dinamico... 78 6.2.1 Hashing estendibile... 78 6.2.1.1 Inserimento in una tabella hash estendibile... 79 6.2.1.2 Cancellazione in una hash table estendibile... 80 6.2.2 Hashing lineare... 80 6.2.2.1 Inserimento in una hash table lineare... 81 6.3 Hash partizionato... 83 7 Organizzazione fisica dei dati... 85 7.1 Partizioni... 85 7.2 Memorizzazione delle tabelle nelle partizioni... 86 7.2.1 Heap... 86 7.2.2 Tabelle clustered... 86 7.2.3 Indici secondari... 87 7.3 Unità di allocazione... 88 7.4 Gestione dello spazio su disco... 88 8 Elaborazione delle query... 93 8.1 Ottimizzazione dell algebra relazionale... 94 8.2 Ottimizzazione del piano di query fisico... 95 8.2.1 Stima della dimensione del risultato... 95 8.3 Stima del numero di operazioni di I/O... 102 8.3.1 Algoritmi di ordinamento... 102 8.3.2 Algoritmi per la selezione... 106 Selezione con predicato di uguaglianza... 106 Selezione con predicato di disuguaglianza... 106 8.3.3 Algoritmi di join... 107 Join a un passo... 107 Join a un passo e mezzo... 107 Join a un passo e mezzo basato sulle tuple... 108 Join a un passo e mezzo basato sui blocchi... 108 Join a due passi... 109 Sort based join... 109 Sort join... 110 Join con indice... 111 Hash join... 112 Hash join ibrido... 113 9 Progetto fisico... 117
IV Indice 9.1 SQL Server... 118 9.2 Oracle... 118 9.3 DB2... 118 10 Gestione delle transazioni... 119 10.1 Definizione di una transazione... 119 10.2 Proprietà ACID delle transazioni... 120 10.2.1 Atomicità... 120 10.2.2 Consistenza... 121 10.2.3 Isolamento... 121 10.2.4 Persistenza... 121 10.3 Gestore dell affidabilità... 122 10.3.1 Organizzazione del file di log... 122 10.3.2 Esecuzione delle transazioni e scrittura del log... 124 10.3.3 Gestione dei guasti... 124 10.3.3.1 Ripresa a caldo warm restart... 125 10.3.3.2 Ripresa a freddo cold restart... 132 10.4 Gestore della concorrenza... 132 10.4.1 Anomalie delle transazioni concorrenti... 132 10.4.1.1 Perdita di aggiornamento lost update... 132 10.4.1.2 Lettura sporca dirty read... 133 10.4.1.3 Letture inconsistenti inconsistent read (non repeatable read).. 134 10.4.1.4 Aggiornamento fantasma ghost update... 134 10.4.1.5 Inserimento (o cancellazione) fantasma - phantom insert (or delete) 135 10.4.2 Teoria del controllo di concorrenza... 135 10.4.2.1 Schedules seriali e serializzabili... 136 10.4.2.2 View-equivalenza... 136 10.4.2.3 Conflict equivalenza... 139 10.4.2.4 Locking... 141 10.4.2.5 Two-phase locking... 143 10.4.2.6 Lettura sporca... 145 10.4.2.7 Inserimento fantasma... 145 10.4.2.8 Meccanismi per la gestione dei lock... 145 10.4.2.9 Lock gerarchico... 146 10.4.2.10 Controllo di concorrenza basato sui timestamp... 147 10.4.2.11 Blocco critico... 152 10.4.2.12 Timeout... 153 10.4.2.13 Deadlock prevention... 153
V 10.4.2.14 Deadlock detection... 154 10.4.2.15 Gestione della concorrenza in SQL 1999... 154 11 Datalog... 157 11.1 Predicati e atomi... 157 11.2 Regole e query... 157 11.2.1 Regole safe... 158 11.2.2 Algoritmi per applicare le regole... 158 11.3 Programmi Datalog... 160 11.3.1 Dall algebra relazionale al Datalog... 161 11.3.1.1 Ricosione... 162 Rispondere a query... 166 Ricorsione in SQL 99... 168 Forma di query SQL ricorsiva... 168 12 Dati semistrutturati... 171 12.1 Dati semistrutturati... 171 12.2 XML... 172 12.2.1 Document Type Definitions (DTD)... 174 12.2.2.1 Entità... 178 12.3 Namespace... 179 12.4 XML schema... 180 12.4.1 Tipi di dato... 182 12.4.2 Tipi derivati... 182 12.4.2.1 XPATH... 183 12.4.2.2 XQUERY... 184 13 Data Warehousing... 187 13.1 Accesso integrato a dati provenienti da diverse sorgenti... 187 13.2 Che cos è una data warehouse?... 190 13.3 Modelli e operazioni su una data warehouse... 193 13.4 Sistemi ROLAP... 193 13.4.1 Schema a stella... 194 13.4.2 Schema a fiocco di neve... 196 13.5 Sistemi MOLAP... 198 13.6 Operazioni... 200 13.6.1 Operazioni sui dati in sistemi ROLAP... 200 13.6.2 Operazioni sui dati in sistemi MOLAP... 204 13.7 Come si implementa una data warehouse?... 208 13.7.1 Monitoring... 208
VI Indice 13.7.2 Integrating... 209 13.7.3 Processing... 210 14 Knowledge Discovery in Databases... 213 15 Clustering... 217 15.1 Misure di dissimilarità o di distanza... 217 15.2 Misure di similarità... 217 15.3 Algoritmi di clustering... 218 15.3.1 Algoritmo K Means, versione di Forgy... 218 15.3.2 Algoritmo K Means, versione di MacQueen... 219 15.3.3 Algoritmo PAM (Partitioning Around Medoids)... 220 15.3.4 Clustering basato sulla probabilità... 222 15.3.5 Algoritmo EM... 225 16 Regole Associative... 231 16.1 Definizione di regola associativa... 231 16.2 Confidenza e supporto... 232 16.3 Algoritmo APRIORI... 234 16.4 Altra forma del database... 237 16.5 Weka... 238 17 Database Distribuiti... 239 17.1 Frammentazione dei dati... 239 17.2 Distribuzione dei frammenti... 240 17.3 Linguaggi di interrogazione di database distribuiti... 240 17.4 Ottimizzazione delle query distribuite... 241 17.5 Individuazione di deadlock distribuiti... 242 17.6 Transazioni distribuite... 242 17.6.1 Restart del sistema in seguito al fallimento di un subordinato... 244 17.6.2 Restart del sistema in seguito al fallimento del coordinatore... 244 17.6.4 Osservazioni sul protocollo 2PC... 245 17.7 Replicazione dei dati... 245 17.7.1 Replicazione sincrona... 246 17.7.1.1 Costo della replicazione sincrona... 246 17.7.2 Replicazione asincrona... 247 18 Database internazionali... 249 18.1 Gestione dei campi data/ora... 249 18.2 Gestione dei caratteri non ASCII... 249 18.3 Memorizzazione delle stringhe in SQL Server... 251
VII 18.3.1 Ricerca full-text... 252 Bibliografia... 255