La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Informatica (Basi di Dati)

Presentazioni simili


Presentazione sul tema: "Corso di Informatica (Basi di Dati)"— Transcript della presentazione:

1 Corso di Informatica (Basi di Dati)
Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati Lucidi del Corso di Basi di Dati 1, Prof. Carlo Batini, Laurea in Informatica, AA

2 Introduzione Cos’è SQL (Structured Query Language)?
E’ un linguaggio che consente di gestire le Basi di Dati relazionali. Esso è contemporaneamente un: Data Definition Language (DDL), cioè consente di creare lo schema della Base di Dati (e delle relazioni) Data Manipulation Language (DML), cioè consente di manipolare le istanze della Base di Dati

3 Introduzione Vedremo, in questa lezione, come SQL (parte DDL) permetta di: definire un dominio (DOMAIN) creare uno schema di Base di dati (SCHEMA) creare uno schema di relazione (TABLE) effettuare modifiche degli schemi di Base di Dati e di relazione Nota Bene: in questa e nelle successive slide le parole scritte in maiuscolo (salvo indicazione contraria) sono parole appartenenti al linguaggio SQL

4 Definizione dei domini
Un dominio è fondamentalmente un tipo di dato (data type). Il DDL di SQL prevede: domini elementari predefiniti domini definiti dall’utente (di cui non ci occuperemo…) Nel seguito verranno presentati i domini elementari indicandone la sintassi SQL.

5 I domini elementari I domini elementari di SQL sono:
CHAR(n) o CHARACTER(n)  per stringhe di n caratteri (anche uno solo) VARCHAR(n)  per stringhe di lunghezza variabile BIT(n)  per stringhe di n bit (anche uno solo), usati per specificare una sequenza di n proprietà tramite flag (0 per proprietà falsa e 1 per proprietà falsa)

6 I domini elementari I domini elementari di SQL sono:
BOOLEAN  per singoli valori booleani (restrizione di BIT(n)) INTEGER e SMALLINT  per gli interi DECIMAL(i,j) o NUMERIC(i,j)  per i decimali; i il numero di cifre significative e j il numero di cifre dopo la virgola (es. se ho un dominio DECIMAL(5,1), corrisponde a 3453,2)

7 I domini elementari I domini elementari di SQL sono:
FLOAT, DOUBLE PRECISION e REAL  per i numeri in virgola mobile (mantissa + esponente) DATE  per la data strutturata in YEAR, MONTH, DAY TIME  per l’ora strutturata in HOUR, MINUTE, SECOND TIMESTAMP  per data + ora

8 Creazione di uno schema di Base di Dati
La sintassi SQL per creare uno schema di Base di Dati è la seguente: CREATE SCHEMA <schemaName> …seguito dalle definizioni delle tabelle (con domini e vincoli) che costituiscono la Base di Dati. <schemaName> è il nome che si vuole associare alla Base di Dati come identificatore.

9 Creazione di uno schema di Base di Dati
NOTA: non è necessario però definire tutte le tabelle (domini e vincoli) insieme a CREATE SCHEMA. Infatti le tabelle si possono aggiungere in una fase successiva (cioè dopo avere eseguito il comando CREATE SCHEMA) con il comando ALTER (che però non vedremo…). Il comando CREATE SCHEMA da solo crea dunque una Base di Dati senza tabelle.

10 Creazione di uno schema di relazione
Il comando SQL per definire uno schema di relazione è CREATE TABLE che: crea un’istanza vuota della tabella (cioè senza ennuple) permette di specificare attributi, domini, valori di default e vincoli di integrità La sintassi di CREATE TABLE è riportata nelle slide successive.

11 Creazione di uno schema di relazione
Definizione di una tabella con N attributi (e i relativi N domini) CREATE TABLE <tableName>( <attrib1> <domain1>, <attrib2> <domain2>, …, <attribN> <domainN> )

