Sei sulla pagina 1di 16

SQl come DDL

Angelo Chianese,
Chianese, Vincenzo Moscato, Antonio
Picariello,
Picariello, Lucio Sansone
Basi di dati per la gestione dell'informazione
2/ed
McGrawMcGraw-Hill
Capitolo 2
Appunti dalle lezioni

Sistemi informativi
e basi di dati

La Progettazione
Concettuale

Il modello relazionale

La Progettazione
Logica

SQL come DDL

SQL come DML

SQL come DCL

Utilizzo di un
DBMS Reale

La Progettazione
Fisica

Strumenti CASE

Forme normali
Programmazione

Transazioni e
tecnologie di supporto

Basi di dati
direzionali

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

Basi di dati
distribuite

SQL come DDL

SQL





Sviluppato presso il Centro di Ricerca dell


dellIBM
Nasce come SeQueL
Diventa poi SQL: Structured Query Language
Contiene:

DDL (Data Definition Language)


Language)
DML (Data Manipulation Language)
DCL (Data Control Language).

I sistemi commerciali spesso offrono una serie di


strumenti che estendono le funzionalit
funzionalit definite a
livello di standard.

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Lo standard SQL



E un linguaggio di tipo dichiarativo


SQL Base

SQLSQL-86 - costrutti base


SQLSQL-89 integrit
integrit referenziale

SQLSQL-2

SQLSQL-3

SQLSQL- 92: entry level,


level, intermediate level,
level, full
SQLSQL-99 estensione ad oggetti, trigger, ..
SLSL-2003 Estensione del modello a oggetti, SQL/XML, .

La sua forza sta nel fatto di essere uno standard

I sistemi commerciali sono classificati in base all


alladerenza allo
standard 92




Entry Level (SQL(SQL-89)


Intermediate Level
Full SQL (SQL(SQL-92)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

In SQL:





TABLE  Tabella  Relazione


ROW  Riga  Tupla
COLUMN  Colonna Attributo
SQL come DDL ha tre comandi fondamentali:

Create


Alter


Database, Schema, Table,


Table, Domain, Constraint,
Constraint, .

Drop


Database, Schema, Table,


Table, Domain, Constraint,
Constraint, .

Database, Schema, Table,


Table, Domain, Constraint,
Constraint, .

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Database vs Schema


Nelle prime versioni tutte le tabelle erano considerate parte


del medesimo schema. Oggi, le tabelle sono spesso
raggruppate in SCHEMI (insieme di oggetti correlati)
PostgreSQL

MySQL

DB1
DB1

DB2

DB3

DB3
SCHEMA1

DB2

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SCHEMAN

SQL come DDL

Domini Elementari
Specificare il tipo di un dato significa gi
gi imporre un vincolo

Tutti i domini condividono il valore NULL

BIT

Permette di rappresentare dati a due valori o stringhe di dati a due


valori (in realt
realt a TRE valori: vero falso NULL)

bit [varying
[varying]
varying] [(lunghezza)]
Varbit(12)
Varbit(12)

Carattere

stringhe
ghe possono essere a
Permette di rappresentare singoli caratteri o stringhe. Le strin
lunghezza fissa oppure variabile.

character [varying]
varying] [(lunghezza)] [character
[character set famiglia]
Character character(12)
character(12) char(12)
char(12)
character varying(12)
varying(12) - Varchar(12)
Varchar(12)

Vincoli di dominio

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Domini Elementari


Tipi numerici esatti:

permettono di rappresentare valori interi o valori in


virgola fissa.

Numeric [(Precisione[,Scala])] 
numeric(6,3)
(6,3) [numeric
[-999.999,999.999]
Decimal [(Precisione[,Scala])]

Integer
Smallint


La differenza tra numeric e decimal che la precisione per


numeric un requisito esatto, mentre per decimal un requisito
minimo.

L unico vincolo implementativo che la precisione del dominio


integer sia del dominio smallint.
smallint.

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Domini Elementari
Tipi numerici approssimati:

float [(Precisione)]

double precision
real

La precisione di double doppia rispetto a real.


real.

Data e Ora:


9

la precisione intesa come numero di cifre della mantissa.

date
time
timestamp

record of {year month day}


day}
record of {hour minute second}
second}
date+time

Il valore NULL immaginato come condiviso tra i vari


domini

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Domini Elementari


Intervalli temporali:

interval PrimaUnita
PrimaUnitadiTempo [to UltimaUnita
UltimaUnitadiTempo]
diTempo]
interval year to month


SQLSQL-99 ha introdotto

Boolean


10

indica che gli intervalli vanno misurati in numero di anni e di


mesi.

precedentemente realizzato tramite il tipo bit (varbit


(varbit),
varbit), non implementato
da molti sistemi

Blob (binary long object)


object)
Cblob (character long object)
object)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Create Domain



Utile per apportare velocemente modifiche


NON E
E un costruttore di di tipo

CREATE DOMAIN ndom as Tipo [default] [Vincolo]





11

CREATE DOMAIN tipo_cf as CHAR(16) NOT NULL


