Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a
Basi di dati Relazionali
Introduzione
Questo modulo, dopo una breve introduzione, descriverà le Basi di Dati Relazionali. È il
primo dei quattro moduli su cui è articolato il corso di Sistemi Informativi Aziendali
(9651A).
Per questo modulo è possibile fare riferimento ai lucidi (per lo più coincidenti con i lucidi
presentati nelle videocassette) utilizzati dal Prof. Stefano Ceri (e da lui gentilmente forniti)
e disponibili in forma elettronica sul sito del CETEM (in formato PDF, 6 lucidi per pagina).
In particolare per questa prima parte del modulo numero uno (1a) il riferimento è ai lucidi
delle prime quattro lezioni del Prof. Ceri. Per la seconda parte del primo modulo (1b) si
farà riferimento alle successive quattro lezioni del Prof. Ceri.
In queste pagine si farà un richiamo alla teoria (necessariamente non molto dettagliato),
seguito da esercizi svolti e solo proposti (per lo più ripresi dai lucidi a cui si è appena fatto
riferimento).
Il libro di riferimento per la teoria è Basi di Dati (da ora BDD), di Atzeni, Ceri, Paraboschi,
Torlone, seconda edizione (1999), McGraw-Hill editore (ISBN 88 386 0824-5).
Introduzione ai sistemi informativi aziendali
Un Sistema Informativo è un insieme di strumenti, risorse e procedure che consentono la
gestione delle informazioni aziendali, e comprende anche le risorse umane. Se tale
insieme è realizzato utilizzando calcolatori elettronici (e dunque non più solo documenti
cartacei), si parla di sistema informatico.
Un sistema informativo (quale ad es. una applicazione gestionale o finanziaria o un
sistema di prenotazione) genera informazione a partire dai dati grezzi, e gli utenti
ottengono informazioni tramite dei processi, cioè delle procedure aziendali. Tali procedure
sono però facilmente variabili nel tempo, mentre i dati rimangono maggiormente invariati.
Risulta perciò più sensato analizzare il sistema informativo a partire dai dati, strutturati e
controllati tramite un DBMS (DataBase Management System). Nulla impedisce di costruire
architetture prive di DBMS, nelle quali il software applicativo si appoggia direttamente al
sistema operativo, ma ciò rende più difficile operare sui dati ad alto livello tramite linguaggi
specializzati (SQL Structured Query Language).
Tramite l’uso di un DBMS è possibile garantire una corretta condivisione dei dati (anche
nel caso di accesso da parte di più utenti), una migliore qualità dei dati stessi e una loro
maggiore sicurezza (anche dal punto di vista del controllo degli accessi). Anche le
prestazioni risultano di buon livello, e l’intero sistema ha una elevata tolleranza ai guasti.
I dati vengono inquadrati in una struttura, e vengono poi definite delle specifiche
operazioni. In particolare la struttura o schema è su tre livelli; il primo è per le applicazioni,
ed offre la massima astrazione, mentre il secondo livello è di tipo logico, e permette una
descrizione più globale. Infine il terzo livello di schema si occupa di gestire la correlazione
con i meccanismi fisici implementati nel DBMS al fine di interfacciare il tutto con l’hardware
disponibile.
Il DBMS permette l’uso di due diversi linguaggi:
 DDL (Data Definition Language); es. CREATE, DROP, ALTER
 DML (Data Manipulation Language); es. SELECT, INSERT, UPDATE, DELETE
