Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Per la rappresentazione e l’immagazzinamento dei dati vi sono vari modelli logici, quelli tradizionali sono:
Gerarchico;
Reticolare;
Relazionale.
Modello reticolare
Fu proposto nel 1970, ma
venne implementato dai
DBMS solamente nel 1981.
Nacque per favorire
l’indipendenza dei dati.
Relazione matematica
r ⊆ D1 × D 2 × …× Dn
r = relazione
⊆ = sottoinsieme
Ad esempio: Partite ⊆ string × string ×∫ ×∫ ¿. Una tabella del genere potrebbe contenere (Juve, Milan,
0, 2), (Milan, Inter, 99, 15), e la rappresentazione tabellare di questi due insiemi è questa:
Juve Milan 0 2
Milan Inter 99 15
Una relazione matematica è quindi un insieme di n-uple ordinate (d 1 , d 2 , … , d n ) tali che
d 1 ∈ D1 , … ,d n ∈ Dn .
una relazione è un insieme; quindi, non c'è ordinamento fra le n-uple e le n-uple sono distinte. Inoltre,
ciascuna n-upla è ordinata: l’i-esimo valore proviene dall’i-esimo dominio.
I domini assumono due ruoli diversi, che dipendono dal tipo della struttura, che può essere:
Posizionale: a ciascun dominio si associa un nome che ne descrive il ruolo: ad esempio, per la
tabella di prima si potrebbe avere dom : {Casa , Fuori , RetiCasa , RetiFuori }{string ,∫ }. Casa,
Fuori, RetiCasa e RetiFuori possono indicare il nome degli attributi della tabella.
Non posizionale: ogni istanza contiene un insieme di coppie formate dal nome dell’attributo e dal
suo valore; ad esempio, per la tabella di prima si potrebbe avere:
{
{(Casa, Juve), (Fuori, Milan), (RetiCasa, 0), (RetiFuori, 2)},
{(Casa, Milan), (Fuori, Inter), (RetiCasa, 99), (RetiFuori, 15)},
…
}
Nel modello Entity – Relationship, la relazione rappresenta una classe di fatti, e può essere indicata anche
con correlazione o associazione.
Relazioni e tabelle
Una tabella rappresenta una relazione se:
In una tabella che rappresenta una relazione l’ordinamento delle righe e delle colonne è irrilevante.
indipendenza dalle
strutture fisiche che
possono cambiare: i dati non sono più rappresentati con elementi del mondo fisico (ad esempio
non serve sapere come i dati sono memorizzati su disco), posso quindi cambiare struttura fisica
senza dover cambiare il livello logico;
Si rappresenta solo ciò che è rilevante dal punto di vista dell’applicazione;
l’utente finale vede gli stessi dati dei programmatori;
i dati sono portabili più facilmente da un sistema ad un altro;
i puntatori sono direzionali: contengono la cella di memoria che si riferisce a una determinata
colonna di un certo record di una certa tabella.
Se io volessi rappresentare i dati contenuti in forma tabellare, lo potrei fare creando le seguenti tabelle:
Informazioni incomplete
ll modello relazionale impone ai dati una struttura rigida: le informazioni sono rappresentate per mezzo di
ennuple, e solo alcuni formati di ennuple sono ammessi: quelli che corrispondono agli schemi di relazione.
Tuttavia, i dati che sono presenti nelle tabelle potrebbero non corrispondere al formato che ci si
aspetterebbe:
anche se qui ci sono record che hanno
solo 2 attributi, la tabella restituirà
sempre record aventi 3, perché la
tabella possiede 3 attributi.
per colmare queste situazioni, non conviene riempire i valori incompleti usando quelli del dominio (ad es.:
stringhe vuote, 0, 99, etc…): questo perché nel programma potrebbero non esserci valori che non vengono
mai utilizzati, oppure potrebbe capitare che questi valori non utilizzati potrebbero diventare significativi.
Una tecnica, rudimentale ma efficace, per colmare tale lacuna è l’uso del valore nullo, che denota l’assenza
di un valore del dominio. Spesso i DBMS non distinguono i tipi di valore nullo.
In questo caso, t[A] = dom(A), oppure NULL, per ogni attributo A. inoltre, il valore nullo non appartiene al
dominio.
Tuttavia, per evitare problemi, è necessario imporre delle restrizioni sulla presenza dei valori nulli e di non
abbondarne con l’uso.
Vincoli
Esistono istanze di basi di dati che, pur
sintatticamente corrette, non
rappresentano informazioni possibili per
l’applicazione di interesse. Ad esempio, la
matricola 739430 nella tabella Esami non è
presente nella tabella Studenti. Inoltre, un
voto non può essere 32, e al 27 non ci va
associata la lode.
Un vincolo è una funzione booleana (vero/falso) e che associa ad ogni istanza i 2 valori. Restringono
l’insieme di valori ammessi nel dominio.
L’uso dei vincoli di integrità porta alla base di dati diversi vantaggi:
vincoli intrarelazionali:
o vincoli su valori (o di dominio);
o vincoli di ennupla;
o vincoli di chiave
vincoli interrelazionali.
Vincolo di ennupla
Esprime condizioni sui valori di ciascuna ennupla di dati, indipendentemente dalle altre ennuple. Un caso
particolare sono i vincoli di dominio, che coinvolgono solo 1 attributo della ennupla.
Oppure:
In questo caso, invece, le ennuple sono identificate dal valore dell’attributo ISAN, che è univoco tra le
ennuple.
I vincoli corrispondono quindi a proprietà del mondo reale modellato dalla base di dati, e agiscono a livello
di schema (considerando quindi tutte le istanze). Le istanze che quindi rispettano questi vincoli sono
considerate corrette.
Chiave
Rappresenta l’insieme di attributi che identificano univocamente le ennuple di una relazione.
Dal punto di vista formale, un insieme K di attributi è super chiave per r se r non contiene due ennuple
distinte t1 e t2 con t1[K] = t2[K].
Ad esempio, nella tabella di prima dei film, l’attributo ISAN è una chiave, ed è minimale, perché in quella
tabella la chiave è formata da un solo attributo.
Una relazione non può contenere ennuple distinte (che quindi hanno la chiave univoca) ma uguali (quindi
con valori tutti uguali per ogni ennupla), questo perché ogni relazione ha come super chiave di base
l’insieme degli attributi su cui è definita, e quindi ha sin da subito almeno una chiave.
l’esistenza delle chiavi garantisce l’accessibilità a ciascun dato della base di dati; infatti, le chiavi permettono
di correlare i dati in relazioni diverse.
In presenza di valori nulli, i valori della chiave non permettono di identificare le ennuple e di realizzare
facilmente i riferimenti da altre relazioni. La presenza di valori nulli nelle chiavi deve quindi essere limitata
al massimo.
Chiave primaria
È una chiave dove non sono ammessi valori nulli; la loro notazione è il nome dell’attributo ma sottolineato.
Le chiavi primarie non consentono di inserire valori nulli o simili ad un’altra chiave primaria.
Integrità referenziale
Le informazioni contenute in
relazioni diverse sono correlate
tra di loro attraverso valori
comuni, in particolare, i valori
delle chiavi (primarie).
Un vincolo di integrità
referenziale (“foreign key”) fra gli
attributi X di una relazione R1 e
un’altra relazione R2 impone ai
valori su X in R1 di comparire
come valori della chiave primaria
di R2.
Solitamente, quando si
commettono violazioni
dell’integrità referenziale
(l’eliminazione/aggiornamento) di
una ennupla, vi sono delle azioni
compensative che possono subentrare: