breve presentazione curata da
Aldo Pappalepore
L’SQL (Structured Query Language) è il linguaggio per l’accesso ai
database (base di dati), sia per l’interrogazione che per la creazione,
la modifica e la gestione degli stessi.
SQL non è un programma ma uno standard definito dall’ANSI (American National Standards Institute) e dall’ISO (International Standards
Organization).
Lo standard SQL viene invece implementato in speciali programmi
chiamati DBMS (Data Base Management System) o sistemi per la gestione di basi di dati, di cui i più famosi sono Oracle, Microsoft SQL
Server, Sybase e Mysql.
Il fondamento formale di SQL è il modello relazionale basato sulla teoria matematica di relazioni tra insiemi.
sql: introduzione
2
Un database (base di dati) è l’insieme dei dati utilizzati in uno specifico
sistema informativo, di tipo aziendale, scientifico, gestionale, amministrativo, etc.
Un database è composto da due diversi tipi di informazione, apparteneti a distinti livelli di astrazione:
• i dati, che rappresentano le entità del sistema da modellare e che si
esprimono in termini di valori (di tipo numerico, alfanumerico, etc.).
I dati sono raggruppati in categorie in base alla loro struttura comune
(come Libri, Autori dell’esempio 1).
• le strutture (metadati), che descrivono le caratteristiche comuni delle
varie categorie di dati quali i nomi ed i tipi dei valori con cui si esprimono.
sql: database
3
Il database utilizzato in una biblioteca può contenere dati relativi ai
Libri ed agli Autori raggruppati nelle due tabelle che seguono:
Libri
Codice_Libro
1
2
3
4
Titolo
Il PC
Sql
Java 2
Word
Collocazione
12/a/3
7/g/12
2/r/8
6/d/11
sql: database
4
Autori
Codice_Autore Cognome
Nome
1
Giorgio
Scoppa
2
Enzo
Vita
3
Aldo
Riccio
I dati sono quelli scritti in blu
Le strutture, composte dai nomi (in rosso) dei dati e dal loro tipo,
può essere descritto nel modo seguente:
sql: database
5
Libri:
Codice_Libro: numerico
Titolo:
testo(50)
Collocazione: testo(10)
Autori
Codice_Autore: numerico
Cognome:
testo(30)
Nome:
testo(30)
sql: database
6
Un database, oltre ai dati veri e propri, deve rappresentare anche le
relazioni fra i dati, ovvero le connessioni logiche presenti tra le varie
categorie di dati.
Per esempio deve essere rappresentata l’associazione che lega ciascun
autore ai propri libri e viceversa.
sql: database
7
Il database deve inoltre rispondere ai seguenti requisiti:
• i dati devono essere organizzati con ridondanza minima, ossia non
essere inutilmente duplicati e ciò sia per ridurre la memoria impegnata sia per evitare la gestione di copie multiple.
• i dati devono essere utilizzabili contemporaneamente da più utenti.
Bisogna cioè evitare che ogni utente lavori su una propria copia dei
dati (vedi sopra); deve esistere una sola versione dei dati, cui tutti gli
utenti possano accedere senza che si generino conflitti per l’eventuale uso contemporaneo dei dati.
• i dati devono essere permanenti e cioè devono essere preservati in
caso di malfunzionamento del sistema.
sql: database
8
Il DataBase Management System (DBMS), o sistema per la gestione
di basi di dati, è il programma che consente la gestione di uno o più
database secondo i requisiti prima indicati. Prima dei DBMS l’archiviazione dei dati avveniva attraverso l’utilizzo diretto delle strutture
del file system.
Nell’approccio file system ogni applicazione accede direttamente agli
archivi dei dati con la conseguenza che deve conoscere la struttura interna degli archivi, deve farsi carico di rappresentare le relazioni tra i
dati, deve consentire l’utilizzo contemporaneo degli archivi da parte di
più applicazioni, etc..
Nell’approccio DBMS invece le applicazioni rivolgono le proprie richieste di accesso al DBMS, che gestisce i dati svincolando le applicazioni da questo onere (figura 1).
sql: DBMS
9
appl. 1
appl. 2
appl. 3
appl. 1
appl. 2
D
B
M
S
Base
Dati
appl. 3
sql: DBMS
10
Per passare da una realtà di interesse alla realizzazione di un database
si fa riferimento ai modelli da utilizzare nelle varie fasi di questo percorso.
Un modello stabilisce le convenzioni per esprimere i diversi aspetti
della realtà d’interesse e costituisce un supporto alla sua rappresentazione che viene definita schema.
Il processo di progettazione di un database si articola in tre fasi fondamentali, ciascuna delle quali si riferisce ad un diverso livello di astrazione. Le tre fasi sono: progetto concettuale, progetto logico e progetto
fisico (figura 2).
La scomposizione in fasi del processo di progettazione ha lo scopo di
separare le diverse risoluzioni dei problemi e poter modificare le soluzioni dei livelli inferiori senza toccare quelle dei livelli superiori.
A ciascuna fase di progettazione coorispondono specifici modelli per
la rappresentazione dei dati.
sql: modelli dei dati
11
realtà d’interesse
modello concettuale
Schema concettuale
modello logico
Schema logico
modello fisico
Schema fisico
sql: modelli dei dati
12
• progettazione concettuale:
Obiettivo della fase di progettazione concettuale è la rappresentazione
completa ed efficace della realtà d’interesse ai fini informativi, in maniera indipendente da qualsiasi specifico DBMS. Tale rappresentazione, detta schema concettuale, è la rappresentazione più astratta, ovvero
più vicina alla logica umana, nella definizione di dati e relazioni.
Tra i modelli dei dati usati nella progettazione concettuale il più diffuso è il modello Entity-Relationship (E-R, Entità-Relazione) che introduce una rappresentazione grafica dello schema concettuale.
Il modello E-R prevede come prime attività della progettazione concettuale 1) l’individuazione di oggetti concreti o astratti rilevanti per il sistema informativo, e 2) la loro classificazione in insiemi omogenei detti entità rappresentati mediante rettangoli.
sql: modelli dei dati
13
• progettazione concettuale:
Le proprietà caratteristiche di ciascuna entità, e quindi di ciascun oggetto che ne fa parte, vengono descritte mediante gli attributi.
Per esempio attributi dell’entità Veicolo possono essere:Targa, Cilindrata, Combustibile, Cavalli Fiscali, Velocità, Posti, Immatricolazione.
Veicolo
Targa
Cilindrata
Combustibile
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
sql: modelli dei dati
14
• progettazione concettuale:
Ciascun attributo è caratterizzato da un nome e da un dominio, che
rappresenta l’insieme dei valori che può assumere; per esempio
l’attributo Posti potrebbe assumere valori nel dominio {1,2,3,4,5}.
Il modello prevede la rappresentazione di vincoli di integrità i quali
descrivono le regole che soddisfano gli oggetti della realtà. Per
esempio nel rettangolo dell’entità Veicolo è sottolineato l’attributo
Targa sta rappresentare il vincolo d’integrità per cui ad ogni
targa corrisponde uno ed un solo veicolo.
Le dipendenze logiche o associazioni tra i dati da rappresentare vengono espresse nello schema E-R mediante relazioni tra le corrispondenti entità. Graficamente una relazione viene rappresentata da un
arco che collega i rettangoli che raffigurano le due entità correlate,
interrotto da un ovale che contiene il nome della relazione.
sql: modelli dei dati
15
• progettazione concettuale:
Una relazione R tra due insiemi di entità E1 ed E2 viene classificata in
base alla sua cardinalità.
• R ha cardinalità 1:1 (uno a uno) se ad un elemento di E1 può corrispondere un solo elemento di E2 e viceversa.Un esempio di relazione
1:1 è quella tra nazioni e capitali:
Nazione
1
R-1
Naz_Cod
Naz_Nome
sql: modelli dei dati
1 Capitale
Cap_Cod
Cap_Nome
16
• progettazione concettuale:
• R ha cardinalità 1:N (uno a molti) se ad ogni elemento di E1 possono corrispondere più elementi di E2, mentre ad ogni elemento di E2
corrisponde al massimo un elemento di E1. Un esempio di relazione
1:N è quella tra ordini e righe_ordine:
Ordine
1
R-2
N.Ordine
Cliente
N
Righe_Ordine
N.Riga
Prodotto
sql: modelli dei dati
17
• progettazione concettuale:
• R ha cardinalità N:N (molti a molti) se ad ogni elemento di E1 possono corrispondere più elementi di E2 e viceversa.
Un esempio di relazione N:N è quella tra libri ed autori:
Libro
N
R-3
Lib_Cod
Lib_Titolo
N
Autore
Aut_Cod
Aut_Nome
Il modelle E-R prevede che anche le relazioni possano avere degli
attributi che ne specifichino le caratteristiche.
Vediamo ora un esempio (esempio 4) di schema concettuale.
sql: modelli dei dati
18
In un ufficio di Motorizzazione bisogna realizzare, nell’ambito del
sistema informativo, il database Registro Automobilistico in grado
di rappresentare la seguente realtà d’interesse:
• di ciascun veicolo interessa registrare la targa, la cilindrata, i cavalli
fiscali, la velocità, il numero di posti, la data di immatricolazione;
• i veicoli sono classificati in categorie (automobili, ciclomotori, camion, rimorchi,ecc.);
• ciascun veicolo appartiene a uno specifico modello;
• tra i dati relativi ai veicoli vi è anche il tipo di combustibile usato;
• di ciascun modello di veicolo va registrata la fabbrica di produzione
ed il numero delle versioni prodotte;
• ciascun veicolo può avere uno o più proprietari, che si succedono
nel corso della durata del veicolo e di cui interessa la data di acquisto
e la data di cessione del veicolo; di ciascun proprietario interessa registrare cognome, nome ed indirizzo di residenza.
sql: modelli dei dati
19
Nel progetto concettuale vengono individuate le seguenti entità:
Entità
Attributi
Categoria
Cod_Categoria
Nome_Categoria
Veicolo
Targa
Cilindrata
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
Modello
Cod_Modello
Nome_Modello
Numero_Versioni
Fabbrica
Cod_Fabbrica
Nome_Fabbrica
sql: modelli dei dati
20
Entità
Attributi
Proprietario
Cod_Proprietario
Cognome
Nome
Indirizzo
Provincia
Combustibile
Cod_Combustibile
Descrizione_Combustibile
sql: modelli dei dati
21
Tra tali entità sussistono le seguenti relazioni:
• Categoria e Veicolo sono in relazione 1:N, perché ciascuna categoria
è comune a più veicoli, mentre un veicolo può appartenere ad 1 cat;
• Modello e Veicolo sono in relazione 1:N, perché ciascun modello è
comune a più veicoli e ciascun veicolo è di un solo modello;
• Fabbrica e Modello sono in relazione 1:N, perché una fabbrica può
produrre più modelli, mentre un determinato modello viene prodotto da una sola fabbrica;
• Combustibile e Veicolo sono in relazione 1:N, perché un tipo di combustibile è comune a più veicoli, mentre ciascun veicolo utilizza un
solo tipo di combustibile;
• Veicolo e Proprietario sono in relazione N:N, in quanto una persona
può possedere più veicoli e più persone possono succedersi nella
proprietà di un veicolo; la relazione ha come attributi la data di
acquisto e la data di cessione del veicolo.
sql: modelli dei dati
22
Fabbrica
Categoria
Cod_Fabbrica
Nome_Fabbrica
Cod_Categoria
Nome_Categoria
1
1
R-3
R-1
N
N
Veicolo
Targa
Cilindrata
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
Modello
N
R-2
1
Cod_Modello
Nome_Modello
Numero_Versioni
N
N
R-5
R-4
1
Combustibile
Data_Acquisto
Data_Cessione
Proprietario
Cod_Combustibile
Nome_Combustibile
N
sql: modelli dei dati
Cod_Proprietario
Cognome
Nome
Indirizzo
Provincia
23
La fase di progettazione logica del database consiste nel convertire lo
schema concettuale di base in un modello logico (schema logico) dei
dati.
Un modello logico dei dati è la tecnica di organizzazione ed accesso
ai dati utilizzata dai singoli DBMS. Lo schema logico allora dipende
strettamente dal tipo di DBMS utilizzato ed in particolare dal suo modello logico dei dati.
Un ulteriore compito della progettazione logica è di individuare allo
interno dello schema logico del database le parti rilevanti per le applicazioni quali le viste.
sql: modelli dei dati
24
Per comodità di rappresentazione è conveniente descrivere una relazione
algebrica in forma di tabella come in figura:
CODICE CATEGORIA
NOME CATEGORIA
01
Autovettura
02
Rimorchio
03
Motociclo
04
Furgone
In base a questa rappresentazione i concetti di relazioni algebriche, di
n-uple e di attributi vengono indicati con i termini più familiari di tabelle, di righe e di colonne.
Nel seguito il termine “tabella” sostituirà quello di “relazione algebrica”, mentre il termine “relazione” indicherà, come nel modello EntitàRelazione, un’associazione tra dati.
sql: database relazionali
25
Dalla definizione di tabella (relazione) come insieme di righe (e-nuple)
derivano due conseguenze fondamentali:
• in una tabella non possone esistere due righe uguali;
• l’ordine tra le righe di una tabella non è significativo.
Da ciò consegue che è possibile e/o necessario individuare in ciascuna tabella uno o più attributi (colonne) in base ai quali possono venire identificate le singole righe e che rappresentano quindi una chiave di accesso univoca alle informazioni contenute nella tabella stessa.
Questa singola (o questo insieme di) colonna/e, che va definita/o in fase di
creazione dello schema logico, è detto chiave primaria (primary key) della
tabella.
sql: database relazionali
26
Nel passaggio dalla progettazione concettuale a quella logica, per la creazione dello schema logico relazionale, partendo dallo schema concettuale
definito in base al modello Entità-Relazione, è necessario applicare le regole seguenti:
• le entità (entity set) dello schema concettuale divengono tabelle nello
schema logico;
• le relazioni (relation set) dello schema concettuale vengono rappresentate nello schema logico facendo uso delle cosidette chiavi esterne. Una
chiave esterna (foreign key) di una tabella è un insieme di attributi che
corrispondono a quelli che costituiscono la chiave primaria di un’altra tabella, e stabiliscono quindi un riferimento tra le righe delle due tabelle.
Nella rappresentazione di una relazione tra le tabelle T1 e T2 bisogna distinguere tra le cardinalità 1:1, 1:N, N:N individuate nello schema concettuale.
sql: database relazionali
27
Relazione 1:1
Agli attributi di T1 vanno aggiunti, come chiave esterna, gli attributi che
costituiscono la chiave primaria di T2, o alternativamente a T2 vanno aggiunti, come chiave esterna, gli attributi che costituiscono la chiave primaria di T1. Le due soluzioni sono del tutto equivalenti. Per esempio,
considerate le tabelle:
Nazioni:
Capitali:
COD_NAZIONE
NOME_NAZIONE
COD_CAPITALE
NOME CAPITALE
001
Austria
001
Parigi
002
Francia
002
Roma
003
Italia
003
Vienna
sql: database relazionali
28
la relazione tra esse viene rappresentata estendendo la tabella Nazioni nel
modo seguente:
Nazioni:
COD_NAZIONE
NOME_NAZIONE
COD_CAPITALE
001
Austria
003
002
Francia
001
003
Italia
002
Oppure in alternativa estendendo la tabella Capitali nel modo seguente:
Capitali:
COD_CAPITALE
NOME CAPITALE
COD_NAZIONE
001
Parigi
002
002
Roma
003
003
Vienna
001
sql: database relazionali
29
Relazione 1:N
Agli attributi di T2 vanno aggiunti, come chiave esterna, gli attributi che
costituiscono la chiave primaria di T1 (il viceversa in questo caso non è
equivalente). Per esempio, considerate le tabelle:
Ordini:
N_ORDINE
DATA
CLIENTE
1
12/01/99
Bianchi s.p.a.
2
23/08/99
Rossi s.r.l.
3
05/09/99
Verdi s.n.c.
Righe_Ordine:
N_RIGA
QUANTITA’
ARTICOLO
1
Tavolo
2
2
Sedia
10
1
Armadio
1
2
Sedia
20
sql: database relazionali
30
la relazione tra esse viene rappresentata estendendo la tabella Righe_Ordine nel modo seguente:
Righe_Ordine:
N_ORDINE
N_RIGA
QUANTITA’
ARTICOLO
1
1
Tavolo
2
1
2
Sedia
10
2
1
Armadio
1
2
2
Sedia
20
sql: database relazionali
31
Relazione N:N
In questo caso va definita una nuova tabella T3 che contiene, come chiavi
esterne, le chiavi primarie sia di T1 che di T2; è da notare come in questo
caso la chiave primaria della tabella T3 possa essere costituita dalla totalità dei suoi attributi. Per esempio, considerate le tabelle:
Libri:
CODICE_LIBRO
TITOLO
COLLOCAZIONE
1
Java
2/D/3
2
Internet
2/A/1
3
Le reti wireless
5/Q/2
4
La programmazione
6/H/8
ed
sql: database relazionali
32
Autori:
CODICE_AUTORE
COGNOME
NOME
1
Benzi
Aldo
2
Rossi
Renato
3
Esposito
Valerio
la relazione tra esse viene rappresentata nel modo seguente:
Libri-Autori:
CODICE_LIBRO
CODICE_AUTORE
1
1
1
2
2
1
2
2
Come previsto dal modello Entità-Relazione, anche una relazione può
possedere degli attributi, che vengono inclusi come attributi della tabella
in cui è rappresentata la relazione, che contiene le chiavi esterne
sql: database relazionali
33
Realizziamo ora lo schema logico relazionale del database Registro
Automobilistico di cui già abbiamo costruito lo schema concettuale.
I passi per tradurre lo schema concettuale nello schema logico corrispondente sono i seguenti.
1) Per ciascuna entità dello schema concettuale viene definita una tabella nello schema logico: Veicoli, Categorie, Combustibili, Modelli, Fabbriche e Proprietari (figura ).
sql: database relazionali
34
Categorie
Cod_Categoria
Nome_Categoria
Fabbriche
testo (2)
testo (30)
Cod_Fabbrica
Nome_Fabbrica
Proprietari
Veicoli
Targa
Cilindrata
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
testo (10)
numerico
numerico
numerico
numerico
data
Cod_Proprietario
Cognome
Nome
Indirizzo
Provincia
testo (5)
testo (30)
testo (30)
testo (30)
testo (2)
Modelli
Combustibili
Cod_Combustibile
Nome_Combustibile
testo (3)
testo (30)
testo (2)
testo (30)
sql: database relazionali
Cod_Modello
Nome_Modello
Numero_Versioni
testo (30)
testo (30)
numerico
35
2) Per ciascuna tabella viene definito un insieme di attributi con funzione di chiave primaria che ne identifichi univocamente le righe.
Se tale insieme non è individuabile tra gli attributi della tabella, va
aggiunto un nuovo attributo finalizzato a questo scopo.
TABELLA
CHIAVE PRIMARIA
Veicoli
Targa
Categorie
Cod_Categoria
Combustibili
Cod_Combustibile
Modelli
Cod_Modello
Fabbriche
Cod_Fabbrica
Proprietari
Cod_Proprietario
sql: database relazionali
36
3) Vengono definite le chiavi esterne (oltre alle interne già presenti)
per la rappresentazione delle relazioni 1:N tra Categorie e Veicoli,
tra Combustibili e Veicoli, tra Modelli e Veicoli e tra Fabbriche e
Modelli.
Veicoli
Targa
Cod_Categoria
Cod_Combustibile
Cod_Modello
Cilindrata
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
Modelli
testo (10)
testo (2)
testo (2)
testo (3)
numerico
numerico
numerico
numerico
data
Cod_Modello
Cod_Fabbrica
Nome_Modello
Numero_Versioni
sql: database relazionali
testo (30)
testo (3)
testo (30)
numerico
37
4) Viene definita la nuova tabella Proprietà per la rappresentazione
della relazione N:N tra Veicoli e Proprietari. Questa contiene, come chiave primaria, le chiavi primarie di Veicoli e Proprietari, e
gli attributi Data_Acquisto e Data_Cessione, che costituiscono gli
attributi della relazione.
Proprietà
Targa
Cod_Proprietario
Data_Acquisto
Data_Cessione
testo (10)
testo (5)
data
data
Tabella
Chiave primaria
Proprietà
Targa+Cod_Proprietario
In figura 4 viene presentata infine una rappresentazione dello schema logico relazionale del database
sql: database relazionali
38
Categorie
1
Cod_Fabbrica
Nome_Fabbrica
Cod_Categoria
Nome_Categoria
Modelli
1
1
N
Veicoli
Targa
Cod_Categoria
Cod_Combustibile
Cod_Modello
Cilindrata
Cavalli_Fiscali
Velocità
Posti
Immatricolazione
N
1
Fabbriche
N
Cod_Modello
Cod_Fabbrica
Nome_Modello
Numero_Versioni
N
N
Proprietà
1
Targa
Cod_Proprietario
Data_Acquisto
Data_Cessione
Proprietari
1
Combustibili
N
Cod_Combustibile
Nome_Combustibile
sql: database relazionali
Cod_Proprietario
Cognome
Nome
Indirizzo
Provincia
39
Modalità d’uso:
In un DBMS vengono distinti tre tipi di linguaggi in base alle funzioni
eseguite sui dati:
• DDL (Data Description Language), per la definizione dello schema logico del database;
• DML (Data Manipulation Language), per le operazioni di interrogazione e di aggiornamento dei dati quali inserimento, modifica, etc.;
• DCL (Data Control Language), per operazioni di controllo dei dati, gestione degli utenti, assegnazione dei diritti di accesso, etc.
sql: database relazionali
40
Definire lo schema concettuale del database Mobili_Componibili.
La realtà da rappresentare è costituita dai dati, appartenenti al sistema informativo di un mobilificio, relativi alla vendita di mobili componibili. In particolare:
• degli articoli, che sono suddivisi in categorie, interessa archiviare
la descrizione, il prezzo, l’aliquota IVA e le spese di trasporto;
• ciascun articolo è costituito da una serie di componenti, di cui
vengono archiviati la descrizione e il costo;
• i componenti vengono prodotti da laboratori, di ciascuno dei quali
vengono memorizzati l’indirizzo, la città ed il telefono;
sql: esercitazioni
41
Costruire lo schema logico del database Mobili_Componibili avendo come base lo schema concettuale definito nell’esercizio precedente.
sql: esercitazioni
42
Definire lo schema concettuale del database Archivio_Biblioteca.
La realtà da rappresentare è costituita dai dati, appartenenti al sistema informativo di una biblioteca universitaria, relativi alla gestione
del suo archivio di libri. In particolare:
• dei libri, che sono suddivisi per argomenti, hanno una certa collocazione, sono stati scritti da uno o più autori e pubblicati da una casa
editrice, interessa archiviare il titolo, la descrizione, il prezzo, l’anno
di pubblicazione;
• ogni collocazione è individuata da un numero di mobile ed un numero di stanza;
• di ogni autore e di ogni casa editrice occorre archiviare l’indirizzo,
la città ed il telefono;
sql: esercitazioni
43
Costruire lo schema logico del database Archivio_Biblioteca avendo come base lo schema concettuale definito nell’esercizio precedente.
sql: esercitazioni
44