Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni31 pagine

Base Di Dati Notes

Il documento fornisce una panoramica dettagliata sui sistemi di gestione delle basi di dati (DBMS), evidenziando le loro caratteristiche, come la gestione di dati condivisi, persistenti e affidabili. Viene discusso il modello relazionale e le sue componenti, come schemi e istanze, oltre ai vari livelli di astrazione nella rappresentazione dei dati. Infine, il documento esplora i linguaggi utilizzati nei DBMS, come DDL e DML, per la definizione e manipolazione dei dati.

Caricato da

Ellen Nicolle
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni31 pagine

Base Di Dati Notes

Il documento fornisce una panoramica dettagliata sui sistemi di gestione delle basi di dati (DBMS), evidenziando le loro caratteristiche, come la gestione di dati condivisi, persistenti e affidabili. Viene discusso il modello relazionale e le sue componenti, come schemi e istanze, oltre ai vari livelli di astrazione nella rappresentazione dei dati. Infine, il documento esplora i linguaggi utilizzati nei DBMS, come DDL e DML, per la definizione e manipolazione dei dati.

Caricato da

Ellen Nicolle
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

1

Base di Dati
Base di Dati 1
Intro 3
DBMS e file system 4
Schema (logico) 4
Modelli dei dati 4
Altri modelli dei dati 5
Schema e istanza 5
Livelli nella rappresentazione dati in DBMS 5
Indipendenza dei dati 6
Linguaggi di un DBMS 6
Il modello relazionale 7
Attributi e schema di relazione 7
Schema di base di dati 8
Informazione incompleta 8
Valore NULL 8
Vincoli di integrità 8
Chiavi 9
Vincolo di integrità referenziale/ Chiavi esterne 10
Structured Query Language 13
Notazione 13
Data De nition Language (DDL) 13
Tipi di dato 13
Vincoli di integrità (DDL) 14
Creare una relazione 14
Creazione dei vincoli di integrità 15
PRIMARY KEY e UNIQUE 15
FOREIGN KEY – ON DELETE & ON UPDATE 16
Gestione relazioni (DDL) 18
Cancellazione di una relazione 18
Modifica di schema di relazioni 18
Formato della query 19
fi
2
Clausola di qualificazione (WHERE) 20
DISTINCT – Gestione valori duplicati 20
Operatori di confronto 20
Espressioni in clausola di proiezione (SELECT) 21
Espressioni aritmetiche 22
Espressioni e funzioni per stringhe 22
Espressioni e funzioni per date e tempi 22
Espressioni e funzioni per date e tempi 22
Ordinamento del risultato 22
SQL – Operazione di JOIN 24
JOIN 24
Come funziona 24
JOIN ON 25
JOIN USING 25
LEFT JOIN 25
RIGHT JOIN 26
FULL JOIN 26
NATURAL JOIN 27
CROSS JOIN 27
SQL – Funzioni di gruppo 28
GROUP BY 29
HAVING 29
3
Intro
Sistema informativo gestisce e rendere fruibile le informazioni, fornisce:
- Strumenti per la rappresentazione dell’informazione (attraverso una codifica).
- Programmi applicativi e di sistema che operano sulla rappresentazione per realizzare le
funzioni necessarie alla gestione dell’informazione stessa
Il dato ha bisogno di un contesto perché venga interpretato, così da estrarre le informazioni. Il
sistema informativo ha anche lo scopo di fornire il contesto interpretativo dei dati.

Base di dati (database): collezione di dati tra loro correlati, utilizzati per rappresentare le
informazioni di interesse in un sistema informativo

Sistema di gestione di basi di dati (Database Management System – DBMS): sistema


software, centralizzato o distribuito, che fornisce gli instrumenti necessari a gestire le informazioni

- Una base di dati è una collezione di dati gestita da un DBMS.


- I DBMS sono software capaci di gestire collezioni di dati che possono essere grandi,
condivise, persistenti .
- Garantiscono affidabilità e privacy

• I database possono essere grandi (large) perché possono contenere svariate migliaia di miliardi
di byte e sono, in generale, certamente più grandi della memoria principale disponibile. Come
conseguenza, un DBMS deve gestire i dati in una memoria secondaria. Ovviamente possono
esistere anche database piccoli, però i sistemi devono essere in grado di gestire i dati senza
essere limitati dalle loro dimensioni, eccezion fatta per le dimensioni fisiche dei dispositivi in uso.

• I database sono condivisi (shared), nel senso che diverse applicazioni e diversi utenti devono
essere in grado di avere accesso ai dati che sono di comune interesse. In questo modo la
ridondanza dei dati viene ridotta, dal momento che le ripetizioni sono evitate, e
conseguentemente, si riduce anche la possibilità di inconsistenza dei dati. Per assicurare un
accesso condiviso ai dati da parte di diversi utenti che operano in modo simultaneo, il DBMS fa
uso di un meccanismo specifico chiamato controllo di concorrenza (concurrency control).

• I database sono persistenti, cioè hanno un ciclo di vita che non è limitato a delle singole
esecuzioni dei programmi che li adoperano. Al contrario, i dati che sono gestiti da un programma
nella memoria principale hanno una vita che inizia e che finisce proprio con l'esecuzione del
programma (non hanno la caratteristica di persistenza)
• La capacità di un DBMS di preservare il contenuto del database o, nella peggiore delle ipotesi
virgola di consentirne la ricostruzione in caso di malfunzionamento dell'hardware o del software
ne assicura la affidabilità (reliability). Proprio per questo scopo, un DBMS fornisce specifiche
funzioni di backup e recovery.
• Per ciò che concerne la privacy, ogni utente, che è riconosciuto tramite il suo username che è
specifico per consentire l'accesso a un DBMS, e qualificato a eseguire soltanto certe operazioni
sui dati, attraverso i meccanismi di autorizzazione (authorization).

L'efficienza (efficiency), ovvero la capacità di portare a termine operazioni usando un numero