che permettono di definire e manipolare le basi di dati.
Inoltre il DBMS, al pari dei sistemi operativi di buona fattura (dei quali di fatto replica molte
funzioni), permette di definire degli utenti, e tra questi si hanno:
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 1 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a
Basi di dati Relazionali
1. DBMS Administrator, che utilizza il DDL per creare il database e gestirlo
2. Programmatori applicativi, che utilizzano il DML per programmare applicazioni
3. Utenti casuali, che utilizzano versioni agevolate del DML (magari con interfacce
grafiche)
4. Utenti finali, che si occupano esclusivamente di eseguire le applicazioni da terminale.
Le applicazioni, così come in generale il DBMS, possono essere adoperate anche via rete,
e sovente il loro sviluppo è agevolato dall’uso di strumenti appositi.
Lo scopo dunque sarà quello di imparare a progettare e interrogare le basi di dati, tenendo
presente il continuo sviluppo tecnologico, che nel settore dei database è sempre più
influenzato dalla diffusione ad ogni livello di sistemi interconnessi da Internet.
Il modello relazionale dei dati
Al fine di rappresentare i dati sono stati sviluppati nel corso degli anni vari modelli. Si tratta
del modello gerarchico (anni ’60), del modello reticolare (anni ’70), del modello relazionale
(anni ’80), e infine del modello a oggetti (anni ’90). Il modello di nostro interesse è il
modello relazionale, in quanto gli altri modelli sono superati o ancora non sufficientemente
maturi.
Il modello relazionale, inventato nel 1970 da T. Codd (IBM research), ha cominciato ad
avere successo commerciale a partire dal 1985, ed ora è il modello di riferimento per tutte
le implementazioni di maggiore successo (Oracle, Ibm DB2, Informix, Microsoft
SQLServer e Access).
La definizione formale di relazione (o tabella) è che dato un dominio D (qualunque insieme
di valori), e dato il prodotto cartesiano su n di tali domini (non necessariamente distinti),
una relazione R su tale prodotto cartesiano è un qualunque sottoinsieme del prodotto
cartesiano (purché non vi siano elementi duplicati). Il grado della relazione è il numero n di
domini, la cardinalità della relazione è pari al numero di n-ple (tuple) realizzate all’interno
del prodotto cartesiano, e l’attributo è il nome dato al dominio in una relazione (si noti che i
nomi di attributo in una relazione devono essere tutti distinti tra loro).
La definizione informale (assai più immediata) si può avere osservando i seguenti tre
esempi di tabella:
studente
MATR NOME
CITTA’
C-DIP
123
Carlo
Bologna
Inf
415
Paola
Torino
Inf
702
Antonio Roma
Log
corso
esame
MATR CODDATA
CORSO
VOTO
CODTITOLO
CORSO
DOCENTE
123
1
7-9-97 30
1
matematica Barozzi
123
2
8-1-98 28
2
informatica Meo
702
2
7-9-97 20
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 2 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a
Basi di dati Relazionali
Per esempio la relazione studente ha gli attributi MATR, NOME, CITTÀ e C-DIP. Avendo
più di una relazione come qui, i nomi delle relazioni (nello schema risultante) devono
essere tutti distinti tra loro.
Dunque la terminologia tra definizione formale e informale presenta le seguenti similitudini.
Relazione (nella def. formale) corrisponde a tabella (nella informale), attributo (formale) a
colonna (informale), tupla (o n-pla) (formale) corrisponde a riga (informale), dominio
(formale) a tipo di dato (informale), cardinalità (formale) a numero di righe (informale), e
grado (formale) a numero di colonne (informale). Si noti che nella definizione formale è
prevista l’assenza di duplicati, mentre nella definizione informale è permessa la presenza
di duplicati.
Ora, dato lo schema relazionale (cioè la struttura del database) riportato nelle tre tabelle
precedenti, e considerata l'istanza riportata (cioè i dati presenti nel database nel momento
in cui il database è stato riportato in figura), è possibile, tramite un linguaggio di
interrogazione, estrarre delle informazioni dal database.
Un secondo esempio di schema, relativo alla gestione del personale, è invece riportato
nelle seguenti tre tabelle:
impiegato
MATR NOME
DATA-ASS
SALARIO
MATR-MGR
1
Piero
1-1-95
3M
2
2
Giorgio
1-1-97
2,5 M
null
3
Giovanni 1-7-96
2M
2
assegnamento
progetto
MATR NUM-PROG PERC
NUM-PROG TITOLO TIPO
1
3
50
3
Idea
Esprit
1
4
50
4
Wide
Esprit
2
3
100
3
4
100
Si noti che alcune istanze potrebbero non essere corrette (per es. data inesistente). Per
garantire la correttezza vengono usati i Vincoli di Integrità, che sono le chiavi, i vincoli sui
valori nulli, l’integrità referenziale, e infine i vincoli generici.
Una chiave è un sottoinsieme degli attributi dello schema che ha le proprietà di unicità
(non esistono cioè due tuple con chiave uguale) e minimalità (sottraendo un qualunque
attributo alla chiave si perde la proprietà di unicità). Negli esempi visti le chiavi sono MATR
per studente, MATR e contemporaneamente COD-CORSO per esame, COD-CORSO per
corso, MATR per impiegato, MATR e NUM-PROG per assegnamento e NUM-PROG per
progetto. Se le chiavi possibili sono molteplici, una è definita chiave primaria, le altre
secondarie. Per es. nella relazione CLIENTE(COD-CLIENTE, INDIRIZZO, P-IVA) si ha
che COD-CLIENTE è chiave primaria, mentre P-IVA è chiave secondaria. Gli attributi che
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 3 di 9
Autore: Bartolomeo Montrucchio
Sistemi Informativi Aziendali (9651A)
Politecnico di Torino
CeTeM
1a
Basi di dati Relazionali
caratterizzano la chiave primaria vengono sottolineati. Il concetto di chiave viene spiegato
da p. 31 a p. 35 BDD.
Esempi di Interrogazioni
 Quali professori hanno interrogato Carlo?
