1. CREATE TABLE
1.1. comando SQL per creare tabella corrisponde a schema relazionale R = (A1, A2, ...An)
1.2. CREATE TABLE <nome tabella> ( <nome attributo> <tipo attributo>, <nome attributo> <tipo attributo>, ..., <integrity constraint>, <integrity constraint> )
1.2.1. al momento della creazione si specificano attributi e vincoli
1.2.2. vincoli possono essere aggiunti anche dopo con ALTER TABLE
1.3. CREATE TABLE personale ( nr_passaporto integer, nome varchar(100), cognome varchar(100) UNIQUE, assunzione date, ditta varchar(100) NOT NULL, PRIMARY KEY (nr_passaporto), FOREIGN KEY ditta references ditte (nome) );
2. domain constraints
2.1. tipo di un attributo
2.1.1. char
2.1.2. varchar
2.1.3. integer
2.1.4. date
2.1.5. ...
2.2. CHECK (predicato)
2.2.1. limita ulteriormente valori ammessi
2.2.2. CHECK (stipendio > 3000)
2.2.3. CHECK non solo su singolo attributo ma altri attributi della tabella o altre tabelle
2.2.4. CHECK (stipendio < 6000 OR funzione = "manager")
2.3. UNIQUE
2.3.1. il valore dell'attributo non può avere lo stesso valore in due tuple diverse
2.4. NOT NULL
2.4.1. attributo deve avere un valore
3. cosa sono e utilità
3.1. regole che devono valere sempre
3.2. definite dal database designer
3.3. fatte rispettare dal DBMS
3.4. per mantenere consistenza dati
4. referential integrity
4.1. assicurano che valori che sono comuni a varie tabelle rimangano consistenti
4.2. primary key
4.2.1. identifica univocamente una tupla
4.2.2. automaticamente NOT NULL e UNIQUE
4.2.3. singolo attributo o combinazione di n attributi
4.3. foreign key
4.3.1. lega il valore di una tabella alla primary key di un'altra tabella
4.3.2. FOREIGN KEY <attributo questa tabella > references <altra tabella> (<attributo in altra tabella>)
5. azioni
5.1. INSERT
5.1.1. se provo a inserire una tupla con un valore nella foreign key che non esiste nella primary key della tabella corrispondente, INSERT fallisce
5.1.2. non esiste ON INSERT CASCADE
5.2. DELETE
5.2.1. se provo a eliminare una tupla la cui primary key è referenziata da qualche altra tupla in altre tabelle, DELETE fallisce
5.2.2. a meno che ...
5.3. UPDATE
5.3.1. se provo a modificare il valore di una FOREIGN key con un valore che non esiste nella primary key della tabella corrispondente, UPDATE fallisce
5.3.2. se provo a modificare il valore di una PRIMARY key referenziata da qualche altra tupla in altre tabelle, UPDATE fallisce
5.3.3. a meno che ...
6. cascadind actions
6.1. se non specificato altrimenti DBMS blocca azione che infrange vincolo
6.2. si specificano nel constraint FOREIGN KEY
6.3. ON DELETE CASCADE
6.3.1. DELETE si propaga e vengono eliminate tuple che referenziano a primary key eliminata
6.4. ON UPDATE CASCADE
6.4.1. UPDATE si propaga e vengono modificate tutte le tuple che referenziano alla primary key modificata