Basi di dati
Introduzione
Un’organizzazione per funzionare necessità di risorse che sono denaro, personale, dati e informazioni.
Questi ultimi due rappresentano il patrimonio informativo che esiste a prescindere dal sistema
automatizzato (sistema informatico) e individuano una risorsa strategica poiché sono più stabili nel tempo
rispetto alle tecnologie o al personale. Le basi di dati in generale sono collezioni di informazioni classificate
come dati e sono utilizzate, oltre che per la raccolta, anche per la distribuzione, l’elaborazione e la
conservazione. Con un’accezione più specifica una base di dati è una collezioni di dati in memoria
secondaria gestita da un software detto DBMS (data base management system) che consente di gestire e
interrogare grandi collezioni di dati. Per collezionare i dati si potrebbe anche ricorrere ai file, tuttavia
ciascun programma dovrebbe avere la sua copia dei dati di interesse e sorgerebbero problemi per
l’aggiornamento, con probabilità di dati incoerenti e non aggiornati allo stesso modo. Le basi di dati sono
nate proprio per ovviare a questi inconvenienti e gestire le informazioni in maniera integrata e flessibile
limitando al minimo il rischio di incoerenze o ridondanze.
Le basi di dati sono:
Grandi. Le dimensioni molto maggiori dei dati rispetto alla memoria principale dei dispositivi
richiede la memorizzazione su quella secondaria
Condivise. Nelle organizzazioni, specie se grandi, vi sono vari reparti e suddivisioni, dunque ciascun
utente o programma deve avere la possibilità di usufruire del sistema di dati comune attraverso
varie modalità. Per garantire l’accesso condiviso il DBMS implementa il controllo di concorrenza.
Persistenti. Le basi di dati hanno un tempo di vita che prescinde dai programmi che le utilizzano, al
contrario dei dati in memoria centrale.
Il DBMS garantisce:
Affidabilità. È la capacità di conservare pressoché intatto il contenuto della base di dati anche a
fronte di malfunzionamenti hardware e software, errori umani e guasti (o almeno ne permette la
ricostruzione). In particolare, il DBMS implementa il salvataggio e ripristino (back up e recovery) dei
dati e accade spesso che essi siano memorizzati su dispositivi fisici diversi per garantire una
sicurezza ulteriore.
Privatezza. Ciascun utente, riconosciuto mediante il nome utente, viene abilitato ad effettuare
determinate operazioni sulla base di dati mediante autorizzazioni. Ve ne sono di due tipo: utente
può leggere tutti i dati e modificare X; l’utente può leggere i dati X e modificare Y.
Efficienza. Consentono di svolgere le operazioni utilizzando risorse accettabili dagli utenti in termini
di spazio e tempo, tuttavia richiedono di essere installate su un sistema informatico adeguato.
Efficacia. Rendono produttive, in ogni senso, le attività svolte dagli utenti. Con ciò si intende che il
DBMS e le applicazioni vengono progettate in modo tale da garantire l’efficacia complessiva del
sistema
La rappresentazione dei dati avviene su più livelli così che la modifica di quelli inferiori non richieda la
modifica del programma che fa riferimento al livello più alto.
Un modello di dati è un insieme di costrutti utilizzati per organizzare i dati nel DBMS e descriverne la
dinamica. Quello relazionale utilizza come costruttore la relazione che permette di definire insiemi di
record omogenei e si rappresenta per mezzo di tabelle. Ciascuna tabella (relazione) ha un’intestazione, cioè
un nome ed è composta da righe, che sono i record o tuple, e colonne, dette attributi o campi.
In ogni base di dati distinguiamo:
Schema, rappresenta la struttura della base di dati ed è invariante nel tempo (aspetto intensionale)
Istanza, sono i valori che la tabella assume e cambiano spesso (modello estensionale)
Inoltre distinguiamo principalmente i modelli logici, utilizzati nei DBMS per organizzare i dati (es: modello
relazionale) da quelli concettuali, utilizzati nelle prime fasi di progettazione più per descrivere la realtà che
per i dati con i quali essa viene rappresentata (es: modello entità relazione). L’immagine accanto è
l’architettura a 3 livelli per il DMBS. Lo schema fisico riassumo
come le relazioni individuate nello schema logico sono
effettivamente memorizzate sui dispositivi di memorizzazione
di massa. Lo schema logico è il modello relazionale e possono
essergli associati più di schemi esterni. Uno schema esterno è
la descrizione di una porzione della base di dati e può essere
organizzato diversamente rispetto allo schema logico
adattandosi alle necessità di una particolare classe di utenti.
Sopra ad ogni schema esterno faccio un’interfaccia gli utenti,
tuttavia quello esterno non è sempre presente esplicitamente,
a volte assume la forma di vista. In altre parole, una vista è un
modo di organizzare i dati diverso da quello logico in modo
tale da favorire l’utilizzo delle informazioni necessarie a ciascuna tipologia di utenti; è un focus sulla base di
dati stessa. L’architettura a livelli rende indipendenti: lo schema logico ed esterno da quello fisico, cioè una
relazione prescinde dalla sua realizzazione fisica; lo schema logico da quello sterno, così una modifica a
quello esterno non richiede una al livello logico, allo stesso modo un cambiamento al livello logico può non
necessariamente richiedere una ristrutturazione esterna (ma a volte è necessario).
Vediamo adesso come si svolge l’accesso concorrente che è di fondamentale importanza per le prestazioni
del DBMS poiché l’accesso simultaneo al disco di più utenti altamente probabile. Il concetto chiave è quello
di transazione, cioè di una sequenza atomica, o indivisibile, di operazioni sulla base di dati
(letture/scritture) che deve lasciarla consistente se lo era precedentemente. Per evitare l’inconsistenza, una
transazione che vuole modificare un oggetto richiede un lock su tale oggetto, così che nessun’altra
transazione potrà modificarlo prima che sia completata la modifica della prima transazione. Se due
transazione hanno un lock su due oggetti che si influenzano vicendevolmente e non possono dunque
completarsi,si parla di deadlock e una delle due viene annullata. Inoltre, per garantire l’atomicità della
transazione (proprietà tutto o niente) in caso di crush durante una transazione, essa viene annullata e si
riporta la base di dati alla situazione precedente. Ciò possibile grazie al mantenimento di un log, o storia
(protocollo WAL), di ogni transazione effettuate e individuata mediante un ID.
I DBMS sono caratterizzati dalla possibilità di utilizzare numerosi linguaggi per la gestione dei dati. In
particolare, distinguiamo il data manipulation language (DML) che è il linguaggio per interrogare e
modificare i dati, dal data definition language (DDL) utilizzato per la definizione dello schema della base di
dati.
Il modello relazionale
Un modello di dati è una collezione di costrutti utilizzati per organizzare i dati di interesse e descriverne la
struttura in modo tale che siano comprensibili ad un elaboratore. Il modello più utilizzato è quello
relazionale perché si basa sul concetto matematico di relazione insiemistica che viene rappresentata
mediante tabelle e sui valori (le istanze). …
Una relazione matematica è definita su n domini(insiemi) non necessariamente disgiunti e il
1
… ( … ) ℎ ∈ , … , ∈
prodotto cartesiano è l’insieme delle n-uple ordinate
1 2 1 1 1
⊆ …
. Una relazione matematica è un sottoinsieme del prodotto cartesiano dove il grado
1 2
è il numero di domini sui quali è definita e la cardinalità è il numero delle n-uple da cui è composta. Nel
modello relazionale una tabella è una relazione se:
1. ogni colonna(attributo) contiene valori omogenei tra di loro (appartengono allo stesso dominio) e
gli è associato un nome unico nella relazione
2. le righe (tuple) sono tutte diverse tra di loro
Inoltre, l’ordine delle righe e delle colonne è irrilevante (modello non posizionale). Il modello relazionale è
basato su valori: i riferimenti fra dati in relazioni diverse sono rappresentati per mezzo di valori dei domini
che compaiono nelle tuple.
Sia X l’insieme degli attributi, A є X e t una tupla, t[A] è il valore che t assume in corrispondenza
= { , , … , }
dell’attributo/attributi A. Inoltre, se una relazione R (tabella) si indica con
1 2
( , , , ) ( R è il nome/intestazione della tabella).
Alcune tuple potrebbero contenere il valore NULL in corrispondenza di alcuni attributi, questo particolare
valore rappresenta un problema poiché può rappresentare 3 situazioni: valore inesistente, valore
sconosciuto e nessuna informazione riguardo al valore. A seconda della funzione che svolge l’attributo in
cui sono collocati possono rendere la tupla ammissibile o meno.
Vincoli
Un DBMS deve evitare l’immissione di informazioni non corrette, per questo vengono utilizzati dei vincoli di
integrità sulla base di dati e la tupla è ammissibile solo se li soddisfa tutti, in tal caso è legale. In generale i
vincoli si distinguono in intrarelazionali se riguardano una sola tabella, interrelazionali altrimenti.
I vincoli di tupla pongono condizioni su ciascuna tupla a prescindere dalle altre e garantiscono che ogni
tupla contenga informazioni corrette per il suo utilizzo (insomma
coerenti con la realtà che descrivono). Se riguardano un solo
attributo si parla di vincoli di dominio. Per esprimerli si utilizzano
espressioni logiche come AND, OR, NOT, espressione booleane o espressioni aritmetiche.
Una chiave è uno o un’insieme di attributi utilizzati per individuare univocamente una tupla della relazione,
una superchiave è invece un’insieme di attributi che contiene una chiave; una chiave è una superchiave
minimale (non contiene altre superchiavi). Un vincolo di chiave è di conseguenza un’asserzione che indica
che un insieme di attributi forma una chiave per la relazione R, e di conseguenza in R non possono esserci
tuple che hanno tutti i valori uguali negli attributi indicati come chiavi. Ciascuna relazione ha come
superchiave l’insieme degli attributi, di conseguenze ciascuna relazione ha almeno una chiave (questa
superchiave appena definita). Non possono esistere tuple con valore nullo su un attributo della chiave che
viene indicata come primaria (quella di riferimento), altrimenti questa tupla non sarebbe identificabile e
non si avrebbe la certezza che differisce dalle altre. La chiave primaria si indica attraverso la sottolineatura
ed è possibile istituire un solo vincolo di chiave primaria per tabella.
I vincoli di integrità referenziale, o vincoli di foreign key, riguardano più tabelle: se X è un attributo della
relazione R1 che ha un vincolo di foreign key con la relazione
R2, ciascuna tupla di R1 deve avere come valore dell’attributo
X uno appartenente ai valori della chiave primaria di R2. Ciò si
indica attraverso la relazione di inclusione insiemistica. La chiave esterna della relazione referenziante deve
avere lo stesso numero di colonne e dati compatibili con la chiave primaria della relazione referenziata.
Inoltre, la presenza di un valore nullo nella chiave esterna non viola il vincolo di integrità referenziale.
Algebra relazionale
I linguaggi di interrogazione sono linguaggi formali che permettono di compiere interrogazioni sulla base di
dati. Vi sono due tipologie di linguaggio che insieme costituiscono il linguaggio di interrogazione di una base
di dati organizzata secondo il modello relazionale: calcolo relazionale e algebra relazionale. Il primo è
dichiarativo in quando descrive le proprietà che il risultato deve avere, mentre il secondo è un linguaggio
procedurale poiché indica come viene ottenuto il risultato.
L’algebra relazionale è costituita da operatori che sono definiti su relazioni ed hanno come risultato una
relazione, inoltre possono essere combinati per formulare interrogazioni complesse. Andiamo a vedere i
vari operatori.
Operatori insiemistici
Ricordando che una relazione è un insieme di tuple omogenee (definite sugli stessi attributi), si possono
applicare gli operatori insiemistici alle sole relazione che sono compatibili rispetto all’unione:
1. le relazioni in ingresso hanno lo stesso numero di campi
2. campi corrispondenti delle due relazioni, presi in ordine da sinistra a destra, hanno lo stesso
dominio (quindi la compatibilità non si verifica con il nome dell’attributo). Per questo per
∪
convenzione se hanno nomi diversi erediterà in nome dell’attributo di
1 2 1
∪
L’unione tra queste due relazione contiene tutte le tuple, prese una sola volta, che sono contenute
1 2
o in o in o in entrambe, inoltre lo schema è uguale a .
1 2 1
∩
L’intersezione contiene tutte le tuple, prese una sola volta, contenute sia in che in e lo
1 2 1 2
schema del risultato è uguale a .
1
−
La differenza è l’insieme di tuple che appartengono a ma non a e lo schema è come .
1 2 1 2 1
Ridenominazione
La ridenominazione permette di modificare il nome di uno o più attributi di una relazione attraverso la
sintassi ρ(R(F),E) dove :
E è l’espressione arbitraria di algebra relazionale (indica una relazione esistente o ottenuta
mediante altri operatori, ad esempio l’unione
R istanza di relazione che rappresenta il risultato dell’esecuzione di E (contiene le stesse tuple di E,
ma con alcuni campi rinominati). In altre parole, è il nome della nuova tabella ottenuta da E con i
campi rinominati
F è la lista delle ridenominazioni nella forma vecchio nome nuovo nome oppure
posizione nuovo nome
Per esempio, ρ((padregenitore), paternità)
Prodotto cartesiano
È anch’esso un operatore insiemistico ma per essere utilizzato non necessità della proprietà di compatibilità
rispetto all’unione. La sintassi è RxS e la relazione contiene tutti i campi di R ordinati e tutti i campi di S
ordinati. Ciascuna tupla è <r,s> dove r є R e s є S , quindi ogni
tupla di R è accoppiata con ogni tupla di S. Se le due relazioni
hanno un campo con lo stesso nome, questi per convenzione
non hanno nome del prodotto cartesiano e si deve usare la
posizione per riferirsi a loro, è dunque utile utilizzare la ridenominazione ed evitare questa situazione.
N.B. nella ridenominazione si usa la posizione e non il nome dell’attributo
Selezione e proiezione
La selezione è l’operatore che consente di selezionare le tuple di una relazione che verificano determinate
()
condizioni, la sintassi è dove la condizione è un confronto tra il valore su un attributo e una
costante o tra i valori di due attributi (della stessa
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.