Risposta: dalla tabella studente si trova la riga per cui nel campo nome c’è Carlo. Si
ottiene così il numero di matricola (123), e dalla tabella esame si ricava che i corsi in
questione sono il numero 1 e 2. Infine dalla tabella corso si scoprono i nomi dei docenti
relativi a quel codice corso.
 Quali studenti hanno preso 30 in matematica?
Risposta: da corso si seleziona matematica (1), nella tabella esame si trova solo la
matricola 123, e infine dalla tabella studente si ritrova il nome voluto.
 Chi è il manager di Piero?
Risposta: dalla tabella impiegato si ricava che la matricola del manager di Piero è 2, e poi
che il nome corrispondente alla matricola 2 è Giorgio.
 In quali tipi di progetti lavora Giovanni?
Risposta: Giovanni ha matricola 3 (dalla tabella impiegato). Dalla tabella assegnamento la
matricola 3 lavora sul solo progetto 4, che dalla tabella progetto risulta essere di tipo
Esprit.
Dato ora lo schema seguente:
cliente
COD-CLI INDIRIZZO P-IVA
ordine
COD-ORD COD-CLI DATA IMPORTO
dettaglio
COD-ORD
COD-PROD QTA
prodotto
COD-PROD NOME
PREZZO
come si potrebbero effettuare queste interrogazioni?
 Quali ordini ha emesso Paolo?
 Quanti ordini ha emesso Paolo?
 Quante candele sono state ordinate il 5 luglio 1993?
 Calcolare per ciascun cliente la somma degli importi di tutti gli ordini.
 Estrarre l’ordine di importo più alto.
Linguaggi di interrogazione
Esistono vari linguaggi di interrogazione. I linguaggi formali, non supportati dai pacchetti
applicativi, sono Algebra relazionale, Calcolo relazionale e Programmazione logica. I
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 4 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a
Basi di dati Relazionali
linguaggi programmativi sono invece l’SQL (Structured Query Language), e il QBE (Query
By Example).
Algebra Relazionale
Definita da Codd nel 1970, risulta molto utile per imparare a formulare le query, e presenta
5 sole operazioni. Queste operazioni si suddividono in unarie (selezione e proiezione), e
binarie (unione, differenza e join); gli operandi sono le tabelle. Sono anche utilizzabili
espressioni booleane di predicati semplici (con AND, OR, NOT, =, !=, <, <=, >, >=, e
TRUE e FALSE come predicati semplici).
1. SELEZIONE: SELECT [NOME=’Paola’] STUDENTE seleziona la sola tupla 415
Paola Torino Inf. dalla tabella studente. Il risultato è a sua volta una tabella, priva però
di nome. Es. SELECT [(CITTÀ=’TORINO’) OR ((CITTÀ=’ROMA’) AND NOT (CDIP=’Log’))] STUDENTE
2. PROIEZIONE: PROJECT [NOME,C-DIP] STUDENTE seleziona le sole colonne
NOME e C-DIP dalla tabella studente. Si noti che l’operazione di proiezione ELIMINA i
duplicati, mentre nel modello informale (e nei sistemi) l’eliminazione dei duplicati va
richiesta esplicitamente.
NOTA: per dare un nome alle tabelle ottenute si usa l’ASSEGNAMENTO (che peraltro non
fa parte delle operazioni algebriche). Es. INFORMATICI = SELECT [C-DIP=’Inf’]
STUDENTI
3. UNIONE: TABELLA1 UNION TABELLA2. TABELLA1 e TABELLA2 devono essere
compatibili, devono cioè avere lo stesso grado (numero di colonne) o (nei sistemi)
avere domini ordinatamente uguali. Il risultato è l’unione delle tuple (più tuple). L’unione
è senza duplicati.
4. DIFFERENZA: TABELLA1 MINUS TABELLA2. Se le due tabelle sono compatibili,
viene fatta la differenza delle tuple (il numero delle tuple scende). Si noti che NON è
commutativa.
5. JOIN:
STUDENTE JOIN [MATR=MATR] ESAME. Vengono aggiunte le colonne di
esame a quelle di studente, e le tuple sono quelle ottenute concatenando le tuple per
le quali MATR=MATR (cioè MATR è la stessa per ambedue le tabelle). MATR diventa
STUDENTE.MATR e ESAME.MATR per evitare l’omonimia. Il JOIN può essere fatto
anche usando i comparatori (Es. ESAME.MATR <= STUDENTE.MATR). L’EQUI-JOIN
è quello fatto con i soli confronti di uguaglianza, e in particolare il JOIN NATURALE è
l’EQUI-JOIN di tutti gli attributi omonimi (si può fare anche con tre tabelle, es.
STUDENTE JOIN ESAME JOIN CORSO).
NOTA: l’uso di uno schema relazionale a più tabelle presenta (rispetto alla tabella unica
ottenuta tramite il JOIN NATURALE) il vantaggio di risparmiare inutile ripetizioni di dati (ad
es. il nome è nella sola tabella studente, e non in tutte le tuple della tabella unica).
Le operazioni algebriche possono essere concatenate a formare espressioni algebriche,
consentendo così di estrarre i dati.
Esempi di espressioni algebriche
 Quali studenti sono iscritti al diploma di Informatica?