CREATE DOMAIN NFIGLI as SMALLINT 0

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Creazione di Tabelle
create table nome (
NAttr Dom [ValoreDef
[ValoreDef]
ValoreDef] [vincoli
[vincoli]
vincoli]
{,NAttr
{,NAttr Dom [ValoreDef
[ValoreDef]
ValoreDef] [vincoli
[vincoli]}
vincoli]}
[Altri Vincoli]
Vincoli] )


Notazione .

AZIENDA.DIP.Nome

create table Dip (


Nome varchar(20),
Citta varchar(20))
12

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Primary Key


Indica che l
lattributo (o gli attributi) rapprsenta una chiave
primaria per la tabella.

create table Dip (


Nome varchar(20) Primary Key,
Citta varchar(20))
create table Dip (
Nome varchar(20),
Citta varchar(20),
Primary Key(Nome))
Key(Nome))
create table Dip (
Nome varchar(20),
Citta varchar(20),
CONSTRAINT PK_DIP PRIMARY KEY (Nome))

13

Pu essere espresso una sola volta per tabella

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Primary Key



14

Se la primary key composta da due attributi:


Create table Impiegato (
Nome varchar(20),
varchar(20),
Cognome varchar(20),
varchar(20),
primary key (Cognome,Nome)
Create table Impiegato (
Nome varchar(20),
varchar(20),
Cognome varchar(20),
varchar(20),
CONSTRAINT PK_IMP PRIMARY KEY (Cognome,Nome)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Unique



15

Indica nella tabella non possono esistere due righe con valori
identici su tale attributo.
Create table Impiegato (
cognome varchar(20)
varchar(20) unique,
unique,
nome varchar(20))
varchar(20))
Create table Impiegato (
cognome varchar(20),
varchar(20),
nome varchar(20),
varchar(20),
unique(Cognome,Nome))
unique(Cognome,Nome))
Create table Impiegato (
cognome varchar(20)
varchar(20) ,
nome varchar(20),
varchar(20),
constraint UNQ_Cog_Nome unique(Cognome,Nome))
unique(Cognome,Nome))
AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Not Null



16

indica che l
lattributo non pu assumere valore NULL.
create table Dip (
Nome varchar(20) Not Null,
Citta varchar(20))
create table Dip (
Nome varchar(20),
Citta varchar(20),
Not Null(Nome))
Null(Nome))
create table Dip (
Nome varchar(20),
Citta varchar(20),
CONSTRAINT NN_Nome Not Null(Nome))
Null(Nome))
AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Intrarelazionali


I vincoli posso essere combinati

17

Create table Impiegato (


matricola char(4),
char(4),
cognome varchar(20)
varchar(20) Not Null,
Null,
nome varchar(20),
varchar(20),
constraint UN_COG unique(Cognome),
unique(Cognome),
constraint PK_MATR Primary Key(matricola))

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Intrarelazionali generici




18

CHECK:

Utilizzato per specificare un vincolo di tupla generico

Create table IMP (


MATRICOLA char(4),
char(4),
COGNOME varchar(20)
varchar(20) Not Null,
Null,
NOME varchar(20)
varchar(20) Not Null,
Null,
STIPENDIO integer default 1000 not null,
null,
constraint UN_COG unique(Cognome,Nome),
unique(Cognome,Nome),
constraint PK_MATR Primary Key(matricola),
constraint IMP_STIP_MIN CHECK(STIPENDIO > 800))

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Interrelazionali




Tratteremo i vincoli di integrit


integrit referenziale (detti
anche vincoli di riferimento).
In SQL esiste il vincolo foreign key.
Crea un legame tra l
lattributo della tabella corrente
(interna) e un attributo di un
unaltra tabella (esterna)
(tipicamente alla chiave di questa).

19

In alcuni casi richiesto che l


lattributo della tabella
esterna sia definito unique.
unique.

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Integrit
Integrit Referenziale
Dipartimento (Nome
(Nome,
Nome,Citta)
Citta)
Impiegato(Matricola
Matricola,Cognome,
Impiegato(
Matricola,Cognome, Dipartimento)

Impiegato  tabella interna

su di essa viene definito il vincolo)

Dipartimento  tabella esterna (

deve esistere all


allatto della definizione del vincolo

Dipartimento (Nome
(Nome,
Nome,Citta)
Citta)
Impiegato(Matricola
Matricola,Cognome,
Impiegato(
Matricola,Cognome, Dipartimento : Dipartimento.Nome)
Dipartimento.Nome)

 La

20

violazione pu essere a livello di tabella


interna (inserimento e modifica)
esterna (cancellazione e modifica)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Integrit
Integrit Referenziale


Violazione sulla tabella interna:

Violazione sulla tabella esterna:

21

Loperazione viene semplicemente impedita.


restrict / no action
cascade
set null
set default

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Vincoli Integrit
Integrit Referenziale


22

Create table Dipartimento (


CodeDip char(4)
char(4) primary key,
Nome varchar(20))
varchar(20))
create table IMP(
Nome char(20),
char(20),
Cognome char(20),
char(20),
Dipartimento char(4)
char(4) references Dipartimento(CodeDip
Dipartimento(CodeDip)
CodeDip)
on delete set null on update cascade)
cascade)
create table IMP (
Nome char(20),
char(20),
Cognome char(20),
char(20),
Dipartimento char(4),
char(4),
constraint fk_imp_dip foreign key (Dipartimento) references
Dipartimento(CodeDip
Dipartimento(CodeDip)
cascade)
CodeDip) on delete set null on update cascade)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Indici
Gli indici rappresentano uno strumento prezioso per
velocizzare l
laccesso ai dati.

