Basi di Dati: Corso di laboratorio



Documenti analoghi
Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Definizione di domini

Gestione delle tabelle

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Vincoli di Integrità

SQL Laboratorio di Basi di Dati a.a. 2002/2003

DBMS (Data Base Management System)

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Il linguaggio SQL: le basi

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

SQL - Tipi di dato Il linguaggio SQL

Il linguaggio SQL: DDL di base

SQL (STRUCTURED QUERY LANGUAGE)

Corso sul linguaggio SQL

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

SQL Sintassi Dei Comandi

Informatica per le discipline umanistiche 2 lezione 10

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

SQL. Alcune note sulla definizione dei dati

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Corso di Informatica (Basi di Dati)

Linguaggio SQL. Structured Query Language

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Archivi e Basi di Dati

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Lezione V. Aula Multimediale - sabato 29/03/2008

MAX, SUM, AVG, COUNT)

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Il Modello Relazionale

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Volumi di riferimento

Basi di Dati Relazionali

OR true null false true true true true null true null null false true null false NOT

Esercitazione 8 Mercoledì 21 gennaio 2015 (2 ore) DDL e progettazione

Corso di Basi di Dati A.A. 2013/2014

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Corso di Laboratorio di Basi di Dati

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

MySQL Database Management System

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

MODELLO RELAZIONALE. cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Laboratorio di Basi di Dati

Operazioni sui database

Basi di dati Il linguaggio SQL

Basi di dati Il linguaggio SQL

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Elena Baralis 2013 Politecnico di Torino 1

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro)

Introduzione a MySQL

Laboratorio di Basi di Dati e Web

Organizzazione degli archivi

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

Basi di dati e Sistemi informativi aziendali


Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

SQL PER LA DEFINIZIONE DI BASI DI DATI

Basi di Dati prof. Letizia Tanca

DUE GRUPPI DI COMANDI

Basi di Dati: Corso di laboratorio

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Il Modello Relazionale

Vincoli di integrità

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

Una metodologia di progettazione di applicazioni web centrate sui dati

2104 volume III Programmazione

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

User Tools: DataBase Manager

Il linguaggio SQL: query innestate

Lezione 8. Metadati, Viste e Trigger

OSSIF WEB. Manuale query builder

SQL: Concetti Base -Prima Parte-

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

MODELLO RELAZIONALE. Introduzione

Corso sul linguaggio SQL

SQL (STRUCTURED QUERY LANGUAGE)

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Istruzioni DML di SQL

Esame di Stato Istituto Tecnico Industriale Soluzione della Seconda Prova Indirizzo: INFORMATICA Tema: INFORMATICA Anno Scolastico:

Esercitazione 01: DDL e DML di base

Cardinalità e identificatori. Informatica. Generalizzazioni. Generalizzazioni. Generalizzazioni. Generalizzazioni

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Transcript:

Basi di Dati: Corso di laboratorio Lezione 2 Raffaella Gentilini 1 / 45

