1.7. Operazioni sulle tabelle - Digilander

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