Capitolo terzo Lo schema logico secondo il modello relazionale. Capitolo terzo Lo schema logico secondo il modello relazionale 3.1. Introduzione La fase della progettazione concettuale dei dati porta a definire lo Schema Concettuale. Il modello concettuale cerca di dare una struttura ai dati evitando il più possibile i dettagli realizzativi, per cui con lo Schema Concettuale si otterrà un documento di base che descrive la struttura del sistema informatico in maniera astratta, vale a dire astratta dal modello concettuale prescelto. Quindi, è un documento che guiderà i progettisti, nella fase della progettazione logica, alla realizzazione dello Schema logico secondo un particolare modello scelto. Un modello dei dati può essere definito come un insieme di concetti, descritti tramite un preciso formalismo, il cui scopo è quello di permettere una rappresentazione ed una manipolazione delle informazioni che costituiscono il mondo della realtà1. Date afferma che il modello dei dati è sempre costituito da tre componenti fondamentali : A. un insieme di oggetti B. un insieme di operatori C. un insieme di regole di integrità L’insieme degli oggetti è costituito dallo schema logico della base dei dati secondo le regole del modello. Gli operatori permettono di realizzare sul database funzioni come ricerca, aggiornamento, interrogazioni, ecc., mentre le regole di integrità definiscono gli stati di congruenza del modello. Un modello può essere definito (Codd) come uno strumento che allo stesso tempo realizza una rappresentazione logica della realtà e una manipolazione di questa rappresentazione. Il modello scelto per realizzare lo schema concettuale è quello relazionale elaborato da Codd nel 1970. Si tratta di un modello matematico per la descrizione dello schema logico in maniera indipendente dalla realizzazione fisica il quale trae le sue origini dalla teoria degli insiemi. Molti autori, in 117 Capitolo terzo Lo schema logico secondo il modello relazionale seguito, hanno approfondito l’argomento cercando di formalizzare i diversi problemi che l’utilizzo del modello dei dati ha suscitato, volendo rappresentare in un sistema informatico un frammento del mondo reale. Questo modello si è sempre più affermato nel mondo dei database divenendo, ormai, il modello standard adottato per la descrizione dello schema logico dei database, anche se nessun gestore di database può dirsi, attualmente, completamente relazionale. 3.2. Il modello relazionale dei dati Innanzi tutto vengono date alcune definizioni : Coppia ordinata : Dati due insiemi D1 e D2, due elementi : d1? D1 d2? D2 considerati in un dato ordine costituiscono una coppia ordinata : (d1, d2) Tuple : Una tuple è una generalizzazione del concetto di coppia ordinata. Dati n insiemi : D1, D2,.........,Dn una tuple è una sequenza di n elementi ordinati : (d1,d2,...........,dn) con : di ? Di i = 1,2,..................,n Relazione :un insieme di tuples costituisce una relazione definendola in questo modo (Nazzini) : Dati n insiemi (o DOMINI), non necessariamente distinti : D1, D2,.........,Dn una relazione R sui domini D1,D2,............Dn è un insieme di tuples : d1,d2,...........,dn 1 Schiavetti :Database, Jackson 1985 118 Capitolo terzo Lo schema logico secondo il modello relazionale con : di ? Di A1 d1 d’1 : : d(m)1 i = 1,2,..................,n A2 d2 d’2 : : d(m)2 .............. .............. ............. : : .............. An dn d’n : : d(m)n Alla base del modello relazionale si trova la relazione detta anche tabella o schema poiché questa è costituita su di una struttura di righe dette tuple e colonne dette domini della tabella. Le testate della tabella Ai si dicono attributi, mentre il numero n dei domini viene detto grado o arietà della tabella. Le tabelle che hanno un solo attributo si dicono unarie, quelle con due attributi binarie, con tre ternarie e via dicendo. Il numero delle tuple si dice cardinalità (m+1). Le proprietà delle relazioni possono essere così riassunte2 : ? I valori di ogni colonna sono fra loro omogenei. I valori di un attributo appartengono allo stesso dominio (interi, stringhe di caratteri, ecc..). Quindi, si può affermare che gli attributi rappresentano l’uso dei domini in una determinata tabella ? l’ordinamento delle colonne è irrilevante. Poiché sono sempre identificate per nome e non per posizione ? l’ordinamento delle righe è irrilevante. Poiché queste sono identificate per contenuto e non per posizione ? Lo schema di una tabella R(A) è un'espressione che contiene il nome della tabella seguito dall’elenco di tutti gli attributi della tabella stessa. Può essere sia l’intestazione della tabella sia questa espressione : Prodotto (codice, descrizione, giacenza) 2 Atzeni, Batini, De Antonellis :Introduzione alla teoria relazionale, Masson 119 Capitolo terzo Lo schema logico secondo il modello relazionale 3.2.1. Chiavi ed attributi di una relazione Il concetto di chiave viene elaborato nella teoria relazionale poiché le tabelle devono essere costruite in modo tale che ogni tupla deve essere distinta per mezzo di uno o più attributi. Quindi, scopo delle chiavi è identificare univocamente queste tuple. Si distingue fra superchiave, chiave candidate e chiave primaria. La superchiave è l’insieme degli attributi che identificano univocamente una tuple. La chiave candidata è in numero minimo di attributi necessari per identificare univocamente una tuple. Può essere definita come una superchiave dalla quale possono essere eliminati attributi senza distruggere la proprietà della identificazione univoca della tuple. Per cui una chiave candidata è una superchiave con la proprietà di non ridondanza3. Fra le chiavi candidate, che possono essere più di una, se ne sceglierà una che ha il minor numero di attributi e che, a parità di attributi, ha il minor numero di caratteri. Questa è la chiave primaria e sarà la chiave scelta fra le chiavi candidate a rappresentare univocamente una tuple. Rispetto alla chiave della tabella si possono distinguere gli attributi primi, cioè quelli che fanno parte di almeno una chiave candidata, e i restanti attributi non primi. Infine, quegli attributi che possono costituire la chiave di altre tabelle sono detti chiave esterna e permettono di stabilire associazioni fra le tabelle che rappresentano diverse entità. 3.3. Traduzione dei diagrammi E|R di uno schema concettuale in un modello relazionale Si può tradurre abbastanza agevolmente gli schemi E\R secondo le strutture delle basi di dati relazionali seguendo, però, alcune regole. 3.3.1 Entità e gerarchie IS-A 3 Nazzini, Sanges, Vaccaro :Introduzione ai Data Base relazionali 120 Capitolo terzo Lo schema logico secondo il modello relazionale Le entità degli schemi E|R vengono tradotte in altrettante tabelle. Gli attributi delle entità vengono riportati nelle colonne mentre le occorrenze delle entità saranno tradotte in tuples. Per tradurre, invece, le strutture IS-A nel modello relazionale si possono adottare diverse soluzioni. Una può essere quella di inserire tutto in una tabella che contenga gli attributi comuni e gli attributi caratteristici di ciascuna classe. Per questo in ogni tupla saranno vuote alcune colonne relative ad alcuni attributi a seconda che, come nell’esempio del capitolo 2, il dipendente appartenga alla categoria impiegati o dipendenti. In questo caso ci sarà uno spreco di spazio. Un’altra soluzione, che può porre rimedio a questo inconveniente, è quello di creare una tabella che contenga tutti gli attributi comuni e inserire gli attributi specifici dei sottoinsiemi definiti dalla IS-A in altre tabelle legate a questa da associazioni 1 ad 1. Quindi, nell’esempio della gerarchia IS-A individuata dal diagramma dipendenti si può inserire in una tabella gli attributi comuni e realizzare due tabelle, operai ed impiegati, in cui inserire gli attributi specifici delle due categorie. 3.3.2. Associazioni 1 a 1 e 1 a n Per tradurre il legame tra due entità che viene realizzato da un'associazione 1 a 1, si deve inserire tra gli attributi di almeno una delle entità la chiave esterna, cioè quell’attributo o insieme di attributi che identificano l’entità ad essa collegata. Le associazioni 1 a n sono tradotte in modo analogo. Occorre però prestare attenzione a non inserire però attributi ripetuti, siano chiavi esterne o attributi normali, perché possono essere causa di problemi nella gestione delle tabelle. Ad esempio, in una relazione 1 a n fra due entità, cliente e numero d’ordine, inserisco la chiave primaria della tabella cliente nella tabella ordini divenendo chiave esterna. Se facessi l’inverso, ovvero se inserissi come chiave esterna nella relazione clienti la chiave della tabella ordini, dovrei inserire per ogni cliente tutti gli ordini creando molte tuples. 121 Capitolo terzo Lo schema logico secondo il modello relazionale Le associazioni tra entità, del tipo 1 a 1 o 1 a n, riportate sui diagrammi E\R possono aver attributi propri. Questi attributi possono essere riportati in altrettante colonne di una delle tabelle in cui sono state tradotte le entità. 3.3.3. Associazioni n a m Per tradurre le associazioni n a m (molti a molti) è necessario introdurre una nuova tabella. Questo procedimento, sconsigliato per le associazioni 1 a 1 e 1 a n , è la strada obbligata per questo tipo di associazione (poiché col metodo precedente si avrebbe una grande proliferazione di attributi multipli). La nuova tabella includerà gli attributi propri della associazione e le chiavi esterne che permettono i collegamenti con le due tabelle traduzione delle entità che tramite essa sono associate. La chiave primaria della nuova tabella è costituita dalla coppia primaria di chiavi esterne. Si spezza così un'associazione m a n in due associazioni 1 a n. Articoli Torrone F A T T U R A 01 Spumante Gianduia 6 Panettone Panforte 15 Cioccolata 5 02 5 03 Panepepato Pandoro 5 5 120 04 10 05 10 06 20 07 30 50 20 20 20 15 11 08 6 12 09 10 Champagn e 5 6 15 Figura 3.1. Esempio di matrice. 10 5 5 Una relazione molti a molti si presta ad essere rappresentata sotto forma di matrice rettangolare. In questo caso si ha una matrice fra articoli e fatture. La matrice letta in verticale indica in quale fattura è stato venduto l’articolo. Letta orizzontalmente indica quali articoli sono stati venduti in una data fattura. Il numero nella casella può indicare la quantità venduta nella fattura. (Mcmicrocomputer). 3.4. Regole di integrità Il modello relazionale prevede due regole generali di integrità. Queste sono la integrità di entità e la integrità referenziale (o di riferimento). 122 Capitolo terzo Lo schema logico secondo il modello relazionale Integrità di entità. Se A è un attributo della relazione R e partecipa alla chiave primaria, non può avere valori Null. Questo vuol dire che tutti gli attributi che partecipano alla chiave primaria non possono essere definiti su di un dominio che contempli valori Null. Integrità di riferimento . Se nella relazione R la chiave primaria è rappresentata dall’attributo ( o insieme di attributi) A, definito sul dominio D, allora in tutte le relazioni Sj, in cui appare come attributo A, le tuples devono contenere un valore di A definito sul dominio D oppure un valore Null. L’attributo A nelle relazioni Sj prende il nome di chiave esterna4. Per una chiave esterna va verificato se : ? Può assumere valori Null ? Cosa succede nella tabella collegata tramite chiave esterna se viene cancellato o modificato un valore della chiave primaria della tabella che ad essa si collega se questo valore è presente (nella tabella collegata) in una sua occorrenza. La possibilità che ha una chiave esterna di assumere valori Null dipende dai tipi di Associazione. Se, ad esempio, l’associazione è quella fra Impiegato e Reparto la chiave esterna corrispondente al reparto può assumere il valore Null (un impiegato non è assegnato ad un reparto), mentre nella associazione Fattura - Movimenti la chiave esterna corrispondente alla fattura non può mai assumere il valore Null (un movimento non può esistere senza fattura). Gli effetti dell’aggiornamento o della cancellazione di una chiave primaria, presente come chiave esterna in altre tabelle, si possono ricondurre a tre casi : Effetto cascata. Una cancellazione o un aggiornamento della chiave primaria provoca una cancellazione o un aggiornamento delle occorrenze presenti nelle tabelle collegate tramite chiave esterna. Effetto restrizione. La cancellazione o l’aggiornamento non devono essere permessi se sono presenti occorrenze per il valore considerato nelle tabelle collegate da chiave esterna. 4 Schiavetti :Database , Jackson 1989 123 Capitolo terzo Lo schema logico secondo il modello relazionale Effetto annullamento. La cancellazione o l’aggiornamento di un valore della chiave primaria provoca un annullamento (Null) dei corrispondenti valori presenti nelle chiavi secondarie delle tabelle collegate da chiave esterna. Benché il modello relazionale tramite normalizzazione crea sia l’integrità di entità sia l’ntegrità di riferimento spetterà al RDBMS (Relational DBMS) mantenere l’integrità durante il procedimento di inserimento dei dati. In questo i diversi Rdbms differiscono molto, applicando le tecniche più disparate. 3.5. Operazioni relazionali L’algebra relazionale, basata sulla teoria degli insiemi, offre una tecnica di estrazione dei dati molto efficace in un database relazionale. Per rendere possibile la manipolazione dei dati utilizza degli operatori che trasformano una o più relazioni in una nuova relazione. Possono essere individuate due categorie di operazioni : 1. operazioni insiemistiche, cioè si tratta di operazioni dell’algebra degli insiemi applicate alla entità relazione. Le più diffuse in ambito relazionale sono : ? unione ? intersezione ? prodotto (catesiano) ? differenza 2. operazioni relazionali, si tratta di operazioni che sono caratteristiche solo dell’algebra relazionale e non dell’algebra degli insiemi. Le operazioni più diffuse sono : ? selezione ? proiezione ? congiunzione (combinazione) ? divisione 124 Capitolo terzo Lo schema logico secondo il modello relazionale 3.5.1. Operazioni insiemistiche 3.5.1.1. Unione L’unione della relazione R1(A1) con la relazione R2(A2), indicata con R=R1? R2 , è l’insieme di tutti i tuples (righe) senza alcuna ripetizione5. R1 R2 A11 A12 A13 B11 B12 B13 C11 C12 C13 Figura 3.2. Relazione di unione K11 K12 K13 K21 K22 K23 A11 R B11 C11 K11 K21 A12 B12 C12 K12 K22 A13 B13 C13 K13 K23 Occorre, però, che vengano soddisfatte queste condizioni : 1. le due tabelle per essere unificabili devono essere compatibili6, cioè : ? devono avere egual grado ( stesso numero di colonne) ? la k-esima colonna delle tabella R1 deve essere definita sugli stessi domini e quindi essere compatibile con la corrispondente colonna della tabella R2 ( es. entrambe numeriche) 2. se esistono due righe uguali convenzionalmente ne viene indicata una sola. Come si vede questa definizione assomiglia molto a quella della unione di due insiemi. Per cui , secondo quanto afferma Belski in Dati e basi di dati :“dati due insiemi I1 e I2, diciamo l’unione I1?? I2 l’insieme costituito dagli elementi che appartengono ad almeno uno degli insiemi assegnati”. Valgono le proprietà : ? commutativa I1 ? I2= I2? ?I1 ? associativa I1? (I2?? I3)= (I1? I2) ? I3 ? distributiva I1 ? (I2 ? I3)= (I1? I2)?? ( I1? I2) 5 “Due relazioni si dicono compatibili se sono dello stesso grado e definite sugli stessi domini” .” L’unione di due relazioni compatibili è costituita da tutte quelle tuples che appartengono ad almeno una delle due relazioni”, Nazzini, Sanges, Vaccaro, Introduzione ai database relazionali. Questa proprietà vale sia per l’unione ma anche per l’intersezione e la differenza. 125 6 Capitolo terzo Lo schema logico secondo il modello relazionale 3.5.1.2. Intersezione L’intersezione della relazione R1(A1) e R2(A2), indicata con R=R1?? R2 , è l’insieme di tutti i tuples o righe appartenenti sia ad R1(A1)che a R2(A2)7. R1 A11 B11 C11 D11 R2 A12 B12 C12 D12 A13 B13 C13 D13 A11 C11 A11 C11 E11 A14 B14 C14 D14 A12 R C12 A13 C13 A12 C12 E12 A13 C13 E13 A14 C14 E14 A14 C14 Figura 3.3. Relazione di intersezione 3.5.1.3. Prodotto cartesiano Il prodotto cartesiano delle relazioni R1 e R2, rispettivamente di grado n e k e di cardinalità m1 e m2 è la relazione indicata con R=R1 ? R2 , che ha grado n+k e cardinalità m1 ? m2 composta dalle tuple che si ottengono concatenando ogni tuple di R1 con tutte le tuple di R28. Per concatenare due tuples r1 (a1, a2,..., an) e r2 (b1, b2,..., bk) si costruisce una tupla che ha gli attributi di entrambe : r1 conc. r2= (a1, a2,..., an, b1, b2,..., bk). “Dati due insiemi I1 e I2, diciamo intersezione I1 ? I2, l’insieme costituito dagli elementi che appartengono sia ad I1 che ad I2” V. Belski, Dati e basi di dati : il modello relazionale, FrancoAngeli. 8 “Dati due insiemi I1 e I2, diciamo prodotto cartesiano I1 ? I2, l’insieme costituito dalle coppie ordinate (i1,i2) con i1 ? I1 e i2 ? I2. ” V. Belski, Dati e basi di dati : il modello relazionale, FrancoAngeli. Il prodotto cartesiano può essere considerato come la forma generica di concatenamento, in cui ogni tuple di R1 viene concatenato con ogni tuple di R2. Il prodotto cartesiano è utile nelle interrogazioni in cui è necessaria ogni possibile combinazione tra i tuples delle due relazioni. Altre forme di concatenamento, dette concatenamento naturale sono rappresentate dal join, in cui un tuple può essere escluso dalla relazione risultante se non soddisferà le condizioni poste. Uno dei problemi dei concatenamenti naturali consiste nella perdita di informazioni, dato che la relazione risultante non contiene tutti i tuples. I concatenamenti che presentano questo tipo di rischio si dicono concatenamenti (naturali) interni, mentre vengono chiamati concatenamenti (naturali) esterni quelli in cui la perdita di informazioni è impossibile. Questi operano come i concatenamenti naturali interni, ma la relazione risultante potrà includere anche i tuples senza corrispondenze : i valori mancanti saranno sostituiti con valori nulli.- S. Misbah Deen Database, concetti teorici ed applicativi, FrancoAngeli 126 7 Capitolo terzo Lo schema logico secondo il modello relazionale Si costruisce cioè con il prodotto cartesiano una tabella con lo schema R(A1,A2,...,An, B1,B2,...,Bk) le cui tuples sono formate per primi n elementi di una tupla di R1 e per i restanti k elementi da una tuple di R29. R1 R2 Riga R1-1 Riga R1-2 Riga R1-3 ................ ................ Riga R1-n Riga R2-1 Riga R2-2 ................ Riga R1-k R Riga R1-1 Riga R1-1 Riga R1-1 Riga R1-1 Riga R1-2 Riga R1-2 Riga R1-2 Riga R1-2 Riga R1-3 Riga R1-3 Riga R1-3 Riga R1-3 ............... Riga R1-n Riga R1-n Riga R1-n Riga R1-n Riga R2-1 Riga R2-2 ................ Riga R1-k Riga R2-1 Riga R2-2 ................ Riga R1-k Riga R2-1 Riga R2-2 ................ Riga R1-k ................ Riga R2-1 Riga R2-2 ................ Riga R1-k Figura 3.4. Relazione prodotto cartesiano 3.5.1.4. Differenza La differenza tra relazione R1 e R2, indicata con R=R1 \ R2 (R=R1- R2) , è l’insieme di tutti i tuples o righe appartenenti ad R1 ma non a R210. R1 A11 B11 C11 D11 R2 A12 B12 C12 D12 A13 B13 C13 D13 A14 B14 C14 D14 A11 C11 E11 A12 C12 E12 R A13 C13 E13 A14 C14 E14 B11 D11 B12 D12 B13 D13 B14 D14 Figura 3.5. Relazione differenza “Il prodotto cartesiano di due relazioni è la relazione che si ottiene concatenando ciascuna tuple della R1 con tutte le tuples della R2”. Nazzini, Sanges, Vaccaro, Introduzione ai database relazionali ? Il grado del prodotto cartesiano è la somma dei gradi di R1 ed R2 ? La cardinalità del prodotto cartesiano è il prodotto della cardinalità di R1 ed R2 10 “Dati due insiemi I1 e I2, diciamo differenza I1 \ I2, l’ insieme costituito dagli elementi che appartengono ad I1 che non appartengono a I2” V. Belski, Dati e basi di dati : Il modello relazionale, FrancoAngeli. 127 9 Capitolo terzo Lo schema logico secondo il modello relazionale 3.5.2. Operazioni dell’algebra relazionale 3.5.2.1. Selezione Data relazione R1 ed un predicato P semplice o composto, che opera sugli attributi di R1, la selezione di R1 su P è una relazione R le cui tuples sono tutte le tuples di R1 che soddisfano P11. R1 A11 B11 C11 D11 R A12 B12 C12 D12 A13 B13 C13 D13 A14 B14 C14 D14 A11 C11 A12 C12 A13 C13 A14 C14 Figura 3.6 Selezione di R1 su P Un predicato è una condizione imposta sui valori di uno o più attributi e può essere semplice oppure composto. E’semplice quando esprime una relazione del tipo : [attributo] [operatore di confronto] [attributo] Gli operatori di confronto sono rappresentati da : =, # (diverso), <, >, <=, >=. E’ composto se è costituito da due o più predicati collegati fra loro tramite operatori booleani AND, OR, NOT. L’operazione di selezione sceglie i tuples di una relazione in cui il predicato risulta essere vero, mentre le colonne restano le stesse. Ci si può chiedere quando un predicato composto da più predicati è vero e quindi quando verranno prelevate delle tuples. Per questo possono essere riportate le tavole di verità di Boole . L’operatore di selezione è un filtro che sceglie alcune righe, quelle che soddisfano una certa condizione : Select R where p. L’operatore di selezione crea una nuova relazione che è un sottoinsieme della relazione orginaria detto sottoinsieme orizzontale . Le righe scelte sono quelle risulta vera la proposizione p - Nazzini, Sanges, Vaccaro, Introduzione ai database relazionali. 128 11 Capitolo terzo P1 v v v f f f null null null P2 v f null v f null v f null Lo schema logico secondo il modello relazionale P1 OR P2 P1 AND P2 (P1+P2) (P1*P2) v v v v f null v null null P V f null v f null f f f null f null NOT P f v null Figura 3.7. Tavole di verità degli operatori booleani 3.5.2.2. Proiezione Data una relazione R1 di grado n ed un sottoinsieme B di k suoi attributi, (k<n) la proiezione di R su B è la relazione R di grado k che si ottiene da R1 ignorando le colonne degli attributi non presenti in B ed escludendo le eventuali tuple duplicate12. Sono tuple duplicate quelle che hanno chiavi uguali.13 La relazione R ha la stessa cardinalità della relazione R1. L’operazione di proiezione si indica con la notazione : B(R) R1 A11 B11 C11 D11 B A12 B12 C12 D12 A13 B13 C13 D13 A14 B14 C14 D14 R A11 B11 C11 D11 A13 B13 C13 D13 Figura 3.8. Proiezione di R su B V. Belski Dati e base di dati : il modello relazionale, FrancoAngeli L’operatore di proiezione è un filtro che sceglie alcune colonne (quelle indicate nell’operazione a mezzo di una lista di attributi ) con eliminazione di eventuali righe duplicate - Codd “Relational completeness of data base sublanguages” 13 In seguito alle operazioni relazionali dovremmo eliminare i tuples duplicati (non consentiti) dalla relazione risultante. Per questo viene impiegata la proiezione - S. Misbah Deen Database, Concetti teorici ed applicativi, FrancoAngeli. 129 12 Capitolo terzo Lo schema logico secondo il modello relazionale Spesso i due operatori relazionali di selezione e proiezione sono applicati insieme alla stessa relazione R1 per cui il risultato che si otterrà sarà quello di avere una relazione R, risultato delle operazioni selezione e proiezione in cui le tuple, cioè le righe, costituiscono un sottoinsieme delle tuples della relazione R1 e gli attributi, cioè le colone, costituiscono un sottoinsieme degli attributi di R1. La sequenza logica delle due operazioni prevede l’esecuzione dell’operazione di selezione e successivamente quella di proiezione. 3.5.2.3. Combinazione (giunzione, join) Date due relazioni R1 ed R2 ed un predicato semplice P( >,<,<=, ecc.) che lega uno degli attributi di R1 con uno degli attributi di R2 con uno degli operatori booleani, la combinazione fra R1 ed R2 su P è la relazione R composta da tutte le tuple del prodotto cartesiano R1 X R2 che soddisfano P14. La join produce una nuova relazione mediante il procedimento seguente : 1. viene effettuato un prodotto cartesiano fra le due relazioni. 2. sulla relazione così creata viene effettuata una operazione di selezione delle tuple in cui risulta vera la condizione posta dal predicato 3. vengono ridenominati gli attributi comuni con uno stesso nome, in modo tale che compaiono una sola volta. Se l’operatore di confronto è l’operatore di eguaglianza =, si parla allora di giunzione naturale Join Naturale Date due relazioni R1 (di grado n) ed R2 (di grado k) nelle quali uno degli attributi di R1 coincide con uno degli attributi di R2, Il join naturale è la relazione r di grado (n+k-1)che contiene tutte le tuple ottenute concatenando le tuple di r1 e di r2 che presentano valori identici per l’attributo comune15. Il join naturale determina una relazione tramite il seguente procedimento : 1. viene effettuato un prodotto cartesiano fra le due relazioni. 14”V. 15 Belski Dati e base di dati : il modello relazionale, FrancoAngeli V. Belski Dati e base di dati : il modello relazionale, FrancoAngeli 130 Capitolo terzo Lo schema logico secondo il modello relazionale 2. sulla relazione così creata viene effettuata una operazione di selezione delle tuple in cui risulta vera la condizione posta dal predicato, e cioè che gli attributi sottoposti all’operatore di confronto siano uguali. Se questa condizione non si verifica per nessun attributo allora l’operazione di giunzione si riduce a quella di un prodotto cartesiano. 3. vengono ridenominati gli attributi comuni con uno stesso nome, in modo tale che compaiono una sola volta. 3.5.2.4. Divisione Data una relazione R1 (dividendo) di grado n e la relazione R2 (divisore) di grado k (k<n), in cui tutti gli attributi di R2 sono anche gli attributi di R1, la divisione di R1 con R2, che si indica conR=R1/R2, è la relazione R le cui colonne sono tutte colonne di R1 che non compaiono in R2 e le cui tuple sono costituite da tutte le tuple che, concatenate con tutte le tuple di R2, danno luogo a tuple tutte presenti nella relazione R116. Si può pensare a R X R2 come ad un prodotto cartesiano sottoinsieme di R1, per cui tutte le tuple di questo prodotto cartesiano appartengono a R1 ma R1 ha altre tuple. R1 A11 A11 A11 M11 N11 R2 B11 B12 B13 B11 B12 B11 B13 R A11 Figura 3.9. Operazione di divisione 16 V. Belski Dati e base di dati : il modello relazionale, FrancoAngeli 131 Capitolo terzo Lo schema logico secondo il modello relazionale 3.5.3. Esempi Presidenti Nome Eisenhower Kennedy Johnson Nixon Partito Repubblicano Democratico Democratico Repubblicano Stato Texas Mass. Texas California 1. Selezione R1 = (select Presidenti where stato = “Texas”) R1 Nome Johnson Eisenhower Partito Stato Democratico Texas Repubblicano Texas R2 = (select Presidenti where Partito = “Repubblicano”) R2 Nome Eisenhower Nixon 2. Proiezione Partito Stato Repubblicano Texas Repubblicano California R3 = (project Presidenti over Stato, Nome) R3 Nome Eisenhower Kennedy Johnson Nixon Stato Texas Mass. Texas California 3. Unione R4= R1? R2 R4 Nome Eisenhower Johnson Nixon Partito Repubblicano Democratico Repubblicano Stato Texas Texas California 132 Capitolo terzo Lo schema logico secondo il modello relazionale 4. Intersezione R5 = R1? R1 R5 Nome Eisenhower Partito Stato Repubblicano Texas 5. Differenza R6 = R1-R2 R6 Nome Johnson Partito Democratico Stato Texas 6. Prodotto cartesiano Studenti Corsi Studenti X Corsi Num. Stud. 1 1 1 2 2 2 3 3 3 N.ro Studente 1 2 3 Cod. corso A B C Nome Paolo Paolo Paolo Claudio Claudio Claudio Nicola Nicola Nicola Nome Paolo Claudio Nicola Descrizione Economia Prog e Contr. Diritto trib. Cod. corso A B C A B C A B C Descrizione Economia Prog e Contr. Diritto trib. Economia Prog e Contr. Diritto trib. Economia Prog e Contr. Diritto trib. 133 Capitolo terzo Lo schema logico secondo il modello relazionale 7. Join (naturale) Corsi Cod. corso A B C Descrizione Economia Prog e Contr. Diritto trib. Durata Corsi Cod. corso A B C Durata 4 3 5 ? R7 = corsi join p durata corsi ? p = (Corsi. cod. corso = Curata corsi. cod. corso) ? R7 = corsi. cod. corso = cod. corso. durata corsi Corsi X Durata Corsi Descrizione Economia Economia Economia Prog e Contr. Prog e Contr. Prog e Contr. Diritto trib. Diritto trib. Diritto trib. Cod. corso Durata A A A B B B C C C Cod. corso 4 3 5 4 3 5 4 3 5 A B C A B C A B C Prodotto cartesiano Corsi X Durata corsi R7 Descrizione Economia Prog e Contr. Diritto trib. Cod. corso A B C Durata 4 3 5 Cod. corso A B C Selezione Corsi. Cod. corsi = Durata corsi. Cod. corsi Dopo una operazione di proiezione per eliminare la colonna corso, avremo : R7 Cod. corso A B C Durata 4 3 5 Descrizione Economia Prog e Contr. Diritto trib. 134 Capitolo terzo Lo schema logico secondo il modello relazionale 8. Divisione Fornitori Cod. For. F1 F1 F1 F2 F2 F3 F3 F4 F4 F4 F4 Art. A1 A2 A3 A1 A3 A2 A1 A1 A2 A3 A4 Rich. Acquisto Art A1 A2 A3 Quali sono i fornitori in grado di soddisfare la richiesta di acquisto ? Fornitori :Rich. Acq. Cod. For. F1 F4 3.6. Normalizzazione Lo schema, definito dalla progettazione concettuale, deve essere tradotto attraverso il modello relazionale in uno “schema migliore”, cioè in uno schema depurato di gran parte delle anomalie di gestione che si possono verificare. La teoria delle basi di dati relazionali affronta questo tipo di problemi con l’obiettivo di (Albano) : ? definire quando due schemi sono equivalenti ? definire i criteri di bontà degli schemi (che cosa vuol dire uno schema migliore di un altro) ? trovare metodi formalizzati per ottenere da uno schema un altro migliore ed equivalente. 135 Capitolo terzo Lo schema logico secondo il modello relazionale Nel primo caso si tradurrà gli schemi ottenuti ad esempio con il modello E\R in tabelle17, mentre i problemi successivi hanno portato alla elaborazione della teoria della normalizzazione, con la definizione di forme normali per schemi di relazione che eliminino il più possibile i problemi di ridondanza e le altre anomalie. La normalizzazione è, quindi, un insieme di criteri di progettazione di un database relazionale, diretti a prevenire l’insorgere sia di anomalie nella rappresentazione dei dati (inconsistenza dei dati) sia situazioni non volute. Il principio della normalizzazione, come afferma Codd, è che la base dei dati deve essere progettata sulla base sella semantica dei dati ed in particolare seguendo questo principio guida : Ogni fatto deve essere rappresentato una, ed una sola volta, e nel luogo appropriato e cioè : ? in una relazione deve essere descritto un unico fatto ? un fatto deve essere memorizzato una sola volta. Si consideri questa relazione : Perdenti alle elezioni presidenziali Anno Nome Voti Part ito 1956 1960 1972 1964 1968 1952 1968 73 219 17 52 191 89 46 dem rep dem rep dem dem ind Stevenson Nixon McGovern Goldwoter Humphrey Stevenson Wallace In questa relazione non viene rappresentato un unico fatto ma bensì sono distinguibili due fatti : 1. sono indicati i candidati perdenti alle elezioni USA 2. sono indicate alcune caratteristiche di tali uomini politici (il partito) che sono indipendenti dall’esito delle elezioni. Questa situazione crea alcuni problemi : Albano afferma che questo problema va sotto il nome di problema della rappresentazione, ovvero quando e in che misura uno schema rappresenta un altro. 136 17 Capitolo terzo Lo schema logico secondo il modello relazionale ? Anomalie nella eliminazione. Se si cancella la riga relativa al 1960 si perdono anche le informazioni relative al partito di Nixon, il che potrebbe essere al di là dello scopo della cancellazione. ? Anomalie di modifica. Poiché Stevenson appare più volte, se modifico il partito di Stevenson lo dovrò fare in tutte le tuples in cui compare Stevenson. ? Anomalie di inserimento. Non si può inserire il partito di Ford senza conoscere l’anno in cui ha perso le elezioni. Questo perché nella relazione non è rappresentato un unico fatto. Verranno individuati 5 livelli di normalizzazione (6 se si considera la BCNF come un livello a se) di cui Cood ne ha elaborati tre mentre gli altri sono stati elaborati da altri studiosi. 3.6.1. Prima forma normale (1 NF ) Una relazione è in 1NF se, e solo se, tutti i domini sui quali è definita contengono solo valori atomici, cioè nessuno degli elementi dei domini è esso stesso un insieme una lista o una relazione18. Gli attributi di una entità possono essere di vario tipo : semplici, composti, multipli. I RDBMS impongono che tutti gli attributi siano semplici e non multipli, mentre in un record descritto da un programma Cobol questo poteva accadere. La 1 NF elimina i dati ripetitivi consentendo così di rappresentare le relazioni come “tabelle a due dimensioni” con dati omogenei sulle colonne. Quindi, le relazioni in prima forma normale presentano queste proprietà : ? Ogni elemento è atomico ? le colonne sono tutte omogenee ? tutte le righe sono distinte ? l’ordine delle righe non è significativo ? l’ordine delle colonne non è significativo 18 E.F. Codd, : Recent Investigations in relational Data Base system 137 Capitolo terzo Lo schema logico secondo il modello relazionale Esempio : Tabella delle competizioni elettorali americane Non in forma normale Elezioni Anno Vincitore Partito vincitore Perdente 1960 1956 Democratico Repubblican o Nixon Stevenson 1972 Kennedy Eisenhowe r Nixon McGowern 1964 1968 Johnson Nixon 1992 Clinton Repubblican o Democratico Repubblican o Democratico Goldwoter Humphey, Wallace Bush, Perrot Prima forma normale (1NF) Elezioni Ann o 1960 1956 1972 1964 1968 1968 1992 1992 Vincitore Partito vincitore Perdente Kennedy Eisenhower Nixon Johnson Nixon Nixon Clinton Clinton Democratico Repubblicano Repubblicano Democratico Repubblicano Repubblicano Democratico Democratico Nixon Stevenson McGowern Goldwoter Humphey Wallace Bush, Perrot Una relazione in prima forma normale può, però, causare dei problemi19. Il primo fra questi una ridondanza dei dati dovuto ad un aumento delle tuple. Inoltre, può capitare che, dopo aver portato una relazione in prima forma normale questa subisca delle modifiche tali per cui la chiave primaria scelta prima della trasformazione in 1 NF non sia più sufficiente ad identificare una tupla per cui occorrerà modificare la chiave20. Atzeni in “La teoria relazionale dei dati” distingue i seguenti problemi o anomalie : Anomalie di inserimento di nuove tuples : non posso inserire informazioni sulla competizione elettorale avvenuta in un certo anno se non conosco il nome dello sfidante che costituisce insieme all’anno la nuova chiave. ? Anomalie di cancellazione delle tuples esistenti :l’eliminazione di una tupla relativa alla competizione elettorale mi fa perdere informazioni che non posso più ricavare ? Anomalie di aggiornamento delle tuples esistenti : se c’è stato per assurdo un errore su Nixon, e cioè Questi non era repubblicano ma democratico, allora dovrò riaggiornare tutte le tuple in cui compare Nixon. 20 In alcuni casi le trasformazioni possono essere tali da far modificare il nome stesso della tabella. Si prenda l’esempio proposto dal Belski : si ha una tabella cliente non in forma normale e per renderla in forma normale occorre eliminare gli attributi multipli. 19 ? 138 Capitolo terzo Lo schema logico secondo il modello relazionale 3.6.2. Dipendenza funzionale Siano dati due attributi A e B ( o combinazioni di attributi) in una relazione R. Si dice che B è funzionalmente dipendente da A in R (ovvero che A determina B in R) : A? B se, e solo se, in ogni istante di tempo ciascun valore di A è associato con uno, ed uno solo, valore di B in R21. A verrà indicato come attributo determinante e B come attributo dipendente. Quindi, data una relazione R si può determinare una dipendenza funzionale fra due sottoinsiemi di attributi A e B, per cui se lo stesso valore di A Cod­ cli 337 568 745 874 Ragione-cli Via-cli città-cli ordini-cli Bianchi spa Rossi srl Verdi spa gialli sas Verdi 10 Dante 2 Po 13 Levi 7 Bologna Milano Torino Napoli 137,425,821 76 347,450 Si costruisce una tabella in cui tutti gli attributi sono semplici e ogni riga contenga un solo numero d’ordine : Cod­ cli 337 337 337 568 874 874 Ragione-cli Via-cli città-cli ordini-cli Bianchi spa Bianchi spa Bianchi spa Rossi srl Gialli sas Gialli sas Verdi 10 Verdi 10 Verdi 10 Dante 2 Levi 7 Levi 7 Bologna Bologna Bologna Milano Napoli Napoli 137 425 821 76 347 450 Si può vedere come il codice clienti non sia più sufficiente ad identificare una singola tupla, per cui occorre cambiare la chiave primaria :la chiave comprenderà due i campi il codice cliente ed il numero d’ordine. La scelta della chiave opera una “trasformazione” della tabella da cliente a ordine. Infatti la tabella contiene una tupla per ogni ordine e non per ogni cliente e che la tabella non contiene più i clienti che non hanno ordini in essere (Verdi spa) perché la chiave non può avere valori nulli. In base a queste trasformazioni si potrebbe rinominare la tabella in questione in tabella ordine-cliente. Questa tabella in prima forma normale contiene, tuttavia, delle gravi anomalie : ? ridondanza di alcuni dati del cliente, ripetuti tante volte quanti sono gli ordini in essere ? eliminazione dei dati anagrafici dei clienti che non hanno ordini e quindi impossibilità di reperirli quando non vi siano ordini in corso. La causa di questi inconvenienti deriva da una non attenta analisi nell’ambito della progettazione concettuale, in cui, evidentemente, non sono state distinte bene le due entità ordini e clienti. 21 Nazzini, Sanges, Vaccaro :Introduzione ai Data Base relazionali 139 Capitolo terzo Lo schema logico secondo il modello relazionale compare in diverse tuples di R allora vuol dire che in queste tuples dovrà comparire lo stesso valore di B. Definita la chiave primaria della relazione R che identifica univocamente le tuples, avremo che tutti gli attributi della tabella dipenderanno da essa22. Occorre, poi, fare una distinzione fra dipendenze parziali e dipendenze complete. Verificato che un sottoinsieme B dipende funzionalmente da A , bisogna verificare se esiste una dipendenza funzionale da un sottoinsieme degli attributi di A. Se questo si verifica, allora si ha dipendenza parziale, perché B dipende solo da una parte dagli attributi di A, in caso contrario si ha una dipendenza completa. E’ logico che se A è costituito da un solo attributo allora non ci sarà che dipendenza completa. La conoscenza delle dipendenze funzionali nelle relazioni è un elemento fondamentale per un migliore raggruppamento dei dati secondo il modello relazionale. I dati che vengono raccolti e organizzati per rappresentare la realtà di interesse presentano queste dipendenze funzionali che possono essere dovute sia dalla loro natura sia alla proprietà dei loro domini e, ciò che è importante per la costruzione di un efficiente schema logico relazionale, sono indipendenti dalle tecniche utilizzate per raccoglierli, classificarli, raggrupparli. Poiché le dipendenze sono oggettive e legate al tipo di dato, è essenziale conoscerle ed utilizzarle per realizzare un miglior raggruppamento possibile dei dati. Si potrebbe cercare di minimizzare queste dipendenze già dalla fase della progettazione concettuale, però, l’intreccio delle dipendenze fra i dati può rendere difficile ripartire gli attributi nelle varie tabelle facendo sorgere nello schema concettuale diverse anomalie nella gestione dello schema stesso. E’ questo, in pratica, lo scopo 22 Nazzini, Sanges, Vaccaro in Introduzione ai Data Base relazionali affermano : 1. Ciascun attributo di R è funzionalmente dipendente da ciascuna chiave candidata di R. 2. Gli attributi di R che costituiscono una chiave candidata K sono un insieme a massima dipendenza funzionale, cioè : ? tutti i sottoinsiemi di K sono funzionalmente indipendenti l’uno rispetto all’altro 140 Capitolo terzo Lo schema logico secondo il modello relazionale della normalizzazione introdotta da Codd, cioè quello di eliminare tutte queste ridondanze ed anomalie dei dati per una corretta gestione dello schema. Un modo per gestire meglio lo schema, individuato da Codd, è quello di scomporre la tabella preservando sia le informazioni sui dati che i vincoli di integrità dei dati. Condizione essenziale perché tutto ciò sia rispettato è che venga soddisfatto il seguente teorema : Uno schema R(A), per il quale esiste l’insieme D di dipendenze, è scomposto nei due schemi R1(A1) e R2(A2) preservando il contenuto, quando : A1? A2? A1 oppure A1? A2? A2 ovvero quando gli attributi comuni (presenti sia in A1 che in A2) sono chiave di uno dei due sistemi23. Se questo avviene (ad esempio se gli attributi sono chiave di A2) si può ricostruire R(A) attraverso delle giunzioni naturali sulle R1(A) perché gli attributi che mancano in R1 (A) sono direttamente implicati da quelli comuni. Per questo motivo, non si perdono informazioni ne si acquisiscono di spurie (concetto di scomposizione senza perdite)24. Ad esempio si prenda la tabella indirizzo : R (cap, città, via) R1(cap, città) R2(via, cap) ? nessun attributo di R può essere aggiunto a K senza distruggere questa dipendenza funzionale. 23 Nella letteratura si trovano sostanzialmente due tipi di equivalenza tra schemi in presenza di scomposizione. Si parla di decomposizione che preserva il contenuto e decomposizione che preserva le dipendenze. La decomposizione di uno schema di relazione R che preserva l’informazione sui dati si ha se per ogni relazione R le sue proiezioni sugli attributi Ai sono tali che da esse si può riottenere esattamente R con l’unica operazione possibile :la giunzione naturale. Una decomposizione preserva le dipendenze quando decomponendo non si perdono i vincoli di integrità. Albano, Orsini : Basi di dati. 24 La ricostruzione della originaria relazione R, può avere come risultato la comparsa, nella relazione ricostruita, di alcune tuples “spurie”, cioè non presenti originariamente in R ; e non c’è alcun modo di distinguere le tuples “spurie” dalle tuples genuine. Solo in questo senso si parla di scomposizione con perdite, perché in realtà la relazione originaria è un sottoinsieme di quella ricostruita (contiene infatti le tuples “genuine” e quelle “spurie”). Comunque sia una operazione di giunzione naturale non può produrre niente che non sia almeno R. 141 Capitolo terzo Lo schema logico secondo il modello relazionale Il cap è l’attributo comune ed è chiave della tabella R2. Indicato il cap, la città risulta univocamente determinata. Eseguendo la giunzione delle due tabelle si ottiene la tabella originaria. Fra gli attributi di uno schema , quindi, esistono delle dipendenze funzionali. Alcune di queste dipendenze sono ovvie e non vengono normalmente menzionate, come quelle che riguardano un gruppo d'attributi che è sottoinsieme di un altro gruppo di attributi. E’importante elencare l’insieme delle dipendenze per non perderle in seguito nella scomposizione. Per conservare queste dipendenze occorre non portare in schemi separati gli attributi che hanno relazioni di dipendenza fra di loro. Comunque non bisogna scartare qualche volta la possibilità di spezzare delle dipendenze, perché i vantaggi che ciò potrebbe portare può superare gli svantaggi prodotti. 3.6.3. Seconda forma normale (2 NF) Una relazione R è in seconda forma normale (2 NF) se è in prima forma normale ed ogni attributo non primo di R dipende funzionalmente e completamente da ogni chiave di R25. Tutti gli attributi che non fanno parte della chiave (se questa è l’unica) devono dipendere dalla chiave tutta intera. Si effettuerà una scomposizione della tabella in 2NF solo se ci sono attributi che dipendono solo da una parte della chiave. E’ logico che se la chiave è formata solo da un attributo la dipendenza non potrà che essere completa e quindi non si procederà con la scomposizione. Se le chiavi possibili sono più di una (abbiamo più chiavi candidate) la condizione deve valere per ogni chiave. Si procederà, quindi, alla scomposizione di uno schema seguendo una procedura di questo genere26 : Si parla pertanto di scomposizione senza perdite quando è garantito che l’operazione di giunzione naturale sulle proiezioni di R riproduce esattamente R, senza che compaiano tuples “spurie”. Nazzini,, Sanges, Vaccaro :Introduzione ai Data Base Relazionali. 25 Atzeni, Batini, De Antonellis : Introduzione alla teoria relazionale, Masson 26 Questa procediìura è proposta da Belski :Dati e basi di dati :il modello relazionale. 142 Capitolo terzo Lo schema logico secondo il modello relazionale Si prende in considerazione uno schema R(A) in 1NF, ma non in 2NF, per ogni dipendenza funzionale parziale X? Y in cui X rappresenta una chiave di R e Y è un insieme di attributi non primi, si deve : ? individuare il sottoinsieme Z degli attributi della chiave X da cui Y dipende in modo completo ; ? costruire un nuovo schema che contenga Z come chiave di tutti gli attributi Y ; ? cancellare dallo schema iniziale tutti gli attributi Y che sono stati “trasferiti” sul nuovo schema. Si ripete la serie di operazioni, costruendo più tabelle, fino a quando non si sono esaurite le dipendenze funzionali parziali che erano presenti nella relazione R. L’insieme delle tabelle così ottenute è in 2NF ed è stata mantenuta l’integrità delle dipendenze e del contenuto. Si prenda ad esempio la tabella ordine cliente che si trova in 1NF : Ordine cliente (codice cliente, nr. ordine cliente, rag-cli, città cli, via cli,) � la chiave X è rappresentata da (codice cliente, nr. ordine cliente). � l’insieme Y è (rag-cli, città cli, via cli) � Esiste un certo numero di attributi che sono dipendenti solo dal cod. cliente che sarà il nostro Z Si può attuare una scomposizione che dia luogo ad una relazione che contenga tutti gli attributi che sono dipendenti solo da Z cancellando gli stessi attributi dalla relazione originaria. cliente (codice cliente, rag-cli, città cli, via cli) Ordine cliente (codice cliente, nr. ordine cliente) La chiave della relazione cliente è composta da un solo attributo quindi la dipendenza è completa, mentre la chiave della tabella ordini, composta da 2 attributi, non ha più attributi primi. Le due relazioni derivanti dalla scomposizione sono in 2NF, di conseguenza il procedimento si ferma. Si fossero create relazioni con dipendenze parziali si sarebbe dovuto procedere nuovamente ad una ulteriore scomposizione. 143 Capitolo terzo Lo schema logico secondo il modello relazionale Cod­ Ragione-cli Via-cli città-cli ordini-cli cli 337 Bianchi spa Verdi 10 Bologna 137 337 Bianchi spa Verdi 10 Bologna 425 337 Bianchi spa Verdi 10 Bologna 821 568 Rossi srl Dante 2 Milano 76 874 Gialli sas Levi 7 Napoli 347 874 Gialli sas Levi 7 Napoli 450 Relazione Ordine clienti Cod-cli Ragione-cli Via-cli 337 Bianchi spa Verdi 10 Bologna 568 Rossi srl Dante 2 Milano 874 Gialli sas Levi 7 Napoli Relazione Cliente città-cli Cod-cli 337 337 337 568 874 874 ordini-cli 137 425 821 76 347 450 Relazione Ordine cliente 3.6.4. Terza forma normale (3 NF) Una relazione R è in terza forma normale (3NF) se è in 2NF ed ogni attributo non primo di R è dipendente in modo non transitivo da ogni chiave di R27. La terza forma normale prevede che ogni attributo non primo dipenda solo dalle chiavi e non anche da altri attributi non primi, quindi ogni attributo non primo deve dipendere dalle chiavi e solo dalle chiavi28. In effetti può capitare che 27 28 Atzeni, Batini, De Antonellis :La teoria relazionale dei dati, Boringhieri Belski :Dati e basi di dati :la teoria relazionale, FrancoAngeli 144 Capitolo terzo Lo schema logico secondo il modello relazionale una relazione sia in 2NF e che ci sia un attributo che non dipenda direttamente dalla chiave, ma transitivamente attraverso un altro attributo. La 3NF, che si basa quindi sulla eliminazione delle dipendenze transitive, è stata introdotta per eliminare alcune anomalie di cancellazione, modifica e inserimento. Si può, per questo, considerare un esempio proposto da Atzeni ed Altri in “La teoria relazionale dei dati” . Si consideri lo schema di relazione collocazione - genere relativo ad uno zoo. Collocazione - genere (NomeComune, Casa, Addetto, Area, Responsabile) NomeComune Giraffa Leone Orso Zebra Elefante Area Est sud Est Ovest Ovest Casa Recinto Tana Grotta Steccato Rustico Addetto Bini Mori Dea Lella Seri Responsabile Rossi Verdi Rossi Bianchi Bianchi Lo schema è in 2NF poiché la sua chiave consiste di un solo attributo e quindi gli attributi non primi dipendono completamente da essa. Si possono identificare tre tipi di anomalie : ? Anomalie di inserimento di nuove tuples :se si vuole inserire l’informazione che una casa è gestita da un particolare addetto non lo si può fare se non si conosce il genere animali destinato in quella casa, poiché il nome comune costituisce la chiave dello schema. ? Anomalie di cancellazione delle tuples :se un genere di animali si estingue nello zoo, viene ad estinguersi anche la relazione esistente fra la casa che era destinata a contenere quel genere di animali e l’area in cui quella casa è dislocata ? Anomalie di modifica delle tuples : se cambia il responsabile di una certa area si dovrà modificare tutte le tuples che fanno riferimento a tale area. Per trasportare una relazione in 3NF Belski propone un procedimento che assicura la conservazione di contenuti e dipendenze. Si ha uno schema R(A) 145 Capitolo terzo Lo schema logico secondo il modello relazionale con chiave X e un insieme di attributi non primi Y che determina funzionalmente un insieme di attributi Z, si deve : 1. creare una tabella con chiave Y contenente gli attributi Z 2. rimuovere dalla tabella gli attributi Z dalla tabella originaria. 3. Si deve ripetere la procedura di scomposizione fino a quando non siano state rimosse tutte le dipendenze transitive. Torniamo all’esempio : X = Nomecomune Y = Casa Z = Area, Addetto, Responsabile Nell’esempio l’attributo Casa è l’unico che dipenda direttamente dalla chiave, mentre con Area, Addetto e responsabile c’è una dipendenza transitiva. Per cui : Collocazione genere (NomeComune , Casa) Informazioni sulla casa (Casa, Area, Addetto, Responsabile) Occorre vedere a questo punto se la relazione Informazioni sulla casa è in 3NF. Se gli attributi Area e Addetto dipendono in maniera diretta da Casa, lo stesso non si può dire di Responsabile il quale dipende transitivamente da Casa attraverso Area. X = Casa Y = Area Z = Responsabile Collocazione genere (NomeComune , Casa) Informazioni sulla casa (Casa, Area, Addetto) Informazioni sull’Area (Area, Responsabile) Adesso tutte e tre le relazioni sono in 3NF. 146 Capitolo terzo Lo schema logico secondo il modello relazionale 3.6.5. Determinante Un determinante è un attributo o un insieme di attributi non ridondanti in grado di agire come identificatori univoci di un altro attributo ( o di un altro insieme di attributi) appartenente ad una determinata relazione29. Si dirà : A? B e cioè che A determina B (o A è un determinante di B) oppure B presenta una dipendenza funzionale totale da A. Abbiamo quindi la dipendenza di un attributo o di un gruppo di attributi da un altro attributo o gruppo di attributi. Questa dipendenza viene detta funzionale poiché in funzione del determinante si stabiliscono gli altri attributi. Determinanti lo sono tutte le chiavi candidate che sono composte di tutti gli attributi primi. Determinanti possono essere anche attributi primi che fanno parte di una chiave candidata ma non la comprendono interamente, per cui si creano casi di dipendenza parziale, risolti con il passaggio alla 2NF. Oppure, un attributo non primo può essere dipendente da un attributo non primo ( quindi, questo determinante è un attributo non primo) il quale è interamente dipendente dalle chiavi candidate della relazione, per cui si verrà a creare un caso di dipendenza transitiva risolto dalla 3NF30. Un altro caso si ha quando una relazione ha più chiavi candidate . Queste sono composte ed hanno degli attributi in comune legati fra loro da dipendenza funzionale. Avremo, quindi, un determinante che sarà un attributo o un gruppo di attributi primi di una chiave (che però non contiene la chiave) che sarà legato ad un attributo o ad un gruppo di attributi primi di un’altra chiave che non la contiene (o contengono). Misbah Deen : Database : concetti teorici e pratici, FrancoAngeli In base alla definizione di determinante, Misbah Deen propone per la 3NF una definizione elaborata da Sharman : Una relazione è in 3NF se ogni determinante è chiane esterna. In base a questa definizione la 3NF è indipendente dalla 2NF, per cui non sarà più necessario che una relazione si trovi in 2NF per poi passare alla 3NF. Basterà solo identificare i determinanti ed articolare gli stessi in modo tale che siano chiavi esterne di una tabella e chiavi primarie di un’altra ottenuta per scomposizione. 29 30 147 Capitolo terzo Lo schema logico secondo il modello relazionale 3.6.6. Forma normale di Boyce - Codd In una relazione in 3NF secondo quanto affermato da Codd, ogni attributo non primario deve essere rispetto a ciascuna chiave candidata : ? interamente indipendente ? non transitivamente indipendente Si può affermare che una relazione R è normalizzata secondo Codd se ogni tupla è composta da una chiave primaria, che identifica un'entità del mondo reale, e da un insieme di valori di attributi fra loro indipendenti, che descrivono l’entità. Ma questa definizione entra in crisi nel caso di relazioni con due o più chiavi candidate composte (con più di un attributo) ad intersezione non nulla (cioè con almeno un attributo in comune). Si consideri la tabella studio : lezione (studente, materia, insegnante) Studente Rossi Rossi Verdi Bianchi Verdi Celesti Materia Mat. Gen Diritto priv. Mat. Gen. Mat.gen. Diritto priv. Diritto priv. Insegnante Vannucci Galli Vannucci Visani Galli Trevisan Siamo nella facoltà di Economia e Commercio di Firenze ed è affollata. I corsi vengono frazionati per gruppi di allievi e le regole sono che : ? ogni professore insegna un solo corso ? ogni studente è assegnato al corso identificato dal nome del docente Le chiavi candidate sono : (studente, materia) (studente, insegnante) Esiste, però, una dipendenza funzionale fra : Insegnante? Materia 148 Capitolo terzo Lo schema logico secondo il modello relazionale Questa relazione lega due attributi primi, entrambi non contenenti chiave, dove “insegnante” è il determinante. Si possono individuare in questa relazione alcuni tipi di anomalie : ? Ridondanza. Si ripete ogni volta la materia insegnata dal professore assieme al nome del professore. ? Perdita di informazioni. Se si cancella la tupla relativa allo studente Celesti si perde anche l’informazione che il prof. Trevisan insegna Diritto privato. Per superare queste anomalie si è introdotta la forma normale di Boyce Codd che non accetta le dipendenze funzionali per attributi primi. Una relazione è nella forma normale di Boyce - Cood se e solo se è in 1NF ed ogni determinante è una chiave candidata31. Questa definizione si svincola dalla dipendenza intera e dalla dipendenza transitiva che venivano affrontate nella definizione delle 2NF e delle 3NF. Si può dire che una relazione in BCNF è un sottoinsieme delle relazioni in 3NF, per cui tutte le relazioni che sono in BCNF sono anche in 3NF ma che non è sempre vero il viceversa. Un metodo per ridurre concretamente una relazione che non si trova in BCNF in un insieme di schemi tutti in BCNF, conservandone il contenuto, è proposto da Belski. Ad ogni passo si spezza la tabella non in BCNF secondo la tecnica seguente : ? In una relazione R, non in BCNF, si individua una dipendenza funzionale X? Y fra un insieme di attributi X e un insieme di attributi Y in cui X non contiene una chiave dello schema (cioè non coincide con una chiave dello schema) ? Si indicherà con Z l’insieme degli attributi restanti alla relazione, tolti quelli di X e Y. L’insieme Z non dovrà mai essere vuoto, altrimenti vuol dire che X contiene una chiave dello schema e questo è contrario alle ipotesi fatte. 31 Nazzini, Sangas, Vaccaro : Introduzione ai data base relazionali 149 Capitolo terzo Lo schema logico secondo il modello relazionale ? Si spezza la relazione in due , portando nella prima gli insiemi X e Y e nella seconda gli insiemi X e Z. si ottengono in questo modo due schemi : R1(X,Y) mancando attributi che non dipendono da X, in questo caso avremo che il nostro determinante è divenuto una chiave , per cui si trova in BCNF. Nel secondo : R2(X,Z) Si deve verificare se esistono dipendenze non accettate. Se ne esistono, si procede ripetendo la stessa tecnica fin quando tutti gli schemi sono in BCNF. In questo tipo di procedimento viene garantita la conservazione del contenuto, però non viene allo stesso modo garantita la conservazione delle dipendenze funzionali che sono presenti nello schema originario. Esempio. lezione(studente, materia, professore) La dipendenza che crea problemi è : Insegnante? Materia Si pone : X= Insegnante Y= Materia Z= Studente Per cui : R1 (insegnante, materia) R2 (insegnante, studente) Materia Mat. Gen Diritto priv. Mat.gen. Diritto priv. Insegnante Vannucci Galli Visani Trevisan Studente Rossi Rossi Verdi Bianchi Verdi Celesti Insegnante Vannucci Galli Vannucci Visani Galli Trevisan 150 Capitolo terzo Lo schema logico secondo il modello relazionale In questa scomposizione alcune dipendenze sono andate perse come quella : [studente, materia] ? insegnante che dopo la scomposizione non è più presente poiché non esiste più uno schema con tutti e tre gli attributi. 3.6.7. Dipendenze multivalore (MVD) La BCNF considera tutti i possibili casi di dipendenze funzionali accettando solo quelle dipendenze che non creano problemi. Però, a volte, si hanno casi che non sono riconducibili esclusivamente a semplici dipendenze funzionali. Prendendo in considerazione la tabella lezione, se si togliesse il vincolo secondo cui un professore può insegnare solo una materia allora si avrebbe una situazione per cui il nome di un insegnante non determina automaticamente una materia, ma possono individuarsi più tuples, tutte egualmente valide. Quindi la BCNF non elimina questo tipo di anomalie che si riconducono alle cosiddette dipendenze multivalore. Data una relazione R e tre suoi sottoinsiemi disgiunti X,Y,Z (cioè le loro intersezioni sono vuote) tali che la loro unione coincida con R, si dice che X multidetermina Y quando ad un insieme di valori di X possono essere associati più insiemi di valori di Y(ci sono zero o più valori possibili di Y), che non dipendono affatto dai valori di Z (cioè i restanti Attributi). Cioè, se si hanno due tuples con gli stessi valori di X e diversi valori di Y, si possono scambiare gli attributi di Y, avendo ancora tuples che rientrano in R indipendentemente dai valori che possono assumere i restanti attributi appartenenti all’insieme Z32. Albano porta questo esempio : Si consideri il seguente schema di relazione : R[C,D,O ,A,S,V] in cui si ha una dipendenza multivalore C? ? OA 32 C DA DA DA DA DA D Albano Albano Albano Albano Albano O L10 M9 M10 L10 M9 A S1 S2 S2 S1 S2 S Rossi Rossi Rossi Bianchi Bianchi V 30 30 30 28 28 151 Capitolo terzo Lo schema logico secondo il modello relazionale Si indica una dipendenza multivalore in questo modo : X? ??? Y Da quanto detto, si può affermare che la dipendenza funzionale è solo un caso particolare della dipendenza multivalore, in cui ad un X si può associare solo un Y. Inoltre, si vede dalla definizione come si possono avere dipendenze multivalore solo nel caso in cui si abbia almeno tre attributi33. Se in uno schema relazionale R (X,Y,Z) esiste una dipendenza multivalore fra X? ??? Y indipendentemente da Z , X e Z non saranno indipendenti l’uno dall’altro (cioè X? ??? Z indipendentemente dai valori Y), questo significa che le dipendenze multivalore sono sempre almeno due o più coppie ;per questo motivo possono essere indicate entrambe con una espressione comune X? ??? Y/Z. In base a quanto affermato si può enunciare il teorema di Fagin : Se nella relazione R (X,Y,Z) ha luogo la MVD X? ?? Y/Z allora può essere scomposta nelle sue proiezioni R1 (X ,Y) e R2(X ,Z) e viceversa, cioè se R(X,Y,Z) è il join delle due relazioni R1 (X ,Y) e R2(X ,Z) allora ha luogo in R la MVD X? ??? Y/Z. Quindi, R può essere ricostruita tramite un join naturale su X delle due proiezioni R1 e R2. 3.6.8. Quarta forma normale (4NF) Una relazione R è in quarta forma normale (4NF) quando è in 1NF e se per ogni dipendenza multivalore X?? ? Y, con Y non vuoto o sottoinsieme di X e DA Albano M10 S2 Bianchi 28 Consideriamo la seconda e la quarta tupla. Se si scambia [M9,S2] con[L10,S1] otteniamo due nuove tuples che appartengono ancora alla relazione (la prima e la quinta). 33 Misbah Deen propone un’altra definizione per cui dato uno schema di relazione R (A,B,C) avremo che :L’attributo A è un multideterminante dell’attributo B in presenza di un attributo C se ogni valore di A può agire come identificatore univoco di un insieme di valori B, indipendentemente dai valori C presenti nella relazione. 152 Capitolo terzo Lo schema logico secondo il modello relazionale X? ?Y non contiene tutti gli attributi di R (quindi esisterà un altro insieme di restanti attributi Z), è tale che X contiene una chiave di R. Se X contiene una chiave allora determina in maniera univoca Y ed anche tutti gli altri attributi di R. Per fare questo occorre scomporre lo schema fino a demolire tutte le dipendenze multivalore riconducendo le stesse a dipendenze funzionali semplici34. Per scomporre uno schema di relazione che presenta tali dipendenze multivalore, occorre seguire un procedimento che riduca questo schema in un insieme di schemi tutti in 4NF, salvaguardandone il contenuto. Per ottenere questo risultato si spezza una relazione non in 4NF in questo modo : ? Si individua nella relazione R un insieme di attributi X che multidetermina un insieme Y. ? Si chiamerà Z l’insieme degli attributi restanti (Z non deve però mai essere un insieme vuoto) ? Si spezza la relazione R in due parti, trasferendo nella prima parte gli attributi appartenenti a XeY: R1(X,Y) e nella seconda gli attributi appartenenti a X e Z : R2(X,Z) Nella R1 la dipendenza fra X e Y che resta non soddisfa più la definizione di dipendenza multivalore. In R2 si dovrà verificare se ci sono ancora dipendenze multivalore. Se la risposta è positiva si ripete nuovamente la procedura sopra esposta fino a che tutte le tabelle saranno in 4NF. Come per la BCNF anche per la 4NF il procedimento adottato preserva il contenuto ma non offre assolutamente garanzie sul mantenimento delle dipendenze. Si può affermare che le relazioni in 4NF sono anche in BCNF poiché ne costituiscono un sottoinsieme. Prendiamo ad esempio la seguente relazione visite : 153 Capitolo terzo Lo schema logico secondo il modello relazionale Visite (Veterinario, Specializzazione, DataVisita) Veterinario Rossi Rossi Bianchi Rossi Rossi Bianchi Specializzazione Oculista Otorino Oculista Oculista Otorino Oculista DataVisita 12/10/96 12/10/96 12/10/96 14/10/96 14/10/96 12/10/96 Le regole sono queste : ? un veterinario può avere più specializzazioni ? le date delle visite che un veterinario fa sono ripetute per tutte le specializzazioni che il veterinario ha. Come si vede in questa relazione ci sono delle anomalie di ridondanza. Si hanno nello schema due dipendenze multivalore : Veterinario ? ? Specializzazione Veterinario ? ? DataVisita Si consideri : X= Veterinario Y= Specializzazione Z= DataVisita R1 (Veterinario, Specializzazione) Veterinario Rossi Rossi Bianchi Specializzazione Oculista Otorino Oculista R2 (Veterinario, Datavisita) Veterinario Rossi Rossi Bianchi Bianchi Datavisita 12/10/96 14/10/96 12/10/96 14/10/96 Come si vede sia la R1 che la R2 sono in 4NF poiché le dipendenze che si hanno sono solo semplici dipendenze funzionali. Inoltre, i due schemi non possono che essere in 4NF poiché sono composti di due attributi. Si può cercare, adesso, di verificare a cosa corrisponde negli schemi E/R la situazione descritta nell’esempio precedente : 34 Misbah Deen propone per la 4NF un’altra definizione che ricalca quella di Sherman per la 154 Capitolo terzo Veterinario Lo schema logico secondo il modello relazionale n m Esercita Specializzazion e m Visita n DataVisita Figura 3.10 Associazione ternaria m a n Le anomalie di ridondanza risolte dalla 4NF sono derivanti dall’aver voluto inserire in una stessa tabella le due associazioni che appaiono evidenti nel diagramma E\R. Inoltre, si nota che le associazioni sono del tipo m a n. Riportare in 4NF significa, quindi, spezzare l’associazione ternaria nelle due binarie indipendenti poiché nella stessa relazione ternaria producevano delle ridondanze. 3.6.9. Dipendenza di concatenamento (JD) La relazione R soddisfa la Join Dependency rappresentata come JD*(X,Y,....Z)se, e solo se, essa è il Join delle sue proiezioni su X,Y,......Z, dove X,Y,.....Z sono sottoinsiemi degli attributi di R35. 3NF : Una relazione è in 4NF se ogni multideterminante è una chiave candidata. 35 Nazzini, Sanges, Vaccaro :Introduzione ai Data Base relazionali. 155 Capitolo terzo Lo schema logico secondo il modello relazionale Questa definizione mostra come le multidipendenze MVD possono essere assunte come caso particolare della JD. Questo deriva direttamente dal teorema di Fagin per cui condizione necessaria e sufficiente perché nella relazione R (X,Y,Z) abbia luogo la MVD X ? ? Y/Z è che R soddisfi la JD? (XY, XZ). Si tratta, quindi, di una join sul multideterminante. 3.6.10. Quinta forma normale (5NF) La quinta forma normale viene detta anche forma normale estrema poiché dipende dal tipo di operazioni consentite in fase di scomposizione di una relazione in altre relazioni. I processi di normalizzazione si realizzano con scomposizioni e sono basati su queste regole (Deen) : 1. Quando una relazione viene scomposta in una serie di altre relazioni, ognuna di queste rappresenta una proiezione della relazione originaria 2. La relazione originaria deve essere il concatenamento dell’insieme delle nuove relazioni senza che ci sia perdita di contenuto. Fargin ha introdotto questa forma normale estrema nel caso in cui proiezioni e concatenamenti siano gli unici operatori possibili. Inoltre ha dimostrato che la MVD ma anche la dipendenza funzionale totale sono un caso di JD e che una relazione in 5NF è anche in 4NF. Questa forma normale riguarda le relazioni in 4NF ternarie che potrebbero essere scomposte senza perdere informazioni in 3 proiezioni ma non in due. Si possono definire (Deen) le dipendenze di concatenamento in due tipi : 1. quello in cui le proiezioni sono basate su chiavi candidate 2. quello in cui le proiezioni non sono chiave candidata. Se una relazione R ha n attributi ed inclusa almeno una chiave candidata R potrà essere scomposta in (n-1) relazioni binarie R1, R2,... ,R(n-1) ognuna contenente la chiave candidata ed un altro attributo, in modo tale che R rappresenti il concatenamento di tutte queste relazioni. 156 Capitolo terzo Lo schema logico secondo il modello relazionale Questo tipo di dipendenze vengono dette ordinarie. Il secondo tipo di dipendenza di concatenamento è invece determinante in fase di normalizzazione. Si arriverà alla 5NF quando una relazione non potrà più subire ulteriori scomposizioni per mezzo di proiezioni non - ordinarie (cioè proiezioni non basate sulle chiavi candidate) senza subire perdite di informazioni. La 5NF viene definita in questo modo : Una relazione è in 5NF se non è soggetta a dipendenze di concatenamento non ­ ordinarie36. La 5NF viene detta forma normale estrema poiché gli unici operatori permessi sono proiezioni e concatenamenti, in quanto ogni ulteriore scomposizione dovrà essere basata sulle chiavi candidate. La 5NF non produce necessariamente relazioni irriducibili, se vengono incluse anche quelle basate su chiavi candidate generano, invece, relazioni irriducibili ; se la chiave candidata è un singolo attributo le relazioni saranno binarie. Si è visto, infatti, come la terza forma normale 3NF si sia basata sulla scomposizione dei determinanti e la quarta forma normale 4NF di sia basata sulla scomposizione dei multideterminanti che non erano in effetti chiavi candidate di R. La posizione estrema viene raggiunta quando una relazione non può essere ancora scomposta, senza perdere informazioni, tranne che per mezzo di proiezioni di chiavi candidate. Quindi, questo vuol dire che una relazione che si trova in 5NF è anche in 4NF e in 3NF. In effetti la 5NF non può contenere un determinante o un mutideterminante che non sia anche chiave candidata. La 5NF è solitamente proposta per relazioni in 4NF che siano ternarie, le quali possono presentare alcune anomalie. Ad esempio : Si consideri lo schema di relazione Z*(Fornitore, Articolo, Commessa) 36 Misbah Deen :Databasa :concetti teorici ed applicativi FrancoAngeli 157 Capitolo terzo Lo schema logico secondo il modello relazionale Fornitore F1 F1 F2 F1 Articolo A1 A2 A1 A1 Commessa C2 C1 C1 C1 Questo schema si presenta in 4NF con chiave composta dai suoi tre attributi. Si possono, comunque, presentare delle anomalie per esempio di cancellazione : se si annulla la tupla (F1, A1, C1) occorrerà annullare un’altra tupla che potrà essere individuata solo se si fanno delle considerazioni di tipo applicativo. Cancellando la tupla (F1, A1, C1) non si sa esattamente se questo è dovuto al fatto che F1 non fornisce più l’articolo A1 oppure, sempre l’articolo A1 è obsoleto per la commessa C1. Nel primo caso occorrerà cancellare anche la tuple (F1, A1, C2), mentre nel secondo la tuple da cancellare sarà (F2, A1, C1). Si potrà eliminare queste anomalie effettuando tre proiezioni binarie (e non due) : Z1(Fornitore, Articolo) Fornitore F1 F1 F2 Articolo A1 A2 A1 Z2 (Fornitore, Commessa) Fornitore F1 F1 F2 Commessa C2 C1 C1 Z3 (Articolo, Commessa) Articolo A1 A2 A1 Commessa C2 C1 C1 Join Fornitore F1 F1 F2 F1 Articolo A1 A2 A1 A1 Commessa C2 C1 C1 C1 Effettuando il join si ottiene nuovamente Z senza perdere infermazioni. Nel caso in cui lo schema Z avesse avuto questa forma : 158 Capitolo terzo Lo schema logico secondo il modello relazionale Fornitore F1 F1 Articolo A1 A2 Commessa C2 C1 l’inserimento di una tupla (F2,A1,C1) avrebbe causato in caso di proiezione una tupla spuria ovvero (F1, A1, C1) con la creazione di informazioni che non possono avere fondamento. In effetti : Fornitore F1 F1 F2 Fornitore F1 F1 F2 Articolo A1 A2 A1 Articolo A1 A2 A1 Fornitore F1 F1 F2 Commessa C2 C1 C1 Commessa C2 C1 C1 Articolo A1 A2 A1 Commessa C2 C1 C1 Join Fornitore F1 F1 F2 F1 Articolo A1 A2 A1 A1 Commessa C2 C1 C1 C1 Una situazione come quella descritta dall’esempio è rappresentabile nel modello E\R da una struttura ciclica : 159 Capitolo terzo Fornitore m Lo schema logico secondo il modello relazionale Vende n m Articolo m compone Commessa m n Serve Quindi, questa rappresenta una situazione che nel modello E\R e più in generale nell’ambito di una metodologia di progettazione concettuale occorre evitare. Quando si presenta una situazione del genere, occorre già in sede di progettazione concettuale porvi rimedio sciogliendo queste associazioni cicliche qualora provochino delle ridondanze o altre anomalie. In questo caso è più conveniente per non creare delle tuple spurie e quindi non corrispondenti ad informazioni reali riunire le tre entità in una unica relazione : Fornitore Commessa Articolo 160 Capitolo terzo Lo schema logico secondo il modello relazionale Vista la particolarità di questi casi proposti nella 4NF e soprattutto nella 5NF spesso gli analisti affermano che un buon schema logico si ottiene quando si è giunti in 3NF. Le anomalie che la 4NF e la 5NF si propongono di risolvere non dovrebbero verificarsi se è stata effettuata una buona progettazione concettuale oppure i casi dovrebbero essere molto rari. Infatti la NF produce relazioni del tipo m a n che nell’ambito della progettazione relazionale dovrebbero essere opportunamente “trattate” con l’introduzione di una terza tabella, mentre la situazione descritta dalla 5NF propone associazioni cicliche che, spesso, possono presentarsi, nel caso di normalizzazione in 5NF , un rimedio più dannoso della situazione anomala. 3.7. . Creazione dei database tramite strumenti CASE (Computer - Aided Software Engineering) Attraverso questi strumenti si può progettare e poi automaticamente creare la struttura dei database relazionali. Gli strumenti CASE consentono l’uso di tecniche grafiche, come i diagrammi E\R, per progettare la struttura delle tabelle e stabilire le relazioni fra loro. Questi strumenti fanno risparmiare molto tempo ed impediscono molti errori quando si realizza un database relazionale di grosse dimensioni. La maggior parte dei CASE contengono un deposito in cui vengono salvate le informazioni sulla struttura della tabella, sui campi chiave primari ed esterni sui tipi di relazione tra le tabelle. Il deposito è un database conservato nella stessa applicazione CASE. Utilizzando i dati del proprio deposito si possono stampare gli schemi del proprio database e generare dizionari dei dati. Quando la struttura del proprio database è soddisfacente, il CASE traduce i dati che si trovano nel deposito in istruzioni del Linguaggio di Definizione dei Dati SQL. Le istruzioni di Definizione dei dati in linguaggio SQL vengono poi inviate al RDBMS. 161