Sommario 1 Il DDL di SQL: Cancellazione ed Aggiornamento di una BD Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini 2 Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple 3 2 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Soppressione di uno schema (DROP SCHEMA) Per cancellare uno schema: DROP SCHEMA: Sintassi DROP SCHEMA <nome tabella> [{CASCADE RESTRICT}] I parametri opzionali CASCADE e RESTRICT RESTRICT: Lo schema viene eliminato solo se vuoto (default), ovvero se non contiene alcuna definizione di tabelle, domini o altri oggetti; CASCADE: Vengono cancellati sia i dati che lo schema riferiti. 3 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Soppressione di una tabella (DROP TABLE) Per cancellare una tabella: DROP TABLE: Sintassi DROP TABLE <nome tabella> [{CASCADE RESTRICT}] I parametri opzionali CASCADE e RESTRICT CASCADE: Gli oggetti che dipendono dalla tabella (vincoli, viste... ) vengono cancellati automaticamente RESTRICT: La tabella non puo venire cancellata se esistono oggetti dipendenti nella base di dati (default) 4 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Esempi (I) Si consideri lo schema relazionale visto nella lezione precedente: Example persona(id persona, codice fiscale, nome, cognome, data nascita) corso(id corso, id insegnante, sigla, crediti, descrizione) frequenza(id studente,id corso,voto): dove id studente ed id corso sono chiavi esterne su persona e corso Il comando: DROP TABLE corso; porta ad un errore perche la tabella frequenza dipende dalla tabella corso! 5 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Esempi (II) Example Il comando: DROP TABLE corso CASCADE; porta all effettiva cancellazione della tabella corso; la tabella frequenza non viene cancellata; vengono invece soppressi i vincoli di chiave esterna su corso in frequenza. 6 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Soppressione di un dominio (DROP DOMAIN) Per cancellare un dominio: DROP DOMAIN: Sintassi DROP DOMAIN <nome dominio> [{CASCADE RESTRICT}] I parametri opzionali CASCADE e RESTRICT RESTRICT: Il dominio viene eliminato solo se non e utilizzato nella definizione di alcun altro oggetto dello schema logico (default); CASCADE: Viene eliminato il dominio e vengono modificate le definizioni di ogni colonna che lo utilizzi: il tipo della colonna diventa quello espresso dalla definizione del dominio; alla colonna viene dato l eventuale valore di default del dominio; i vincoli di integrita del dominio diventano vincoli di colonna. 7 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Modifica di una Tabella (ALTER TABLE) ALTER TABLE: Sintassi ALTER TABLE <nome tabella> { ADD [COLUMN] <nome col><dominio> [<vincolo col>[... ]] DROP [COLUMN] <nome col> [{CASCADE RESRICT}] ALTER [COLUMN] <nome col> SET DEFAULT <valore> ALTER [COLUMN] <nome col> DROP DEFAULT ADD CONSTRAINT <vincolo tab> DROP CONSTRAINT <nome tab> [{CASCADE RESRICT}] } 8 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini ALTER TABLE: Aggiunta di Colonne Per aggiungere un nuovo attributo ad una tabella: ALTER TABLE <nome tabella> ADD [COLUMN] <nome col><dominio> [<vincolo col>[... ]] Example Aggiungere l attributo sesso alla tabella persona ALTER TABLE persona ADD COLUMN sesso CHAR; Se si aggiunge un attributo con vincolo NOT NULL bisogna prevedere un valore di default, che il sistema aggiungera automaticamente a tutte le tuple gia presenti: ALTER TABLE persona ADD COLUMN istruzione CHAR(10) NOT NULL DEFAULT diploma ; 9 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini ALTER TABLE: Soppressione di Colonne Per sopprimere un attributo da una tabella: ALTER TABLE <nome tabella> DROP [COLUMN] <nome col> [{CASCADE RESRICT}] Example Rimuovere l attributo sesso alla tabella persona ALTER TABLE persona DROP COLUMN sesso; I parametri opzionali RESTRICT (default) e CASCADE indicano come comportarsi in caso di dipendenze 10 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini ALTER TABLE: Modifica di Valori di Default Per modificare il valore di default di un attributo: ALTER TABLE <nome tabella> {ALTER [COLUMN] <nome col> SET DEFAULT <valore> ALTER [COLUMN] <nome col> DROP DEFAULT} Example Per l attributo sesso inserire come valore di default F ALTER TABLE persona ALTER COLUMN sesso SET DEFAULT F ; 11 / 45

ALTER TABLE: Aggiunta di Vincoli Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Per aggiungere un nuovo vincolo: ALTER TABLE <nome tabella> ADD CONSTRAINT <def vincolo> Example ALTER TABLE corso ADD CONSTRAINT creditomax CHECK (crediti 12); 12 / 45

ALTER TABLE: Cancellazione di Vincoli Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Sopprimere dei vincoli: Example ALTER TABLE corso DROP CONSTRAINT creditomax; Example ALTER TABLE persona DROP UNIQUE (nome, cognome); 13 / 45

