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.);