uni
Proposto da Edward Frank Codd nel 1970 per favorire l’indipendenza dei dati dall’implementazione (i modelli precedenti basati sui puntatori erano inutilizzabili se si cambiava la macchina).
Si basa sul concetto matematico di relazione, con una variante. Le relazioni hanno naturale rappresentazione per mezzo di Tabelle.
Tutti i dati sono rappresentati come relazioni e manipolati con gli operatori dell’Algebra Relazionale o del calcolo relazionale.
Una relazione matematica è un sottoinsieme qualsiasi di un insieme prodotto da una qualche operazione tra uno o più insiemi detti Domini.
- Non c’è ordinamento tra le tuple
- non esistono tuple uguali
- ogni tupla è ordinata al suo interno
La struttura della tabella può essere posizionale, quindi l’ordine dei domini nella tabella dipende dall’ordine degli stessi nella relazione, oppure non posizionale, in cui a ciascun dominio di associa un nome unico nella tabella, che ne descrive il ruolo.
I riferimenti fra dati in relazioni diverse sono rappresentati per mezzo di valori dei domini che compaiono nelle tuple.
Definizioni
- Relazione:
dati insiemi non necessariamente distinti, il prodotto cartesiano è costituito dall’insieme delle tuple tali che appartiene a , per .
Una Relazione Matematica sui domini è un sottoinsieme del prodotto cartesiano di cui sopra.
- il numero di elementi del prodotto cartesiano viene chiamato grado.
- il numero di elementi (cioè tuple) della relazione viene chiamato cardinalità della relazione. - Attributo: nome che assegnano agli insiemi in modo da non dover fare affidamento sulla notazione posizionale. In breve gli attributi sono i “nomi delle colonne”.
- nuova definizione di relazione: dato un insieme di attributi:
___Una relazione su è un insieme di tuple su .
- nuova definizione di relazione: dato un insieme di attributi:
- Schema di Relazione: con nome della relazione e insieme di attributi
- Schema di Base di Dati: quindi un insieme di schemi di relazione
- Una tupla su un insieme di attributi è una funzione che associa a ciascun attributo un valore nel dominio di , il simbolo denota il valore della tupla sull’attributo
- Istanza di Relazione su uno schema : insieme di tuple su
- Istanza di base di dati su uno schema : insieme di relazioni dove ogni è una relazione sullo schema
Valore Nullo
Il modello relazionale impone ai dati una struttura rigida, se una informazione manca non conviene usare valori particolari, viene utilizzato il valore NULL. Si devono però imporre restrizioni sulla presenza di valori nulli in una relazione.
NULL può volere dire per esempio:
- valore sconosciuto
- valore inesistente
- valore senza informazione
I DBMS non distinguono i tipi di valore nullo! Questa differenza esiste sono nella testa del programmatore.
Chiave e Superchiave
Un insieme di attributi è una superchiave per una relazione se non contiene due tuple distinte e con .
K è una chiave per se è una superchiave minimale di (ovvero non contiene un’altra superchiave).
Una relazione è un insieme e per definizione quindi non può avere due elementi (le tuple) uguali, quindi ogni relazione ha almeno una chiave, la superchiave rappresentata dall’insieme degli attributi su cui è definita.
Valori NULL e chiavi
I valori NULL nelle chiavi non permettono di identificare le tuple, per ovviare a questo problema vietiamo valori NULL su una delle chiavi, questa prenderà il nome di Chiave Primaria.
Gli attributi che costituiscono la chiave primaria sono normalmente evidenziati, in genere tramite una sottolineatura.
matricola | cognome | nome |
---|---|---|
65473 | Pippi | Pippo |
78645 | Lippi | Lippo |
in questo esempio matricola è chiave primaria, visibile attraverso l’italico. |
Vincoli di Integrità
Un vincolo di integrità è una funzione booleana associata ad una base di dati e chiamata su ogni istanza di essa, che se soddisfatta esprime la correttezza del Database rispetto all’applicazione.
Questi permettono una descrizione più accurata della realtà, sono utili nella progettazione e sono usati nei DBMS nella esecuzione delle interrogazioni.
I vincoli corrispondono a proprietà reali e interessano tutte le istanze e se sono tutti soddisfatti garantiscono la correttezza dello schema.
Esistono due tipi di vincoli di integrità:
Vincoli intrarelazionali
Il suo soddisfacimento è definito rispetto ad una singola relazione della base di dati.
- Vincolo di Tupla: soddisfacimento valutato osservando le singole tuple una per volta.
- Vincolo di dominio (o sui valori): soddisfacimento valutato osservando 1 singolo attributo, una tupla per volta (ad esempio: valori compresi tra e ).
- Vincoli di chiave:
Le chiavi definite su schemi di relazione sono particolari vincoli di integrità, detti vincoli di chiave.- La chiave primaria deve essere unica e non nulla.
I vincoli di chiave sono i più importanti vincoli del modello relazionale e sono particolari vincoli che fanno parte della categoria Dipendenza Funzionale.
Vincoli interrelazionali
Il suo soddisfacimento è definito rispetto a più relazioni della base di dati.
Vincolo di Integrità Referenziale
Data una relazione, un insieme di attributi della
relazione che corrispondono a una chiave primaria di
un’altra relazione è chiamato chiave esterna (foreign key).
Possono essere pensate come puntatori logici.
Un vincolo di integrità referenziale fra gli attributi di una relazione (con chiave esterna di )e una relazione impone ai valori su in DIVERSI da NULL di comparire come valori della chiave primaria di .
Nota che in questo caso l’ordine degli attributi tra cui è stabilito il vincolo è significativo.
Una chiave esterna garantisce il soddisfacimento del Vincolo di Integrità Referenziale, e garantisce che ad ogni tupla di sia associata una tupla nell’altra relazione.
Possibili operazioni di aggiornamento
- Inserimento di nuovi dati
- attenzione a vincoli intra-relazionali
- attenzione a vincoli di integrità referenziale
- Cancellazione di dati esistenti
- attenzione a vincoli di integrità referenziali
- Modifica di dati esterni
- equivale a cancellazione+inserimento, quindi attenzione a entrambe le operazioni.
Reazione alla violazione di vincoli
Quando si tenta di compiere un’operazione che viola un vincolo entrano in gioco diversi meccanismi nel DBMS, che prendono il nome di azioni compensative.
Esempi di azioni compensative:
- rifiuto dell’operazione
- eliminazione in cascata, ovvero elimino tutte le tuple che violano un vincolo (nota che quando il sistema cancella una tupla rischia di violare di nuovo un vincolo di integrità referenziale, per questo si chiama eliminazione in cascata).
- introduzione di valori nulli