adeguato di risorse per ciascun utente è una caratteristica che risiede nelle tecniche usate per
l'implementazione di un DBMS.
Per ciò che riguarda l'efficacia (effectiveness), ovvero la capacità di un DBMS di svolgere attività
in modo produttivo, essa non corrisponde a nessuna specifica funzione di un DBMS; ciò non di
4
meno il DBMS fornisce diversi servizi e funzioni per utenti differenti; il compito di progettare un
database e le applicazioni che lo usano mira essenzialmente a garantire una buona efficacia
generale del sistema.

DBMS e file system


la gestione di grandi e persistenti collezioni di dati è anche possibile attraverso strumenti meno
sofisticati rispetto ai DBMS
• I file system sono stati introdotti proprio per gestire i dati locali per una specifica procedura o
applicazione.
• Al contrario, i DBMS sono concepiti e creati per estendere le funzioni di un file di sistema,
consentendo l'accesso condiviso agli stessi dati da parte di più di un utente e da più applicazioni,
anche assicurando molti altri servizi in modo integrato.
• Chiaramente i DBMS usano i file per l'immagazzinamento di dati, sebbene i file usati dai DBMS
permettano una organizzazione dei dati ad un livello di complessità un po' più elevato.

Schema (logico)
È un meccanismo fondamentale del DBMS: schema (o schema logico), che descrive il
contenuto della base di dati tramite un formalismo ad alto livello, ovvero il modello dei dati. Il
modello dei dati esula dai dettagli dell’effettiva implementazione fisica della base di dati

Modelli dei dati


È una combinazione di costrutti usati per organizzare i dati.
Componenti del data model: un insieme di strutture dati + linguaggi per:
• Specificare i dati tramite le strutture previste dal modello
• Aggiornare le strutture
• Specificare vincoli sulle strutture
• Manipolare e ricercare i dati
Ogni data model fornisce meccanismi di strutturazione, simili al tipo di costruttori dei linguaggi di
programmazione, e che consentono la definizione di nuovi tipi di dato basati sui costruttori applicati
ai tipi elementari predefiniti
Il modello relazionale : fornisce il costruttore relazione, il quale rende possibile organizzare i dati
in una collezione di record con una struttura fissa.
• Una relazione è molto spesso rappresentata attraverso una tabella, le cui righe mostrano
record specifici e le cui colonne corrispondono ai campi del record.
• All'interno di una relazione l'ordine delle righe e delle colonne è del tutto irrilevante.

I dati relativi ai corsi universitari e ai loro tutor e all'inserimento dei corsi all'interno del prospetto dei
vari corsi di laurea possono essere organizzati usando due relazioni, quella dei CORSI e quella
PROSPETTO, rappresentate dalle tabelle sopra riportate
• Una relazione può essere vista come una tabella con righe, dette tuple, e colonne contenenti
dati di tipo specificato (ad esempio interi e stringhe)
5
Altri modelli dei dati
• Il modello gerarchico, basato su un uso di strutture ad alberi e di gerarchie virgola che è stato
definito durante la prima fase di sviluppo dei DBMS negli anni 60, ma che è ancora usato in
parecchi sistemi principalmente per motivi di continuità.
• Il modello a reticolo (network), anche noto come modello CODASYL dal nome della conferenza
nel quale è stato definito, basato sull'uso di grafi e risalente agli anni 70.
• L’Object data model, sviluppato negli anni 80 per superare alcune delle limitazioni del modello
relazionale; estende di fatto ai database il paradigma della programmazione orientata agli oggetti.
• eXtended Markup Language (XML)

Schema e istanza
• Indipendentemente dal modello dei dati usato, in un DBMS sono definiti:
• Lo schema (logico) della base di dati, ovvero una descrizione della struttura dei dati,
specificata tramite il modello dei dati (cambia raramente/poco)
• L’istanza della base di dati, ovvero un insieme dei dati presenti in un dato momento in una
base di dati (muta spesso)
• Indipendentemente dal modello dei dati usato, in un DBMS sono definiti:
• Lo schema (logico) della base di dati, ovvero una descrizione della struttura dei dati,
specificata tramite il modello dei dati (cambia raramente/poco)
• L’istanza della base di dati, ovvero un insieme dei dati presenti in un dato momento in
una base di dati (muta spesso)
Il primo passo dello sviluppo di una base di dati è la definizione dello schema; poi si immettono i
dati veri e propri (istanza), che devono conformarsi alla definizione fornita dallo schema

CORSI: vediamo che questa relazione ha due colonne (chiamate attributi), le quali riferiscono i
corsi ai rispettivi tutor.
- Lo schema di questa relazione consiste nella sua intestazione, ovvero nel
nome della tabella, seguita dai nomi dei suoi attributi: CORSI(Corso, Tutor)
- Le righe della tabella (i valori al suo interno – istanza), variano con il tempo
e corrispondono ai corsi che sono effettivamente offerti e ai tutor che li
seguono
- La struttura (corsi con relativi tutor – schema) rimangono pressoché
invariati nel medio-lungo periodo

Livelli nella rappresentazione dati in DBMS


Poiché tra gli scopi del DBMS c’è quello di fornire una
rappresentazione alto livello dei dati, nascondendo dettagli relativi
alla memorizzazione, sono possibili tre livelli di astrazione
• Livello fisico (schema fisico o schema interno): il più basso,
precisa come i dati sono memorizzati ndel DBMS (file, record, ecc.)
• Livello logico (schema logico): una descrizione dell'intero
database per mezzo del modello logico adottato dal DBMS
• Livello esterno (o viste o schema esterno): ovvero la descrizione di una porzione del database
attraverso il modello logico. Uno schema esterno può offrire diverse organizzazioni dei dati per
riflettere il punto di vista di un particolare gruppo di utenti. Pertanto è possibile associare diversi
schemi esterni ad un singolo schema logico: ciascuno di questi schemi esterni fornirà una
prospettiva specifica del database (oppure un sottoinsieme dello stesso).
6
Indipendenza dei dati
I tre livelli garantiscono alcune proprietà ai dati:

