Database relazionali La maggior parte dei database attualmente

Database relazionali
La maggior parte dei database attualmente utilizzati appartiene alla categoria dei database relazionali. I
motivi di questo successo vanno ricercati nella rigorosita' matematica e nella potenzialita' espressiva del modello
relazionale su cui si basano, nella sua semplicita' di utilizzo e, ultima ma non meno importante, nella disponibilita'
[1]
di un linguaggio di interrogazione standard, l'SQL , che, almeno potenzialmente, permette di sviluppare
applicazioni indipendenti dal particolare DBMS relazionale utilizzato.
In particolare un Database relazionale (D.R.) è una raccolta di dati riferiti non solo allo stesso argomento ma
anche ad altri argomenti che hanno in comune un “legame”, quindi, non si limita a gestire soltanto i dati che in esso
vengono inseriti, ma va ad analizzare tutte le eventuali “correlazioni” che intercorrono fra i dati.
Alla base di un DB relazionale c’è il concetto di tabella, detta anche Relazione; essa è costituita da righe
dette tuple o record, e da colonne dette campi o attributi. Ad esempio volendo creare un DB per la gestione degli
studenti iscritti alla Facoltà di Economia, definiremo una tabella (o relazione) di nome “Studente” con i seguenti
attributi:
Matricola
Cognome
Nome
DataNascita
Residenza
I valori o dati che saranno inseriti come attributi consentiranno di distinguere uno studente dall’altro; per tale
rappresentazione possiamo usare il seguente formalismo:
Tabella Studente (Matricola intero, Cognome stringa, Nome stringa, DataNascita data, Residenza stringa )
che è chiamato Schema di Relazione e descrive la struttura della tabella Studente presente nel Database che si sta
creando: Per ogni attributo dovrà essere definito un Dominio, cioè un insieme di valori che possono essere assunti
da quell’attributo: Esempi di Dominio sono:
Stringa di caratteri
Numero (intero, decimale, intero lungo etc.)
Data (giorno/mese/anno)
Booleano o bit (0,1)
N.B. Una tabella indicante i vari tipi di domini è possibile trovarla più avanti;
Volendo utilizzare una notazione matematica, diremo che una Relazione è un sottoinsieme del Prodotto Cartesiano,
quindi se:
Dominio delle Matricole:
D1= N, ins. numeri naturali
Dominio dei Corsi di laurea:
D2= {DES, DEAI,…}
Dominio dei voti:
D3={n
N: n>=0 ^ n<=30}
Il Prodotto Cartesiano D1 x D2 x D3 costituirà la seguente relazione:
Attributi
Matricola
Insegn
Voto
54402
InfICT
28
Tupla o Riga
(record)
Valori degli attributi
Si definisce quindi:
Schema = Nomi tabelle e nomi degli attributi
Istanza = Tuple che si riferiscono ad uno Schema
Se si vogliono aggiungere altre informazioni allo Schema Studente, per esempio “quali insegnamenti ha sostenuto lo
studente, indicandone anche il voto e la data”, e così via, bisogna aggiungere altri attributi alla tabella Studente, per
esempio: Insegnamento, Voto, Data.. Così facendo però si rischia di dover inserire molte righe con attributi già noti,
avviando pertanto un procedimento di “ridondanza” che porta all’utilizzo di una maggiore quantità di memoria
(spreco di memoria) e rende il DB poco efficace. A questo punto è conveniente, invece, creare due nuove tabelle
(relazioni) che possono avere il seguente Schema:
Tabella [Cdl (CodCdl intero, Corso stringa)]
Tabella [Insegnamenti (CodIns intero, NomeCorso stringa, Docente stringa)]
Tabella [Esami (Matr intero, CodIns intero, Voto intero, Data data)]
Se vogliamo sapere gli studenti iscritti ad un corso di laurea (Cdl), creeremo il seguente schema:
Tabella [IscrittiCdl (Matricola intero, CodCdl intero)]
[1]
L’Sql – Structure Query Language – è un linguaggio standard di interrogazione dei database relazionali, che consente la definizione
della struttura dei dati in un database e la relativa manipolazione (inserimento, modifica, cancellazione etc.);