Base di Dati e SQL
In informatica, il termine base di dati o banca dati (abbreviato con la sigla DB dall'inglese "Data Base"), indica un insieme di dati, omogeneo per contenuti e per formato, memorizzati in un elaboratore elettronico e interrogabili via terminale. Le informazioni contenute in una base di dati sono strutturate e collegate tra loro secondo un particolare modello logico scelto dal progettista, esempio è quello che abbiamo studiato noi quest'anno ovvero il modello relazionale.
Gli utenti si interfacciano con le base dati attraverso i cosiddetti query language (query di ricerca o interrogazione, inserimento, cancellazione, aggiornamento) e grazie a particolari applicazioni software dedicati (DBMS). Nelle basi di dati più moderne, ovvero quelle basate sul modello relazionale, i dati vengono suddivisi per argomenti(Tabelle) e poi tali argomenti vengono suddivisi per categorie (Campi) con tutte le possibili operazioni di cui sopra.
La funzionalità di una base di dati dipende in modo essenziale dalla sua progettazione: la corretta individuazione degli scopi della base di dati e quindi delle tabelle, da definire attraverso i loro campi e le relazioni che le legano, permette poi una estrazione dei dati più veloce e, in generale, una gestione più efficiente.
Nell'ambito dell'utilizzo/amministrazione della base di dati, una qualunque operazione sulla base di dati da parte dell'utente/amministratore su DBMS è ottenibile tramite un opportuno linguaggio attraverso un DBMS manager ad interfaccia grafica o ad interfaccia a riga di comando.
In generale è possibile distinguere più linguaggi per basi di dati (ciascuno con lessico e sintassi che definiscono tutte le istruzioni possibili) a seconda del loro utilizzo o finalità a partire dalla creazione/progettazione, gestione, ristrutturazione, sicurezza, fino all'interrogazione della base di dati stessa. Il linguaggio attualmente più utilizzato nonchè quello visto quest'anno è SQL, un linguaggio testuale iterattivo. SQL(Structured Query Language) è un linguaggio standardizzato per database basati sul modello relazionale (RDBMS) progettato per:
- creare e modificare schemi di database;
- interrogare i dati memorizzati;
- creare e gestire strumenti di controllo ed accesso ai dati;
DML-Manipolazione dei dati
Abbiamo accennato prima che con SQL e possibile, oltre a diverse operazioni, manipolare i dati attraverso comandi per inserire, modificare ed eliminare i dati all'interno delle tabelle di un database:
- INSERT: il comando ha la funzione di inserire dei dati all'interno di un Database;(INSERT INTO "nome_tabella" VALUES "valori da passare").
- DELETE: Il comando delete ha la funzione di cancellare i dati dalle tabelle;(DELETE FROM "nome_tabella" WHERE nome_campo="valore").
- UPDATE: Il comando update ha la triplice funzione di modificare i dati delle tabelle. Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET(UPDATE nome_tabella SET nome_campo='nuovo_valore', nome_campo1='nuovo_valore1').
- SELECT, con il comando select abbiamo la possibilità di estrarre i dati, in modo mirato, da un database. La sintassi (SELECT [ ALL | DISTINCT ] 'attributi da estrarre' FROM 'Tabella_selezionata' ...), esistono successivamente vari operatori da implementare nella SELECT per poter filtrare i dati(HAVING), fare delle somme(sum da integrare con il HAVING), nel caso si trattano valori numerici e si vuole conoscere il massimo o il minimo(MAX|MIN) o l'operatore GROUP BY che server per raggruppare per tupla i risultati e cosi via... .
- JOIN, Una forma di select composto tra più tabelle con uno o più campi comuni si ottiene attraverso la clausola JOIN che si divide in (INNER, OUTER che sono full, right e left outer join) è complementare in SQL all'utilizzo del WHERE.
Le Transazioni
Una transazione è un blocco di istruzioni che sono strettamente correlate tra loro. Nel caso in cui per qualsiasi motivo (un errore interno al DBMS, un errore nelle istruzioni SQL, un errore di sistema) una delle istruzioni non arrivi a compimento, l'intera transazione verrà annullata. Si dice quindi che una transazione è un'operazione che gode delle proprietà A-C-I-D:
- Atomicità: ne definisce l'operazione della transazione che deve essere Atomica, ossia non divisibile, si passa da uno stato iniziale ad uno stato finale.
- Consistenza: prima e dopo di una transazione i dati devono soddisfare i vincoli di integrità definiti nella CREATE TABLE, perciò i dati devono essere consistenti.
- Isolamento: l'esecuzione di una transazione deve essere indipendente dalla contemporanea esecuzione di una seconda, devono essere quindi isolate.
- Durabilità o persistenza: ne definisce la memorizzazzione permanente delle modifiche eseguite da una transazione una volta effettuato il COMMIT, le modifiche devono essere permanenti e devono essere garantiti dei meccanismi, che i DBMS offrono, per il ripristino dello stato corretto in caso di guato.
Una transazione per iniziare esplicitamente
utilizza il comando BEGIN TRANSACTION [transaction_name]. Alla fine di una transazione ci si divide in due tipi di conclusione della transazione, ovvero, in caso di annullamento o errore si stabilisce il ROLLBACK [TRANSACTION] [transaction_name].
Mentre per confermare una transazione quando questa và a buon fine si utilizza il COMMIT [TRANSACTION] [transaction_name].
Vincolo di Integrità dei dati.
Un vincolo di integrità dei dati è una proprietà che deve essere soddisfatta dalle istanze di una base di dati. Ogni vincolo può essere visto come un predicato che può assumere il valore vero o falso: l'istanza soddisfa il vincolo se il predicato assume il valore vero, viceversa se assume valore falso.
Esistono due grandi tipologie di vincoli: quelli intrarelazionali che interessano una sola tabella e quelli interrelazionali che definiscono legami tra due o più tabelle:
- Vincoli Intrarelazionali, tutti quei vincoli il cui soddisfacimento è definito per singole relazioni, ovvero tutte le istanze di una relazione devono soddisfare tutti i vincoli che sono definiti sulla relazione stessa. Si parla quindi di vincoli di Chiave primaria, Chiave univoca e Vincoli di tupla.
- Vincoli Interrelazionali, quando si parla di Vincolo di integrità referenziale vincoli definiti dal legame tra due o più tabelle.
Vincolo di Integrità Referenziale.
Nell'ambito dei RDBMS, l'integrità referenziale è un vincolo di integrità di tipo interrelazionale ovvero una proprietà dei dati che, se soddisfatta, richiede che ogni valore di un attributo (colonna) di una relazione (tabella) esista come valore di un altro attributo in un'altra o nella stessa relazione.
Meno formalmente, nei database relazionali, affinché sia rispettata l'integrità referenziale, ogni campo in una tabella che sia stato dichiarato come foreign key può contenere solo valori della chiave primaria o chiave candidata di una tabella "madre" relazionata. Per esempio, cancellare un record che contiene un valore a cui fa riferimento una foreign key di un'altra tabella violerebbe l'integrità relazionale.
Normalizzazione di una base di dati
La normalizzazione è un procedimento volto all'eliminazione della ridondanza dei dati e conseguente rischio di incoerenza del database, esistono tre livelli (forme normali) per la qualità della base di dati:
- prima forma normale nel momento che tutti gli attributi hanno domini atomici ed esiste una Primary Key.
- seconda forma normale quando una tabella T è in prima forma normale e seconda forma normale e si hanno solo dipendenze funzionali complete dove ogni attributo di T dipende dalla chiave primaria di T.
- terza forma normale una tabella T è in terza forma normale quando è in 2INF perciò senza dipendenze funzionali parziali e non esistono attributi non primi dipendenti dalla Primary Key.
Il processo di normalizzazione si basa sul fatto che se una relazione contiene più concetti tra loro indipendenti, la si suddivide in relazioni più piccole. Questo processo deve essere applicato in modo che non comporti perdita di informazioni, in modo da garantire la ricostruzione originaria giusta, e conservi le dipendenze, ovvero i vincoli di integrità.