• L'indipendenza fisica: consente l'interazione con il DBMS in modo indipendente dagli aspetti fisici
dei dati. Per esempio, è possibile modificare l'organizzazione dei file che implementano le relazioni
o l'allocazione fisica dei file senza influenzare la descrizione ad alto livello dei dati stessi e dei
programmi che usano quei dati. L’accesso a una relazione (cioè al livello logico o esterno) avviene
sempre nello stesso modo, indipendentemente dalla modalità di memorizzazione fisica.

• L'indipendenza logica garantisce che l'interazione coi livelli esterni del database sia
indipendente dal livello logico. Per esempio, è possibile aggiungere un nuovo schema esterno
(vista) per rispondere alle richieste di un nuovo utente, oppure è possibile modificare uno schema
esterno esistente, senza dover modificare lo schema logico e quindi l'organizzazione fisica dei dati
che è sottesa. Allo stesso tempo, è possibile modificare il livello logico mantenendo invariati lo
schema esterno (vista) che è di interesse per un certo utente.

Linguaggi di un DBMS
Tenendo a mente la distinzione tra schemi e istanze possiamo distinguere i linguaggi per database
in modo relativamente simile:
• Data Definition Language (DDL) è un linguaggio usato per definire gli schemi logici, esterni e
fisici, e per gestire le autorizzazioni di accesso al database.
• Data Manipulation Language (DML) è un linguaggio usato per interrogare e aggiornare le
istanze del database.
• Storage Definition Language (SDL) è il linguaggio di definizione delle strutture di
memorizzazione, definisce lo spazio fisico del DB; nella maggior parte dei DBMS la definizione
della corrispondenza tra strutture logiche e di memorizzazione è eseguita automaticamente
7

Il modello relazionale
È un modello logico composto da costrutti che permettono al DBMS di organizzare e gestire i dati.
La sua semplicità ha permesso lo sviluppo di linguaggi dichiarativi per effettuare ricerche sui dati e
consentire l’accesso. Le interrogazioni possono essere espresse mediante:
• Algebra relazionale, in cui le interrogazioni sono espresse applicando
operatori specializzati alle relazioni
• Calcolo relazionale, in cui le interrogazioni sono espresse con formule logiche

Dominio: un insieme (anche infinito) di valori. Esempi: L’insieme dei numeri interi, l’insieme delle
stringhe di caratteri, l’insieme {0, 1}.

In matematica una relazione è un sottoinsieme del prodotto cartesiano A×B di due insiemi A e B,
dove gli insiemi A e B sono due domini diversi. La relazione è un sottoinsieme del prodotto
cartesiano A×B composto da n-ple ordinate e distinte tra loro. Ogni n-pla è ordinata, cioè in un
prodotto cartesiano A×B la prima posizione della n-pla deve essere sempre un elemento di A,
mentre la seconda posizione nella n-pla è sempre un elemento di B.

Le n-ple possono essere anche rappresentate con una tabella. Quindi, ogni tabella è una
rappresentazione di una relazione matematica; ogni colonna della tabella equivale ad un dominio
della relazione, mentre ogni riga della tabella rappresenta una n-pla; si noti che l'ordine delle n-ple
nella tabella non è importante.

Una n-pla viene definita coppia se è composta da due


elementi (a, b), come nel caso dell'esempio sopra descritto.
Viene detta tupla (o record o n-pla) se è composta da più
elementi.
La cardinalità è il numero di tuple appartenenti alla
relazione.

Attributi e schema di relazione


• Ogni colonna della tabella è detta attributo e contiene dati omogenei (del dominio definito, nel
nostro esempio stringa).
• Lo schema di relazione (R) è composto dai nomi degli attributi
R(Autori:stringa, Titoli:stringa, Editori:stringa) R(Autori, Titoli, Editori)
Più formalmente, uno schema di relazione è composto da un simbolo detto nome della relazione,
R, e da un insieme X di nomi di attributi tale che X = {A1, A2, ...An}
8
Schema di base di dati
In una base di dati ci possono essere più relazioni (più tabelle). Lo schema di base dati (Rb) è
l’insieme degli schemi delle relazioni:
Rb = {R1(S1), R2(S2), ... , Rn(Sn)}
Dove Rn sono le relazioni presenti nella base di dati, e Sn è lo schema di ciascuna relazione.
Esempio: la vostra situazione come studenti laureandi...

Informazione incompleta
Non sempre sono disponibili tutte le informazioni sulle entità che compongono il dominio
applicativo e che vogliamo rappresentare nella base di dati. Ciò significa che alcune tuple possono
non avere uno o più valori per uno o più attributi.

Per rappresentare
l’informazione
incompleta, vuota,
o incerta
potremmo usare un
«valore speciale» appartenente al dominio dell’attributo
• Esempio, per anno di laurea 1000
L’uso di valori di dominio potrebbe generare confusione , dal momento che la distinzione tra valori
che hanno effettivamente un significato e valori invece fittizi (placeholder) non è trasparente.

Valore NULL
Si introduce il valore NULL
• Non fa parte di alcun dominio
• Rappresenta sia valore ignoto (informazione incompleta), sia valore non definita (valore nullo)
• NULL deve essere impiegato con cautela

Vincoli di integrità
Il concetto di vincolo di integrità (integrity constraint) è stato introdotto come una proprietà che
deve essere soddisfatta da tutte le istanze corrette di database. Ciascun vincolo deve essere visto
come un predicato che associa il valore vero o falso a ciascuna istanza. In generale, associamo un
set di vincoli ad uno schema di database e consideriamo corrette (o legali) le istanze che
soddisfano tutti i vincoli

I vincoli intra-relazionali (all’interno della stessa tabella) sono quelli la cui soddisfazione è definita
relativamente a una singola relazione del database;
• Un vincolo di tupla (tuple constraint) è un vincolo che può essere valutato su ogni
singola tupla indipendentemente dalle altre: i vincoli relativi ai primi due casi ricadono in
questa categoria
• I vincoli definiti riguardo ai singoli valori come nel primo caso (nel quale per l’attributo voto
solo i valori tra A e F sono concessi), sono chiamati vincoli di valore o vincoli di dominio
(value o domain constraints) , dato che impongono una restrizione sul dominio dell’attributo
I vincoli inter-relazionali sono quelli che coinvolgono più di una relazione; come si vede
nell’esempio 4, la situazione non accettabile potrebbe essere evitata richiedendo che l’attributo
Matricola appaia nella relazione ESAMI soltanto se appare anche nella relazione STUDENTI
9

