Basi di dati e DBMS - architettura ANSI-SPARC e indipendenza dei dati
In questa pagina 6
Il corso parte da una domanda pratica: perché un'applicazione non può semplicemente salvare i suoi dati in file? La risposta è l'elenco di problemi che il DBMS risolve, e l'architettura a tre livelli che spiega come lo fa.
Database e DBMS
Definizione (base di dati). Una base di dati (database, DB) è una collezione permanente, coerente e integrata di dati correlati, tenuta per lungo tempo (anche decenni), progettata per uno scopo preciso e per utenti ben identificati. Rappresenta alcuni aspetti del mondo reale, detto mini-mondo o universe of discourse. I dati sono fatti noti che si possono registrare e hanno un significato intrinseco.
Definizione (DBMS). Un sistema di gestione di basi di dati (database management system) è un software generico che permette di creare, gestire e aggiornare un DB. Tre attività:
- definizione: lo schema (tipi di dato, struttura, vincoli) è scritto nel catalogo di sistema come metadati;
- costruzione: memorizzazione dei dati veri e propri;
- manipolazione: interrogazioni (query) e aggiornamenti.
Un DB è quindi autodescrittivo: contiene i dati e, nel catalogo, la descrizione di come sono fatti. I programmi non incorporano la struttura dei dati (separazione tra programmi e dati), e questo è il punto di partenza dell'indipendenza dei dati.
Esempio concreto: i dati di una università (studenti, docenti, esami) in un DBMS relazionale come PostgreSQL. Lo schema Studente(matricola, nome, cognome, data_nascita) sta nel catalogo; le righe sono i dati; SELECT nome FROM Studente WHERE matricola = 6554 è una manipolazione.
Caratteristiche dei database
- Grandi: molto più grandi della memoria centrale (terabyte, oggi petabyte); il DBMS organizza i dati su memoria di massa (Memoria di massa e scheduling del discoLa memoria di massa è fatta di dischi rigidi (HDD: piatti, tracce, cilindri, settori) e memorie non volatili NAND (SSD); tempo di accesso HDD = seek + latenza rotazionale (mezzo giro, 30/RPM secondi), tempo di I/O = accesso + trasferimento + overhead del controller; i blocchi sono indirizzati con un LBA lineare; per l'HDD si minimizza il seek con FCFS, SSTF (rischio di starvation), SCAN (ascensore) e C-SCAN (più uniforme), con le varianti LOOK e C-LOOK e il deadline di Linux; per le NVM contano FTL, garbage collection, overprovisioning e wear leveling; il sistema operativo formatta (fisico e logico), partiziona, gestisce il boot e lo spazio di swap; parità ed ECC rilevano e correggono errori; il RAID usa striping, mirroring e parità (livelli 0, 1, 4, 5, 6, 10) per più velocità e affidabilità, con MTTDL = 1/PDL.Memoria di massa e scheduling del disco →).
- Condivisi tra applicazioni e utenti: si riducono ridondanza e incoerenza, e serve il controllo della concorrenza per evitare interazioni indesiderate tra utenti (isolamento) e operazioni parziali o incomplete (atomicità).
- Durabili (persistenti): i dati sopravvivono a guasti hardware e software.
- Sicuri: l'accesso richiede autenticazione (chi sei) e autorizzazione (che cosa puoi fare).
- Efficienti: ottimizzano l'uso di risorse, in spazio e in tempo (l'ottimizzatore delle interrogazioni sceglie il piano di esecuzione).
Perché un file system non è un database
- lo schema è limitatissimo (alberi di directory) e l'accesso efficiente a dati la cui posizione non è nota in anticipo non è garantito;
- la durabilità non è assicurata (servono checksum, backup);
- non evita ridondanza e incoerenza, né offre isolamento e atomicità;
- ogni funzione da DBMS richiede codice applicativo ad hoc.
Dagli archivi ai database
Con gli archivi (file) ogni applicazione ha il suo: applicazione Studenti con l'archivio Studenti, applicazione Docenti con l'archivio Docenti, applicazione Esami con l'archivio Esami. Problemi:
| Problema | Conseguenza |
|---|---|
| duplicazione e alta ridondanza: lo stesso dato in più archivi con rappresentazioni diverse | incoerenze possibili, spreco di risorse |
| cicli di vita diversi per lo stesso dato | incoerenze possibili |
| caratteristiche fisiche diverse | ottimizzazione locale e non globale |
| vincoli di integrità diversi | incoerenze possibili |
Con un DBMS le applicazioni accedono a un'unica base di dati (Studenti, Docenti ed Esami insieme) tramite il DBMS: i dati sono memorizzati una volta e i vincoli sono definiti in un posto solo.
Architettura ANSI/SPARC
L'architettura ANSI/SPARC (Tsichritzis e Klug, 1978) descrive un DBMS con tre livelli di schema:
Definizione (livelli).
- Schema esterno (livello esterno): uno per ogni applicazione o gruppo di utenti, descrive solo i dati rilevanti per quella applicazione (una vista).
- Schema logico (livello logico): rappresentazione integrata dei dati, indipendente dalla loro rappresentazione fisica. È quello che si disegna con il modello relazionale.
- Schema interno (livello fisico): rappresentazione in strutture dati e unità di memorizzazione (file, pagine, indici).
Tra i livelli ci sono le corrispondenze (mapping) esterno/logico e logico/interno, mantenute dal DBMS. L'accesso ai dati avviene sempre tramite il livello esterno (che può coincidere con il logico).
Esempio con l'università:
-- livello logico: la tabella
CREATE TABLE Studente (matricola INT PRIMARY KEY, nome TEXT, cognome TEXT, data_nascita DATE);
CREATE TABLE Esame (matricola INT, corso INT, voto INT, PRIMARY KEY (matricola, corso));
-- livello esterno: la vista per la segreteria (senza data di nascita)
CREATE VIEW VistaSegreteria AS
SELECT s.matricola, s.cognome, e.corso, e.voto
FROM Studente s JOIN Esame e ON s.matricola = e.matricola;
-- livello interno: una struttura fisica di accesso
CREATE INDEX idx_esame_corso ON Esame (corso);Indipendenza dei dati
Definizione (indipendenza fisica). Gli schemi logico ed esterno non dipendono dallo schema interno, che può cambiare senza modificarli.
Definizione (indipendenza logica). Lo schema esterno non dipende dallo schema logico: aggiunte e modifiche alle viste non richiedono cambiamenti al livello logico (e, viceversa, modifiche logiche si assorbono ridefinendo le viste).
Nell'esempio: creare o eliminare idx_esame_corso cambia la velocità, non il testo di nessuna query (fisica). Se la tabella Studente viene divisa in Anagrafica e Iscrizione, basta ridefinire VistaSegreteria e le applicazioni che la usano restano invariate (logica).
Attori
- Progettisti e sviluppatori del DBMS (il software stesso).
- Amministratore della base di dati (DBA): sicurezza, prestazioni, backup.
- Progettista della base di dati: scrive gli schemi (questa è la materia delle note successive).
- Progettisti e sviluppatori delle applicazioni.
- Utenti finali: parametrici (eseguono attività predefinite, come lo sportellista) e occasionali (casual, eseguono interrogazioni generiche non predefinite).
Un po' di storia
- 1970: Codd propone il modello relazionale; 1976: Chen propone il modello ER.
- 1977: System R di IBM (dal quale SQL); Ingres a Berkeley; 1979 Oracle; 1983 IBM DB2.
- 1986-1996: Postgres a Berkeley, poi PostgreSQL; 1998 MySQL (open source).
- Standard SQL ISO: SQL-86, SQL-89, SQL-92, SQL:1999, :2003, :2006, :2008, :2011, :2016.
Domande d'esame
1. Elencare le caratteristiche di un DBMS che un file system non garantisce. Traccia. Riduzione di ridondanza e incoerenza, controllo della concorrenza (isolamento, atomicità), durabilità dei dati dopo guasti, sicurezza con autenticazione e autorizzazione, accesso efficiente a dati la cui posizione non è nota, un vero schema con vincoli. Il file system può solo fornire spazio permanente.
2. Descrivere i tre livelli dell'architettura ANSI/SPARC e dire quale indipendenza garantiscono. Traccia. Esterno (viste per applicazione), logico (schema integrato indipendente dalla memorizzazione), interno (strutture fisiche). Il cambiamento dell'interno non tocca logico ed esterno (indipendenza fisica); il cambiamento del logico non tocca le applicazioni, se le viste si adeguano (indipendenza logica). Esempio: un indice cambia le prestazioni, non le query.
3. Quale differenza c'è tra schema e istanza, e tra DB e DBMS? Traccia. Lo schema descrive la struttura (livello intensionale), l'istanza sono i dati veri (livello estensionale, Ciclo di vita di un sistema informativo e analisi dei requisitiIl ciclo di vita di un sistema informativo ha le fasi studio di fattibilità, analisi dei requisiti, progettazione (dei dati e delle applicazioni), sviluppo, collaudo, esercizio e manutenzione; il modello a cascata procede in sequenza, quello a spirale itera per versioni. I requisiti sono funzionali (che cosa fa il sistema), non funzionali (come lo fa, es. tempi) e vincoli aggiuntivi imposti dai committenti; si raccolgono da frasi in linguaggio naturale, documentazione e applicazioni esistenti e si analizzano con frasi filtrate e glossario dei dati. La progettazione di una base di dati ha tre fasi: concettuale (schema ER, indipendente dal DBMS), logica (schema relazionale, per una classe di DBMS, con il carico applicativo) e fisica (strutture del DBMS scelto). Un modello è un insieme di costrutti, lo schema è la rappresentazione del mini-mondo (livello intensionale), l'istanza sono i dati (livello estensionale); un buono schema è completo, corretto, minimale e leggibile.Ciclo di vita di un sistema informativo e analisi dei requisiti →); il DB sono i dati più lo schema, il DBMS il software che li gestisce.
Versione ripasso
- DB: collezione permanente, coerente e integrata di dati correlati sul mini-mondo. DBMS: software generico per definire (schema nel catalogo, metadati), costruire e manipolare (query, aggiornamenti) un DB. Un DB è autodescrittivo.
- Rispetto ai file: meno ridondanza e incoerenza, concorrenza (isolamento, atomicità), durabilità, sicurezza (autenticazione e autorizzazione), efficienza. Il file system (File system - interfaccia, directory e implementazioneUn file è uno spazio di indirizzi logici contigui con attributi (nome, identificatore, tipo, posizione, dimensione, protezione, date) e operazioni (create, read, write, seek, delete, truncate, open, close); il sistema tiene una tabella dei file aperti di sistema e una per processo; l'accesso è sequenziale o diretto; le directory si organizzano a livello singolo, a due livelli, ad albero, a grafo aciclico (hard link e link simbolici) o a grafo generale; i permessi UNIX rwx per proprietario, gruppo e altri (chmod 754); il file system è a strati (file system logico, organizzazione dei file, file system di base, controllo dell'I/O), con strutture su disco (boot block, superblock, directory, FCB o inode) e in memoria; i blocchi si allocano in modo contiguo (extent), concatenato (FAT) o indicizzato (inode con puntatori diretti e indiretti, ext4 con extent); lo spazio libero con bitmap, lista, raggruppamento o conteggio; mount, VFS, file system distribuiti (NFS) e semantiche di consistenza.File system - interfaccia, directory e implementazione →) dà solo spazio permanente.
- ANSI/SPARC: esterno (una vista per applicazione), logico (integrato, indipendente dal fisico), interno (strutture fisiche), con mapping tra i livelli.
- Indipendenza fisica: cambia l'interno (es. un indice), non logico ed esterno. Indipendenza logica: cambia il logico, le viste si ridefiniscono, le applicazioni no. Esempio:
CREATE INDEXcambia la velocità, non le query;CREATE VIEWisola l'applicazione. - Attori: sviluppatori del DBMS, DBA, progettista di DB, progettisti di applicazioni, utenti parametrici e occasionali.
- Errori tipici: confondere schema (intensionale) e istanza (estensionale); dire che l'indipendenza fisica riguarda le viste; credere che un indice cambi i risultati delle query.
- Collegamenti: Modello relazionale - relazioni, chiavi e vincoliIl modello relazionale (Codd, IBM, 1970) rappresenta i dati con relazioni, cioè tabelle, ed è basato su valori: i legami tra relazioni sono confronti di valori, non puntatori, il che garantisce indipendenza dalle strutture fisiche, portabilità e bidirezionalità. Una relazione matematica è un sottoinsieme del prodotto cartesiano di n domini (insieme di n-uple ordinate, senza duplicati né ordine tra le righe); una relazione del modello è un insieme di tuple, funzioni dagli attributi ai valori del dominio, quindi non posizionale. Si distinguono schema di relazione e istanza, schema di base di dati (relazioni più vincoli) e istanza. NULL è un valore speciale fuori da ogni dominio. I vincoli di integrità sono intra-relazionali (di dominio, di tupla, di chiave) e inter-relazionali (integrità referenziale, con la chiave esterna). Superchiave: insieme di attributi che non ripete mai i valori; chiave: superchiave minimale; ogni relazione ne ha almeno una (tutti gli attributi); la chiave primaria è una chiave scelta, senza NULL.Modello relazionale - relazioni, chiavi e vincoli →, Ciclo di vita di un sistema informativo e analisi dei requisitiIl ciclo di vita di un sistema informativo ha le fasi studio di fattibilità, analisi dei requisiti, progettazione (dei dati e delle applicazioni), sviluppo, collaudo, esercizio e manutenzione; il modello a cascata procede in sequenza, quello a spirale itera per versioni. I requisiti sono funzionali (che cosa fa il sistema), non funzionali (come lo fa, es. tempi) e vincoli aggiuntivi imposti dai committenti; si raccolgono da frasi in linguaggio naturale, documentazione e applicazioni esistenti e si analizzano con frasi filtrate e glossario dei dati. La progettazione di una base di dati ha tre fasi: concettuale (schema ER, indipendente dal DBMS), logica (schema relazionale, per una classe di DBMS, con il carico applicativo) e fisica (strutture del DBMS scelto). Un modello è un insieme di costrutti, lo schema è la rappresentazione del mini-mondo (livello intensionale), l'istanza sono i dati (livello estensionale); un buono schema è completo, corretto, minimale e leggibile.Ciclo di vita di un sistema informativo e analisi dei requisiti →. Esempio dei tre livelli (università).
| Livello | Cosa contiene | Esempio |
|---|---|---|
| esterno | una vista per applicazione | VistaSegreteria(matricola, cognome, corso, voto), senza la data di nascita |
| logico | tabelle integrate | Studente(matricola, nome, cognome, data_nascita), Esame(matricola, corso, voto) |
| interno | strutture fisiche | file, pagine, CREATE INDEX idx_esame_corso ON Esame(corso) |
- Indipendenza fisica: creare o togliere l'indice cambia la velocità e non il testo delle query. Indipendenza logica: se
Studentesi divide inAnagraficaeIscrizione, si ridefinisce la vista e le applicazioni non cambiano. - File contro DBMS (da sapere a elenco): schema ricco (non solo alberi di directory), accesso efficiente senza conoscere la posizione, durabilità (non solo checksum e backup), niente ridondanza e incoerenza, isolamento e atomicità, nessun codice ad hoc.
- Dagli archivi al DB: archivi separati dànno duplicazione, cicli di vita e vincoli diversi, ottimizzazione solo locale; con il DBMS un unico DB serve tutte le applicazioni.
- Storia: 1970 Codd (relazionale), 1976 Chen (ER), 1977 System R (IBM, SQL), 1979 Oracle, 1983 DB2, PostgreSQL dal 1996, standard SQL ISO da SQL-86 a SQL:2016.
- Schema e istanza: lo schema (intensionale) sta nel catalogo come metadati; l'istanza (estensionale) sono i dati.