ALTER TABLE: Estensioni PostgreSQL Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Rinomina di colonne La rinomina di colonne e un estensione di PostgreSQL allo standard SQL ALTER TABLE <nome tab> RENAME COLUMN <nome 1> TO <nome 2> Rinomina di tabella La rinomina di tabelle e un estensione di PostgreSQL allo standard SQL ALTER TABLE <nome tab> RENAME TO <nome> 14 / 45

Cancellazione di Schemi, Tabelle, e Domini Aggiornamento di Tabelle e Domini Modifica di un Dominio (ALTER DOMAIN) ALTER DOMAIN: Sintassi ALTER DOMAIN <nome dominio> { SET <clausola default> DROP DEFAULT ADD <vincolo dominio> DROP <vincolo dominio>} 15 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Data Manipulation Language (DML) Istruzioni del DML Le istruzioni del DML di SQL sono: Modifica INSERT: Inserisce nuove tuple nel DB UPDATE : Cancella tuple dal DB DELETE : Modifica tuple nel DB Interrogazione SELECT: Esegue interrogazioni (query) sul DB 16 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple INSERT INTO INSERT INTO: Sintassi INSERT INTO <nome tab> [ (<nome col> [,... ]) ] VALUES [ (<valori> [,... ]) ] La lista dei valori [ (<valori> [,... ]) ] deve corrispondere con la lista delle colonne <nome tab> [ (<nome col> [,... ]) ] La lista degli attributi si puo omettere, nel qual caso vale l ordine con cui sono stati definiti le parole chiave DEFAULT e NULL possono prendere il posto di <valori> Se la lista non include tutti gli attributi, i restanti assumono valore NULL o il valore di default (se specificato) 17 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Inserimento di Tuple Example Si consideri ad esempio l inserimento di dati in una tabella con schema: prodotto(cod,nome,prezzo) I nomi degli attibuti possono essere omessi se si conosce l ordine. Ad esempio, le due espressioni sotto equivalenti: INSERT INTO prodotto(cod,prezzo,nome) VALUES (123,3.40, pc ); INSERT INTO prodotto VALUES (123, pc,3.40); Se alcuni valori sono nulli, possono essere omessi. Ad esempio, le due espressioni sotto equivalenti: INSERT INTO prodotto VALUES (123,3.40); INSERT INTO prodotto VALUES (123,3.40, NULL); 18 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Inserimento di Tuple via Queries E anche possibile inserire in una tabella delle tuple che provengono dal risultato di una query. La sintassi e la seguente: INSERT INTO <nome tab> [ (<nome col> [,... ]) ] VALUES <select query > Tratteremo piu avanti la scrittura di una query mediante il costrutto SELECT del DML di SQL. 19 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Cancellazione di Tuple DELETE: Sintassi DELETE FROM <nome tab> [ WHERE <predicato>] L istruzione DELETE puo far uso di una condizione per specificare le tuple da cancellare; Tutte le tuple per cui il predicato <predicato> ha valore vero vengono cancellate; In assenza della clausola WHERE, vengono eliminate tutte le tuple della tabella a cui si fa riferimento 20 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Cancellazione di Tuple Example 1 Eliminare dall iscrizione ad un determinato corso, gli studenti che non hanno ottenuto un voto pari almeno a 10: DELETE FROM frequenza WHERE voto IS NOT NULL AND voto < 10 2 Eliminare i corsi con meno di tre crediti: DELETE FROM corso WHERE crediti < 3 Che succede se la cancellazione porta a violare il vincolo di integrita referenziale? Ad esempio, che succede agli studenti che frequentavano i corsi con meno di tre crediti?... lo vediamo tra posco... 21 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Aggiornamento di Tuple UPDATE: Sintassi UPDATE <nome tab> SET <nome col> = { <espressione> <select query>} [,... ] WHERE <predicato> I valori delle colonne specificate sono modificati in tutte le tuple che soddisfano il predicato <predicato> <espressione> puo far riferimento ai valori attuali delle tuple in via di modifica le parole chiave NULL e DEFAAULT costituiscono espressioni valide 22 / 45