create [unique
[unique]
unique] index NomIdx on NomeTable (ListaAttributi)
ListaAttributi)

unique indica che nella tabella non sono possibili righe che
assumono lo stesso valore su ListaAttributi (che quindi
una chiave eventualmente non minimale)
Lordine in cui sono dati gli attributi importante.

23

create unique index ind onto Anagrafica (Cognome,Nome)


drop index Nomidx

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Altri CREATE






24

INDEX
VIEW
ASSERTION (non implementato da molti DB)
TRIGGER

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Modifica
alter domain nome <set default ..
drop default
add constraint
drop constraint >
alter table nome <alter column
set default
drop default
add constraint
drop constraint
add column
drop column>
column>

alter table Dipartimento add column NroUffici integer(4)


integer(4)

25

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Modifica


Drop:
Drop: Permette di rimuovere schemi, tabelle etc.
drop <schema | domain |table | view | assertion | >
[restrict | cascade]
cascade]

restrict:
restrict:

cascade

26

specifica che il comando deve essere eseguito solo in


presenza di oggetti cui non fanno riferimento altri
oggetti.
tutti gli oggetti specificati sono rimossi, innestando una
reazione a catena.

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Cataloghi Relazionali





27

Si supponga di avere creato uno schema e di aver creato


tutta una serie di oggetti. Come faccio a vedere tutti gli
oggetti definiti?
Ogni DBMS mantiene alcune tabelle in cui sono riportate
le descrizione degli oggetti creati (ad es. le tabelle create).
Esiste un Definition_Schema (TABLES, COLUMNS,
DOMAINS, )
)

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Esempio
create table DIPARTIMENTO (
CODICE CHAR(4) not null,
NOME VARCHAR(20) null,
constraint PK_DIPARTIMENTO primary key (CODICE));

create table SEDE (


CITTA VARCHAR(20) not null,
INDIRIZZO VARCHAR(40) null,
constraint PK_SEDE primary key (CITTA));
28

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Esempio
create table IMPIEGATO (
CF CHAR(16),
CAPO_CF CHAR(16) null,
DIPARTIMENTO CHAR(4) null,
COGNOME VARCHAR(20) null,
NOME VARCHAR(20) null,
DATA_N DATE null,
STIPENDIO INTEGER not null
constraint CKC_STIPENDIO_IMPIEGAT check (STIPENDIO between '800' and '3000'),
constraint PK_IMPIEGATO primary key (CF),
constraint FK_CAPO_IS_IMPIEGATO foreign key (CAPO_CF)
references IMPIEGATO (CF)
on delete restrict on update restrict,
constraint FK_IMPIEGATO_ESISTE_DIPARTIMENTO foreign key (DIPARTIMENTO)
references DIPARTIMENTO (CODICE)
on delete restrict on update restrict);

29

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Esempio

create table PROGETTO (


NOME VARCHAR(20) not null,
RESPONSIBILE CHAR(16) null,
BUDGET INTEGER null,
constraint PK_PROGETTO primary key (NOME),
constraint FK_PROGETTO_RESP_IMPIEGATO foreign key (RESPONSIBILE)
references IMPIEGATO (CF)
on delete restrict on update cascade);

30

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Esempio

create table DIP_CITTA (


DIPARTIMENTO CHAR(4) not null,
SEDE VARCHAR(20) not null,
constraint PK_DIP_CITTA primary key (DIPARTIMENTO, SEDE),
constraint FK_DIP_CITT_DIPARTIMENTO foreign key (DIPARTIMENTO) references DIPARTIMENTO (CODICE)
on delete restrict on update restrict,
constraint FK_DIP_CITT_SEDE foreign key (SEDE) references SEDE (CITTA)
on delete restrict on update restrict,
constraint FK_DIP_CITT_REFERENCE_SEDI foreign key (SEDE) references SEDI (CITTA)
on delete restrict on update restrict);

31

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Esempio

create table LAVORA_SU (


IMPIEGATO CHAR(16) not null,
PROGETTO VARCHAR(20) not null,
constraint PK_LAVORA_SU primary key (IMPIEGATO, PROGETTO),
constraint FK_LAVORA_S_REFERENCE_IMPIEGAT foreign key (IMPIEGATO)
references IMPIEGATO (CF) on delete restrict on update restrict,
constraint FK_LAVORA_S_REFERENCE_PROGETTO foreign key (PROGETTO)
references PROGETTO (NOME) on delete restrict on update restrict
);

32

AA 2010-2011, Basi di Dati, Prof. Antonio dAcierno, dacierno.a@isa.cnr.it

SQL come DDL

Potrebbero piacerti anche