2. Data Definition Language

Viste

Tramite le viste possiamo creare delle «tabelle virtuali»

Sintassi:

CREATE VIEW NomeVista(ListaAttributi) AS QuerySQL

Creazione di Tabelle

Ex.
CREATE TABLE Impiegato (
	Matricola CHAR(6),
	Nome VARCHAR(20) NOT NULL,
	Cognome VARCHAR(20) NOT NULL,
	CF CHAT(16),
	Qualifica VARCHAR(20) DEFAULT "Impiegato",
	Stipendio FLOAT
)

Per le colonne che non accettano valori nulli è necessario specificare NOT NULL.

E’ possibile indicare un valore di default per ogni colonna, utilizzando il costrutto DEFAULT valore.

Oltre al nome e al dominio degli attributi, si possono specificare altri vincoli che vanno a dettagliare ulteriormente le relazioni.

I vincoli possono essere:

I vincoli si indicano con specifici costrutti posizionati:

Vincoli Intra-Relazionali

I principali vincoli intra-relazionali (relativi a singole tabelle) sono:

CREATE TABLE Impiegato (
	Matricola CHAR(6) PRIMARY KEY,
	Nome VARCHAR(20) NOT NULL,
	Cognome VARCHAR(20) NOT NULL,
	CF CHAT(16) UNIQUE,
	Qualifica VARCHAR(20) DEFAULT "Impiegato",
	Stipendio FLOAT CHECK(Stipendio>0)
)

Vincoli Inter-Relazionali

I vincoli inter-relazionali più significativi sono i vincoli di integrità referenziale (o vincoli di chiave esterna).

Questi vincoli creano un legame tra i valori di un attributo della tabella che stiamo creando (interna) e i valori di un attributo di un’altra tabella (esterna).

I vincoli di integrità referenziale si possono indicare:

Attenzione:

Si devono definire (nella tabella interna) le politiche ON UPDATE e ON DELETE per specificare i comportamenti da seguire a seguito di modifiche o eliminazioni di tuple nella tabella esterna.

Possibili valori (ON UPDATE ... , ON DELETE ... ):

CREATE TABLE Studente(
	Matricola INT(3) PRIMARY KEY,
	Nome VARCHAR(32) NOT NULL,
	Cognome VARCHAR(32) NOT NULL,
	Comune CHAR(5) REFERENCES Comune(Codice) ON UPDATE CASCADE ON DELETE NO ACTION
)

Asserzioni

Le asserzioni permettono di creare vincoli generici e di disaccoppiare la definizione di vincoli dalla creazione delle tabelle. I vincoli espressi con il costrutto CREATE ASSERTION ... CHECK possono essere sia intra-relazionali che inter-relazionali.

Esempio: la tabella PAZIENTIINCURA deve contenere al massimo 20 tuple.

CREATE ASSERTION MaxPazienti CHECK(
	20 <= ( SELECT COUNT(*) 
					FROM PazientiInCura)
)