Passa al contenuto principale

Manuale dell’Archivista

Nel Volume 1 i dati di un programma sopravvivono allo spegnimento grazie a un file JSON. Il Manuale dell’Archivista comincia dove quel file smette di bastare: quando i dati crescono, quando le domande cambiano ogni settimana, quando a scrivere nello stesso archivio sono in tanti. A quel punto i dati hanno bisogno di un posto proprio, progettato con un metodo e interrogato con un linguaggio fatto apposta. Quel posto è un database, e questo volume insegna a progettarlo, a costruirlo, a interrogarlo e a collegarlo a un programma.

Il volume è nato per la quinta dell’Istituto Tecnico Tecnologico, articolazione Informatica, dove le basi di dati sono materia della seconda prova dell’Esame di Stato, e non presuppone nessuna conoscenza di database né di SQL. Gli esempi sono tutti ambientati nel mondo di Harry Potter: studenti, case, professori, la biblioteca di Hogwarts e i vault della Gringott. Il linguaggio di programmazione è Python, scelto per le ragioni che spiega la pagina Perché Python?.

Obiettivi​

Le competenze che il volume costruisce sono tre: progettare la base di dati di un’applicazione a partire dai requisiti, motivando ogni scelta di progetto, che è il compito della seconda prova; verificare una query scritta da altri, o generata da un assistente, eseguendola e confrontando il risultato con la domanda di partenza; decidere dove far rispettare una regola sui dati, se nel programma o nel database, e come difenderli da chi li vuole leggere o alterare.

Conoscenze e abilità, divise per area:

AreaConoscenzeAbilità
ModellazioneEntità, attributi, associazioni, cardinalità, chiavi; il diagramma ERRicavare un diagramma ER da un testo che descrive un dominio
Schema relazionaleTabelle, chiavi primarie ed esterne, integrità referenziale, il valore NULLTradurre un diagramma ER in uno schema relazionale senza perdere informazione
NormalizzazioneAnomalie, dipendenze funzionali, forme normali fino alla terzaRiconoscere le anomalie di uno schema e normalizzarlo fino alla terza forma normale
Definizione dei datiCREATE TABLE, tipi, vincoli di colonna, chiavi esterne, INSERTCreare un database con i vincoli che lo schema richiede; popolarlo rispettando le dipendenze fra le tabelle
InterrogazioneSELECT, filtri, ordinamento, join, aggregazioni, sottoquery, viste, indiciScrivere interrogazioni su più tabelle e prevederne il risultato prima di eseguirle
TransazioniUPDATE e DELETE, transazioni, proprietà ACIDRaggruppare in una transazione le modifiche che devono riuscire tutte insieme
SicurezzaPermessi in un DBMS multiutente, SQL injection, backup, dati personaliRiconoscere una query vulnerabile e correggerla
Database e programmiIl modulo sqlite3, cursori, query parametrizzate, corrispondenza fra righe e oggettiScrivere un programma Python che legge e modifica un database usando solo query parametrizzate

Come è costruito​

Il volume ha 13 capitoli, raggruppati qui in quattro parti. Un solo esempio li attraversa tutti: lo schema del database di Hogwarts, che nasce al capitolo 2 come diagramma, diventa uno schema di tabelle al capitolo 3, viene corretto al 4, costruito al 5 e interrogato dal 6 in poi. Ogni capitolo ne usa la porzione che gli serve.

Prima del codice: il problema e il progetto​

  1. Perché un database. Un registro salvato in JSON smette di funzionare appena le domande cambiano, e la stessa informazione scritta in due posti finisce per contraddirsi. Il capitolo mostra che cosa fa un DBMS al posto del programma, e lo fa vedere su un database vero prima di insegnare a interrogarlo. Le lezioni: I dati che non stanno più nel programma, La stessa informazione scritta due volte, Che cosa fa un DBMS al posto tuo.
  2. Modellare il dominio. Entità, attributi, associazioni, cardinalità e chiavi, ricavate da un testo con un metodo ripetibile. Si lavora su descrizioni scritte in italiano, non su una sintassi. Le lezioni: Entità e attributi, Le associazioni, Le cardinalità, Identificare senza ambiguità: le chiavi, Le associazioni molti a molti, Leggere un dominio e ricavarne il modello, Generalizzazioni.
  3. Dal modello allo schema. Le regole che traducono il diagramma in tabelle senza perdere informazione, le chiavi esterne e il valore NULL.
  4. Normalizzare. Uno schema sbagliato funziona, finché una cancellazione non porta via un dato che non c’entrava. Le dipendenze funzionali dicono quale forma normale manca e come ripararla.

Costruire e interrogare​

  1. Costruire il database. CREATE TABLE, i tipi, i vincoli, le chiavi esterne dichiarate, i primi INSERT. Da questo capitolo ogni blocco SQL si esegue nella pagina.
  2. Interrogare una tabella. SELECT, i filtri, l’ordinamento e gli indici.
  3. Interrogare più tabelle. Il prodotto cartesiano e le join che ricompongono ciò che la normalizzazione aveva separato, comprese le righe che una join scarta senza avvisare.
  4. Aggregare. Contare, sommare, raggruppare e filtrare i gruppi, fino all’ordine in cui il DBMS valuta davvero una query.
  5. Query dentro query. Le sottoquery per le domande a due tempi e le viste per dare un nome a una domanda.

Modificare e proteggere​

  1. Modificare i dati. UPDATE e DELETE, poi le transazioni: un trasferimento di galeoni fra due vault della Gringott deve riuscire per intero o non avvenire affatto.
  2. Proteggere i dati. Chi può fare cosa in un database con più utenti, la SQL injection e l’unica difesa che regge, i backup e gli obblighi che vengono con i dati personali.

Fuori dal database​

  1. Il database da un programma. Python si connette al database, manda query parametrizzate e trasforma le righe in oggetti del Volume 2. Il modulo sqlite3 non funziona nel browser, quindi in questo capitolo il codice si legge nella pagina e si esegue in laboratorio.
  2. Oltre il relazionale. Gli assistenti che traducono una domanda in SQL e gli errori plausibili che commettono, i dati che non stanno bene in una tabella, la ricerca per somiglianza.

Il progetto finale del volume, un’applicazione completa con il suo database, sta nella Biblioteca dell’Apprendista, insieme agli esercizi.

A che punto è il volume​

10/ 64 lezioni16%
Lezioni pubblicate su quelle previste dal programma del volume.