I database relazionali sono il tipo di database attualmente piu' diffuso. I motivi di questo successo sono fondamentalmente due:
La struttura fondamentale del modello relazionale e' appunto la "relazione", cioe' una tabella bidimensionale costituita:
Le relazioni rappresentano le entita' che si ritiene essere interessanti nel database. Ogni istanza dell'entita' trovera' posto in una tupla della relazione, mentre gli attributi della relazione rappresenteranno le proprieta' dell'entita'. Ad esempio, se nel database si dovranno rappresentare delle persone, si potra' definire una relazione chiamata "Persone", i cui attributi descrivono le caratteristiche delle persone (Figura 2). Ciascuna tupla della relazione "Persone" rappresentera' una particolare persona. |
In realta', volendo essere rigorosi, una relazione e' solo la definizione della struttura della tabella, cioe' il suo nome e l'elenco degli attributi che la compongono.
Nell'esempio le tuple sono le informazioni con cui identifichiamo ogni persona.
Gli attributi: nome - cognome - data_nascita - sesso - stato_civile
Quando essa viene popolata con delle tuple, si parla di "istanza di relazione". Percio' la precedente Figura rappresenta un'istanza della relazione persona. Una rappresentazione della definizione di tale relazione potrebbe essere la seguente:
Persone (nome, cognome, data_nascita, sesso, stato_civile)
Le tuple in una relazione sono un insieme nel senso matematico del termine, cioe' una collezione non ordinata di elementi differenti.
Per distinguere una tupla da un'altra si ricorre al concetto di "chiave primaria", cioe' ad un insieme di attributi che permettono di identificare univocamente una tupla in una relazione.
Naturalmente in una relazione possono esserci piu' combinazioni di attributi che permettono di identificare univocamente una tupla ("chiavi candidate"), ma fra queste ne verra' scelta una sola da utilizzare come chiave primaria.
Gli attributi della chiave primaria non possono assumere il valore null (che significa un valore non determinato), in quanto non permetterebbero piu' di identificare una particolare tupla in una relazione.
Questa proprieta' delle relazioni e delle loro chiavi primarie
va sotto il nome di integrita' delle entita' (entity integrity).
Spesso per ottenere una chiave primaria "economica", cioe' composta
da pochi attributi facilmente manipolabili, si introducono uno o piu' attributi
fittizi, che conterranno dei codici identificativi univoci per ogni tupla
della relazione.
Ogni attributo di una relazione e' caratterizzato da un nome e da un dominio.
Il dominio indica quali valori possono essere assunti da una colonna della
relazione. Spesso un dominio viene definito attraverso la dichiarazione di
un tipo per l'attributo (ad esempio dicendo che e' una stringa di dieci caratteri),
ma e' anche possibile definire domini piu' complessi e precisi.
Ad esempio per l'attributo "sesso" della nostra relazione "Persone" possiamo definire un dominio per cui gli unici valori validi sono 'M' e 'F'; oppure per l'attributo "data_nascita" potremmo definire un dominio per cui vengono considerate valide solo le date di nascita dopo il primo gennaio del 1960, se nel nostro database non e' previsto che ci siano persone con data di nascita antecedente a quella.
Il DBMS si occupera' di controllare che negli attributi delle relazioni vengano inseriti solo i valori permessi dai loro domini.
Ad esempio, se una caratteristica delle persone nel nostro database fosse anche quella di avere uno o piu' figli, non sarebbe possibile scrivere la relazione Persone nel seguente modo:
Persone (nome, cognome, data_nascita, sesso, stato_civile, figli)
Infatti l'attributo figli e' un attributo non-atomico, sia perche' una persona puo' avere piu' di un figlio, sia perche' ogni figlio avra' varie caratteristiche che lo descrivono. Per rappresentare queste entita' in un database relazionale bisogna definire due relazioni:
Persone(*numero_persona, nome, cognome, data_nascita, sesso,
stato_civile)
Figli(*numero_persona, *nome_cognome, eta, sesso)
Nelle precedenti relazioni gli asterischi (*) indicano gli attributi che
compongono le loro chiavi primarie. Si noti l'introduzione nella relazione
Persone dell'attributo numero_persona, attraverso il quale si assegna a ciascuna
persona un identificativo numerico univoco che viene utilizzato come chiave
primaria.
I database relazionali compiono tutte le operazioni sulle tabelle utilizzando
l'algebra relazionale, anche se normalmente non permettono all'utente di utilizzarla.
L'utente interagisce con il database attraverso un'interfaccia differente,
il linguaggio SQL, un linguaggio dichiarativo che permette di descrivere insiemi
di dati. Le istruzioni SQL vengono scomposte dal DBMS in una serie di operazioni
relazionali.
|