I vincoli sono specificati al momento della definizione dello schema. Una istanza corretta di una
relazione rispetta tutti i vincoli. Il DBMS non deve consentire istanze scorrette. La verifica dei
vincoli da parte del DBMS rende i dati memorizzati più aderenti alla realtà da modellare e limita gli
errori di data entry.
Il linguaggio per la creazione di relazioni consente di specificare nella definizione di una relazione
quali sono quegli attributi che non possono mai assumere un valore nullo. Questo evita che NULL
compaia laddove renderebbe scarsamente intellegibile una relazione

Chiavi
Una chiave è un insieme di attributi che è usato per identificare in modo non ambiguo le tuple di
una relazione. In un database relazionale una chiave è uno o più attributi che identificano le tuple
di una tabella (relazione) in modo univoco.
Definizione formale di chiave:
Sia S(A1, A2, ... An) uno schema di relazione e Us l’insieme degli attributi di S.
Un insieme X ⊆ Us è chiave di S se verifica le seguenti proprietà:
[Link] qualsiasi istanza di S, non esistono due tuple distinte in essa che abbiano lo stesso valore
per tutti gli attributi in X

[Link] sottoinsieme proprio di X verifica la proprietà 1

• Un insieme di attributi che verifica (1), ma non (2), è detto super- chiave

L’esistenza delle chiavi garantisce l’accessibilità a ciascun dato della base di dati. Le chiavi
consentono di correlare i dati in tabelle diverse, il modello relazionale ha una rappresentazione
delle associazioni basate su valori.
10
Una relazione può avere più di un insieme X di attributi che verificano le proprietà (1) e (2),
possono esistere più chiavi candidate.
Le chiavi delle relazioni vengono individuate mediante esame del dominio applicativo e dei relativi
vincoli. Una relazione ha sicuramente almeno una chiave (Us soddisfa sempre la proprietà (1)).

Dalle chiavi candidate si identificano la chiave


primaria e le chiavi alternative
La chiave primaria viene scelta dalle candidate,
scegliendo tra quelle candidate che hanno il
minor numero di attributi e selezionando quella
chiave che – verosimilmente – è più
frequentemente usata nella interrogazioni
• Le chiavi primarie non assumono valori
NULL
• Le chiavi alternativi possono assumere
valori NULL.

Vincolo di integrità referenziale/ Chiavi esterne


I vincoli di integrità referenziale collegano diverse tabelle (relazioni) tramite i valori in comune.
Sono anche detti chiavi esterne (foreign key).
Chiave esterna – definizione:
Siano:
• S e S’ due relazioni
• Y ⊆ Us’ una chiave per S’ (con = Us’ l’insieme degli attributi di S’)
• X ⊆ Us un insieme di attributi di S tale che Y e X contengano lo stesso numero di attributi e di
dominio compatibile
X è una chiave esterna di S su S’ se, per qualsiasi istanza IS e IS’ per ogni tupla t di IS esiste una
tupla t’ di IS’ tale che t[X] = t’[Y]

Un vincolo di integrità (o chiave esterna) tra un insieme di attributi X di una relazione R1 e un’altra
relazione R2 è soddisfatto se i valori in X di ogni tupla dell’istanza di R1 appaiono come valori della
chiave (primaria) dell’istanza di R2.
I valori comuni tra due tabelle diverse correlano l’informazione.
Le correlazioni tra i valori devono essere coerenti: I valori assunti dalla chiave esterna nella
relazione referente possono essere esclusivamente valori assunti effettivamente dalla chiave
primaria della tabella riferita.
11

• La Primary Key (PK) è una colonna o un insieme di colonne che identifica in modo univoco ogni
riga in una tabella. Ogni tabella può avere solo una chiave primaria. I valori della PK devono
essere univoci per ogni riga e l'attributo (o gli attributi) scelti come PK non possono contenere
valori NULL.
• La Superchiave (SK) è un insieme di attributi (colonne) che può identificare in modo univoco
ogni riga di una tabella. Qualsiasi SK deve garantire che nessuna riga nella tabella condivida gli
stessi valori per quell'insieme di colonne che compongono la superchiave. La SK è non-minimal,
può includere più attributi del necessario per identificare in modo univoco una riga. Ad esempio, in
una tabella di dipendenti, una superchiave potrebbe includere l'ID del dipendente (che è sufficiente
per garantire l'unicità) e il nome, anche se il nome non è necessario per garantire l'unicità.

Una SK è un insieme di colonne che identifica univocamente le righe di una tabella, ma può
contenere attributi extra non necessari.
• Una chiave candidata è una SK minimal, cioè senza attributi superflui. Possono esistere più
chiavi candidate per una relazione.
• La PK è una chiave candidata scelta come identificatore principale della tabella.
• Una Chiave Esterna (FK-Foreign Key) è una colonna o un insieme di colonne in una tabella che
serve per creare un legame tra due tabelle.
• Una FK fa riferimento alla PK di un'altra tabella.
• Può contenere valori NULL, a meno che non sia specificato diversamente.
12
13

Structured Query Language


Structured Query Language (SQL): Si tratta del linguaggio per la definizione e manipolazione dei
dati più diffuso, supportato (oggi) dalla totalità di DBMS relazionali. Possiede istruzioni per:
• Definire lo schema di una base di dati relazionale
• Leggere/scrivere i dati
• Definire lo schema di tabelle derivate • Definire i privilegi di accesso
• Gestire le transazioni

