Indice generale PREMESSA.....................................................................................................................................1 INTRODUZIONE...........................................................................................................................1 CRITERI DI PROGETTAZIONE DELL' ORGANIZZAZIONE FISICA.....................................5 L 'INFORMAZIONE IN UNA BASE DATI...................................................................................6 MODELLI DI DATI........................................................................................................................9 I LINGUAGGI PER LA MANIPOLAZIONE DEI DATI E IL MODELO RELAZIONALE.....13 SCHEMI RELAZIONALI DI BASI DI DATI..............................................................................14 PROGETTAZIONE MODELLI DI BASE DATI.........................................................................19 PROGETTAZIONE.......................................................................................................................22 PROGETTAZIONE CONCETTUALE....................................................................................23 PROGETTAZIONE LOGICA..................................................................................................24 PROGETTAZIONE FISICA ....................................................................................................25 ESEMPI DI RPOGETTAZIONE..................................................................................................26 PRENOTAZIONI AD ALBERGHI..........................................................................................26 PROGETTAZIONE DI UN DATABASE AZIENDA..............................................................30 Teoria dei database PREMESSA Questa relazione vuole esporre i concetti alla base dei quali sono realizzati e progettati i database relazionali. Non è un documento che tratta l' argomento in tutta la sua complessità ma può essere utile per chiarire le idee per poi approfondire lo studio della teoria dei database con dei testi dedicati. Si è deciso di realizzare il testo in modo schematico per aumentare la chiarezza e renderlo più sintetico. INTRODUZIONE In questa prima parte si introdurranno la definizione di archivio e la nomenclatura relativa. Inoltre sono descritte anche le operazioni che un utente può eseguire su un archivio. Si definisce archivio o file l'insieme di tutte le informazioni Ogni insieme unitario di informazione è detto record. Un record è costituito da un insieme di campi ciascuno dei quali contiene una parte dell'informazione. Ad ogni campo è associato un nome che serve per indicare la porzione d' informazione contenuta in quel campo . Un archivio è un insieme di record. La struttura di un record è la specificazione dei campi che lo costituiscono. L'insieme dei campi utilizzati per identificare un record di un file è detto chiave. Si definisce metodo della chiave implicita utilizza per chiave una parte dell'informazione. Si definisce metodo della chiave mediante tabella quel metodo che utilizza per determinare la chiave del record una tabella che associa all'informazione un codice. Teoria dei DataBase Ing. Antonio Nicolazzo Si definisce metodo della chiave mediante regole logiche quel metodo che determina la chiave mediante l'applicazione di regole predefinite ad una parte dell'informazione. I record di un file si dicono omogenei se contengono tutti le stesse informazioni nello stesso ordine altrimenti si dicono non omogenei. Nel caso si utilizzano record non omogenei è necessario inserire un campo per l'identificazione del tipo di record. Si definisce lunghezza di un informazione il numero di caratteri che la compongono. Si definisce lunghezza di un record il numero di byte utilizzati per rappresentare l' informazione che esso contiene. Un record può essere a lunghezza fissa o variabile. In caso di record a lunghezza variabile si devono utilizzare degli indicatori di inizio e fine e questo rende l' utilizzo di questi tipi di record più oneroso. Si definiscono in un sistema gestione degli archivi le seguenti operazioni: – – – – creazione di un file operazioni di aggiornamento di un file ricerca di un record operazioni globali sui record L' organizzazione di un file determina la realizzazione del sistema gestione. L' insieme dei file e delle informazioni necessarie alla loro elaborazione è detta directory. Le directory sono utilizzate dal sistema in modo trasparente all'utente ma quest'ultimo può avere informazioni sulle directory mediante particolari interrogazioni del archivio. Si definisce ricerca per posizione l' operazione con cui si individua un record specificandone il numero d' ordine all'interno del file. Si definisce ricerca per chiave l'operazione mediante cui si individua il record specificando il valore della chiave del record da ricercare. Si definiscono operazioni di aggiornamento di un file le seguenti: – – – inserzione cancellazione modifica la modifica del file è l' operazione con cui si cambia il contenuto di uno o più campi di un record. La modifica avviene in memoria centrale e poi si trasferisce il file modificato nella memoria ausiliaria nuovamente(Hard Disk). La cancellazione si effettua logicamente associando ad ogni record cancellato un tag detto di cancellazione. Quindi l' operazione di cancellazione non comporta una reale perdita dell'informazione e conseguente liberazione dello spazio di memoria. L' inserimento può avvenire secondo la modalità di sovrapposizione o ampliamento. Il metodo di sovrapposizione sostituisce un record cancellato con il record che si vuole inserire, mentre il metodo di ampliamento inserisce il record alla fine del file facendo aumentare le dimensioni del file. La modifica di un record se non comporta la variazione del campo chiave è condotta con la sostituzione del record da modificare con quello modificato, mentre se la modifica coinvolge anche il valore del campo chiave si cancella Teoria dei DataBase Ing. Antonio Nicolazzo il record iniziale e si inserisce il record modificato. Si definisce struttura di un file l' insieme dei seguenti parametri: – specificazione delle informazioni memorizzate – scelta dell'organizzazione fisica L'organizzazione fisica dei file deve essere determinata in funzione del tipo di elaborazioni che devono essere effettuate su quelle informazioni. Le organizzazioni fisiche sono: – sequenziali – casuali – miste Organizzazione sequenziale – E' adatta a file che richiedono la stessa elaborazione su tutti i record. – Permette la ricerca sia per posizione – La ricerca richiede tempi lunghi e variabili a seconda di dove e collocata l' informazione Organizzazione casuale – Permette la ricerca sia per posizione che per chiave – I tempi di ricerca sono ridotti – Prevede una procedura per l'identificazione del record in modo univoco in funzione del valore della chiave Organizzazione mista – Permette la ricerca sequenziale dei file così consentendo le operazioni globali – Consente mediante un indice di norma l'accesso diretto alla posizione dei file che contiene il record così la ricerca non è veloce come quella casuale ma più veloce di quella sequenziale. Il frazionamento dell'informazione risponde ad un esigenza di miglioramento in quanto riduce il tempo di trasferimento dell'informazione e un ottimizzazione dello spazio di memoria occupato. Di seguito si definisco i metodi di frazionamento dell'informazione: Metodo della suddivisione delle informazioni: Il metodo prevede la divisione delle informazioni in tanti file quante sono le elaborazioni possibili. Se una stessa informazione è richiesta in diverse elaborazioni essa deve essere ripetuta nei diversi file. Le informazioni ripetute possono rappresentare la chiave per tutti i file così da individuare i record logicamente uniti. Metodo del collegamento fra informazioni Il metodo definisce un file principale con tutte le informazioni necessarie per tutte l' elaborazioni. In seconda istanza si definiscono un numero di file secondari pari al numero di elaborazioni possibili. Ad ogni record del file principale è associato un record dei file secondari Per il metodo del collegamento è necessario definire una procedura per associare ad ogni record del file principale uno dei file secondari o se necessario si aggiunge nel file principale un campo che contiene un riferimento ai record dei file Teoria dei DataBase Ing. Antonio Nicolazzo secondari. Caratteristiche dell'informazione I parametri che caratterizzano un informazione per essere memorizzata sono: – definibilità – individuabile senza ambiguità – rappresentabile – codificabilità ossia deve poter essere associata ad un codice alfanumerico L'esattezza delle informazioni acquisite in un archivio sono garantite dalle seguenti operazioni: – acquisizione – rappresentazione – immissione e controllo – validazione L' operazione d'immissione può comportare i seguenti errori: – errori impliciti o errori di misura – errori di rappresentazione – errori di trascrizione Validazione Si definisce validazione il controllo finale dei dati per la verifica del loro significato. Si possono definire degli algoritmi auto controllanti per verificare l' esattezza delle informazioni contenute nei campi . Teoria dei DataBase Ing. Antonio Nicolazzo CRITERI DI PROGETTAZIONE DELL' ORGANIZZAZIONE FISICA. L' organizzazione fisica di un archivio considera le tecniche di memorizzazione dell'informazione. In questo capitolo sono presi in considerazioni gli aspetti che distinguono e permettono di migliorare l'organizzazione fisica di un archivio. I criteri di valutazione delle performance di un database sono legati al tempo impiegato per la ricerca dell'informazione. I criteri di valutazione dell'occupazione di memoria si dividono in due tipologie : - compattamento dell'informazione - collegamento dell'informazioni a dati comuni (riduzione della ridondanza dei dati) I Criteri di compattamento dell'informazione si distinguono in: 1. Riduzione dello spazio riservato ad ogni informazione 2. Eliminazione delle informazioni non utili o opzionali Un campo è detto opzionale se può contenere informazioni nulle. La gestione dei campi opzionali può avvenire tramite le “tabelle di bits” o le “tabelle di codici”. Le tabelle di bits sono delle tabelle in cui si memorizzano un bit per ogni campo opzionale. Il bit che indica il campo opzionale è posto a uno se il corrispondente campo contiene informazione. 0 1 1 Campo 1 opzionale vuoto Campo 2 opzionale Campo 3 opzionale con informazione con informazione Corrispondenza bit /campo Il metodo delle tabelle dei codici definisce un codice per ogni campo opzionale. In caso di presenza del campo opzionale il campo in questione è preceduto dal codice corrispondente “010” campo2 “010” campo 1 “011” campo 3 Il criterio di collegamento a dati comuni è utilizzato per ridurre lo spazio impiegato per la memorizzazione di dati comuni a più record. Per la riduzione dei dati comuni si utilizzano due le seguenti metodologie: - Collegamento tramite rinvio - Collegamento tramite gerarchia Il collegamento tramite rinvio utilizza una tabella per associare ad ogni valore del dato comune un codice. I records che utilizzano il dato comune riporteranno al posto del dato il codice ad esso associato. Il collegamento tramite gerarchia raggruppa i record che utilizzano una stessa informazione e si memorizza il dato comune seguito da tutte le informazioni contenute nei record raggruppati. Teoria dei DataBase Ing. Antonio Nicolazzo Teoria dei DataBase Ing. Antonio Nicolazzo L 'INFORMAZIONE IN UNA BASE DATI Un dato è la rappresentazione di una informazione ottenuta per mezzo di alcune caratteristiche dell'informazione stessa. Una corrispondenza tra due insiemi A e B di dati è una legge che associa ad ogni dato dell'insieme A un sottoinsieme, anche vuoto, dei dati dell'insieme B. Una base dati può essere vista come un magazzino d' informazioni memorizzate su un elaboratore e utilizzata per mezzo di un sistema per la gestione di una base dati. Una transazione su una base dati è l'esecuzione, da parte del sistema di gestione della base dati, di una richiesta dell'utente. Un sistema per la gestione di una base dati deve permettere ad un utente di definire, secondo regole ben precise e tipiche del sistema stesso, le caratteristiche delle informazioni e delle corrispondenze che costituiscono la base dati che l' utente vuole utilizzare. Una base dati deve garantire le seguenti caratteristiche: L' indipendenza dei dati deve permettere all'utente di considerare la base dati in termini astratti ossia deve svincolare l 'utente dalla conoscenza di come e dove i dati sono memorizzati nell'elaboratore. La Sicurezza di una base dati deve permettere l 'accesso ad una informazione solo agli utenti abilitati e deve impedire la consultazione e modifica delle informazioni agli utenti non abilitati. L' integrità è assicurata dalla definizione dei vincoli di consistenza. I vincoli di consistenza sono le proprietà che devono essere rispettate dai dati memorizzati nella base dati per non comportare perdita o deformazione dell'informazione. Un sistema di gestione di base dati deve presentare sincronizzazione in quanto l'esecuzione di alcune operazioni di aggiornamento simultaneo non devono mai generare inconsistenza della base dati. Un sistema per la gestione della base deve prevedere delle operazioni di ripristino dati quindi deve prevedere le procedure per la realizzazione di backup periodici della base dati e procedure per il ripristino della base dati partendo dal backup. Il sistema per assicurare il perfetto ripristino deve memorizzare le transizioni che hanno modificato la base dati dall'ultimo backup. Livelli d' astrazione. Si definiscono per la gestione di un sistema di base dati i livelli d' astrazione fisico, logico ed esterno. Il livello fisico è il più vicino all'elaboratore ed è il livello che gestisce la reale disposizione dei dati in memoria. Lo schema fisico di una base dati è dato dalla descrizione delle caratteristiche e dei files usati per rappresentare la base dati logica. Il livello esterno è il livello più vicino all'utente e gestisce le viste dei dati. Si definiscono viste la descrizione astratta di una parte dello schema logico di una base di dati. Il livello logico è il livello d'astrazione collocato tra il livello fisico e quello esterno. Il livello logico gestisce l'organizzazione dei dati. Si distinguono tra i modelli logici i modelli relazionali, modelli gerarchici e modelli reticolari. I modelli relazionali permettono di descrivere sia i dati che le corrispondenze fra i dati sotto forma di un unica struttura di dati chiamata relazione. Nel modello gerarchico la struttura di dati usata per rappresentare l' informazione è un albero, dove un nodo rappresenta una informazione e i figli di un nodo sono associati al loro padre da una corrispondenza esistente nella base dati. Nei modelli reticolari vengono utilizzati records per rappresentare le informazioni e Teoria dei DataBase Ing. Antonio Nicolazzo connettori per rappresentare le corrispondenze tra le informazioni. Teoria dei DataBase Ing. Antonio Nicolazzo Per ogni vista esiste una corrispondenza schema esterno(vista)/schema logico e tale corrispondenza permette l' indipendenza logica dei dati. Esiste una corrispondenza schema logico/schema fisico in modo da specificare a quali informazioni si fa riferimento a livello fisico per rappresentare le informazioni a livello logico. Vantaggi dell'indipendenza L'indipendenza fisica dei dati implica che i l 'amministratore può modificare lo schema fisico della base dati senza alterare lo schema logico e le viste. L'indipendenza logica implica che lo schema logico può essere modificato senza modificare le viste degli utenti L'indipendenza fisica e logica permettono di realizzare dei programmi che non tengano conto dell'organizzazione fisica dei dati e delle tecniche d'accesso ai dati. Vista 1 Base di dati fisica Base di dati logica Vista 2 La progettazione delle viste, dello schema logico e dello schema fisico di una base dati è fatta dall'amministratore della base dati. L 'amministratore definisce: • Lo schema logico della base dati e i sottoschemi logici ai quali dovranno fare riferimento gli utenti • Lo schema fisico che è utilizzato per implementare lo schema logico • Le corrispondenze che esistono tra gli oggetti definiti a livello logico e gli oggetti definiti a livello fisico. Una volta che la base dati è realizzata l' amministratore è responsabile delle attività di gestione della base dati: • Contenuto informativo della base dati. L' amministratore della base dati deve identificare le entità che sono interessanti per l' applicazione e determinare le informazioni relative a queste entità che devono essere memorizzate. • Collegamento con gli utenti. Deve essere sempre assicurata la disponibilità dei dati per gli utenti. • Controllo di autorizzazione e procedure di validazione. L' accesso ai dati deve essere consentito solo ad alcuni utenti. I dati prima di essere memorizzati devono essere sottoposti ad un azione di controllo. • Strategia di sostegno e ripristino. Devono essere definite delle procedure per il ripristino e il recupero del contenuto della base dati anche in caso di danneggiamento della base dati. • Controllo delle prestazioni. Devono essere definite degli strumenti per il controllo in modo automatico delle prestazioni del sistema e per il miglioramento dell'efficienza dell'organizzazione adottata. • Strumenti d'amministrazione. Il sistema per la gestione di una base dati deve fornire all'amministratore i seguenti strumenti: 1. programmi di ripristino per ricreare la base dati in caso di crash 2. programmi di riorganizzazione per l' ottimizzazione dell'occupazione di memoria 3. programmi di diario per la memorizzazione di tutte le transizioni eseguite e dell'utente che le ha compiute Teoria dei DataBase Ing. Antonio Nicolazzo 4. programmi di analisi statistica per poter monitorare le prestazioni della base dati 5. dizionario dei dati che è una base dati che contiene la descrizione sugli oggetti su cui opera la base dati Concludendo l' utilizzo di una base dati consente: • • • • • La riduzione della ridondanza (ripetizione degli stessi dati in più punti) Controllo dell'inconsistenza dei dati Spartizione dei dati in modo che una nuova applicazione possa visualizzare le informazioni senza creare nuovi files Rafforzamento degli standars in virtù della centralizzazione delle informazioni Applicazione delle norme di sicurezza Teoria dei DataBase Ing. Antonio Nicolazzo MODELLI DI DATI un modello di dati è un formalismo utilizzato da ogni utente per la gestione dei dati e per descrivere la realtà con cui vuole interagire. esistono tre tipi di modelli per la gestione dei dati: – modello relazionale – modello gerarchico – modello reticolare Modello gerarchico Nel modello gerarchico le corrispondenze sono rappresentate da una struttura ad albero. Gli alberi sono detti occorrenze gerarchiche. Il record che appare sopra ad altri record dell'albero è detto di tipo ascendente o superiore. Il record che appare nella parte inferiore ad altri record è detto discendente o inferiore o dipendente. Il record situato nella parte superiore di un albero è detto radice. Una radice può avere un numero indeterminati di records dipendenti di diverso tipo. Esempio di gerarchia radice Nodo 1 Nodo 2 Un record può essere contemporaneamente ascendente e discendente. Le operazioni in un modello gerarchico sono complesse in quanto non è sufficiente individuare la corrispondenza tra i records ma occorre anche indicare il livello del record con le parole under o upper. Per localizzare un record quindi occorre specificare la corrispondenza con la condizione where e il contesto ascendente o discendente. Get <ascendente / discendente> where <condizione> In un modello gerarchico non è possibile inserire un record di tipo discendente se non si inserisce prima un record di tipo ascendente ad esso collegato. In un modello gerarchico se si cancella una corrispondenza è necessario cancellare anche i record collegati. In un modello gerarchico la cancellazione di un record ascendente impone la cancellazione di tutti i record dipendenti del record cancellato. Teoria dei DataBase Ing. Antonio Nicolazzo In un modello gerarchico quando si eseguono delle modifiche in un record discendente è opportuno cercare ogni occorrenza delle informazioni modificate nell'albero per non creare inconsistenza. Teoria dei DataBase Ing. Antonio Nicolazzo Modello Reticolare In un modello reticolare le corrispondenze sono rappresentate da records connettori che collegano i records con i dati. Una rete è una struttura più complessa di una gerarchia in quanto un record può avere un numero indeterminato di records superiori e inferiori. Il modello reticolare permette di rappresentare le corrispondenze molti a molti cosa che non è possibile nel modello gerarchico e in quello relazionale. Esempio: Fornitore1 Fornitore2 Fornitore3 Fornitura 1 Fornitura 2 Fornitura 3 Prezzo 1 Prezzo 2 Prezzo 3 Il modello gerarchico permette una maggiore simmetria rispetto a quello reticolare ma a costo di una maggiore complicazione delle interrogazioni del modello. La selezione di un record necessita oltre all'individuazione del connettore anche di un ulteriore parametro che indichi se ci interessa il record superiore o inferiore. Get <tipo record> over <tipo di connettore> Modello relazionale Le tabelle nel modello relazionale sono rappresentate da dei files sequenziali dove le righe corrispondono ai recors e le colonne ai campi dei records. Le tabelle sono dette relazioni, le righe sono dette tuple e le colonne sono gli attributi. Si definisce dominio l 'insieme di valori che costituiscono una colonne di una relazione. In un modello relazionale la corrispondenza tra le tuple è rappresentata solo per mezzo degli attributi (valori) contenuti nello stesso dominio (colonna). In un modello relazionale tutte le informazioni sia dati che corrispondenze sono rappresentate in modo uniforme cioè sotto forma di relazioni (tabelle). Esempio di modello relazionale Prezzo Fornitore Forniture Teoria dei DataBase Ing. Antonio Nicolazzo poiché in un modello relazionale sia dati che corrispondenze sono rappresentati in una ed una sola forma è sufficiente avere uno ed un solo operatore per le operazioni fondamentali (inserzione, cancellazione, selezione) che si vogliono eseguire Operazione di ricerca get <nome relazione> where <condizione> Operazioni di aggiornamento insert <tupla> into <relazione> delete from <relazion> where <condizione> modify <relazione> where <condizione> Un operatore relazionale è un operatore che agisce su relazioni e produce ancora delle relazioni. Quindi la ricerca in una base dati relazionale è un procedimento di costruzione di relazioni che soddisfano le condizioni imposte dalla ricerca. Si definiscono i seguenti operatori relazionale: – SELEZIONE – PROIEZIONE – JOIN NATURALE La selezione costruisce una nuova relazione estraendo un sottoinsieme orizzontale da una relazione esistente. ossia si definisce una tuple costituito da alcuni campi delle tuple della tabella (relazione) originaria. La proiezione costruisce una relazione estraendo un sottoinsieme verticale da una relazione esistente ossia si selezionano un certo numero di tuple della tabella (relazione) considerata. La join naturale è una nuova relazione nella quale ciascuna tupla è realizzata concatenando due tuple delle relazioni tra cui si realizza la join. Per le interrogazioni dei modelli reticolari si possono utilizzare i linguaggi : – ALPHA e QUEL detti di calcolo relazionale – SEQUEL(SQL) e SQUARE detti di mapping – QBE e CUPID che sono linguaggi grafici. Teoria dei DataBase Ing. Antonio Nicolazzo I LINGUAGGI PER LA MANIPOLAZIONE DEI DATI E IL MODELLO RELAZIONALE Ogni utente di un sistema di gestione di una base dati può interagire, interrogare,modificare le informazioni in esso memorizzate esclusivamente utilizzando il linguaggio fornito dal sistema. I linguaggi per la modifica della base dati si distinguono nei seguenti tipi: – Calcolo relazionale dove si specifica un predicato che deve essere soddisfatto dalle tuple che costituiscono la relazione desiderata. – algebrici o procedurali dove la domanda è espressa mediante espressioni costituite da operatori. I linguaggi algebrici permettono di definire le interrogazioni al sistema utilizzando degli operatori (unione, intersezione, differenza, prodotto cartesiano, proiezione, selezione, join, join naturale, divisione e ridenominazione)che agiscono su un insieme specifico di relazioni in modo da ottenere le informazione desiderate. Una interrogazione (query) Q può essere considerata una funzione che applicata ad un insieme di relazioni R produce ancora una relazione D Q:R→D Analizziamo gli operatori utilizzati nei linguaggi algebrici. Si definisce unione date due relazioni R e S con lo stesso schema la relazione costituita da tutte le tuple che appartengono in R o in S o in entrambe. Si definisce intersezione date due relazioni R e S con lo stesso schema la relazione costituita da tutte le tuple che appartengono sia in R che in S. Si definisce differenza date le due relazioni R e S con lo stesso schema la relazione costituita da tutte le tuple di R che non appartengono in S. Si definisce prodotto cartesiano date le due tuple R e S la relazione costituita da tutte le possibili coppie (r,s) tali che r è una tupla di R e s è una tupla di S. Si definisce concatenazione di una tupla r con una tupla s la tupla t = (r,s). Si definisce proiezione data una relazione R e X un sottoinsieme degli attributi dello schema di R. la relazione T che ha lo schema T(X) ossia le tuple di T che sono costituiti dai valori che appaiono nelle tuple di R in corrispondenza degli attributi contenuti in X. Le tuple uguali ottenute dall'operazione di proiezione non sono considerate. Si definisce selezione data una relazione R e F un predicato la relazione che ha lo schema di R e costituita dalle tuple che soddisfano il predicato F. Il predicato è composto da uno o più predicati semplici collegati tra loro dagli operatori logici and, or ,not e tali che ogni predicato opera su un attributo di R. Si definisce join date le due relazioni R e S e dato P un predicato che opera una relazione tra un attributo di R e uno di S mediante un operatore di confronto, la relazione costituita dalle tuple (r,s) del prodotto cartesiano RxS tali che il predicato P sia soddisfatto. Si definisce join naturale date due relazioni R e S con schema R(a1, a2, ..ai,....an) e S(b1, b2, ...bi,...bm) e tali che gli attributi a1, a2, ..ai siano uguali a b1, b2, ...bi la relazione T costituita dalle tuple concatenate di R e di S (r,s) che hanno gli stessi valori negli attributi analoghi a1=b1 a2=b2 ai=bi. Le tuple della join naturale hanno lo schema T(a1, a2, ...ai, ai+1, ai+2,...bi+1, bi+2, ...bm) Si definisce divisione date le relazioni R e S tali che tutti gli attributi di S siano anche attributi di R la relazione costituita dalle tuple t tali che r = (t,s) ossia dalle tuple costituite dagli attributi di R che non appartengono a S. Si definisce ridenominazione l' operazione con cui si cambia il nome agli attributi di una relazione Teoria dei DataBase Ing. Antonio Nicolazzo SCHEMI RELAZIONALI DI BASI DI DATI La progettazione di una base di dati inizia con l 'osservazione del processo che si vuol rappresentare. Dall'analisi del processo si ottiene l 'individuazione delle entità e degli attributi. Si definiscono entità gli oggetti principali che costituiscono un database (tabelle). L'entità rappresenta un gruppo omogeneo d' informazioni. Le singole informazioni sono gli attributi dell'entità. Dopo avere determinato l 'entità e gli attributi che ci consentono di descrivere il processo analizzato occorre definire le relazioni che costituiranno la base dati ossia lo schema della base dati. Lo schema relazionale di una base di dati è la lista degli schemi di tutte le relazioni che costituiscono la base di dati stessa. Lo schema di una base di dati relazionale è la descrizione delle informazioni memorizzate in essa. Data una realtà esistono infiniti schemi che permettono la sua rappresentazione ma occorre individuare gli schemi che non presentano anomalie. La progettazione dello schema di una base di dati è il processo che permette la scelta di uno schema adeguato. La progettazione dello schema inizia con l' individuazione delle dipendenze funzionali (vincoli) imposti dalle relazioni tra le informazioni della base dati e successivamente si procede con il processo di normalizzazione. Sia R(A) uno schema di una relazione e siano X e Y due sottoinsiemi dell'insieme degli attributi A, si dice che Y dipende funzionalmente da X se per ogni relazione r che abbia lo schema R(A) non è possibile che siano presenti due tuple che hanno gli stessi valori degli attributi appartenenti all' insieme X e che abbiano valori differenti in una o più degli attributi appartenenti all' insieme Y. Una chiave costituisce sempre una dipendenza funzionale con gli attributi della relazione. Data una relazione R(A) e F un insieme di dipendenze funzionali per lo schema R(A) si definisce dipendenza derivata ogni dipendenza di X su Y non contenuta in F. Si definisce chiusura di un insieme di dipendenze F l'insieme di tutte le dipendenze funzionali implicate da F. L'insieme delle dipendenze F si dice completo se coincide con l 'insieme delle chiusure ossia contiene tutte le dipendenze implicate da essa. Si definisce attributo semplice un attributo costituito da un valore atomico ossia unico e indivisibile. Si definisce attributo strutturato un attributo costituito da un insieme di valori. Si definisce attributo multivalore un attributo strutturato e non semplice. La ridondanza dei dati in un database è dovuta sostanzialmente alla ripetizione d' informazioni. La ridondanza può essere la conseguenza di attributi ripetuti ad esempio considerando una libreria l' autore di un libro non può variare indipendentemente da dove è collocato il libro. La ridondanza può essere presente anche in un unico attributo infatti ricorrendo ancora all'esempio della libreria non è corretto che nell'attributo utilizzato per indicare il libro si riportino anche l'autore del libro in quanto è sufficiente il nome di quest'ultimo per individuare in modo univoco anche l 'autore. In ultimo è presente anche la ridondanza dovuta ad attributi con lo stesso dominio ad esempio, dovendo memorizzare i voti degli esami superati da un ragazzo non è Teoria dei DataBase Ing. Antonio Nicolazzo opportuno prevedere gli attributi esame1, esame2,......esame n. La situazione descritta si risolve meglio realizzando una tabella con un riferimento ai dati del ragazzo (chiave) e un campo esame. In tale tabella si riporterà una tupla in corrispondenza di ogni esame superato. La soluzione proposta presenta uno schema indipendente dal numero di esami conseguiti dal ragazzo. esempio con ridondanza Nome Cognome Esame1 Esame2 Esame3 Conversione senza ridondanza Id Nome cognome Id Esame Una relazione è un insieme ordinato di zero o più tuple e ogni tupla della relazione deve essere individuabile in modo univoco. Per ogni tupla deve esistere un attributo o un insieme di attributi che la identificano e questo insieme è detto chiave. Se una chiave è formata da un unico attributo si definisce chiave semplice altrimenti si dice composta. Una chiave deve essere irriducibile ossia non deve essere possibile eliminare dagli insiemi degli attributi che la compongono un singolo attributo senza che la chiave perda validità. La normalizzazione è l'operazione che permette di decomporre uno schema che presenta anomalie in uno schema il più possibile immune da anomalie di gestione dei dati. Si definisce schema in prima forma normale uno schema della relazione R(A), con A insieme degli attributi, costituito da attributi semplici. Quindi una forma normale evita che si verifichi una ridondanza di dati. La decomposizione di uno schema R(A) in uno schema corrispondente in prima forma normale consiste nel sostituire la relazione originale R(A) con una collezione di relazioni S= [R1(A1) R2(A2) … Rk(Ak)] tali che A1 U A2 U..Ak =A. che presentino solo attributi semplici. Si dimostra che se uno schema R(A) è decomposto nei due schemi R1(A1) e R2(A2) allora la decomposizione gode delle proprietà del join senza perdita se e solo se gli attributi comuni ai due insiemi A1 e A2 della composizione sono chiavi per una delle due relazioni. Decomposizione in prima forma normale. Normalizzare una relazione il cui schema R(A) non sia in prima forma normale significa riportare la relazione ad una equivalente in prima forma normale. Le procedura di normalizzazione sono quelle riportate di seguito – 1 Tutti gli attributi strutturati devono essere sostituiti da tanti attributi quanti sono i valori che appaiono nell'attributo. – 2 tutti gli attributi strutturati diventano attributi semplici e la tupla è rappresentata per mezzo di tante tuple quanti sono i valori contenuti nell'attributo. La prima forma normale elimina le seguenti anomalie: Teoria dei DataBase Ing. Antonio Nicolazzo – 1 Ridondanza dei dati – 2 Anomalia da modifica. La modifica di un valore deve essere altrimenti riportata in ogni attributo che contiene quel valore – 3 Anomalia da inserzione. L' impossibilità di inserire un attributo fin tanto non si è in possesso di tutti i valori che costituiscono quel attributo. – 4 Anomalia da cancellazione. La cancellazione di un valore comporta la cancellazione di tutto l' attributo quindi anche di altre informazioni. Una dipendenza funzionale X → Y è detta completa se per lo schema R(A) non esiste alcuna dipendenza funzionale Z→ Y dove Z è un qualunque sottoinsieme di X. Una dipendenza funzionale è detta parziale se non è completa. Un attributo di una relazione R(A) è detto primo se fa parte di una chiave di R(A) altrimenti è detto non primo. Teoria dei DataBase Ing. Antonio Nicolazzo Una relazione è in seconda forma normale se è in prima forma normale e se tutti gli attributi sono dipendenti dall'intera chiave ossia non sono presenti dipendenze parziali degli attributi non primi dalle chiavi. Una dipendenza Z si definisce dipendente transitivamente da X se si verificano le seguenti condizioni dove → indicano le dipendenze funzionali : – X→YeY→X – Y→ZeZ→Y – X→Z Z non appartiene ne a X ne a Y Una relazione è in terza forma normale se è in seconda forma normale e se tutti gli attributi che non sono chiavi sono mutuamente indipendenti ossia ogni attributo di A non dipende in modo transitivo da ogni chiave di A Si definisce forma normale Boyce – Codd lo schema R(A) se è in terza forma normale e se ogni dipendenza funzionale X → Y e tale che X contiene una superchiave di R(A). Tutti gli attributi primi sono dipendenti solo dagli attributi primi e le uniche dipendenze funzionali sono quelle generate dalle chiavi verso uno o più attributi. Una dipendenza è detta multivalore X → Y se prese due tuple di una relazione R(A) che abbiano gli stessi valori associati agli attributi di A t(X) = s(X) è possibile scambiare alcuni valori di t e s ed ottenere altre due tuple che stanno ancora in R. Si definisce quarta forma normale quando per ogni relazione di dipendenza funzionale molti a molti X → Y, X sia una superchiave. Decomposizione in seconda forma normale. Riporto di seguito le fasi che permettono di scomporre uno schema in seconda forma normale. – 1 Si individua il sottoinsieme Z di X per il quale esiste la dipendenza funzionale Z → Y che rende X → Y parziale. – 2 Si definisce un nuovo schema S(U) dove U è costituito dagli attributi di Z e dagli attributi di Y e gli attributi di Z costituiscono chiave di S= Y U Z – Si eliminano dallo schema R(A) gli attributi di Y Esempio: FORNITURE [Nome Forniture, Indirizzo, Città, Nome Pezzi, Peso, Data, Quantità, Prezzo] DIPENDENZE FUNZIONALI nome fornitura → Indirizzo Città Nome fornitura, Nome Pezzo, Data → Indirizzo, Città Nome Pezzo → Peso DIPENDENZE CHE RENDONO LA DIPENDENZA X → Y PARZIALE Nome Fornitura → Indirizzo, Città Nome fornitura, Nome Pezzo, Data → Indirizzo, Città Nome Pezzo → Peso Teoria dei DataBase Ing. Antonio Nicolazzo (1) (2) (3) Nome fornitura, Nome Pezzo, Data → Peso (4) DECOMPOSIZIONE Per eliminare la dipendenza parziale (1) e (2) si considera il nuovo schema [Nome fornitura, Indirizzo, Città] e si cancellano gli attributi Indirizzo e Città dallo schema iniziale. In modo analogo per eliminare la dipendenza parziale (3) e (4) si definisce lo schema [Nome Pezzo, Peso]e si cancellano l' attributo Peso dallo schema iniziale. Lo schema equivalente decomposto in seconda forma normale è il seguente [Nome Fornitura, Nome Pezzo, Data, Qualità, Prezzo] [Nome Fornitura, Indirizzo, Città] [Nome Pezzo, Peso] Decomposizione in terza forma normale. Riporto di seguito le fasi che permettono di scomporre uno schema in terza forma normale. – 1 Dato lo schema R(A) per ogni dipendenza transitiva si determina una dipendenza funzionale X → Y, Y → Z dove X è una chiave di R(A) e Y è costituito da attributi non primi. – 2 Si definisce uno schema S(U) dove U è costituito dagli attributi di Y e dagli attributi di Z e gli attributi di Y costituiscono la chiave di S – 3 Si eliminano dallo schema R(A) gli attributi di Z ESEMPIO: Consideriamo lo schema AUOTOMBILI [Targa, Marca, Data, Colore, Modello, Cilindrata, Freni_Anteriori, Freni_Posteriori] INDIVIDUIAMO LE SEGUENTI DIPENDENZE TRANSITIVE Targa → Modello (1) X → Y Modello → Cilindrata, Freni_Anteriori, Freni_Posteriori (2) Y → Z Targa → Cilindrata, Freni_Anteriori, Freni_Posteriori (3) X → Z DECOMPOSIZIONE Si definisce la nuova relazione S(U) [Modello, Cilindrata, Freni_Anteriori, Freni_Posteriori] = Y U Z e la relazione ottenuta da R(A) eliminando gli attributi di Z [Targa, Marca, Data, Colore, Modello] = A – Z Teoria dei DataBase Ing. Antonio Nicolazzo Esempi: Scomposizione in prima forma normale La relazione che segue non è in prima forma normale: NOME INDIRIZZO Rossi & C. s.p.a Via Verdi, 5 Roma Martini s.n.c. Via Centrale, 4 Milano Paoli s.a.s. P.za Libertà, 12 Pisa In quanto l’attributo INDIRIZZO non è atomico: può essere suddiviso in Indirizzo e Città. La relazione si normalizza trasformandola in: NOME INDIRIZZO CITTA' Rossi & C. s.p.a Via Verdi, 5 Roma Martini s.n.c Via Centrale, 4 Milano Paoli s.a.s. P.za Libertà, 12 Pisa Scomposizione in seconda forma normale Abbiamo una relazione che rappresenta delle scrivanie da ufficio prodotte da una azienda industriale, la chiave primaria è data Tipo_tavolo e Tipo_legno. Tipo_tavolo Tipo_legno Tipo_finitura Manager Mogano Ottone Manager Ciliegio Acciaio inox Montecarlo Noce Sughero Montecarlo Mogano Ottone Top Noce Sughero Tipo_finitura è dipendente funzionalmente da un sottoinsieme della chiave primaria, ovvero da Tipo_legno, dunque la tabella non è in 2NF. La relazione funzionale è Z → Y dove: Z =[Tipo_legno] e Y=[Tipo_finitura] da cui per le decomposizioni viste la relazione decomposta risulta la seguente: S= Y U Z =[Tipo_finitura, Tipo_legno] A = X – Y =[Tipo_tavolo, Tipo_legno] Tipo_tavolo Tipo_legno Manager Mogano Manager Ciliegio Montecarlo Noce Montecarlo Mogano Teoria dei DataBase Ing. Antonio Nicolazzo Top Noce Tipo_legno Tipo_finitura Mogano Ottone Ciliegio Acciaio inox Noce Sughero Teoria dei DataBase Ing. Antonio Nicolazzo Scomposizione in terza forma normale: Consideriamo la seguente relazione: Fattura= [codice_fattura, data, importo, codice_cliente, nome_cliente] La relazione è in prima forma normale in quanto non è composta da attributi non semplici. È in seconda forma normale perché non contiene dipendenze parziali degli attributi non primi dalle chiavi. La relazione Fattura non è in terza forma normale perchè contiene la dipendenza transitiva seguente: codice_fattura → codice cliente codice_cliente → nome_cliente codice_fattura → codice_cliente → nome_cliente X→Y Y→Z X→Z Per ottenere la nuova relazione definiamo gli insiemi: S = Y U Z = [codice_cliente, nome_cliente] S2 = A – Z =[ codice_fattura, data, importo, codice_cliente] Possiamo quindi definire l' equivalente relazione in terza forma normale Fattura = [ codice_fattura, data, importo, codice_cliente]; e Cliente =[ codice_fattura, data, importo, codice_cliente]; Teoria dei DataBase Ing. Antonio Nicolazzo PROGETTAZIONE MODELLI DI BASE DATI La progettazione di una base dati si divide in due fasi. La prima fase di progetto riguarda l' analisi del processo che si vuol rappresentare e la definizione di uno schema concettuale della base dati, mentre la seconda fase riguarda la realizzazione della base dati quindi la definizione dello schema della base dati e la realizzazione fisica della base dati. Schema concettuale La definizione della rappresentazione dello schema concettuale della base dati può essere ottenuta con “Il modello semantico” o le “metodologie di progettazione di basi dati”. Ci soffermeremo alla descrizione del modello semantico in quanto è il procedimento per l' analisi concettuale più utilizzato. Modelli Semantici Un modello semantico è un insieme di regole che permette di definire lo schema concettuale di una base di dati ad un livello intermedio tra la realtà e il modello di dati utilizzato per implementare la base di dati. Il modello semantico permette di ottenere prima una descrizione formale della realtà e poi converte tale descrizione nel modello di dati utilizzato dal sistema di gestione della base dati che si ha a disposizione. Il Modello semantico utilizza per la rappresentazione del processo studiato le entità, gli attributi e le corrispondenze. Un entità come già visto è un oggetto che esiste e che è indistinguibile (tabella) mentre gli attributi sono le proprietà che distinguono quell'entità dalle altre (campi). Le proprietà d'altro canto descrivono il significato dei dati che corrispondono all'entità. il primo step della progettazione dello schema della base dati è la scelta dell'entità e degli attributi che costituiscono ciascuna entità. Durante la fase di progettazione si devono anche determinare per ogni entità le chiavi che permette d' individuare l' entità in modo univoco. Spesso si ricorre alla definizione di un attributo che non ha informazioni ma ha l 'unico compito di realizzare la chiave. La chiave esterna è quella chiave che non ha un evidente rapporto concettuale con l' entità, ma ha motivo d' esistenza unicamente per permettere l 'associazione tra entità distinte. Le entità tra cui esiste una relazione si dicono partecipanti, ed il numero di partecipanti indica il grado della corrispondenza unaria, binaria, ternaria,.... La partecipazione di un entità ad un associazione ( corrispondenza) può essere classificata totale o parziale a seconda del fatto che l'entità possa esistere o meno senza partecipare all'associazione stessa. Si indica con la cardinalità il numero massimo di istanze della stessa entità che possono partecipare con una o più istanze di un' altra entità. – Uno a Uno – Uno a Molti – Molti a Molti Più semplicemente la cardinalità indica il numero di records di una tabella che corrispondono ai records di un altra tabella quando tra le due tabelle esiste una corrispondenza. Teoria dei DataBase Ing. Antonio Nicolazzo Corrispondenza Uno a Uno Si definisce una corrispondenza uno a uno se ad ogni elemento dell'insieme di entità A1 x A2 x Ai è associato al più un elemento dell'insieme di entità B1 x B2 x ..Bj e se ad ogni entità dell'insieme B1 x B2 x ..Bj è associato al più un elemento dell'insieme di entità A1 x A2 x Ai. Ricordiamo che l' insieme di entità sono le tabelle. Corrispondenza Uno a Molti Si definisce una corrispondenza uno a molti se ad ogni elemento dell'insieme A1 x A2 x Ai è associato un insieme , anche vuoto, di elementi di B1 x B2 x ..Bj e se ad ogni elemento dell'insieme B1 x B2 x ..Bj è associato al più un elemento di A1 x A2 x Ai Corrispondenza Molti a Molti Si definisce una corrispondenza molti a molti se ad ogni elemento di A1 x A2 x Ai è associato un insieme, anche se vuoto, di elementi di B1 x B2 x ..Bj e se ad ogni elemento di B1 x B2 x ..Bj è associato un insieme, anche se vuoto, di elementi di A1 x A2 x Ai Corrispondenza Molti a Uno Si definisce una corrispondenza molte a uno se in una corrispondenza molti a molti ad ogni elemento di B1 x B2 x ..Bj è associato al più un elemento di A1 x A2 x Ai Corrispondenza is a Una corrispondenza si definisce is a se A è un tipo particolare di B Entità deboli Un insieme di entità B si dice debole se esiste una corrispondenza da un altro insieme di entità A e l'esistenza di ogni entità B è legata all'esistenza di una entità di A. – In un entità debole si possono aggiungere entità solo se esistono le corrispondenti entità dell'insieme A – Se si cancella un entità da un insieme si devono cancellare anche tutte le entità deboli ad essa collegate. Teoria dei DataBase Ing. Antonio Nicolazzo Diagramma Entità corrispondenze il diagramma entità – corrispondenza è la rappresentazione dello schema di una base dati realizzato con il modello entità-corrispondenza il diagramma per la rappresentazione utilizza le seguenti convenzioni Entità Nome entità Entità deboli Nome entità Attributi semplici Nome Attr. Nome entità Attributi non semplici Nome Attr. Nome entità Corrispondenze Nome entità Nome entità La cardinalità della corrispondenza è indicata con un numero nel punto in cui la linea che individua la corrispondenza incontra l' entità. Corrispondenza 1 a 1 1 Corrispondenza 1 a Molte 1 1 M Teoria dei DataBase Ing. Antonio Nicolazzo Corrispondenza molte a molte M Corrispondenza zero a molte 0 N N PROGETTAZIONE Per realizzare una progettazione del sistema di gestione della base dati occorre realizzare le seguenti analisi preliminari: – Determinazione della specifica informale. La specifica informale è un documento che raggruppa la descrizione dei dati e delle proprietà dei processi che devono utilizzare la base dati e delle esigenze degli utenti. – Definizione del sistema di gestione della base dati. Progetto dello schema. – Configurazione hardware e del sistema informatico per la gestione del sistema. Specifica informale Definizione del sistema Di gestione della base dati Configurazione hardware del sistema informatico Schema logico Progetto Struttura di memorizzazione Sottoschemi utente Specifica dei programmi applicativi Teoria dei DataBase Ing. Antonio Nicolazzo La progettazione della base dati è realizzata seguendo a sua volta le quattro fasi sotto riportate: Analisi dei requisiti Progettazione concettuale Progettazione logica Progettazione fisica – L' analisi dei requisiti è l' operazione di determinazione delle richieste degli utenti del sistema che ci accingiamo a progettare. – La progettazione concettuale è la descrizione integrata dei dati e delle operazioni d'interesse per i diversi sottoinsiemi – La progettazione logica è la definizione dello schema logico della base dati e degli sottoschemi. In questa fase si traducono le operazioni di estrazione delle informazioni in funzione dello schema definito. – La progettazione fisica è la scelta della struttura di memorizzazione dei dati PROGETTAZIONE CONCETTUALE La progettazione concettuale è la fase in cui si crea uno schema concettuale ossia una descrizione sotto forma di dati, processi e vincoli. La realizzazione della progettazione concettuale è effettuata mediante il modello entità – corrispondenze. La progettazione concettuale è divisa in due fasi: – modellizzazione degli schemi utente. – Analisi e integrità degli schemi La modellizzazione degli schemi di utente è la progettazione di tanti schemi utente. Lo schema utente è ottenuto come descrizione limitata e parziale del complesso d' informazioni che costituiscono la base di dati senza considerare eventuali relazioni o dipendenze tra essi. L' analisi ed integrità degli schemi utente è la fase in cui è definito uno schema concettuale unico risultato dei diversi schemi utente. In questa fase si individuano eventuali conflitti tra i diversi schemi utente. Conflitti tra gli schemi utente: Si riporta di seguito una descrizione delle cause che determinano conflitti tra gli schemi Teoria dei DataBase Ing. Antonio Nicolazzo utente. Teoria dei DataBase Ing. Antonio Nicolazzo Conflitti espliciti sono quei conflitti di tipo o di proprietà dei dati. a Si generano conflitti di tipo se esistono attributi di tipo differente con lo stesso nome b Si generano conflitti di proprietà dei dati si generano quando la corrispondenza tra due entità è differente a seconda dello schema utente considerato. I conflitti espliciti in generale si sono determinati da due utenti che hanno esigenze differenti sugli stessi dati che si traducono in differenti formalizzazioni dei dati o delle corrispondenze. I Conflitti impliciti sono i sinonimi o gli omonimi. – I sinonimi si determina quando una stessa informazione è rappresentata con nomi differenti nella base dati – Gli omonimi si generano quando con lo stesso nome si indicano informazioni differenti della stessa realtà Solo dopo che sono stati risolti tutti i conflitti si procede con l 'integrazione degli schemi utente per ottenere lo schema concettuale nella forma di modello semantico. In questa fase si procede anche alla determinazione di uno schema concettuale delle operazioni che si ipotizza saranno effettuate sulla base dati. Dopo avere completata la progettazione dello schema concettuale si procede con le verifiche. Le verifiche che si attuano sullo schema concettuale sono le seguenti: – Verifica di completezza con cui si dimostra che gli schemi progettati sono capaci di soddisfare le esigenze delle applicazioni. – Verifica sulla frequenza d' utilizzo dei dati permette di controllare l' efficienza dello schema – Progetto iniziale dei programmi applicativi PROGETTAZIONE LOGICA Con la progettazione logica lo schema concettuale dei dati e quello utente sono tradotti in uno schema logico (capitolo 3) espresso in termini del modello di dati al quale fa riferimento il sistema di gestione della base dati che si realizza. Durante la fase di progettazione logica si studiano anche proprietà che caratterizzeranno il funzionamento del sistema di gestione dei dati. – L' integrità è garantita se i dati contenuti nella base di dati rispettano in ogni momento i vincoli esposti nella fase di analisi dei requisiti (vincoli desiderati dagli utenti) – La consistenza è garantita se ogni utente riceve le stesse informazioni se interroga nello stesso modo la base dati a patto che non siano stati modificati i dati Teoria dei DataBase Ing. Antonio Nicolazzo – Le procedure di ripristino devono garantire gli utenti da qualunque tipo di malfunzionamento – Il sistema deve impedire accessi non autorizzati per il rispetto delle norme di sicurezza. La progettazione logica deve essere realizzata mediante le tre fasi di seguito riportate: Traduzione canonica Progettazione sottoschemi Prima progettazione Di principio dei programmi – Traduzione canonica è la traduzione dello schema concettuale in uno schema logico equivalente in termini del modello di dati utilizzato ( relazionale, gerarchico, reticolare) – Progettazione dei sottoschemi equivalenti agli schemi utente. – Progettazione delle specifiche dei programmi applicativi ossia delle operazioni che permetteranno ai programmi di accedere alle informazioni di loro interesse. PROGETTAZIONE FISICA La progettazione fisica riguarda gli aspetti più hardware e realizzativi del sistema di gestione della base di dati. Di seguito si riportano alcuni degli aspetti analizzati e definiti durante la progettazione fisica. – Tecniche di organizzazione degli archivi – Dimensionamento delle aree di overflow – Tecniche di allocazione degli archivi sulle memorie di massa – Scelta del fattore di blocco per i diversi archivi – Definizione dei puntatori utilizzati negli archivi – Scelta degli indici di manutenzione e efficienza per il monitoraggio del sistema. Teoria dei DataBase Ing. Antonio Nicolazzo ESEMPI DI RPOGETTAZIONE PRENOTAZIONI AD ALBERGHI Descrizione informale del processo • Il database deve rappresentare le prenotazioni fatte da clienti ad un albergo. • Si vogliono mantenere informazioni sui clienti e sulle prenotazioni. • Dei clienti si vogliono mantenere dati identificativi. • Si vogliono mantenere dati identificativi dell'albergo, il numero di camere (suddivise in singole, doppie, triple) • Delle prenotazioni si vogliono mantenere le informazioni riguardo a chi l'ha fatta e per quale albergo, la data di arrivo e quella presunta di partenza (o il numero presunto dei giorni prenotati), quale tipo di stanza un cliente ha prenotato. Ogni cliente può' prenotare più' stanze nello stesso periodo. • Si voglia mantenere dati riguardo lo stato di occupazione reale dell'albergo mediante registrazioni Progettazione concettuale mediante i modelli entità-corrispondenze utente. Schema Utente 1 Schema Utente 2 cliente 1 cliente cliente 1 1 1 N prenotazione N prenotazione 1 1 1 Registrazione Schema Logico 1 Registrazione 1 1 Registrazione Nei due schemi utente ottenuti abbiamo definito tre entità: – Clienti – Prenotazioni – Registrazioni Dettaglio delle entità: Clienti[Nome, Cognome, Indirizzo, Recapito] Prenotazione[Data, giorni, nome_Cliente, Recapito_Cliente, Stanza, Tipo, Prezzo] Registrazione[Data_registrazione, Cliente, recapito_Cliente, Camera] Teoria dei DataBase Ing. Antonio Nicolazzo Progettazione Logica Analizziamo le entità per verificarne la normalizzazione. Clienti si presenta come una entità in 3 Forma normale perché gli attributi sono semplici e non si presentano dipendenze funzionali al di eccetto quella dalla chiave Id_Cliente Clienti[Id_Cliente,Nome, Cognome, Indirizzo, Recapito] L'entità Prenotazione è ancora in prima forma normale in quanto i suoi attributi sono semplici, non è in seconda forma normale in quanto i suoi attributi non primi presentano delle dipendenze funzionali tra di essi, non è in terza forma normale dato che esiste una dipendenza funzionale transitive tra gli attributi non primi. Decomposizione: Entità Prenotazione[Id_Prenotazione, Data, nome_Cliente, Recapito_Cliente, Stanza, Tipo, Prezzo, Numero_Prenotati] Dipendenze funzionali (1) Numero Stanza → Tipo, numero Letti, posizione nell'albergo (2) Tipo, numero Letti, posizione nell'albergo → Prezzo (3) Numero Stanza → Prezzo (4) Nome Cliente → Recapito Cliente (5) Per eliminare la dipendenza funzionale (5) si crea un connessione con l' entità clienti sostituendo i campi Nome-Cliente, Recapito_Cliente con il campo Id_Cliente che fa riferimento alla tabella Clienti. Per correggere le dipendenze transitive (1), (2), (3) si definisce l'entità Camere [Numero_Stanza ,Tipo, numero Letti, posizione nell'albergo, Prezzo] e l'entità Prenotazioni[Id_Prenotazioni, Data, Id_Cliente, Numero_Stanza, Numero_Prenotati] L'entità Registrazione presenta delle dipendenze funzionali dovute alla presenza dei dati inerenti il Cliente e la stanza occupata. Tali dipendenze possono essere risolte utilizzando le chiavi Id_Cliente e Numero_Stanza. In caso di prenotazione in realtà esiste anche una dipendenza tra il Cliente e La stanza occupata. Il problema può essere superato o creando due tabelle di registrazione una per i clienti prenotati e una per i clienti senza prenotazione. La registrazione dei Clienti prenotati elimina la dipendenza funzionale tra Id_Cliente e il numero della Stanza semplicemente riportando il campo Id_Prenotazione. Registrazione[Data_registrazione, Id_Cliente, Numero_Camera, Numero_Prenotati] Registrazione_Prenotazione[Data_Registrazione, Id_Prenotazione, Numero_Prenotati] Un altro modo per ottimizzare le tabelle e di realizzare per tutti i clienti che alloggiano nell'albergo una specie di prenotazione e in tal caso la tabella registrazione farà sempre riferimento alla prenotazione reale o no. Dall'analisi compiuta il database risulta composto dalle seguenti entità: CLIENTI[Id_Cliente,Nome, Cognome, Indirizzo, Recapito]; CAMERE [Numero_Stanza ,Tipo, numero Letti, posizione nell'albergo, Prezzo]; PRENOTAZIONI[Id_Prenotazioni, Data_Inizio, Id_Cliente, Numero_Stanza]; REGISTRAZIONI[Data_registrazione, Id_Cliente, Numero_Camera, Numero_Prenotati]; Teoria dei DataBase Ing. Antonio Nicolazzo Progettazione degli schemi delle operazioni. Dall'analisi descrittiva del processo che si vuol modellare con il database evince che l' utente vuole ottenere dal sistema della base dati le seguenti informazioni: – – – – – – – numero e tipo delle camere dell'albergo prenotazioni in corso numero clienti presenti nell'albergo guadagno lordo annuo dell'albergo importo annuo da ogni cliente frequenza annua di utilizzo di ogni stanza stato di occupazione di ogni stanza Il quesito (1) può essere soddisfatto semplicemente visualizzando il contenuto della tabella Camere. Interrogazione espressa in SQL: SELECT * FROM Camere Il quesito (2) non può essere risolto con le informazioni riportate nel database pensato perché sappiamo quali sono le prenotazioni e la data d' inizio ma non la data di termine. Per ottemperare al quesito (2) dobbiamo aggiungere il campo giorni_prenotazioni nella relazione Prenotazioni. Il quesito (2) è risolto dall'interrogazione della tabella Prenotazioni selezionando le tuple che hanno data_fine prenotazione inferiore alla data attuale. La data di fine prenotazione è data dalla data inizio prenotazione sommata ai giorni di prenotazione. Interrogazione espressa in SQL: SELECT (Data_Inizio + giorni) as Data_Fine FROM PRENOTAZIONI WHERE Data_Fine >= Data_Attuale L'espressione SQL riportata non tiene conto dell'eventuale formato delle data Data_Inizio e giorni per semplicità di esposizione. Il quesito (3) ossia i clienti in albergo non si può ottenere dalle prenotazioni in corso in quanto non sappiamo quante delle prenotazioni sono effettivamente realizzate pertanto dovremo dedurlo dallo stato dell'albergo ossia dall'analisi delle registrazioni. Per individuare le camere occupate dovremo selezionare le registrazioni che si riferiscono alle prenotazioni non ancora terminate. Il numero di clienti in albergo è data dalla somma degli ospiti di ogni camera occupata nella data attuale. Per definire l' interrogazione in SQL notiamo che il data di nostro interesse è in realtà il numero di clienti per ogni prenotazione ancora non terminata e registrata. Poiché l' interrogazione coinvolge due tabelle utilizzeremo un query composta. Interrogazione SQL: SELECT ADD(Numero_Prenotanti) FROM PRENOTAZIONI WHRE (Data_Inizio + giorni) >= Data_Attuale 'Prenotazioni in corso AND Id_Prenotazioni = (SELECT Id_Prenotazioni FROM REGISTRAZIONI) 'Prenotazioni presenti Teoria dei DataBase Ing. Antonio Nicolazzo Il quesito (4) è calcolato sommando l' importo corrispondente ad ogni prenotazione realizzata. L' importo di ogni prenotazione è determinabile dalla camera prenotata ed è memorizzato nella tabella Camere. Quindi riassumendo si ottiene la risposta al quesito (4) sommando i prezzi delle camere prenotate ed occupate in nell'anno considerato SELECT ADD(Prezzo) FROM CAMERE inner join PRENOTAZIONI on PRENOTAZIONI.Numero_Camera = CAMERE.Numero_Camera WHERE PRENOTAZIONI .Data_Inizio >= (Data Inizio Anno) AND PRENOTAZIONI.(Data_Inizio + Giorni) <= (Data fine Anno) il quesito (5) può essere soddisfatto da un interrogazione analoga a quella del quesito (4) con la differenza che gli importi devono essere raggruppati per Cliente Interrogazione SQL: SELECT ADD(Prezzo) FROM CAMERE inner join PRENOTAZIONI on PRENOTAZIONI.Numero_Camera = CAMERE.Numero_Camera WHERE PRENOTAZIONI .Data_Inizio >= (Data Inizio Anno) AND PRENOTAZIONI.(Data_Inizio + Giorni) <= (Data fine Anno) GROUP BY PRENOTAZIONI .Id_Cliente La query mostrata non ci permette di risalire al nome del cliente. Per ottenere come risultato della query anche il nome cliente è necessario sostituire la tabella Prenotazioni con una tabella allargata Prenotazioni_E_DatiClienti che oltre alle prenotazioni consideri i dati dei clienti. La tabella Prenotazioni_E_DatiClienti si ottiene con la seguente join Prenotazioni inner join Clienti on Clienti.Id_Cliente = Prenotazioni.Id_Cliente sostituiamo nella query sopra riportata la tabella Prenotazioni_E-DatiClienti otterremo la seguente espressione SQL: SELECT ADD(PRENOTAZIONI_CLIENTI.Prezzo) , PRENOTAZIONI_CLIENTI.Nome_Cliente FROM CAMERE inner join (Prenotazioni inner join Clienti on Clienti.Id_Cliente = Prenotazioni.Id_Cliente) as PRENOTAZIONI_CLIENTI on PRENOTAZIONI_CLIENTI.Numero_Camera = CAMERE.Numero_Camera WHERE PRENOTAZIONI_CLIENTI .Data_Inizio >= (Data Inizio Anno) AND PRENOTAZIONI_CLIENTI.(Data_Inizio + Giorni) <= (Data fine Anno) GROUP BY PRENOTAZIONI_CLIENTI .Id_Cliente Conclusioni: Considerando le correzioni apportate alla tabella Prenotazioni per rendere possibili tutte le operazioni desiderate sulla base di dati lo schema logico finale del database è il seguente: CLIENTI[Id_Cliente,Nome, Cognome, Indirizzo, Recapito]; CAMERE [Numero_Stanza ,Tipo, numero Letti, posizione nell'albergo, Prezzo]; PRENOTAZIONI[Id_Prenotazioni, Data_Inizio, Id_Cliente, Numero_Stanza, Giorni]; REGISTRAZIONI[Data_registrazione, Id_Cliente, Numero_Camera, Numero_Prenotati]; Teoria dei DataBase Ing. Antonio Nicolazzo PROGETTAZIONE DI UN DATABASE AZIENDA Supponiamo di creare un database che memorizzi le attività o mansioni svolte dai vari dipendenti di un azienda. Il database che vogliamo creare ha il seguente schema concettuale: Addetti N 1 N CategoriaAddetti N Attività Progettazione Logica Ogni addetto è correlato ad una sola CategoriaAddetti mentre ad una CategoriaAddetti possono appartenere più addetti. La relazione è uno a molti, CategoriaAddetti è la tabella primaria. Si duplica la chiave primaria di tale tabella nella tabella Addetti. Ogni addetto può svolgere più mansioni o attività e un attività può essere svolta da più addetti. La relazione è molti a molti, si crea quindi una tabella supplementare, AddettiAttività, che contiene le chiavi esterne, duplicati delle chiavi primarie delle tabelle Attività e Addetti. Entità: CategoriaAddetti; Addetti; Attività; Modello entità -corrispondenze Addetti N 1 1 CategoriaAddetti N AddettiAttività N 1 Attività Schema entità: Addetti [Id_Addetti, Nome, Cognome, recapito, Id_Categoria] CategoriaAddetti[Id_Categoria, Livello, tipologia] AddettiAttività[Id_Addetti, Id_Attività] Attività[Id_Attività, Data_Inizio, Data_fine, obiettivi, Nome_Attività] Teoria dei DataBase Ing. Antonio Nicolazzo Teoria dei DataBase Ing. Antonio Nicolazzo Progettazione degli schemi delle operazioni. L'utente vuole ottenere dal sistema della base dati le seguenti informazioni: – – – – 1 Quanti dipendenti sono attualmente impiegati 2 Quali sono i dipendenti impiegati in una determinata attività 3 Quante e quali attività sono attualmente in cantiere 4 Quale attività richiede una numero maggiore di dipendenti per essere eseguita Il quesito (1) è risolubile facilmente interrogando la tabella ADDETTI e selezionando i dipendenti riportati in tale tabella Interrogazione SQL: SELECT Nome, Cognome FROM ADDETTI Il quesito (2) è soddisfatto determinando id_Attività dalla tupla tabella ATTIVITÀ corrispondente alla attività considerata. Si utilizza Id_Attività selezionato per determinare gli Id_Addetti corrispondenti riportati nella tabella ADDETTIATTIVITÀ e con tali valori si legge il nome dei dipendenti dalla tabella Addetti. Interrogazione SQL: SELECT Addetti .Nome, Addetti .Cognome FROM ADDETTI rigth join ADDETTIATTIVITÀ ON ADDETTI.Id_Addetti = ADDETTIATTIVITÀ .Id_Addetti WHERE ADDETTIATTIVITÀ Id_Attività = (SELECT Id_Attività FROM ATTIVITÀ WHERE Nome_Attività = 'Attività considerata') Il quesito (3) è soddisfatto selezionando le attività contenute nella tabella Attività con data_fine prevista successiva alla data attuale. Interrogazione SQL: SELECT Nome_Attività FROM ATTIVITÀ WHERE Data_Fine > 'Data Attuale' Il quesito (4) richiede di selezionare l' attività con il maggior numero di dipendenti. Il numero di dipendenti impiegati in una Attività lo possiamo determinare dalla tabella ADDETTIATTIVITÀ raggruppando per attività differenti e contando gli Id_Addetti corrispondenti per ogni attività. Dopo avere selezionato il numero di dipendenti impiegato in ogni attività dovremo individuare il numero massimo. Interrogazione SQL: SELECT MAX(COUNT(Id_Addetti)) FROM ADDETTIATTIVITÀ GROUP BY Teoria dei DataBase Ing. Antonio Nicolazzo Id_Attività