31
1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) a: tzeni, Ceri, Paraboschi, Torlone - Basi di Dati ucidi del Corso di Basi di Dati 1, Prof. Carlo Batini, Laurea in Informatica AA 2007-2008

1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

Embed Size (px)

Citation preview

Page 1: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

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 DatiLucidi del Corso di Basi di Dati 1, Prof. Carlo Batini, Laurea in Informatica,

AA 2007-2008

Page 2: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

2

IntroduzioneCos’è 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

Page 3: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

3

IntroduzioneVedremo, 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 relazioneNota Bene: in questa e nelle successive slide le parole scritte in

maiuscolo (salvo indicazione contraria) sono parole appartenenti allinguaggio SQL

Page 4: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

4

Definizione dei dominiUn 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.

Page 5: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

5

I domini elementariI 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)

Page 6: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

6

I domini elementariI 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), 34532 corrisponde a 3453,2)

Page 7: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

7

I domini elementariI 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

Page 8: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

8

Creazione di uno schema di Base di DatiLa 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.

Page 9: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

9

Creazione di uno schema di Base di DatiNOTA: 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.

Page 10: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

10

Creazione di uno schema di relazioneIl 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.

Page 11: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

11

Creazione di uno schema di relazioneDefinizione di una tabella con N attributi (e i relativi N domini)

CREATE TABLE <tableName>(<attrib1> <domain1>,<attrib2> <domain2>,…,<attribN> <domainN>

)

Page 12: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

12

Creazione di uno schema di relazioneEsempio 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)

)

Page 13: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

13

Creazione di uno schema di relazioneL’effetto del comando CREATE TABLE dell’esempio precedente è di creare la tabella vuota avente schema:

Matricola Cognome Nome DipartimentoStipendio

Impiegati

Page 14: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

14

Creazione di uno schema di relazioneIn 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)

Page 15: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

15

Creazione di uno schema di relazioneSe 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.

Page 16: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

16

Creazione di uno schema di relazioneEsempio 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

)

Page 17: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

17

Creazione di uno schema di relazioneL’effetto del comando CREATE TABLE dell’esempio precedente è di creare la tabella vuota avente schema:

Matricola Cognome Nome DipartimentoStipendio

Impiegati

Il successivo inserimento della ennupla (2345, Rossi, Mario, , Vendite), che non specifica il valore dell’attributo Stipendio, comporta l’effettivo inserimento...

Page 18: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

18

Creazione di uno schema di relazione… della ennupla (2345, Rossi, Mario, 0, Vendite)

Matricola Cognome Nome DipartimentoStipendio

Impiegati

Mentre l’inserimento della ennupla (2346, Neri, Piero, 2000, ) che non specifica il valore dell’attributo Dipartimento, comporta l’effettivo inserimento...

2345 Rossi Mario Vendite0

Page 19: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

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

Matricola Cognome Nome DipartimentoStipendio

Impiegati

2345 Rossi Mario Vendite0

2346 Neri Piero NULL2000

Page 20: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

20

Creazione di uno schema di relazioneIn 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)

Page 21: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

21

Creazione di uno schema di relazioneSe 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.

Page 22: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

22

Creazione di uno schema di relazioneEsempio 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

)

Page 23: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

23

Creazione di uno schema di relazioneIn 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

Page 24: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

24

Creazione di uno schema di relazioneEsempio 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))

Page 25: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

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!

Page 26: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

26

Creazione di uno schema di relazioneIn 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.

Page 27: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

27

Creazione di uno schema di relazioneEsempio 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

)

Page 28: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

28

Creazione di uno schema di relazioneEsempio 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))

Page 29: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

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)])

Page 30: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

30

Creazione di uno schema di relazioneSi 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)).

Page 31: 1 Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone

31

Creazione di uno schema di relazioneEsempio 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))