12 Creazione di uno schema di relazione
Esempio di definizione di tabella con 5 attributi (e i relativi 5 domini) CREATE TABLE Impiegati( Matricola CHAR(6), Cognome CHAR(20), Nome CHAR(20), Dipartimento CHAR(15), Stipendio NUMERIC(9) )

13 Creazione di uno schema di relazione
L’effetto del comando CREATE TABLE dell’esempio precedente è di creare la tabella vuota avente schema: Impiegati Matricola Cognome Nome Dipartimento Stipendio

14 Creazione di uno schema di relazione
In CREATE TABLE per ogni attributo può essere specificato un valore di default nel seguente modo: CREATE TABLE <tableName>( <attrib1> <domain1> [DEFAULT <val1>], <attrib2> <domain2> [DEFAULT <val2>], …, <attribN> <domainN> [DEFAULT <valN>] ) DEFAULT <val*> tra parentesi quadre significa che è un elemento opzionale (i valori di default possono anche non essere specificati)

15 Creazione di uno schema di relazione
Se per un attributo A di una relazione R è definito un valore di default, quando viene inserita una ennupla che non specifica un valore per A, viene assunto il valore di default di A. In caso contrario viene assunto il valore NULL.

16 Creazione di uno schema di relazione
Esempio di creazione di tabella con un valore di default per l’attributo Stipendio: CREATE TABLE Impiegati( Matricola CHAR(6), Cognome CHAR(20), Nome CHAR(20), Dipartimento CHAR(15), Stipendio NUMERIC(9) DEFAULT 0 )

17 Creazione di uno schema di relazione
L’effetto del comando CREATE TABLE dell’esempio precedente è di creare la tabella vuota avente schema: Impiegati Matricola Cognome Nome Dipartimento Stipendio Il successivo inserimento della ennupla (2345, Rossi, Mario, , Vendite), che non specifica il valore dell’attributo Stipendio, comporta l’effettivo inserimento...

18 Creazione di uno schema di relazione
… della ennupla (2345, Rossi, Mario, 0, Vendite) Impiegati Matricola Cognome Nome Dipartimento Stipendio 2345 Rossi Mario Vendite Mentre l’inserimento della ennupla (2346, Neri, Piero, 2000, ) che non specifica il valore dell’attributo Dipartimento, comporta l’effettivo inserimento...

19 Creazione di uno schema di relazione
… della ennupla (2346, Neri, Piero, 2000, NULL), dal momento che per l’attributo Dipartimento non è stato specificato un valore di default Impiegati Matricola Cognome Nome Dipartimento Stipendio 2345 Rossi Mario Vendite 2346 Neri Piero NULL 2000

20 Creazione di uno schema di relazione
In CREATE TABLE per ogni attributo può essere specificato il vincolo di valore non nullo nel seguente modo: CREATE TABLE <tableName>( <attrib1> <domain1> [NOT NULL], <attrib2> <domain2> [NOT NULL], …, <attribN> <domainN> [NOT NULL] ) NOT NULL tra parentesi quadre significa che è un elemento opzionale (se non viene specificato significa che si ammettono valori nulli per l’attributo)

21 Creazione di uno schema di relazione
Se per un attributo A di una relazione R è stato definito il vincolo di NOT NULL, per A non sono ammessi valori nulli. In tale caso si può inserire in R una ennupla che non specifica il valore per A solo se per A è stato definito anche un valore di DEFAULT. In caso contrario il valore di A va sempre specificato.

22 Creazione di uno schema di relazione
Esempio di creazione di tabella con un vincolo NOT NULL per Cognome e Nome: CREATE TABLE Impiegati( Matricola CHAR(6), Cognome CHAR(20) NOT NULL, Nome CHAR(20) NOT NULL, Dipartimento CHAR(15), Stipendio NUMERIC(9) DEFAULT 0 )

23 Creazione di uno schema di relazione
In CREATE TABLE possono essere specificati i vincoli di chiave nel seguente modo: CREATE TABLE <tableName>( <attrib1> <domain1> [UNIQUE], <attrib2> <domain2> [UNIQUE], …, <attribN> <domainN> [UNIQUE], [UNIQUE(K1)], ... [UNIQUE(KM)] ) K1,… KM sono i sottoinsiemi di almeno due attributi su cui si vogliono definire delle chiavi