È un linguaggio dichiarativo: Descrive cosa fare, non come fare. È ad un livello di astrazione «più
alto» dei linguaggi di programmazione tradizionali. Si basa sull’algebra relazionale (per le
operazioni di query). Le interrogazioni SQL operano su un gruppo di tabelle e producono,
come risultato, una tabella (approccio set-oriented). Per converso, i linguaggi di programmazione,
per operare su una tabella, leggono le tuple una a una (approccio tuple oriented)

Idealmente suddiviso in:


• Data Manipulation Language (DML)
• Data Definition Language (DDL)
• Stored Definition Language (SDL) – istruzioni (non standardizzate) per la definizione fisica del
database

Notazione
• Parole chiave del linguaggio: MAIUSCOLO
• Termini variabili: racchiusi tra < ... >
• Componenti opzionali: racchiusi tra [ ... ]
• Elementi reiterabili: *
• Opzioni esclusive: |

Data Definition Language (DDL)


• Creazione schema base di dati: CREATE
• Modifica schema base di dati: ALTER
• Cancellazione tabella: DROP
CREATE TABLE <nome_tabella> (<specifica_colonna> [,<specifica_colonna>] * )

• CREATE, ALTER, DROP sono usati anche per la definizione di viste


• CREATE e DROP sono usati anche per la definizione di indici
• GRANT e REVOKE sono comandi per la concessione e revoca di privilegi sulle risorse

Tipi di dato
14

I valori carattere vanno racchiusi tra apici ‘stringa’ e si distingue tra valori maiuscoli e
minuscoli.

BLOB & CLOB: Usati per memorizzare stringhe di bit o caratteri di elevata dimensione (grandi
immagini, grandi testi)

Vincoli di integrità (DDL)


Creare una relazione

• <nomeAttributo> distinto da altre colonne nella relazione


• <dominio> uno dei tipi di dati SQL
• <valore default> e clausola DEFAULT – un valore del dominio, assunto dalle tuple se nessun
valore è specificato per la colonna
15
Creazione dei vincoli di integrità
Con il comando CREATE TABLE in SQL è possibile specificare alcuni tipi di vincoli di integrità:
• NOT NULL – obbligatorietà di colonne
• PRIMARY KEY e UNIQUE – Chiavi
• FOREIGN KEY – Chiavi esterne
• CHECK – vincoli su colonna o tupla [dopo linguaggio di interrogazione]

I vincoli vengono verificati dopo ogni istruzione SQL che opera sulle relazioni soggette a vincolo
• Inserimento di nuovi dati
• Modifica del valore di colonne soggette a vincolo
Se il vincolo è violato, l’istruzione SQL che causa la violazione genera un errore di esecuzione

PRIMARY KEY e UNIQUE


Come detto, una relazione può avere una chiave primaria (PRIMARY KEY) e una o più chiavi
alternative (UNIQUE).
La parola UNIQUE garantisce che non esistono due tuple della relazione che, per una colonna,
condividano lo stesso valore (non nullo). PRIMARY KEY impone per ogni tupla che i valori delle
colonne specificate siano non nulli e diversi da quelli di ogni tupla. La colonna PRIMARY KEY,
unica in ogni tabella, non può assumere valori NULL.

Esempio: Schema di una relazione per il DB di una biblioteca, che presta i suoi volumi ai tesserati;
la biblioteca possiede un solo esemplare di ogni volume. Ci occorreranno due tabelle, una per i
volumi a prestito (Catalogo) e una per l’anagrafica dei tesserati (Iscritti).

• In CATALOGO, poiché ogni volume è identificato con un codice, CodLib è la chiave primaria.
• Per mantenere l’integrità del DB, e tenere sempre correttamente traccia dei volumi, è anche
necessario che nessuna tupla presenti mai valori identici per la coppia CodLib e Utente.
• In altre parole, ogni libro deve essere in prestito presso un utente diverso.
• Si noti che le colonne UNIQUE possono contenere valori NULL
• In ISCRITTI, la specifica della chiave primaria coinvolge due attributi, pertanto si adotta la
sintassi che prevede che la dichiarazione delle chiavi seguano quella della tabella
• Questa è l’unica sintassi possibile in caso di chiavi multi-attributo.
Nota UNIQUE:
Si noti la differenza tra queste due situazioni:
Nel primo caso il vincolo impone una condizione tale per cui non ci
possono essere due righe che abbiano lo stesso nome e lo stesso
cognome; nel secondo caso, il vincolo può essere violato sia se lo stesso
nome o lo stesso cognome appaiono più di una volta all’interno delle
rispettive colonne.
16
Nota UNIQUE:

La combinazione UNIQUE NOT NULL consente di


speci care una chiave alternativa che non ammette valori
nulli

FOREIGN KEY – ON DELETE & ON UPDATE

ON DELETE specifica cosa fare se una tupla della relazione riferita viene cancellata nella tabella
riferita. Sono presentate quattro opzioni:

ON UPDATE specifica cosa fare se una tupla della relazione riferita viene modificata/aggiornata
nella tabella riferita. Sono presentate quattro opzioni:

Esempi:
Foreign key (1):
Con riferimento all’esempio della biblioteca precedente,
possiamo specificare per il nostro DB le chiavi esterne,
possiamo creare la tabella CATALOGO come segue:
- Se viene cancellato un utente da ISCRITTI, si mantiene
traccia del prestito ma il valore dell’attributo Utente in
CATALOGO per quella tupla è “missing”
- Se viene aggiornato un utente in ISCRITTI, modificando
il CodFisc di un utente, allora lo stesso valore si
aggiornerà in Utente.
fi
17
Foreign key (2):

Foreign key (3):

Mediante il modello relazionale, vogliamo rappresentare la relazione logica che sussiste tra i vigili
urbani che segnalano le infrazioni. Sappiamo che ogni vigile è identificato da un numero di
matricola, nome, cognome; sappiamo inoltre che le infrazioni sono rappresentate con un codice
dell’infrazione, la data, la targa del veicolo interessato (composta da provincia e numero), il vigile
che ha rilevato l’infrazione
•In Infrazioni compare una matricola
(85667) che non è rappresentato in
Infrazioni

•Il vincolo di integrità referenziale


