Sei sulla pagina 1di 6

Modello relazionale

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.

Si basa sul concetto


matematico di relazione, che
qui trovano una rappresentazione sottoforma di tabelle. Inoltre, è anche basato sui valori, i riferimenti fra
dati contenuti anche in strutture diverse sono basati sui valori dei dati stessi.

I costrutti di base del modello reticolare sono: record e puntatori.

Relazione matematica
r ⊆ D1 × D 2 × …× Dn

D1, …, Dn = domini della relazione

r = relazione

⊆ = sottoinsieme

Prodotto cartesiano D1 × D 2 × … × Dn = insieme di tutte le n-uple (d 1 , d 2 , … , d n ) tali che


d 1 ∈ D1 , … ,d n ∈ Dn .

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:

 i valori di ogni colonna sono fra loro omogenei;


 le righe sono diverse fra loro;
 le intestazioni delle colonne sono diverse tra loro.

In una tabella che rappresenta una relazione l’ordinamento delle righe e delle colonne è irrilevante.

Relazioni e basi di dati


Una base di dati è definita da
un insieme di relazioni che
sono collegate fra di loro.

I riferimenti fra dati in


relazioni diverse sono
rappresentati per mezzo di
valori dei domini che
compaiono nelle ennuple.
(ma che cazzo significa
questa roba?)

I vantaggi dell’uso di una


struttura basata sui valori
sono questi:

 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.

Varie definizioni sulle relazioni


 schema di relazione: un nome R con un insieme di attributi X ={ A1 , … , A n }.
Notazione: R ( A1 , … , A n ) o R ( X )
A ciascun attributo è associato un dominio: R( A 1 : D 1 , … , A n : D n )
 schema di base di dati: insieme di schemi di relazione: R={R1 ( X 1 ) , … , R n (X n )}
 Una tupla (n-upla che contiene anche le definizioni degli attributi) su un insieme di attributi X è una
funzione che associa a ciascun attributo A in X un valore del dominio di A:
t : X → dom (X )
 t[a]: restrizione su A  sottoinsieme di attributi che corrispondono ad uno o più attributi e che
denotano il valore della tupla t sull’attributo A.
 istanza di relazione su uno schema R(X): insieme di r tuple su X
 istanza di base di dati su uno schema R={R1 ( X 1 ) , … , R n ( X n ) }: insieme di relazioni r ={r 1 , … , r n }
(con ri relazione su Ri).

Relazioni che rappresentano strutture nidificate


Supponendo di avere una roba del genere:

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.

Il valore completo può essere


sconosciuto, inesistente o privo
di informazione.

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.

Il vincolo di integrità è una proprietà che


deve essere soddisfatta dalle istanze che
rappresentano delle informazioni che
siano corrette per l’applicazione che ne fa
uso.

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:

 vi è una descrizione più accurata della realtà;


 aumenta la qualità dei dati contenuti;
 sono utili per la progettazione;
 sono usati dai DBMS mentre si interroga la base di dati.

Vi sono vari tipi di vincoli:

 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.

Una possibile sintassi potrebbe essere questa:


(Voto >= 18) AND (Voto <= 30)
(Voto = 30) OR NOT (Lode = “e lode”)

Oppure:

Lordo = Ritenute + Netto

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:

 azione di default: il rifiuto dell’operazione;


 eliminazione/aggiornamento in cascata;
 impostazione della foreign key a NULL.

Potrebbero piacerti anche