Inserimento di Tuple Cancellazione di Tuple Modifica di Tuple Aggiornameno di Tuple Example Aggiungere un punto a tutti i voti nella tabella frequenza UPDATE frequenza SET voto = voto + 1 WHERE voto IS NOT NULL Anche l update puo portare a violare vincoli di integrita referenziale 23 / 45

Violazione dei Vincoli e politiche di Reazione Anziche lasciare l programmatore il compito di garantire che a fronte di cancellazioni e modifiche della BD i vincoli di integrita referenziale siano rispettati: si possono specificare opportune politiche di reazione in fase di definizione degli schemi 24 / 45

Example Tabella interna impiegato: matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi Vendite Tabella esterna diparimento nome dipartimento sede telefono Acquisti Roma NULL Vendite Perugia 075558767 25 / 45

Violazioni operando sulla tabella interna Si possono introdurre violazioni modificando il contenuto della tabella interna in due modi: 1 modificando il valore dell attributo referente 2 inserendo una nuova tupla per queste operazioni SQL non offre alcun supporto: le operazioni vengono semplicemente impedite 26 / 45

Esempio Example Tentativo di inserimento nella tabella interna che causa violazione: matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi Vendite A003 Caligola Verdi Marketing nome dipartimento sede telefono L inserimento viene impedito Acquisti Roma NULL Vendite Perugia 075558767 27 / 45

Violare i vincoli operando sulla tabella esterna Diverse alternative per rispondere a violazioni generate da modifiche sulla tabella esterna (o tabella master) La tabella interna (o slave) deve adeguarsi alle modifiche che avvengono nella tabella master Le violazioni possono avvenire per: 1 Modifiche dell attributo riferito 2 Cancellazione di tuple nella tabella master 28 / 45

Politiche di reazione per modifica attributo riferito Cascade La politica cascade prevede che in caso di modifica dell attributo riferito: il nuovo valore dell attributo della tabella esterna viene riportato su tutte le corrispondenti righe della tabella interna 29 / 45

Esempio (I) Example modifica di un valore dell attributo nome dipartimento nella tabella esterna: nome dipartimento sede telefono Acquisti Roma NULL Vendite Perugia 075558767 nome dipartimento sede telefono Acquisti Roma NULL VenditeSuccursale Perugia 075558767 30 / 45

Esempio (II) Example Politica di reazione cascade: matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi Vendite matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi VenditeSuccursale 31 / 45

Politiche di reazione per modifica attributo riferito Set Null La politica set null prevede che in caso di modifica dell attributo riferito: all attributo referente (nella tabella interna) venga assegnato valore nullo al posto del valore modificato nella tabella esterna 32 / 45

Esempio (I) Example modifica di un valore dell attributo nome dipartimento nella tabella esterna: nome dipartimento sede telefono Acquisti Roma NULL Vendite Perugia 075558767 nome dipartimento sede telefono Acquisti Roma NULL VenditeSuccursale Perugia 075558767 33 / 45

Esempio (II) Example Politica di reazione set null: matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi Vendite matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi NULL 34 / 45

Politiche di reazione per modifica attributo riferito Set Default La politica set default prevede che in caso di modifica dell attributo riferito: all attributo referente (nella tabella interna) venga assegnato un valore di default al posto del valore modificato nella tabella esterna 35 / 45

Esempio (I) Example modifica di un valore dell attributo nome dipartimento nella tabella esterna: nome dipartimento sede telefono Acquisti Roma NULL Vendite Perugia 075558767 nome dipartimento sede telefono Acquisti Roma NULL VenditeSuccursale Perugia 075558767 36 / 45