(foreign key) non è rispettato: esso
impone che tutti i valori degli attributi identificati come chiavi
esterne appaiano come valori della chiave primaria della
relazione riferita (Vigili). In questo caso, la matricola 85667 è
mancante!

ON DELETE:
• Con ON DELETE CASCADE, qualora un cliente voglia essere
rimosso (cancellazione dati dal DB aziendale) tutti gli ordini a lui
associati saranno automaticamente eliminati.
• Così ci si assicura che non ci siano Ordini «orfani» cui non
corrisponderebbe un cliente
• Utile per le pratiche del GDPR

ON UPDATE:
• Se l’ID del cliente viene aggiornato in Customers, l’ID nella tabella
Orders viene reso NULL
• Utile per dissociare gli ordini «vecchi» da quelli associati a un cliente
con un ID «vecchio», senza cancellarli
18

Gestione relazioni (DDL)


Cancellazione di una relazione
Comando DROP: cancella tutte le tuple della relazione ed è necessario specificare tra:
• RESTRICT: la relazione viene cancellata soltanto se non è riferita da altri elementi dello
schema della base di dati
• CASCADE: la relazione e tutti gli elementi dello schema che la riferiscono sono cancellati

DROP TABLE <nome_tabella> {RESTRICT | CASCADE}

Consideriamo ancora lo schema della base di dati:

• DROP TABLE Film RESTRICT→Il comando NON ha effetto


• DROP TABLE Film CASCADE→Cancellazione di entrambe le relazioni

Modifica di schema di relazioni


• Comando ALTER
ALTER TABLE <nome_tabella> <modifica>
Modifiche concesse:
• Aggiungere una colonna
• Definizione, cancellazione, modifica (ovvero sostituzione di un valore esistente) del valore di
default di una colonna (esistente)
• Eliminazione di un attributo
• Definizione nuovo vincolo di integrità o eliminazione vincolo esistente

Attenzione: se si specifica che il nuovo attributo debba essere


NOT NULL, cosa succede ai dati già esistenti – che non
avrebbero valori per il nuovo attributo?
•ALTER TABLE ... ADD COLUMN consente solo di
aggiungere colonne che possano ospitare valori NULL oppure
colonne per le quali si possa specificare un valore di default
(con SET DEFAULT <valore>)
•ALTER TABLE <nome_tabella>
•ADD COLUMN <colonna>
•ALTER COLUMN <colonna> {SET DEFAULT <val> DROP
DEFAULT}
•DROP COLUMN <nome colonna> {RESTRICT | CASCADE}
•ADD CONSTRAINT [nome vincolo] <specifica vincolo>
DROP CONSTRAINT <nome vincolo> {RESTRICT |
CASCADE}
19
Formato della query
Il formato «base» di una query SQL è:

1. La valutazione inizia dalla clausola FROM


2. Poi viene applicata la clausola di qualificazione (WHERE)
3. Infine sia applica la clausola di proiezione (SELECT)

Una query considera le righe (i.e., seleziona – SELECT) che appartengono al prodotto cartesiano
delle relazioni indicate nella FROM clause e seleziona quelle che soddisfano la condizione
espressa nella clausola di qualificazione (WHERE).

La query SQL viene passata al query optimizer per l’esecuzione, ovvero al componente del DBMS
che analizza la query, seleziona una strategia di esecuzione, formula una query equivalente nel
linguaggio procedurale interno al DBMS – nascosto agli occhi dell’utente. In questo modo,
chiunque scriva la query SQL può ignorare il lavoro di traduzione e ottimizzazione a carico del
DBMS
L’ordine con cui appaiono le colonne nella relazione risultato è determinato dall’ordine in cui le
colonne sono elencate nella clausola di proiezione (SELECT)
Se si usa *, l’ordine è quello delle relazioni rappresentate nella clausola FROM – cioè le colonne
specificate nel comando CREATE TABLE di ciascuna relazione.

Esempi:

1. Si considerino le due relazioni.


Trovare il valore del salario degli impiegati
di cognome «Bianchi»:

AS (Alias) permette di rinominare le tabelle o i suoi attributi. Se non ci sono impiegati il


cui cognome è “Bianchi”, la query restituisce un risultato vuoto; altrimenti restituisce una relazione
con tante righe quanti sono gli impiegati con il cognome specificato

2. Trovare tutte le info sugli impiegati chiamati «Torta»:


20
3. Trovare il nome e il cognome degli impiegati e le città nelle quali essi lavorano.

Or

Clausola di qualificazione (WHERE)


Condizione o filtro di ricerca. È un’espressione booleana costruita combinando predicati
semplici con gli operatori and, or e not e gli operatori matematici di comparazione (<, >, =).
La sintassi dà la precedenza all’operatore not nella valutazione, ma non specifica una precedenza
tra and e or: pertanto per stabilire tale precedenza si ricorre alle parentesi.
Proiezione (senza where): Sono possibili anche query
troncate della clausola di qualificazione (WHERE)

Esempio:
Trovare il nome e il cognome degli impiegati che lavorano nell’ufficio 20 nel dipartimento
Amministrazione.

DISTINCT – Gestione valori duplicati


La clausola DISTINCT dopo SELECT permette di recuperare i risultati effettivamente diversi tra
loro (ovvero «distinti»).

Operatori di confronto
SQL fornisce numerosi operatori di confronto, oltre a quelli già visti.
Alcuni sono ridondanti, mentre altri sono stati introdotti per abilitare più
funzionalità.

• L’operatore BETWEEN consente di trovare tuple che


contengono valori di una colonna in un intervallo
specificato. Consideriamo la seguente relazione:
21
• L’operatore IN (ricerca valore in insieme) consente il recupero di tuple che contengono uno tra i
valori di un insieme specificato.

• L’operatore LIKE (confronto per stringhe) consente operazioni di pattern matching su colonne di
tipo stringa

Chiede tutti gli attributi (*) dalla relazione Libri laddove la seconda lettera del Titolo è r.

Espressioni in clausola di proiezione (SELECT)