24 Creazione di uno schema di relazione
Esempio di creazione di tabella con un vincolo di chiave per Matricola e uno per (Cognome,Nome,Dipartimento): CREATE TABLE Impiegati( Matricola CHAR(6) UNIQUE, Cognome CHAR(20) NOT NULL, Nome CHAR(20), Dipartimento CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, UNIQUE(Cognome,Nome,Dipartimento) )

25 Creazione di uno schema di relazione
Attenzione! Il valore NULL è considerato sempre diverso nelle diverse ennuple. Quindi le due ennuple (NULL, Rossi, Mario) e (NULL, Rossi, Mario) sono considerate diverse!

26 Creazione di uno schema di relazione
In CREATE TABLE può essere specificato un solo vincolo di chiave primaria nel seguente modo: CREATE TABLE <tableName>( <attrib1> <domain1> [PRIMARY KEY], <attrib2> <domain2> [PRIMARY KEY], …, <attribN> <domainN> [PRIMARY KEY], [PRIMARY KEY(K)], ) K è il sottoinsieme di almeno due attributi su cui si vuole definire la chiave primaria.

27 Creazione di uno schema di relazione
Esempio di creazione di tabella con un vincolo di chiave primaria su Matricola: CREATE TABLE Impiegati( Matricola CHAR(6) PRIMARY KEY, Cognome CHAR(20) NOT NULL, Nome CHAR(20), Dipartimento CHAR(15), Stipendio NUMERIC(9) DEFAULT 0 )

28 Creazione di uno schema di relazione
Esempio di creazione di tabella con un vincolo di chiave primaria per (Cognome,Nome,Stipendio) e uno di chiave su Matricola: CREATE TABLE Impiegati( Matricola CHAR(6) UNIQUE, Cognome CHAR(20) NOT NULL, Nome CHAR(20), Dipartimento CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, PRIMARY KEY(Cognome,Nome,Dipartimento) )

29 Creazione di uno schema di relazione
In CREATE TABLE può essere specificato un qualsiasi numero di vincoli di chiave esterna nel seguente modo: CREATE TABLE <tableName>( <attrib1> <domain1> [REFERENCES <masterTable1>(<attrMaster11>)], <attrib2> <domain2> [REFERENCES <masterTable2>(<attrMaster12>)], …, <attribN> <domainN> [REFERENCES <masterTable1>(<attrMaster1N>)], [FOREIGN KEY(<attrList1>) REFERENCES <masterTable21>(<attrMList1>)], [FOREIGN KEY(<attrListM>) REFERENCES <masterTable2M>(attrMListM)] )

30 Creazione di uno schema di relazione
Si supponga ad esempio di avere creato una Base di Dati con le seguenti tre relazioni: Auto(Provincia,Numero,Cognome,Nome) Vigili(Matricola,Cognome,Nome) Infrazioni(Codice,Data,Vigile,Provincia,Numero) e di aver già creato gli schemi per Auto e Vigili su cui sono state definite due chiavi primarie, rispettivamente (Provincia,Numero) e (Matricola). La slide successiva riporta un esempio di CREATE TABLE che crea lo schema di Infrazioni in cui vengono definite la chiave esterna sull’attributo Vigile rispetto alla master Vigili (e alla sua chiave primaria Matricola) e la chiave esterna sull’insieme di attributi (Provincia,Numero) rispetto alla master Auto (e alla sua chiave primaria (Provincia,Numero)).

31 Creazione di uno schema di relazione
Esempio di creazione di tabella con vincoli di chiave esterna su (Vigile) e (Provincia, Numero) CREATE TABLE Infrazioni( Codice CHAR(6) PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6), FOREIGN KEY(Provincia,Numero) REFERENCES Auto(Provincia,Numero) )


Scaricare ppt "Corso di Informatica (Basi di Dati)"

Presentazioni simili


Annunci Google