Vincoli nel DDL per modificare gli oggetti-AD10

I vincoli nel Data Definition Language (DDL)

Esso è un linguaggio che permette di creare, modificare o eliminare gli oggetti in un database quindi di agire sullo schema di database. Permette inoltre di specificare vincoli, sia a livello di tupla (o “riga”) che a livello di tabella.
Sono i comandi DDL a definire la struttura del database e quindi l’organizzazione logica dei dati in esso contenuti, ma non fornisce gli strumenti per modificare i valori assunti dai dati o per interrogare i dati stessi per il quale si usano rispettivamente il Data Manipulation Language e il Data Query Language. Il DDL è utilizzato sia in fase di progettazione, sia in fase di ristrutturazione del database. Per agire sulla struttura del database l’utente deve avere i permessi necessari, assegnati tramite il Data Control Language (DCL). Il linguaggio DDL compone una parte del linguaggio SQL.

Qualità dei dati

Oltre a definire gli attributi di una tabella è possibile definire dei vincoli.  La tabella può essere creata vuota (vedi la create table semplice) oppure può essere creata e riempita di dati (vedi la create table mediante select): nel secondo caso la struttura della tabella è definita implicitamente dal numero di colonne (o campi) estratti dalla select, dal tipo di dato di ciascuna colonna e dai nomi delle rispettive colonne estratte dalla select (o dagli alias ad esse applicati). Nel caso in cui la tabella venga popolata in fase di creazione, la transazione viene automaticamente conclusa da un comando di COMMIT.

Nell’ambito dei database il tipo di dato,  indica il valore semantico da attribuire ad una variabile , è un concetto essenziale nella creazione di una tabella. Più precisamente esso consente di identificare la tipologia di valori (ad esempio una stringa di caratteri, un numero o una data) che ogni colonna potrà contenere. Esiste un “valore speciale”, che un dato di qualsiasi tipo può assumere: si tratta di NULL. Sul suo significato preciso esistono diverse discussioni a livello accademico. Secondo alcuni NULL rappresenta l’assenza di un valore, mentre secondo altri rappresenta un valore sconosciuto. E’ importante la correttezza, completezza, attualità dei dati.

• In molte applicazioni reali i dati sono di scarsa qualità (dal 5% al 40% di dati scorretti)

• Per aumentare la qualità dei dati si usano:

– Regole di integrità
-Manipolazione dei dati tramite programmi predefiniti (procedure e trigger).

Vincoli di integrità generici

Un vincolo di integrità dei dati è una proprietà che deve essere soddisfatta dalle istanze di una base di dati. Ogni vincolo può essere visto come un predicato che può assumere il valore vero o falso: l’istanza soddisfa il vincolo, se il predicato assume il valore vero, viceversa se assume valore falso. In generale a uno schema di base di dati si associa un insieme di vincoli e si considerano corrette (lecite o ammissibili) solo le istanze che soddisfano tutti i vincoli predefiniti.

I Predicati che devono essere veri se valutati su istanze corrette (legali) della base di dati essi sono espressi in due modi.

– negli schemi delle tabelle
– come asserzioni separate.

La clausola check può essere usata per esprimere vincoli arbitrari nella definizione dello schema sfruttando tutto il potere espressivo di SQL. Il vincolo è violato se esiste almeno una tupla che rende falsa la <condizione>.
• Sintassi:
check (Condizione)
Condizione è ciò che può apparire in una clausola where (comprese le query nidificate)
Es., la definizione di un attributo Superiore nello schema della tabella IMPIEGATO:

Superiore character(6)
check (Matr like “1%” or

Dipart = (select Dipart

from Impiegato I
where I.Matr = Superiore)

Esempio: gestione magazzino

vincoli generici

Esempio: definizione di Magazzino

create table Magazzino as

( CodProd char(2) primary key,
QtaDisp integer not null

check(QtaDisp > 0),

QtaRiord integer not null
check(QtaRiord > 10))

Asserzioni

Le asserzioni permettono la definizione di vincoli al di fuori della definizione delle tabelle, sono utili in molte situazioni (es., per esprimere vincoli interrelazionali di tipo generico). Una asserzione associa un nome a una clausola check.
sintassi:
create assertion NomeAsserzione check (Condizione)
• Es., la tabella IMPIEGATO deve contenere almeno una tupla:

create assertion SempreUnImpiegato
check (1 <= (select count(*)
from Impiegato))

Significato dei vincoli

La verifica dei vincoli può essere:
a: immediate (immediata):

la loro violazione annulla l’ultima modifica

b: deferred (differita):

la loro violazione annulla l’intera applicazione.

significato dei vincoli

Modifica dinamica del significato dei vincoli

• Ogni vincolo è definito di un tipo (normalmente”immediate”)
•L’applicazione può modificare il tipo iniziale dei vincoli:

set constraints immediate
– set constraints deferred

Tutti i vincoli vengono comunque verificati, prima o poi.