PROJECT [NOME]
SELECT [C-DIP=’Inf’]
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 5 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a





Basi di dati Relazionali
STUDENTE
Il risultato è una tabella formata da una sola colonna NOME, e con due tuple Carlo e
Paola.
Quali studenti di Logistica non sono di Milano?
PROJECT [NOME]
SELECT [C-DIP=’Log’ AND CITTÀ != ‘Milano’]
STUDENTE
L’unica tupla racchiude Antonio.
Quali studenti hanno preso 30 in matematica?
PROJECT [NOME]
SELECT [VOTO=30 AND TITOLO=’matematica’]
(STUDENTE JOIN ESAME JOIN CORSO)
che equivale a:
PROJECT [NOME]
(STUDENTE JOIN
(SELECT [VOTO=30] ESAME) JOIN
(SELECT [TITOLO=’matematica’] CORSO))
L’unica tupla è per Carlo.
Quali professori hanno esaminato Antonio?
PROJECT [DOCENTE]
SELECT [NOME=’Antonio’]
(STUDENTE JOIN ESAME JOIN CORSO)
che equivale a:
PROJECT [DOCENTE]
(CORSO JOIN
(ESAME JOIN
SELECT [NOME=’Antonio’] STUDENTE))
Il risultato è Meo.
Estrarre la matricola degli studenti romani oppure degli studenti che hanno sostenuto
un esame il giorno 8 gennaio 1998.
(PROJECT [MATR]
SELECT [CITTÀ=’Roma’]STUDENTE)
UNION
(PROJECT [MATR] (STUDENTE JOIN
SELECT [DATA=8-1-98] ESAME))
Il risultato è la colonna MATR con due tuple 702 e 123.
Estrarre la matricola degli studenti che hanno preso almeno un voto superiore a 28 e
non sono mai scesi sotto al 25.
(PROJECT [MATR]
SELECT [VOTO>28] ESAME)
MINUS
(PROJECT [MATR]
SELECT [VOTO<25] ESAME)
Il risultato è la MATR 123 (infatti 123 MINUS 702 dà ancora 123).
Date ora le basi dati già note esprimere in forma algebrica le seguenti interrogazioni:
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 6 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a





