1.7. Operazioni sulle tabelle 1.7.1. Introduzione Una volta che il database sia stato progettato, si passa al suo popolamento iniziale, all'aggiornamento ed alle interrogazioni (vedi RICHIAMO). In questa unità didattica tratteremo essenzialmente di popolamento ed aggiornamento, nella successiva di interrogazioni. Il popolamento costruisce una istanza del database, sulla base dello schema definito in fase di progettazione e consiste nell'immissione di un certo numero di record nelle tabelle. L'aggiornamento coglie due aspetti: l'aggiornamento per correzione o evoluzione dei dati (ci possono essere errori, ma la realtà cui si riferisce il database è anche in evoluzione: in un anagrafica ci sono immissioni e cancellazioni di individui, in un archivio di materiali i prezzi cambiano e così via). A seconda delle applicazioni, popolamento e aggiornamento si effettuano in forma interattiva o pre-programmata (batch). In questa unità didattica tratteremo essenzialmente la forma interattiva, riservando agli approfondimenti alcuni riferimenti a procedure di tipo batch. RICHIAMO: § 1.1.5 - Ciclo di vita di una base di dati 1.7.2. Inserimento e aggiornamento di record Le principali operazioni di manipolazione dati di un database relazionale che ne alterano lo stato sono quelle di inserimento, aggiornamento e cancellazione di un record, operazioni che avvengono tipicamente in forma interattiva. Per inserimento si intende l'accodamento ad una tabella di nuove righe; esso si ottiene principalmente mediante digitazione dei dati in coda alla tabella, secondo le specifiche del singolo DBMS. In particolare, come si è accennato, l'inserimento può avvenire attraverso un input grezzo in modalità Visualizzazione foglio dati (vedi RICHIAMO) oppure attraverso una maschera (vedi RICHIAMO). Del tutto simile è la procedura per l'aggiornamento: occorre posizionarsi sul record da aggiornare e riscrivere nei campi interessati. Si ricorda che in ogni caso il DBMS sviluppa tutti i controlli di validità ed integrità dei dati, inviando all'utente messaggi generati dallo stesso DBMS oppure programmati dal progettista del database (vedi RICHIAMO); l'utente, inoltre, è aiutato e guidato da un buon progetto delle maschere. RICHIAMO: § 1.6.4 – Input-output grezzo e formattato RICHIAMO: § 1.6.5 – Le maschere RICHIAMO: § 1.6.2 – Vincoli di dominio e controlli di validità 1.7.2.1. Inserimento e aggiornamento in SQL (approfondimento) 1. Inserimento Per l'inserimento in SQL esistono alcune possibilità distinte. Se ne mette in evidenza la più semplice: INSERT INTO <nome tabella> <elenco di colonne> VALUES (<elenco di valori>) ove - l'elenco di colonne può mancare, ed allora si intende che vanno inserite tutte le colonne - l'elenco di valori (del tipo appropriato) è ordinatamente quello dei valori che devono assumere i campi della tabella. 2. Aggiornamento L'aggiornamento programmato si ottiene in SQL con una frase del tipo: UPDATE <nome tabella> SET <nome campo> = <espressione> [, <nome campo> = <espressione>] ..... [ WHERE <espressione logica> ] dove nelle parentesi quadre sono espresse clausole opzionali: i nomi di campo possono essere uno solo o più di uno e la clausola WHERE può mancare. Nella forma più estesa, l'istruzione opera come segue: per le righe per le quali l'espressione logica è vera, assegna ai campi elencati il corrispondente valore derivante dall'espressione calcolata; quest'ultima può essere semplicemente una costante (si pensi ad esempio all'aggiornamento dell'aliquota IVA derivante da una nuova legge), può essere calcolata in funzione del campo stesso (si pensi ad un aumento percentuale del costo di una categoria di prodotti) oppure può essere funzione qualsiasi anche di altri campi. 1.7.3. Cancellazione di record Per cancellazione si intende l'eliminazione da una tabella di alcune righe. In linguaggio interattivo la cancellazione viene realizzata con apposita istruzione (p.e. DELETE, ELIMINA a menu, tasto CANC) che si applica al record corrente: occorre dunque raggiungere il record, posizionarsi su di esso e quindi cancellarlo. È da notare che la cancellazione di un record da una tabella oppure della tabella intera produce, in genere, una cancellazione logica, ad esempio mediante apposizione di un segnale di spunta (flag). Ciò per evitare le pesanti operazioni di riorganizzazione fisica degli archivi conseguenti l'eliminazione fisica, che avvengono invece di tanto in tanto. Peraltro la complessità del database in genere non consente il ripristino di quanto precedentemente cancellato (operazione detta anche di undelete). Si ricorda che il DBMS controlla che non siano cancellati record la cui cancellazione faccia venir meno il vincolo di integrità referenziale (vedi RICHIAMO). RICHIAMO: § 1.3.2 - Relazioni “uno a molti” fra tabelle. L'integrità referenziale 1.7.3.1. Cancellazione in SQL (approfondimento) In SQL, la cancellazione di un record si realizza con una istruzione del tipo: DELETE FROM <nome tabella> [ WHERE <espressione logica> ] e comanda la cancellazione dalla tabella <nome tabella> di tutte le righe per le quali il predicato è vero (se la clausola WHERE manca, vengono cancellate tutte le righe). 1.7.4. Modifica dello schema del database Uno dei vantaggi del database relazionale rispetto ai vecchi modelli di database è la sua flessibilità: una volta definito lo schema, questo può anche successivamente essere modificato. Si possono dunque aggiungere o eliminare campi o tabelle, modificare tipi, dimensioni o altre caratteristiche dei campi, aggiungere o eliminare relazioni fra tabelle. Il DBMS, peraltro, vigila su ogni modifica in modo simile di quanto fa a seguito della immissione e della cancellazione di record, mantenendo sotto controllo: • • • la compatibilità fra i valori dei dati e il loro tipo, l'integrità referenziale, la validità dei dati rispetto all'integrità di dominio. Il DBMS, quindi, segnala di solito all'utente eventuali incompatibilità che scaturiscono da questi controlli e lascia l'utente libero anche di accettare le modifiche proposte, che peraltro in questi casi possono comportare: • • la perdita di dati (non sono concepibili valori non compatibili con il tipo), il superamento dei controlli di validità (l'utente è informato che a causa della modifica alcuni dati potrebbero non rispettare più i controlli) Il controllo per l'integrità referenziale è di solito più rigido, per l'importanza che questa caratteristica ha nel contesto dei database relazionali: non solo, come si è visto, è vietato eliminare un record della tabella primaria (vedi RICHIAMO), ma è anche vietato cancellare un campo appartenente ad una relazione: occorre prima eliminare la relazione. RICHIAMO: § 1.7.3 - Cancellazione di record