Database Nella sua accezione più generale un database può essere definito come un’insieme di dati correlati tra loro su cui l’utente, in base alle proprie esigenze, può effettuare operazioni di ricerca e aggiornamento, sfruttando le funzionalitàdi un apposito programma di gestione che prende il nome di DataBase Management System (DBMS). Data la vastità del significato del termine database è conveniente esaminare le sue proprietà più significative. Aderenza ad un preciso modello di dati Un modello di dati è formato da regole che consentono all’analista di formalizzare una descrizione delle proprietà possedute dalle categorie di dati che formano il DB. I modelli si dividono in 3 categorie: 1)Modelli semantici o concettuali. Si tratta di modelli vicini all’interpretazione umana di una certa realtà e la descrivono durante la prima fase di progettazione del database, un esempio è il modello E/R. (Esistono anche altri modelli semantici o diverse rappresentazioni di modello E/R). 2)Modelli logici. Siamo ad un livello intermedio che descrive le strutture dati in modo comprensibile all’utente ma già più vicino all’implementazione. I modelli logici posso essere a loro volta di 3 tipi: a)Modello gerarchico in cui i dati sono strutturati ad albero; b)Modello reticolare in cui i dati sono strutturati e collegati tra loro come in un grafo; c)Modello relazionale. Si basa sul concetto di relazione tra insiemi che, nella sua forma più semplice, può essere rappresentata da una tabella avente le seguenti proprietà: 1)Tutte le righe devono essere distinte tra loro; 2)Ogni colonna deve contenere dati omogenei; 3)Non esiste nessun tipo di precedenza e di ordinamento tra le righe o tra le colonne. In una tabella ogni riga è detta tupla e ogni colonna è detta come attributo. Il numero di colonne è detto grado della tabella, il numero di righe è detto cardinalità della tabella ogni attributo può assumere valori di un preciso insieme detto dominio. Di una tabella possiamo distinguere la forma intensionale ed estensionale: la prima è costituita da nome dell’entità seguito dall’elenco dei suoi attributi tra parentesi e con la chiave primaria sottolineata, ogni attributo avrà il suo tipo di dominio. La forma estensionaleè la rappresentazione del contenuto di tutte le tuple nella classica forma riga con colonna. 3)Modelli fisici che sono fortemente legati all’organizzazione della memoria di massa. Presenza di un sistema integrato per la definizione e la manipolazione dei dati Il DBMS garantisce, attraverso appositi linguaggi, la descrizione e la manipolazione dei dati contenuti nel DB. Distinguiamo 3 livelli di un DB che sono livello fisico, livello logico e livello esterno. A livello fisico il DB è la rappresentazione dei file che lo cosituiscono e consiste nella descrizione dei tipi di record utilizzati: interagisce direttamente con il file system. Per questo strato l’amministratore del database ha a sua disposizione un apposito linguaggio denominato DMCL (Device Media Control Language). A livello logico il DB è descritto dallo “schema” logico. Schema Descrizione logica globale della base dati. Lo definisci l’amministratore della base dati e, in generale, è un grafo. A questo scopo il DBMS mette a disposizione un linguaggio specifico, il DDL(Data Definition Language) attraverso il quale definire la struttura dell’entità e quindi lo schema. Il DDL agisce a livello intensionale. A livello esterno si devono avere strumenti per organizzare, vedere e modificare dati cioè si deve poter agire a livello estensionale. Il linguaggio e detto DML (Data Manipolation Language) che permette di immettere, modificare e cancellare informazioni. Gli utenti a questo livello sono o utenti intelligenti o sviluppatori di applicazioni. Oggigiorno si tende a unificare in un unico linguaggio interrogazione, programmazione, descrizione e manipolazione. Poichè ogni singolo utente può essere interessato ad un sottoinsieme dei dati contenuti nel DB è compito dell’amministratore del DB fornire a ogni utente un sottoschema del DB (vista) che contenga tutto e solo ciò che serve a quell’ utente. Da questo viene la definizione di sottoschema come la visione particolare dei dati di un DB relativa ad una singola applicazione. Indipendenza dei dati Per attuare una protezione dei dati è stata introdotta nei DB una doppia indipendenza: logica e fisica. Per indipendenza logica dei dati si intende la proprietà del DB di far si che tutte le strutture logiche dei dati possano essere variate dall’amministratore senza cambiare i programmi applicativi non interessati alla modifica. Con indipendenza fisica dei dati si intende fare riferimento al fatto che l’amministratore può modificare l’organizzazione a livello fisico senza alterare l’organizzazione logica e le viste. Altre caratteristiche Tra le caratteristiche principali di un DB va ricordato: 1)ridondanza controllata: Gli stessi dati non compaiono più volte in archivi diversi in quanto un database è costituito da archivi integrati. La ridondanza è un difetto che può provocare incongruenza tra i dati contenuti in archivi diversi. Nella pratica non si riesce a eliminare completamente la ripetizione dei dati ma con i database è possibile almeno controllarla:si parla quindi di ridondanza controllata. 2)sicurezza e protezione dei dati: Il DBMS fornisce meccanismi di protezione per la segretezza e/o per evitare involontarie modifiche. I dati in un unico database possono essere utilizzati da più utenti con i loro programmi ma si consente una visione solo parziale del database da parte di un singolo utente che può rimanere estranea al resto dei dati contenuti nel database. Il DBMS garantisce inoltre che le protezioni svolte da utenti diversi con esecuzioni concorrenti non interferiscano l’una con l’altra. 3)garanzia d’integrità dei dati: è possibile fornire regole sulla variabilità, la forma e le relazioni che legano i dati. Verranno effettuati controlli su questi vincoli di integrità per evitare anomalie. Inoltre le operazioni sui dati richieste dagli utenti vengono eseguite fino al loro completamento per assicurare la consistenza dei dati. 4)Flessibilità e compatibilità con altri sistemi. Chiavi di una tabella 1. 2. 3. Nel modello relazionale i dati sono organizzati in tabelle formate da attributi. Definiamo chiave di una tabella un qualsiasi sottoinsieme di attributi. Distinguiamo poi le chiavi candidate cioè sottoinsieme di attributi che hanno le seguenti 3 proprietà: Univocità: identifica univocamente una tupla all’interno della tabella; Integrità: non può contenere valori nulli; Non ridondanza: ogni suo attributo è indispensabile affinché conservi la caratteristica di identificare una sola tupla. All’interno di una tabella possono esistere più chiavi candidate: l’amministratore del DB ne sceglierà una che diventerà chiave primaria. DeterminanteE’ un qualsiasi sottoinsieme di attributi che determina il valore di un altro gruppo di attributi. La normalizzazione Nel passare dal modello concettuale al modello relazionale si possono ipotizzare diversi schemi ma alcuni di questi possono presentare degli inconvenienti (anomalie) che li rendono meno affidabili di altri. Per descrivere realtà organizzative in modo efficace si sono individuate delle regole a cui devono sottostare gli schemi. In particolare Codd (studioso IBM) ha definito il concetto di dipendenza funzionale fornendo le regole per normalizzare le tabelle. Dipendenza funzionale Data una tabella T e denominati x e y 2 sottoinsiemi e i suoi attributi, si dice che x determina funzionalmente y se non possono esistere 2 tuple con valori uguali in x e valori diversi in y. Fissati i valori di x risulta univocamente determinato il valore degli attributi y. NB = Ricordando le caratteristiche della chiave primaria è chiaro che tutti gli attributi che non appartengono alla chiave primaria dipendono funzionalmente da essa. Una dipendenza funzionale si dice di tipo parziale se y dipende solo da una parte degli attributi di x; in caso contrario si avrà una dipendenza completa. Prima forma normale Una tabella T (A1,A1,..,An) si dice posta in prima forma normale (1NF) se tutti gli attributi che vi compaiono sono semplici. Per passare alla 1NF occorre sostituire ogni attributo strutturato con tanti attributi semplici quanti sono gli elementi che lo compongono e occorre eliminare gli attributi multipli sostituendo ad ogni tupla che contenga più di un valore nell’attributo multiplo, tante tuple quanti sono i valori multipli. Sorgeranno altri problemi soprattutto di ridondanza e di appesantimento delle procedure di aggiornamento. Questi problemi si risolvono sostituendo l’entità originaria con 2 entità in relazione tra loro. Seconda forma normale Una tabella T (A1, A2,…,An) si di dice posta in seconda forma normale (2NF) se è in prima forma normale e tutti gli attributi che non fanno parte della chiave primaria hanno una dipendenza funzionale completa da tutte le possibili chiavi candidate di T. In pratica tutti gli attributi che non appartengono alla chiave devono dipendere dall’intera chiave e non solo da una sua parte. Per converti re uno schema posto in prima forma normale in seconda forma normale dovrò individuare per ogni attributo y che dipende parzialmente dalla chiave il sottoinsieme x degli attributi della chiave da cui dipende in modo completo e costruire una nuova tabella avente x per chiave primaria e y come attributo togliendolo dalla tabella originaria. Terza forma normale Una tabella T (A1,A2,…,An) si dice posta in terza forma normale (3NF) se è in seconda forma normale e tutti gli attributi che non fanno parte della chiave primaria dipendono esclusivamente dalla chiave stessa. Per convertire in uno scherma 3NF una tabella T che è già in 2NF e ha come chiave primaria x occorre individuare gli attributi z che dipendono funzionalmente da un sottoinsieme di attributi y diverso da x e poi occorre costruire una nuova tabella avente y come chiave primaria e z per attributo togliendolo dalla tabella originaria. Forma normale di Boyce-Codd Una tabella è in BCNF se e solo se ciascun determinante è una chiave candidata. Cenni alla pubblicazione dei dai con pagine statiche e dinamiche Le pagine web dinamiche sono pagine il cui codice HTML viene generato al volo da un’elaborazione sul server per cui ad ogni richiesta di tipo diverso il codice ricevuto e interpretato dal browser è sempre diverso ( il codice è eseguito in modo completamente nascosto all’utilizzatore finale). Le tipiche applicazioni sono le interrogazioni a DB remoti per ottenere servizi quali forum, motori di ricerca, FAQ etc. Di solito le applicazioni Internet usano combinazioni di 3 tipologie di pagina, si definisce infatti concettualmente il modello di applicazione a 3 livelli (Three-Tred) in cui il livello di interfaccia per l’utente (front-end) corrisponde allo sviluppo di pagine HTML e/o DHTML, il livello intermedio (middle ware) corrisponde allo sviluppo di pagine ASP, PHP, JSP che garantiscono il collegamento tra il DB e l’utente finale. Infine c’è l’ultimo livello (back end) corrispondente al sw di sviluppo e mantenimento dei DB remoti. Attualmente i principali linguaggi dinamici utilizzati sono: 1)ASP (Active Server Pages) deriva da Visual Basic e come questo è della Microsoft. Le pagine ASP possono comprendere sia righe in puro HTML sia veri e propri programmi scritti in un particolare linguaggio di scripting (un programma scritto così viene detto script). I linguaggi supportati dalle ASP sono VBscript, Javascript, Perscript e Pyton. Un file ASP deve avere come estensione.ASP. Il codice ASP è racchiuso tra <% %>. 2)PHP permette lo sviluppo unicamente di programmi lato server cioè eseguiti sul server web con eventuale accesso a DB e file i cui risultati vengono inviati ai browser sottoforma di codice HTML puro. PHP fornisce un vero e proprio linguaggio di programmazione quindi non si appoggia ad altri linguaggi. PHP consente tra lì’altro l’accesso ai DB e tra quelli più usati ci sono MySQL… 3) JSP (Java Server Pages) v. pag. 340,341. Per estrarre dati da un DB sono necessarie 2 fasi, una per stabilire la connessione e l’altra per effettuare la vera e propria interrogazione del DB.