Le espressioni possono comparire nella clausola di proiezione e nelle espressioni di
assegnamento usate nel comando UPDATE e nella specifica di colonne derivate. Sono formulate
applicando funzioni (aritmetiche, su stringhe, su date, tempi).

Un’espressione usata nella clausola di proiezione origina una tabella con una colonna non
presente nella relazione su cui è effettuata la query – la colonna “aggiunta” è detta virtuale, in
quanto derivata dalle colonne dette di base.

• La colonna virtuale non è fisicamente memorizzata nella relazione, ma è dinamicamente


derivata da colonne base, però è possibile specificare nomi alternativi per le colonne virtuali
usando la clausola AS <nome colonna>.
Poiché la clausola di proiezione è l’ultima clausola dell’interrogazione ad essere valutata, tali
nomi non possono essere usati nella altre clausole dell’interrogazione.
22
Espressioni aritmetiche
Espressioni e funzioni aritmetiche: oltre agli operatori aritmetici già visti, è prevista la funzione
ABS(n), che ha come argomento un valore numerico n e ne calcola il valore assoluto; e la
funzione MOD(n, b), che ha per argomenti due interi (n, b) e calcola il resto intero della divisione
di n per b.

Espressioni e funzioni per stringhe


Espressioni e funzioni aritmetiche: il principale operatore per stringhe è l’operatore di
concatenazione ||; sono inoltre previste LENGTH(str), che riceve come argomento una stringa
str e ne calcola la lunghezza (numero di caratteri); UPPER(str) e LOWER(str), che
trasformano str in caratteri tutti maiuscoli o tutti minuscoli; SUBSTR(str, m [, n]) che ha per
argomento la stringa str e due interi m e n, estrae da str la sotto-stringa a partire dal carattere di
posizione m fino al carattere di posizione n (o fino alla fine se n non è specificato); TRIM[str1]
FROM str2, che elimina dalla stringa str2 i caratteri in str1 (se quest’ultima non è specificata,
elimina gli spazi).

Espressioni e funzioni per date e tempi


La terna di funzioni CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP restituiscono
rispettivamente la data, il tempo, il timestamp attuale; EXTRACT (q FROM e) estrae da e il campo
corrispondente al qualificatore temporale q – EXTRACT (DAY FROM DATE ’08-10-1876’)
restituisce 8.

Espressioni e funzioni per date e tempi


Date e tempi possono essere usati in espressioni aritmetiche, ad esempio per effettuare sottrazioni
e identificare i tempi (durate); in tali espressioni è possibile usare diverse unità temporali (YEAR,
MONTH, HOUR, MINUTE, SECOND).

Ordinamento del risultato


L’ordine delle tuple risultato di un’organizzazione è determinato dal sistema (dipende dalla
strategia usata per eseguire l’interrogazione)

Si può specificare l’ordinamento dei risultati aggiungendo al termine dell’interrogazione la clausola


ORDER BY, seguita da una o più colonne e chiusa da:
• ASC (opzione di default) per l’ordinamento crescente
• DESC, per l’ordinamento decrescente
23
24

SQL – Operazione di JOIN


JOIN
Il JOIN è l’operazione che consente di combinare due o più tabelle in base ai valori delle colonne
corrispondenti. Date due relazioni A e B, il join viene usato per generare tutte le coppie formate da
una tupla di A e una tupla di B che sono «semanticamente legate» ovvero che sono legate
mediante il meccanismo delle chiavi esterne
I record (le tuple) delle due tabelle A e B vengono combinati insieme in un’unica relazione sulla
base di una condizione (detta predicato di JOIN). La relazione risultante è il prodotto cartesiano di
tutte le righe delle due tabelle che concorrono alla query di JOIN.

• Le relazioni argomento del prodotto cartesiano vanno nella clausola FROM:

• O con la sintassi alternativa:

• Nella clausola WHERE si colloca il predicato di join:

Come funziona
Le tuple che hanno lo steso
IDCliente vengono abbinate,
mentre quelle che non hanno
corrispondenza in nessuna delle
due tabelle non sono incluse nei
risultati
Per i record che hanno una
corrispondenza, tutti gli attributi
della tabella CONTI e tutti gli
attributi della tabella CLIENTI
vengono inclusi nella tabella dei
risultati
Il join effettua il prodotto
cartesiano delle relazioni indicate
nella clausola FROM, applicando
poi la selezione indicata nel
predicato di join.

• Lo schema della relazione risultato è dato dall’unione degli schemi delle relazioni operande
(CONTI e CLIENTI)
• Il grado della relazione risultato è uguale alla somma dei gradi delle relazioni operande
25
JOIN ON
JOIN ON è una operazione di join che specifica le condizioni di unione. La specifica ON definisce il
modo in cui le tabelle coinvolte nella clausola FROM devono essere unite.

ON specifica che le tabelle CONTI e CLIENTI devono essere unite in base alla corrispondenza tra
la colonna IDCliente di CONTI e della colonna IDCliente della tabella CLIENTI

JOIN USING
JOIN USING è una operazione di join che specifica le condizioni di unione nella forma
<Relazione> JOIN <Relazione> USING (<nomi colonne>)
Definisce il modo in cui le tabelle coinvolte se e solo se gli attributi coinvolti (<nome colonne>)
hanno lo stesso nome. Viene richiesta l’uguaglianza dei valori delle colonne specificate

• INNER JOIN (nota semplicemente come «JOIN», o «JOIN interna») :restituisce le righe quando
la condizione di join è soddisfatta in entrambe le tabelle. In altre parole, restituisce solo i record
che corrispondono alla condizione di join in entrambe le tabelle.
• OUTER JOIN (LEFT, RIGHT, FULL, nota come «JOIN esterna»): restituisce tutte le righe di una
tabella e alcune o tutte le righe di un'altra tabella.
• NATURAL JOIN:
• CROSS JOIN: (JOIN Cartesiano): restituisce ogni possibile combinazione di righe delle tabelle
che sono state unite. Poiché restituisce tutte le combinazioni, questa è l'unica JOIN che non
necessita di una condizione di unione e quindi non ha una clausola ON.
Se si omette «INNER» davanti a JOIN, la INNER JOIN è il tipo predefinito che si ottiene.

