Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RIASSUNTO
PROGETTAZIONE
• l’ennupla
• la relazione.
Per semplicità omettiamo la specifica dei tipi, per cui lo schema di relazione è
R(A1, A2,...,An)
RELAZIONE E TABELLA
Orario
Insegnamento Docente Aula Ora
Analisi matem. I Luigi Neri N1 8:00
Basi di dati Piero Rossi N2 9:45
Chimica Nicola Mori N1 9:45
Fisica I Mario Bruni N1 11:45
Fisica II Mario Bruni N3 9:45
Sistemi inform. Piero Rossi N3 8:00
si traduce in
CorsidiLa(Codice,Nome,Facoltà,Tipo)
Docenti(CodDoc, Settore)
Insegna(Codice*, CodDoc*)
Tre schemi indipendenti, uno per ogni classe, contenenti tutti gli
attributi di ciascuna classe
Film(CodFilm,Titolo,Regista,Anno)
Attori(CodFilm*, Attore)
Riassumendo
Le regole di traduzione
Entità: diventano tabelle ed i loro identificatori chiavi primarie
Associazioni 1-1: se obbligatorie si procede come per le 1-N scegliendo il
lato in cui includere gli attributi e la chiave esterna; se una opzionale si
includono gli attributi e la chiave esterna sul lato“obbligatorio”; se entrambe
opzionali si costruisce una tabella autonoma come per il caso N-N.
Associazioni1-N:gli attributi dell’associazione e la chiave primaria della
tabella relativa all’entità dal lato “N” sono inclusi nella tabella relativa
all’entità dal lato“1”.
Associazioni N-N: diventano tabelle con chiave primaria formata
dall’unione delle chiavi delle entità coinvolte
Informazione incompleta
ll modello relazionale impone ai dati una struttura rigida:
- le informazioni sono rappresentate per mezzo di ennuple
- solo alcuni formati di ennuple sono ammessi: quelli che
corrispondono agli schemi di relazione
Non conviene (anche se spesso si fa) usare valori del dominio (0,
stringa nulla, “99”, ...):
- vincoli di chiave
- vincoli su valore
Vigili
Matricola Cognome Nome
Infrazioni
Auto
Prov Numero Cognome Nome
Esempio:
Viene eliminata una ennupla causando una violazione
Comportamento “standard”:
Rifiuto dell'operazione
Azioni compensative:
Eliminazione in cascata
Introduzione di valori nulli
Eliminazione in cascata
Impiegati
Matricola Cognome Progetto
nome e il docente
le lezioni sono caratterizzate da un’ora d’inizio, un’ora di fine, un
ALGEBRA RELAZIONALE
Accesso ai Dati nei Sistemi Relazionali
CORSO PROFESSORE
Programmazione Ferro
Architetture Pappalardo
Matematica Discreta Lizzio
Il termine algebra è dovuto al fatto che sono previsti operatori (query) che
agiscono su relazioni e producono altre relazioni come risultato.
Gli operatori possono essere combinati per formare espressioni complesse.
Algebra relazionale
Insieme di operatori
su relazioni
che producono relazioni (tabelle)
e possono essere composti per svolgere operazioni più
complesse
OPERATORI FONDAMENTALI
DEFINIZIONE OPERATORIALE
RS
RS
R-S
ESEMPIO DI UNIONE
ESEMPIO DI INTERSEZIONE
ESEMPIO DI DIFFERENZA
ESEMPIO: UNIONE?
Maternità
Madre
???
proiezione
operatori "ortogonali“
selezione:
decomposizione orizzontale
proiezione:
decomposizione verticale
PROIEZIONE
Produce risultati:
su un sottoinsieme degli attributi dell’operando
con valori da tutte le n-uple della relazione
La cardinalità di Y(R), cioè il numero degli elementi che lo compongono, puo’ essere
minore di R nel caso di duplicati
ESEMPIO PROIEZIONE
cognome e filiale di tutti gli impiegati
Produce risultati:
con lo stesso schema dell’operando
con un sottoinsieme delle ennuple dell’operando: quelle che soddisfano
la condizione
Connettivi logici
(AND),
(OR),
(NOT)
Operatori di confronto
= (uguale) (diverso)
(maggiore) (minore)
(maggiore o uguale)
(minore o uguale)
ESEMPIO RESTRIZIONE
impiegati che guadagnano più di 50
Impiegati
Impiegati
Impiegati
Cognome = Filiale(Impiegati)
Selezione e proiezione
Impiegati
Matricola Cognome Filiale Età
7309 Rossi Roma 32
5998 Neri Milano 45
9553 Bruni Milano NULL
Join non completo: alcuni valori tra gli attributi comuni non
coincidono, quindi, alcune ennuple non partecipano al JOIN
ESEMPIO - III
R1(A,B) , R2 (B,C)
in generale
0 |R1 JOIN R2| |R1| |R2|
se B è chiave in R2
0 |R1 JOIN R2| |R1|
Rossi A B Mori
Neri B C Bruni
Bianchi B
Neri B Mori
Bianchi B Mori
R 1(X1), R 2(X2)
PROJX1 (R 1 JOIN R2 ) R 1
R(X), X = X1 X2
Rossi A A Mori
Neri B B Bruni
Bianchi B Reparti
Neri B A Mori
Neri B B Bruni
Bianchi B A Mori
Bianchi B B Bruni
Il prodotto cartesiano, in pratica, ha senso (quasi) solo se seguito da
selezione:
SELCondizione (R1 JOIN R2)
L'operazione viene chiamata theta-join e indicata con
R1 JOINCondizione R2
SELStipendio>40(Impiegati)
Trovare matricola, nome ed età degli impiegati che guadagnano più di
40 milioni
IL LINGUAGGIO SQL
INTRODUZIONE
Creato negli anni ’70 presso IBM , inizialmente solo come linguaggio di
interrogazione. Ora è linguaggio di riferimento per DataBase relazionali.
Standardizzato grazie al lavoro di ISO (international standard organization) e
ANSI (american national standard institute)
SQL
Per definire una relazione (detta tabella nella terminologia SQL), si usa il
comando “create table”: definisce uno schema di relazione e ne crea
un’istanza vuota; specifica attributi, domini e vincoli; ad esempio
■ default: indica il valore che un attributo deve avere quando viene inserito
un record che, in corrispondenza di quell’attributo non ha assegnato alcun
valore
■ not null: i valori inseriti in quel campo devono essere diversi non nulli
■ Es: Cognome CHAR(20) not null
Quando nella definizione di una tabella sono dichiarati dei vincoli il sistema
che gestisce la BD controlla che le operazioni che modificano la tabella
inserendo nuove ennuple o modificando i valori di attributi non violino i vincoli
dichiarati. Se un vincolo può essere violato l’operazione non viene eseguita e
viene segnalata una condizione di errore
PRIMARY KEY
Matricola CHAR(6),
…,
PRIMARY KEY (Matricola)
CHIAVI ESTERNE
Vediamo come introdurre una chiave esterna attraverso il comando Foreign Key
2. quando si elimina un’ennupla dalla tabella CDL, se il valore della sua chiave
primaria è usato come valore di una chiave esterna di un’ennupla della tabella
Studenti, allora sono possibili tre scelte:
a. on delete no action: per proibire la cancellazione dell’ennupla da CDL.
Questa opzione vale anche quando si modifica il valore della chiave primaria
di CDL;
b. on delete cascade, per eliminare sia l’ennupla da CDL che tutte le
ennuple di Studenti che usano il valore della chiave primaria dell’ennupla che
si elimina;
c. on delete set null, per eliminare l’ennupla da CDL e porre a null il valore
della chiave esterna di tutte le ennuple di Studenti che usano il valore della
chiave primaria dell’ennupla che si elimina.
MODIFICA DEI DATI
Nuovi dati si inseriscono nella tabella con il comando INSERT.
Per cambiare invece l’attributo Provincia da “MI” a “TO” per lo studente con
Matricola "081575", si dà il comando:
UPDATE Studenti
SET Provincia = “TO”
WHERE Matricola = "081575"
begin transaction;
update ContoCorrente
set Saldo = Saldo – 10
where NumeroConto = 12345 ;
update ContoCorrente
set Saldo = Saldo + 10
where NumeroConto = 55555 ;
commit work;
RECUPERO DEI DATI:
IL COMANDO SELECT
OBIETTIVI: Scrivere una query in linguaggio SQL
selezionare ed elencare tutte le righe e le colonne di una tabella
selezionare ed elencare determinate colonne di una tabella
selezionare ed elencare le colonne di più tabelle
Questa sequenza di operazioni viene eseguita dal DBMS, purché gli venga
trasmesso un opportuno comando (interrogazione) nel linguaggio SQL:
dove SELECT, FROM e WHERE sono parole riservate del linguaggio SQL.
STRUTTURA DEL COMANDO
Una interrogazione (query) SQL agisce sulle relazioni definite nella base
di dati, e restituisce come risultato una relazione.
questa viene in generale visualizzata sul monitor, oppure stampata; può
anche essere memorizzata nella base di dati o può essere utilizzata in
altre interrogazioni.
SELECT Attributo1,Attributo2,...
Esempio:
SELECT Titolo, CasaEd
FROM Relazione1,Relazione2,...
Esempio:
FROM Catalogo
WHERE Condizione
Esempio:
restituisce la relazione
Invece l’interrogazione
SELECT Titolo, CasaED
FROM Catalogo
restituisce la relazione
SELECT Attributo1,Attributo2,...
FROM Relazione1,Relazione2,...
[WHERE Condizione]
Olga 30 41 Luigi 50 40
Sergio 85 35 Franco 60 20
Luisa 75 87 Olga 30 41
Nome e reddito delle persone con meno di trenta anni
Sergio 85 35
PROJNome, Reddito(SELEta<30(Persone))
Luisa 75 87
SELECT Nome, Reddito
FROM Persone
WHERE Eta < 30
SELECT, abbreviazioni (alias)
SELEta<30(Persone)
SELECT *
FROM Persone
WHERE Eta < 30
Proiezione, senza selezione
PROJNome, Reddito(Persone)
SELECT *
FROM Persone
WHERE reddito > 25 and (eta < 30 or eta > 60)
EVITARE I DUPLICATI
SELECT CasaEd
FROM Catalogo
Se una casa editrice è presente nel catalogo con 1000 libri, il suo nome
comparirà 1000 volte nel risultato
Obiettivi
ampliare la query con qualche nuovo termine
introdurre gli operatori.
In particolare impareremo a:
capire cos’è una espressione e come si utilizza
capire cos’è una condizione e come si utilizza
familiarizzare con la clausola WHERE
imparare ad usare gli operatori aritmetici, di confronto, di caratteri,
logici e di insiemi
conoscere altri utili operatori
ESPRESSIONI
La seguente espressione:
WHERE NOME = ‘ROSSI’
contiene una condizione di una espressione booleana. Questa condizione potrà
essere TRUE (vera) o FALSE (falsa) rispettivamente se la colonna NOME
contiene ROSSI oppure no.
CONDIZIONI - I
Tutte le volte che si vuole trovare un particolare elemento o gruppo di
elementi in un database, occorre specificare una o più condizioni.
Le condizioni sono introdotte dalla clausola WHERE.
nell’esempio precedente la condizione è NOME = ‘ROSSI’. Per trovare
tutti gli impiegati che hanno lavorato più di 100 ore la condizione
potrebbe essere: NUMERODIORE > 100
Esempi
· AnnoEd > 1980 and CasaEd = “Feltrinelli”
· AnnoEd = 2000 and (CasaEd = “Einaudi” or CasaEd = “Mondadori”)
Viene dapprima calcolata la SELECT tra parentesi, ed il suo risultato viene utilizzato
per valutare la condizione; La SELECT esterna restituisce come risultato la CasaEd e
L’Anno della più recente edizione dell’ Amante presente nel Catalogo
Gli operatori sono gli elementi utilizzati all’interno delle espressioni per
specificare le condizioni necessarie a caricare i dati.
Possono essere divisi nei seguenti gruppi:
aritmetici
di confronto
di caratteri
logici
di insieme
1. + (somma) 4. * (moltiplicazione)
2. - (sottrazione) 5. % (modulo o resto)
3. / (divisione)
2*6+9/3 vale 12 + 3 = 15
mentre l’espressione
2 * (6 + 9) / 3 vale 2 * 15 / 3 = 10
OPERATORI ARITMETICI: SOMMA (+)
Oltre che aver creato la nuova colonna questa query ha corretto (solo sullo
schermo) i nomi di quelle errate.
OPERATORI ARITMETICI: DIVISIONE (/)
L’operatore divisione ha un solo significato, per vedere gli effetti di una
vendita a metà prezzo basta digitare la seguente istruzione:
10 5
SQL> SELECT * FROM RESTI
8 3
23 9
1024 16
E’ possibile creare una nuova colonna, RESTO, dove registrare il resto della
divisione tra NUMERATORE e DENOMINATORE
10 5 0
8 3 2
23 9 5
1024 16 0
OPERATORI DI CONFRONTO
Questi operatori confrontano le espressioni e restituiscono uno di questi
tre valori: TRUE, FALSE, Unkown. I primi due sono semplici da
spiegare, TRUE significa vero e FALSE significa falso, il terzo,
Unknow, identifica l’assenza di dati in una colonna, cioè NULL.
Pomodori 3.40
Patate 5.10 SQL> SELECT * FROM PREZZO
Banane 6.70 WHERE PREZZOINGROSSO > 4.50;
ELEMENTO PREZZOINGROSSO
Patate 5.10
Banane 6.70
Rape 4.50
Arance 8.90
Per trovare gli amici tranne ALE (cioè con il nome diverso da ALE):
RENE DORSO 6
OPERATORI DI CARATTERE: LIKE
L’operatore LIKE consente di estrarre dati che somigliano ad un certo schema
RENE DORSO 6
FARINGE GOLA 3
A LIKE maschera
A NOT LIKE maschera
Controlla che il valore dell’attributo A sia o non sia conforme alla maschera.
maschera è una sequenza qualunque di caratteri che può contenere i
caratteri speciali “ - “ e “ % ”
Una parola è conforme alla maschera se
· I caratteri della maschera diversi da – e da % coincidono con quelli
della parola.
· Al carattere – nella maschera corrisponde un qualunque carattere
della parola
· Al carattere % nella maschera corrisponde una qualunque sequenza,
anche vuota, di caratteri nella parola
ESEMPIO
NOMECOMPLETO
ROSSI ALE
BIANCHI SABY
BROWN JO
NERI ALE
OPERATORI LOGICI
L’operatore logico AND indica che entrambe le espressioni che si trovano ai suoi lati
devono essere soddisfatte per restituire il valore TRUE (vero). Se una solo delle
espressioni non è soddisfatta l’operatore AND restituisce FALSE.
Ad esempio, per sapere quali impiegati hanno lavorato per l’azienda per 5 anni o meno
ed hanno utilizzato più di 20 giorni di ferie, si può scrivere:
L’operatore logico OR puo’ essere utilizzato per combinare una serie di condizioni. Se
una di queste è soddisfatta viene restituito TRUE
L’operatore OR richiede che una soltanto delle condizioni sia vera affinchè dati possano essere
restitutiti
OPERATORI LOGICI: NOT
COGNOME COGNOME
ABITA ABITA
BRAVO BACCO
SQL> SELECT COGNOME FROM CALCETTO
CARLINI CARLINI
UNION
DECCA SELECT COGNOME FROM CALCIO; DINI
ESTERLE ESTERLE
COGNOME
FUNDARI FALCONI
ABITA
GIANI GIANI
BACCO
calcett calcio
o BRAVO
CARLINI
DECCA
DINI
ESTERLE A C B
FALCONI
Sono stati esclusi i doppioni FUNDARI A+B-C
GIANI
OPERATORI DI INSIEMI: UNION
L’operatore UNION ALL restituisce il risultato di due query incluse le righe
duplicate.
Esempio: quante persone giocano al calcetto e quante al calcio?
SQL> SELECT COGNOME FROM CALCETTO
UNION ALL
SELECT COGNOME FROM CALCIO; A C B
COGNOME
ABITA
COGNOME
A+B
ABITA
BRAVO
BRAVO
CARLINI
CRLINI
DECCA COGNOME
DECCA
ESTERLE ABITA
ESTERLE
FUNDARI BACCO
FUNDARI
GIANI CARLINI
GIANI
calcett DINI
o ABITA
ESTERLE
BACCO
FALCONI
CARLINI
GIANI
DINI
calcio
ESTERLE
calcett A C B calcio
o
COGNOME COGNOME
ABITA ABITA
BRAVO BACCO
CARLINI CARLINI
COGNOME
DECCA DINI
ABITA
ESTERLE ESTERLE
CRLINI
FUNDARI FALCONI
ESTERLE
GIANI GIANI
GIANI
COGNOME COGNOME
ABITA COGNOME ABITA
BRAVO BACCCO BACCO
CARLINI DINI CARLINI
DECCA FALCONI DINI
ESTERLE ESTERLE
FUNDARI FALCONI
A C B
GIANI GIANI
calcett A-C calcio
o
select *
from impiegati
where eta > 40 or eta is null
Interrogazioni su più relazioni
SELECT Film.Titolo
FROM Film, Attori
WHERE Film.CodFilm = Attori.CodFilm
and Attori.Attore = “C.Eastwood”
SELECT F.Titolo
FROM Film F, Attori A
WHERE F.CodFilm = A.CodFilm
and A.Attore = “C.Eastwood”
JOIN
R1(A1,A2) R2(A3,A4)
e si voglia estrarre Cognome e Nome dei Clienti che hanno noleggiato dvd
relativi a film in cui recitano attori francesi
ESEMPIO DIFFICILE
Cognome e Nome sono attributi della relazione Clienti.
DVD è collegata a Film tramite CodiceDVD, Film è collegato a Recita tramite CodiceDVD, ed infine Recita è
collegato con Attori tramite Nome; finalmente in Attori troviamo l’attributo Nazionalità, e possiamo quindi
verificare la condizione di ricerca.
Dvd
164
Persone
Maternità Madre Figlio
Franco Aldo
ALTRI ESEMPI - Selezione, proiezione e join
I padri di ogni persona
SQL consente di estrarre dalla Base di Dati informazioni che non sono
esplicitamente presenti, ma si ottengono da quelle presenti utilizzando
opportune funzioni dette funzioni di aggregazione.
Nome e reddito delle persone con meno di trenta anni in ordine alfabetico
Persone Persone
L’uso del predicato is [not] null è l’unico modo per stabilire se una dvd è o non è
noleggiat0.
Sistemi per il recupero delle informazioni
ESERCIZI
ESERCIZIO 1
Nell’ esercizio che segue sono dati degli schemi di Basi di Dati
relazionali, e delle richieste di informazioni da estrarre dalle Basi di
Dati.
SCHEMA RELAZIONALE:
SCHEMA RELAZIONALE:
SCHEMA RELAZIONALE:
In SQL:
1. Creare il Database
2. Città con un aereoporto di cui non è noto il numero di piste
3. Città e orario di partenza dei voli del lunedì
4. Nazione e numero piste dell’aereoporto da cui parte il volo con
IdVolo=‘A001’
2 – Città con un aeroporto di cui non è noto il numero di piste
SELECT Citta FROM Aereoporto WHERE NumPiste IS NULL