LABORATORIO di INFORMATICA

Transcript

LABORATORIO di INFORMATICA
Università degli Studi di Cagliari
Corso di Laurea Magistrale in Ingegneria per l’Ambiente ed il Territorio
LABORATORIO
di INFORMATICA
A.A. 2010/2011
Prof. Giorgio Giacinto
IL MODELLO RELAZIONALE
http://www.diee.unica.it/giacinto/Lab
Perché studiare
il Modello Relazionale?
!
È il modello più largamente usato
!
!
“Sistemi proprietari” nei modelli più vecchi
!
!
Produttori: IBM, Informix, Microsoft, Oracle, Sybase,
MySQL, PostgreSQL, etc.
ad esempio IMS dell’IBM
Modelli recenti: modello orientato agli oggetti
!
!
ObjectStore, Versant, Ontos
Una sintesi emergente: il modello relazionale ad oggetti
! Informix Universal Server, UniSQL, O2, Oracle,
PostgreSQL
Giorgio Giacinto 2010
Laboratorio d'Informatica
Basi di dati relazionali:
definizioni
!
!
Base di dati relazionale: un insieme di relazioni
Relazione: consiste di due parti:
!
!
!
schema: specifica il nome della relazione, più il nome e il
tipo di ciascuna colonna (chiamata campo o attributo)
! ad esempio: Studenti(sid:string, nome:string,
login:string, età:integer, media:real)
istanza: una tabella, con righe e colonne.
#righe = cardinalità, #campi = grado/arità
Possiamo pensare a una relazione come a un
insieme di righe di t-uple (cioè tutte le righe sono
distinte e l’ordinamento è casuale)
Giorgio Giacinto 2010
Laboratorio d'Informatica
Esempio di istanza
della relazione Studenti
sid
53666
53688
nome
Jones
Smith
login
jones@cs
smith@eecs
età
18
18
media
25.6
24.1
53650
Smith
smith@math
19
27.4
!
Cardinalità = 3, grado = 5, tutte le righe
sono distinte
!
!
L’ordinamento delle righe è irrilevante
Devono essere anche distinte tutte le
colonne nell’istanza di una relazione?
Giorgio Giacinto 2010
Laboratorio d'Informatica
Campi di una relazione
!
Nel modello relazionale i campi di una
relazione sono identificati dal nome
!
!
L’ordine delle colonne è irrilevante
In SQL in alcuni casi ci si riferisce alle colonne in
base alla loro posizione
!
!
Ad esempio, per inserire una nuova tupla nella
relazione
Vincoli di dominio
!
I valori di ciascun campo di una tupla devono
appartenere ai domini associati in fase di
definizione dello schema
Giorgio Giacinto 2010
Laboratorio d'Informatica
Base di dati relazionale
!
Base di dati relazionale
!
!
Schema di base di dati relazionale
!
!
Collezione di relazioni con nomi di relazione
distinti
Collezione degli schemi per le relazioni nella base
di dati
Istanza di una base di dati relazionale
!
Collezione di istanze di relazione, una per ogni
schema di relazione nella BD
Giorgio Giacinto 2010
Laboratorio d'Informatica
CREARE E MODIFICARE
RELAZIONI CON SQL
Introduzione
In SQL la relazione è indicata con il nome di
TABLE (tabella)
Il sottoinsieme di SQL che consente di creare,
cancellare e modificare le tabelle è chiamato
DDL (Data Definition Language)
SQL contiene domini predefiniti, e consente di
definirne di nuovi
Giorgio Giacinto 2010
Laboratorio d'Informatica
Introduzione
!
Vedremo nel seguito i comandi SQL per
!
!
!
definire, modificare, cancellare una tabella
Inserire, modificare, cancellare dati in una tabella
Di solito queste operazioni vengono
effettuate mediante moduli in interfacce
grafiche
!
il sistema invierà al DBMS i comandi SQL
corrispondenti
Giorgio Giacinto 2010
Laboratorio d'Informatica
CREATE TABLE
CREATE TABLE Studenti (
sid
CHAR(20),
nome
CHAR(30),
login
CHAR(20),
età
INTEGER,
media
REAL)
Giorgio Giacinto 2010
Laboratorio d'Informatica
Inserimento di valori in una
tabella
INSERT
INTO Studenti(sid,nome,login,età,media)
VALUES (52688, ‘Smith’, ‘smith@ce’, 18, 28.1)
!
I nomi delle colonne possono essere omessi se si
devono inserire valori per tutti i campi
!
in questo caso la lista dei valori deve rispettare
l’ordinamento dei campi come definito nello schema
Giorgio Giacinto 2010
Laboratorio d'Informatica
Cancellazione di tuple
DELETE
FROM Studenti S
WHERE S.nome = ‘Smith’
La clausola WHERE specifica le tuple che
vogliamo cancellare
Giorgio Giacinto 2010
Laboratorio d'Informatica
Modifica dei valori di una
tabella
UPDATE
SET
WHERE
Studenti S
S.età = S.età + 1,
S.media = 0.95*S.media
S.sid = 53688
UPDATE
SET
WHERE
Studenti S
S.media = 0.95*S.media
S.media <= 24.5
Giorgio Giacinto 2010
Laboratorio d'Informatica
VINCOLI D’INTEGRITÁ
SULLE RELAZIONI
Vincoli di integrità (VI)
!
VI: condizione che deve essere vera per qualunque
istanza della base di dati; ad esempio vincoli di
dominio
!
!
!
Una istanza legale di una relazione è una istanza
che soddisfa tutti i VI specificati
!
!
I VI sono specificati quando si definisce lo schema
I VI sono controllati quando si modificano le relazioni
I DBMS non dovrebbero permettere istanze illegali
Se il DBMS controlla i VI, i dati memorizzati sono più
fedeli al significato nel mondo reale
!
Si evitano anche gli errori di inserimento!
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave primaria
!
Un insieme di campi è una chiave per una relazione
se
!
!
!
!
due tuple distinte non possono avere gli stessi valori in tutti
i campi chiave, e
ciò non è vero per qualunque sottoinsieme della chiave
! La condizione 2 è falsa? Si ha una superchiave
Se c’è più di una chiave, il DBA sceglie una delle
chiavi come chiave primaria
Esempio
sid è una chiave per Studenti (e nome?).
L’insieme {sid, media} è una superchiave
Giorgio Giacinto 2010
Laboratorio d'Informatica
Chiavi primarie e candidate
!
!
Sono possibili molte chiavi candidate, una delle
quali viene scelta come chiave primaria
“Per un dato studente e un dato corso, c’è una
singola classe” oppure
“Gli studenti possono seguire solo un corso, e
ricevere un singolo voto per quel corso; inoltre,
nessuna coppia di studenti in un corso riceve lo
stesso voto”
Usato a sproposito, un VI può impedire la
memorizzazione di istanze della base di dati che si
presentano nella pratica!
Giorgio Giacinto 2010
Laboratorio d'Informatica
Specifica dei vincoli di chiave
in SQL
CREATE TABLE Studenti(
sid
CHAR(20),
nome
CHAR(30),
login
CHAR(20),
età
INTEGER,
media
REAL,
UNIQUE(nome,età),
CONSTRAINT ChiaveStudenti
PRIMARY KEY (sid))
Giorgio Giacinto 2010
Laboratorio d'Informatica
Chiavi esterne,
integrità referenziale
!
Chiave esterna: insieme di campi in una
relazione che viene usato per “riferirsi” a una
tupla in un’altra relazione (deve corrispondere
alla chiave primaria della seconda relazione).
!
!
Simile a un “puntatore logico”
Se tutti i vincoli di chiave esterna sono garantiti,
si raggiunge l’integrità referenziale (nessuna
referenza irrisolta)
!
HTML è un modello di dati senza integrità referenziale!
Giorgio Giacinto 2010
Laboratorio d'Informatica
Integrità referenziale
Ad esempio, studid è una chiave esterna che
fa riferimento a Studenti
–Iscritto(studid: string, cid: string voto: string)
Giorgio Giacinto 2010
Laboratorio d'Informatica
Garantire l’integrità
referenziale
!
!
Che cosa si dovrebbe fare se viene inserita in Iscritti
una tupla con un ID studente che non esiste?
(Rifiutarla!)
Cosa fare se viene cancellata una tupla di Studenti?
!
!
!
Cancellare anche le tuple di Iscritti che vi fanno riferimento
Non permettere la cancellazione di tuple di Studenti cui si
fa riferimento da Iscritti
Impostare a un sid predefinito il sid delle tuple di Iscritti che
puntano a Studenti
! In SQL, anche: impostare al valore speciale NULL (denota
“sconosciuto” o “inapplicabile”) il sid delle tuple di Iscritti
che si riferiscono a Studenti (ma il sid in Studenti non può
mai essere NULL)
Giorgio Giacinto 2010
Laboratorio d'Informatica
Specifica dei vincoli di chiave
esterna in SQL
CREATE TABLE Iscrizioni (
studid CHAR(20),
cid
CHAR(20),
voto
CHAR(10),
PRIMARY KEY(studid,cid),
FOREIGN KEY(studid)
REFERENCES Studenti)
Giorgio Giacinto 2010
Laboratorio d'Informatica
Da dove vengono i VI?
!
!
I VI sono basati sulla semantica dell’organizzazione
del mondo reale che viene descritta nelle relazioni
della base di dati
Possiamo controllare l’istanza di una base di dati
per vedere se un VI viene violato, ma non possiamo
MAI inferire che un VI è vero solo esaminando
un’istanza
!
!
!
Un VI è una asserzione su tutte le possibili istanze!
Analizzando l’esempio si può scoprire che nome non è una
chiave, ma è necessario ci sia un’asserzione per stabilire
che sid è una chiave
VI su chiavi e su chiavi esterne sono i più comuni;
sono supportati anche VI più generali
Giorgio Giacinto 2010
Laboratorio d'Informatica
APPLICAZIONE DEI VINCOLI
D’INTEGRITÁ
Vincolo di chiave
INSERT
INTO Studenti(sid,nome,login,età,media)
VALUES (53688, ‘Mike’, ‘mike@ee’, 17, 22.1)
Questo inserimento viola il vincolo di chiave primaria, e pertanto
il DBMS rifiuterà la richiesta
INSERT
INTO Studenti(sid,nome,login,età,media)
VALUES (NULL, ‘Mike’, ‘mike@ee’, 17, 22.1)
Questo inserimento viola il vincolo per cui la chiave primaria non
può contenere NULL
Considerazioni analoghe nel caso di operazioni di
aggiornamento
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di dominio
!
Le operazioni di inserimento e di
aggiornamento sono accettate solo se i valori
dei campi appartengono al dominio di
definizione
!
Le operazioni di cancellazione non causano
violazione dei vincoli di chiave primaria,
unicità e di dominio
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave esterna
!
Consideriamo le tabelle Studenti e Iscrizioni
!
!
!
!
La cancellazione di tuple in Iscrizioni non viola
l’integrità referenziale
Gli inserimenti di tuple in Iscrizioni possono
violare l’integrità referenziale
d’altra parte…
La cancellazione di tuple in Studenti potrebbe
violare l’integrità referenziale
Gli inserimenti di tuple in Studenti non violano
l’integrità referenziale
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave esterna e SQL
!
Come gestire l’inserimento in Iscrizioni di una
riga con un valore di studid che non compare
in Studenti?
!
Il comando INSERT viene ignorato
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave esterna e SQL
!
Come gestire la cancellazione di una riga di
Studenti?
1.
2.
3.
4.
!
Cancellare tutte le righe di Iscrizioni che la referenziano
Non consentire la cancellazione se vi sono righe di
Iscrizioni che la referenziano
Impostare il valore di studid delle righe di Iscrizioni che la
referenziano con un qualche valore predefinito
Impostare il valore di studid delle righe di Iscrizioni che la
referenziano a NULL
Questa opzione è però in contrasto con il vincolo di
chiave primaria per Iscrizioni
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave esterna e SQL
!
Come gestire la modifica dei valori di chiave
primaria nella tabella Studenti?
!
Opzioni analoghe al caso di cancellazione
Giorgio Giacinto 2010
Laboratorio d'Informatica
Vincoli di chiave esterna e SQL
!
SQL consente di scegliere separatamente
una delle quattro opzioni per operazioni di
cancellazione (DELETE) e aggiornamento
(UPDATE)
1.
2.
3.
CASCADE
NO ACTION (operazione predefinita)
SET DEFAULT
Il valore di default è specificato in fase di
definizione del dominio del campo
4.
SET NULL
Giorgio Giacinto 2010
Laboratorio d'Informatica
Esempio
CREATE TABLE Iscrizioni (
studid CHAR(20),
cid
CHAR(20),
voto
CHAR(10),
PRIMARY KEY(studid,cid),
FOREIGN KEY(studid)
REFERENCES Studenti
ON DELETE CASCADE
ON UPDATE NO ACTION)
Giorgio Giacinto 2010
Laboratorio d'Informatica
ELIMINAZIONE E MODIFICA
DI TABELLE
Eliminazione di tabelle
DROP TABLE Studenti
Elimina la tabella Studenti
DROP TABLE Studenti RESTRICT
Elimina la tabella solo se nessuna vista è
definita a partire da Studenti
Giorgio Giacinto 2010
Laboratorio d'Informatica
Modifica di tabelle
ALTER TABLE Studenti
ADD COLUMN NomeTutore CHAR(10)
Aggiunge una colonna alla tabella Studenti.
Il comando ALTER consente anche di
cancellare e modificare colonne
aggiungere e cancellare vincoli di integrità
Giorgio Giacinto 2010
Laboratorio d'Informatica
INTERROGARE
BASI DI DATI RELAZIONALI
Interrogazione (query)
!
!
Può essere definita come una domanda sui
dati e la risposta consiste in una nuova
relazione
Un linguaggio di interrogazione è un
linguaggio specializzato per scrivere
interrogazioni
Giorgio Giacinto 2010
Laboratorio d'Informatica
Linguaggi di
Interrogazione Relazionali
!
!
Uno dei punti di forza del modello relazionale:
supporta un semplice ma potente linguaggio di
interrogazione dei dati.
Le interrogazioni possono essere scritte in maniera
intuitiva, e il DBMS è responsabile di una
valutazione efficiente
!
!
Fattore chiave: semantica precisa per le interrogazioni
relazionali.
Permette all’ottimizzatore di riordinare estensivamente le
operazioni, garantendo che la risposta non cambi
Giorgio Giacinto 2010
Laboratorio d'Informatica
Esempio SQL
SELECT *
FROM Studenti S
WHERE S.età < 18
È la formulazione in SQL della domanda:
“Quali sono i dati degli studenti che hanno
meno di 18 anni?”
Giorgio Giacinto 2010
Laboratorio d'Informatica
Esempio SQL
SELECT S.nome, I.cid
FROM Studenti S, Iscrizioni I
WHERE S.sid = I.studid
AND I.voto=30
È la formulazione in SQL della richiesta:
“Mostrare il nome degli studenti e il corso nel
quale hanno ottenuto un voto pari a 30”
Giorgio Giacinto 2010
Laboratorio d'Informatica
Modello relazionale: sommario
!
!
!
Una rappresentazione tabellare dei dati
Semplice e intuitivo, attualmente il più usato
Il DBA può specificare vincoli di integrità
basati sulla semantica dell’applicazione. Il
DBMS controlla eventuali violazioni
!
!
!
Due VI importanti: chiavi primarie e chiavi esterne
Inoltre abbiamo sempre vincoli di dominio
Esistono linguaggi di interrogazione potenti e
naturali
Giorgio Giacinto 2010
Laboratorio d'Informatica