Differenze INNER e OUTER JOIN


• In R1 JOIN R2 non si ha traccia delle tuple di R1 che non corrispondono ad alcuna tupla di R2 (e
viceversa)
• Talvolta, questo non è ciò che si desidera
• L’operatore OUTER JOIN aggiunge al risultato di R1 JOIN R2 le tuple di R1 o di R2 (o entrambe)
che non hanno partecipato al JOIN, completandole con valori NULL

LEFT JOIN
Talvolta ci occorre mantenere tutti i record di una tabella (a sinistra) e alcuni di un’altra (a destra),
anche se alcune tuple della tabella di sinistra non hanno corrispondenza nella tabella di destra.
26

• Gli attributi come nome, cognome, sesso e stato civile nelle


ultime quattro righe sono popolati con NULL.
• Questo perché queste righe grigie non hanno
corrispondenze nella tabella (cioè ). customer (cioè i valori
IDCliente di 50, 51 , 52 e 53 non sono presenti nella
tabella).

RIGHT JOIN
La RIGHT JOIN conserva tutti i record della tabella di destra (anche se non ci sono record
corrispondenti nella tabella di sinistra).

Gli ID cliente della tabella di destra (numeri 2, 3, 6, 7 e 8)


non corrispondenti ad alcun ID di sinistra hanno gli attributi
del conto impostati su NULL.
La tabella risultante ha 11 tuple – e non 8, tanti quanti sono i
clienti: questo perché i clienti ID 1, 4 e 5 possiedono
ciascuno due conti in CONTI. Vengono visualizzate tutte le
possibili corrispondenze

FULL JOIN
Se si vogliono conservare
tutti i record di entrambe le
tabelle, occorre usare FULL
JOIN. FULL JOIN accoppia
tutte le colonne
corrispondenti e visualizza
anche tutte le colonne non
corrispondenti di entrambe
le tabelle. Gli attributi non
corrispondenti sono
impostati su NULL

I clienti privi di record nella tabella CONTI vengono valorizzati


con NULL. Similmente, i clienti che compaiono in CONTI ma
non in CLIENTI, hanno gli attributi (tranne IDCliente) valorizzati
con NULL
27
NATURAL JOIN
Meno diffuso, NATURAL JOIN richiede
l’uguaglianza di tutte le colonne con lo
stesso nome nelle due relazioni. Come per
JOIN USING, le colonne con lo stesso
nome nelle due relazioni coinvolte vengono
incluse un’unica volta nel risultato
• NATURAL JOIN identifica
automaticamente e combina le colonne
implicitamente uguali (per nome di
colonna e tipo di dato)

CROSS JOIN
L’operatore CROSS JOIN
restituisce un prodotto cartesiano
tra tutte le tuple della tabella. Non
richiede clausola ON e il numero di
tuple della risultante è uguale al
prodotto delle tuple della prima
relazione per quello della seconda.
È usato di rado poiché dà come
risultato tutte le possibili
combinazioni tra i record di due
tabelle
28

SQL – Funzioni di gruppo


Funzioni di gruppo (o aggregate): sono impiegate nella clausola di proiezione di una query e
consentono di estrarre informazioni riassuntive da insiemi di valori
Una funzione di gruppo si applica all’insieme di valori estratti dalle tuple che soddisfano la clausola
di qualificazione della query.

• MAX: determinazione del massimo di un insieme di valori.


• MIN: determinazione del minimo di un insieme di valori.
• SUM: esecuzione della somma di un insieme di valori.
• AVG: esecuzione della media di un insieme di valori.
• COUNT: conteggio della cardinalità di un insieme.
• STDEV: calcolo della deviazione standard di un insieme.
• VAR: calcolo della varianza di un insieme.
Si indicano nella clausola SELECT e possono essere indicate più d’una funzione
contemporaneamente. Producono come risultato un unico valore (aggregato)

Max Min

Sum AVG

COUNT COUNT + DISTINCT


29
• Si applicano solo su insiemi di valori semplici e non su insiemi di tuple (ad eccezione di
COUNT)
• L’insieme di valori è denotato da un nome di colonna
• SUM e AVG sono definite soltanto per insiemi di valori numerici
• MAX, MIN, COUNT possono essere applicate anche ad altri insiemi di valori (non numerici)
• Tutte le funzioni possono essere usate con DISTINCT (molto utile in alcuni casi):

GROUP BY
L’operatore di raggruppamento GROUP BY consente di suddividere le tuple di una tabella in base
al valore di una o più colonne.
- Le colonne da usare si specificano nella clausola GROUP BY del comando SELECT.
- Le tuple su cui eseguire il partizionamento solo quelle che verificano la clausola di qualificazione
di SELECT.
- Nella clausola di proiezione non possono comparire attributi che non compaiano anche nel
GROUP BY.
Esempi
1. In un elenco di città, del quale si
conosce il nome delle città, la
regione di appartenenza, la
popolazione, la sigla di targa, l’anno
di fondazione, si vuole identificare
quante siano le città di ciascuna
delle regioni rappresentate e per
ogni regione quale sia la città meno
popolosa e quale la più vecchia.

2. Si vuole identificare quante siano le città


di ciascuna delle regioni rappresentate e
per ogni regione quale sia la città meno
popolosa e quale la più vecchia.
3.

• Ogni tupla della relazione risultato di una


query GROUP BY rappresenta un gruppo
di tuple della relazione sulla quale la query
è stata eseguita
• Nella query precedente, i gruppi (Prodotti)
sono 3 – uno per ogni prodotto
• Ad ognuno di questi gruppi è applicata la
funzione di gruppo (SUM)
HAVING
• La clausola HAVING consente di
specificare condizioni sui valori aggregati
• HAVING è seguita da un predicato (o
combinazione di predicati) booleano
• Tali predicati possono essere solo
predicati che coinvolgono funzioni di
gruppo
30
31

Potrebbero piacerti anche