Esempio (II) Example Politica di reazione set default: matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi Vendite matricola nome cognome dipartimento A0001 Romolo Neri Acquisti A0002 Remo Bianchi TBA 37 / 45

Politiche di reazione per modifica attributo riferito No Action La politica no action prevede che in caso di modifica dell attributo riferito: Il sistema non innesca alcuna reazione speciale. Questo e il valore di default e corrisponde semplicemente a rifiutare modifiche sui dati che portano alla violazione dell integrita refernziale. 38 / 45

Politiche di reazione per cancellazione tupla tabella esterna SQL mette a disposizione le stesse politiche di reazione: 1 cascade: tutte le righe della tabella interna corrispondenti alla riga cancellata vengono cancellate 2 set null: all attributo referente viene assegnato il valore nullo al posto del valore presente nella riga cancellata dalla tabella esterna 3 set default: all attributo referente viene assegnato un valore di default al posto del valore presente nella riga cancellata dalla tabella esterna 4 no action: il sistema non innesca alcuna azione speciale. Questo e il valore di default e corrisponde semplicemente a rifiutare cancellazioni sui dati che violino l integrita referenziale. 39 / 45

Definizione dei vincoli interelazionali e specifica delle politiche reazione La specifica della politica di reazione da adottare si pone nella definizione del vincolo di integrita : in una clausola di tipo ON DELETE (per le cancellazioni), oppure in una clausola di tipo ON UPDATE (per gli aggiornamenti). Vincoli Interelazionali di Colonna: Sintassi REFERENCES <nome tab> [<nome col>] [{ON DELTE ON UPDATE} { NO ACTION CASCADE SET NULL SET DEFAULT}] 40 / 45

Definizione dei vincoli interelazionali e specifica delle politiche reazione Vincoli Interelazionali di Tabella: Sintassi FOREIGN KEY (<nome col> [,... ] ) REFERENCES <nome tab> (<nome col> [,... ] ) [{ON DELTE ON UPDATE} { NO ACTION CASCADE SET NULL SET DEFAULT}] 41 / 45

Sommario A titolo di ricapitolazione, vediamo come definire in PostgreSQL uno script per la generazione della BD corrispondente allo schema relazionale: persona (id persona, codice fiscale, nome, cognome, data nascita) corso (id corso, id insegnante, sigla, crediti, descrizione) frequenza (id studente, id corso, voto) introdotto nell esercitazione precedente. In particolare: il nostro script prevedera la cancellazione preventiva dalla base di dati le tabelle persona,corso,frequenza, se presenti; si definiranno opportune politiche di reazione alla modifica/cancellazione dei dati. 42 / 45

Definizione di Script DROP TABLE persona; DROP TABLE corso; DROP TABLE frequenza; CREATE TABLE persona ( id persona INTEGER PRIMARY KEY, codice fiscale CHAR(11) UNIQUE, nome VARCHAR(40) NOT NULL, cognome VARCHAR(40) NOT NULL, data nascita DATE); CREATE TABLE corso ( id corso INTEGER PRIMARY KEY, id insegnante INTEGER REFERENCES persona (id persona) ON DELETE SET NULL, sigla CHAR(7) UNIQUE NOT NULL, crediti INTEGER CHECK(crediti > 0 OR crediti IS NULL), descrizione TEXT); 43 / 45

Definizione di Script CREATE TABLE frequenza ( id studente INTEGER REFERENCES persona ON DELETE CASCADE, id corso INTEGER REFERENCES corso ON DELETE CASCADE, voto INTEGER CHECK ( voto > 0 AND voto 30 ), PRIMARY KEY (id studente,id corso)); 44 / 45

Bibliografia Bibliografia ed Approfondimenti R.A.Elmasri, S.B. Navathe. Sistemi di Basi di Dati Fondamenti: Capitolo 8 (8.2). Capitolo 5 (Data Definition) e Capitolo 6 (Data Manipulation) del manuale di PostgreSQL (http://www.postgresql.org/docs/manuals/) 45 / 45