Basi di dati Relazionali
In quali tipi di progetti lavora Giovanni?
Chi è il manager di Piero?
Quali ordini ha emesso Paolo?
Quali prodotti sono ordinati da un cliente di Milano?
Quali prodotti hanno prezzo inferiore a 5000 lire e non sono presenti in nessun ordine?
Dichiarazione degli schemi in SQL
L’SQL (nome originale SEQUEL), definito nel 1976, e poi standardizzato (giunto a SQL-3,
le normali implementazioni usano SQL-2 (cioè SQL-92)), è composto da DDL (Data
Definition Language) per la definizione di domini, tabelle, indici, autorizzazioni, viste,
vincoli, procedure, trigger, e da DML (Data Manipulation Language), cioè linguaggio di
query e di modifica e comandi transazionali.
Domini elementari in SQL-2:
1. Stringhe di lunghezza fissa N CHAR(N) e variabile VARCHAR(N), e stringhe di bit
lunghe N BIT(N) e variabili VARBIT(N)
2. Valori numerici esatti con N cifre decimali NUMERIC(N), DECIMAL(N), INTEGER e
SMALLINT
3. Valori numerici approssimati. FLOAT(N) se N=2 si ha che 0.172E04 = 1700 (N cifre
decimali significative dopo la virgola). REAL e DOUBLE PRECISION
4. Domini speciali. DATE YYYYMMDD, TIME(N) HHMMSS.NNNN, TIMESTAMP (date +
time, istante di tempo), e INTERVAL (istante iniziale e finale).
Il valore NULL è polimorfico (appartiene a tutti i domini). Ha valore non noto. Può esistere
nella realtà ma essere sconosciuto al database (es. una data di nascita), oppure può
essere inapplicabile (es. numero patente per minorenni).
I vincoli di integrità di dominio sono NOT NULL (esclude il valore nullo), PRIMARY KEY
(chiave primaria, implica il NOT NULL), UNIQUE (chiave secondaria, non implica il NOT
NULL), e CHECK (predicato che deve essere soddisfatto).
Es. di definizione di un dominio applicativo:
CREATE DOMAIN PrezzoQuotidiani
AS INTEGER
DEFAULT 1500
NOT NULL
Es. di definizione di tabelle:
CREATE TABLE ESAME
( MATR CHAR(6)
COD-CORSO CHAR(6)
DATA DATE NOT NULL
VOTO SMALLINT NOT NULL
PRIMARY KEY(MATR, COD-CORSO) )
CREATE TABLE CORSO
( COD-CORSO CHAR(6) PRIMARY KEY
TITOLO VARCHAR(30) NOT NULL
DOCENTE VARCHAR(20) )
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 7 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a
Basi di dati Relazionali
Integrità referenziale: alcuni attributi della tabella figlio (ad es. esame è figlia di studente)
sono definiti FOREIGN KEY per esprimere il legame gerarchico tra padre e figlio. I valori
contenuti nella FOREIGN KEY devono essere sempre presenti nella tabella padre (non è
cioè possibile avere esami senza studenti).
Cosa succede degli esami (figli) se si cancellano le tuple degli studenti (padri)? Si creano
degli orfani. In questo caso ci sono quattro alternative: CASCADE (si cancellano anche gli
esami), SET NULL (gli esami vanno a NULL), SET DEFAULT (gli esami vanno a
DEFAULT), e NO ACTION (utile se si sa già che le cose sono poi destinate ad andare a
posto automaticamente in seguito). Nel caso di semplice modifica delle tuple padri ci
sono le stesse possibilità (qui CASCADE provoca la modifica della matricola anche nella
tabella studente).
È anche lecito essere figli di più padri. Es.:
CREATE TABLE ESAME
(…
PRIMARY KEY (MATR, COD-CORSO)
FOREIGN KEY MATR
REFERENCES STUDENTI
ON DELETE CASCADE
ON UPDATE CASCADE
FOREIGN KEY COD-CORSO
REFERENCES CORSO
ON DELETE NO ACTION
ON UPDATE NO ACTION )
Esempi di definizione di tabelle
 Tabella CLIENTE
CREATE TABLE CLIENTE
(COD-CLI CHAR(6) PRIMARY KEY
INDIRIZZO CHAR(50)
P-IVA CHAR(12) UNIQUE)
 Tabella ORDINE
CREATE TABLE ORDINE
( COD-ORD CHAR(6) PRIMARY KEY
COD-CLI CHAR(6) NOT NULL DEFAULT=’999999’
DATA DATE
IMPORTO INTEGER
FOREIGN KEY COD-CLI
REFERENCES ORDINE
ON DELETE SET DEFAULT
ON UPDATE SET DEFAULT )
 Tabella DETTAGLIO
CREATE TABLE DETTAGLIO
(COD-ORD CHAR(6)
COD-PROD CHAR(6)
QTA SMALLINT
PRIMARY KEY(COD_ORD, COD-PROD)
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 8 di 9
Autore: Bartolomeo Montrucchio
Politecnico di Torino
CeTeM
Sistemi Informativi Aziendali (9651A)
1a

Basi di dati Relazionali
FOREIGN KEY COD-ORD
REFERENCES ORDINE
ON DELETE CASCADE
ON DELETE CASCADE
FOREIGN KEY COD-PROD
REFERENCES PRODOTTO
ON DELETE NO ACTION
ON DELETE NO ACTION)
Tabella PRODOTTO
CREATE TABLE PRODOTTO
(COD-PROD CHAR(6) PRIMARY KEY
NOME CHAR(20)
PREZZO SMALLINT)
Provare a esprimere in SQL la dichiarazione dello schema della base di dati per la
gestione del personale (impiegato, assegnamento, progetto).
© Politecnico di Torino
Data ultima revisione 02/06/2017
Pagina 9 di 9
Autore: Bartolomeo Montrucchio