appuntiDiIngegneria
Basi di Dati
Sommario
1.0. Basi di Dati ........................................................................................................................................2
1.1. Modello Relazionale ..........................................................................................................................6
1.1.1. Vincoli Intra-Relazionali .................................................................................................................8
1.1.2. Vincoli Inter-Relazionali ............................................................................................................... 10
1.2. Algebra Relazionale ......................................................................................................................... 11
1.3. Linguaggio SQL ................................................................................................................................ 15
1.3.1. DDL del SQL ................................................................................................................................. 15
1.3.2. DML del SQL ................................................................................................................................ 17
1.3.3. Esempio di DBMS Relazionale: MySQL ......................................................................................... 19
1.4. Organizzazione Fisica dei DBMS....................................................................................................... 22
1.5. Progettazione dei Database............................................................................................................. 25
1.5.1. Progettazione Concettuale con il Modello E-R ............................................................................. 27
1.5.2. Progettazione Logica ................................................................................................................... 30
1.5.3. Esempio Completo di Progettazione di un DB .............................................................................. 33
1.5.4. Tecniche di Normalizzazione........................................................................................................ 37
1.6. Modelli No-SQL: MongoDB .............................................................................................................. 40
1
1.0. Basi di Dati
Si parte dando qualche definizione di base:
Informazione: notizia, o elemento che consente di avere conoscenza più o meno esatta di
fatti, situazioni e modi d’essere.
Dato: elementi di informazione costituiti da simboli che devono essere elaborati. Con delle
indicazioni aggiuntive a seguito dell’elaborazione, essi possono diventare informazione.
Un Sistema Informativo (SI) è una componente di un’organizzazione (Azienda, Ufficio, Ente,
Università, etc) il cui scopo è quello di gestire le informazioni utili ad i fini di perseguire gli obiettivi
dell’organizzazione stessa. La porzione automatizzata di un sistema informativo prende il nome di
Sistema Informatico; all’interno di esso le informazioni sono rappresentate da dati.
Gran parte dei sistemi informatici hanno la necessità di gestire dati in maniera persistente (cioè
memorizzarli in una memoria secondaria). Vi sono due principali approcci di gestione dei dati:
1. Approccio convenzionale (basato su files): in questo approccio non vi è nessuna chiara
distinzione tra dati ed applicazioni. L’applicazione contiene al suo interno la logica di gestione e
memorizzazione dei dati stessi (es. formato dei dati) mentre il Sistema Operativo offre le
primitive di base per l’accesso ai files ed i meccanismi di sicurezza del File System. In questo
approccio si rilevano alcuni problemi:
Problemi di scalabilità ed efficienza quando si devono gestire grandi quantità di
dati;
Problema legato alla condivisione e all’accesso concorrente, in quanto In molti
scenari pratici, i dati devono essere a disposizione di una moltitudine di
utenti/applicazioni per accessi
concorrenti. Si verificano problemi
come Lock a livello di file, bassa 2
granularità di concorrenza, prestazioni limitate! Inoltre le applicazioni diverse
devono conoscere l’esatta collocazione e formato dei dati quindi o bisogna
aggiornare sempre il formato dei dati oppure si fa una replica dei dati presso i vari
sistemi/utenti che ne fanno utilizzo andando incontro al problema della consistenza
delle repliche.
2. Approccio DBMS-based: è un approccio strutturato basato su software di gestione dei dati,
esistono appositi strumenti software, sviluppati fin dagli anni ‘60, per la gestione delle basi di
dati, in particolare si indica con il termine Database Management System (DBMS) un sistema
software (complesso e quindi costoso) che è in grado di gestire DB grandi, condivisi e
persistenti, in maniera efficiente e sicura. Inoltre definiamo una Base di Dati come una
collezione di dati gestita da un DBMS. Ci sono molti DBMS disponibili in commercio, alcuni dei
quali sono: Oracle, DB2, Microsoft SQL Server, MongoDB, MySQL. Di seguito sono riportate
alcune funzionalità dei DBMS:
Creazione di una base di dati e memorizzazione su memoria secondaria.
Accesso in lettura/scrittura ad i dati.
Condivisione di dati tra diversi utenti/applicazioni.
Protezione dei dati da accessi non autorizzati.
Reliability dei dati in caso di guasti (hardware/software).
Tramite i DBMS, è possibile implementare un paradigma di separazione di dati ed applicazioni.
I DBMS utilizzano un’architettura SW a 3 livelli, che corrispondono ai tre livelli di astrazione in cui
sono articolati i dati:
Schema Esterno: descrive come i dati appaiono per un utente o un gruppo di utenti. Il
livello esterno consente di avere viste personalizzate della base di dati da parte di diversi
utenti/applicazioni. Ad esempio considerando una Base di dati condivisa tra diversi uffici di
una stessa organizzazione, si potrebbe avere che solo alcuni uffici possono accedere a tutto
il contenuto del DB! 3
Schema Logico: descrive l’organizzazione logica dei dati, In pratica il Modello/livello logico
consiste in un Insieme di concetti (record a struttura fissa o variabile, grafi) per
strutturare/organizzare i dati relativi ad un certo dominio d’interesse e in un Insieme di
regole per modellare eventuali vincoli e restrizioni sui dati (Esempio di vincolo sui dati: Il
voto d’esame è un numero intero compreso tra 18 e 30). Sia le Regole che Concetti
generali sono indipendenti dal dominio d’interesse che si sta considerando. Sono stati
proposti diversi Modelli Logici sulla base del quale differiscono i vari DBMS:
o Modello Relazionale: di fatto, il più usato, in cui i dati sono memorizzati in tabelle.
o Modello Gerarchico: Le associazioni tra tabelle sono rappresentate con puntatori in
una struttura ad albero, in cui i nodi rappresentano le entità e gli archi le relazioni
fra entità.
o Modello Reticolare: Le associazioni tra tabelle sono rappresentate con puntatori in
una struttura a grafo complesso.
o Modello ad Oggetti: Una base di dati è una collezione di oggetti in cui ogni oggetto
ha un identificatore univoco (OID) gestito dal sistema (a differenza delle chiavi), uno
stato, definito come una struttura complessa a partire da dati semplici e ha dei
metodi che consentono di manipolare lo stato.
o Approcci NoSQL: Non un singolo modello, ma un insieme di approcci accomunati
dal tentativo di superare la rigidità del modello relazionale, e di migliorare la
scalabilità della gestione di una base di dati in ambienti distribuiti. Si distinguono gli
Approcci Key/Value (Redis, BigTable, etc) e gli Approcci document-oriented
(JSON/XML).
Schema Fisico: descrive come i dati sono memorizzati su memoria secondaria.
In un DBMS il livello logico è indipendente dal modello fisico, l’organizzazione logica dei dati non
dipende dalle strutture dati usate per l’effettiva memorizzazione su disco. In pratica, le
applicazioni accedono al DBMS specificando i concetti logici del modello dei dati, piuttosto che i
dettagli relativi alla loro memorizzazione. Quando con un’applicazione si chiede qualcosa ad un
DBMS, non vengono specificate le righe/colonne nel quale queste informazioni sono memorizzate
nella tabella. Un DBMS deve garantire le seguenti caratteristiche:
1) Efficienza nella gestione dei dati: i DBMS forniscono
adeguate strutture dati per organizzare i dati all’interno dei
file, e per supportare le operazioni di ricerca/aggiornamento,
ad esempio strutture ad albero o hash table. In particolare
nelle tabelle viene utilizzato un Indice per avere accesso
diretto alle tuple, in quanto esso contiene informazioni sulla
posizione di memorizzazione delle tuple sulla base del valore
del campo chiave. 4
Concorrenza: In molti sistemi è fondamentale gestire operazioni concorrenti di accesso ai
2) dati. Al tempo stesso, un DBMS deve garantire che accessi da parte di applicazioni diverse
non interferiscano tra loro, lasciando il sistema in uno stato inconsistente. Per prevenire
tali situazioni i DBMS implementano algoritmi di controllo della concorrenza che fanno in
modo che le operazioni sui dati (transazioni) eseguite in concorrenza producano lo stesso
risultato di un’esecuzione seriale. A questo proposito vi è il Lock Manager, che è il
componente del DBMS responsabile di gestire i lock in lettura/scrittura per accesso a
risorse condivise (dati) del DB, e di rispondere alle richieste delle transazioni.
Persistenza e Affidabilità: Alcune operazioni sui dati sono particolarmente delicate, e
3) devono essere gestite in maniera opportuna, secondo la regola del tutto o niente. Per
questo, i DBMS devono fornire appositi strumenti ed algoritmi per annullare operazioni
non completate e fare il roll-back dello stato del Sistema. Il controllore di affidabilità
utilizza dei Log (memorizzati nella memoria cache dei DBMS), nel quale sono indicate tutte
le operazioni svolte dal DBMS, e tramite essi è possibile fare il DO/UNDO delle operazioni.
Vi sono degli algoritmi ad-hoc (es. algoritmo di ripresa a caldo/a freddo) per ripristinare lo
stato dei dati a partire dai log del DBMS.
Multiutenza e Sicurezza: La maggior parte dei DBMS implementa politiche di controllo
4) degli accessi ad i dati mediante sistemi di permessi (esempio: Quali operazioni sono
consentite all’utente X? Quali dati appartengono all’utente X?).
Scalabilità (orizzontale): Possibilità di gestire grandi moli di dati aumentando il numero di
5) nodi usati per lo storage (database distribuito).
Per poter far interagire gli utenti o le applicazioni con i DBMS ci sono i linguaggi dichiarativi
utilizzati per i Database mettono a disposizione due componenti:
Linguaggio DDL: per la Definizione dello schema logico, cioè per dichiarare e definire la
struttura delle tabelle. L’unico costrutto che esso ha è il CREATE TABLE.
Linguaggio DML: per la Manipolazione delle istanze, cioè per inserire istanze nelle
tabelle e fare delle query al Database.
Si tratta di linguaggi orientati ai dati molto diversi dai linguaggi di programmazione tradizionali. Le
applicazioni che si interfacciano con un DBMS integrano codice SQL (DDL+DML) all’interno del
loro codice e utilizzano opportune librerie (fornite dal DBMS) per gestire la connessione al DBMS. 5
I DBMS non sono tutti uguali ma hanno delle Differenze sostanziali, ad esempio in termini di
Modello Logico Supportato, Algoritmi di Indicizzazione utilizzati, linguaggi DDL/DML utilizzati, ecc…
Infine ci sono 4 punti di vista attraverso cui si può guardare al mondo delle basi di dati (DB):
Utente: come interagire con un DB (aggiungere/modificare informazioni, recuperare
informazioni mediante delle query, ecc..).
Progettista: come progettare un DB.
Programmatore: come sviluppare applicazioni Web/stand-alone che si interfaccino con un
DB.
Analista: come reperire informazioni da un DB attraverso tecniche di Data Mining.
1.1. Modello Relazionale
È stato proposto nel 1970 da E.F. Codd, ricercatore dell’IBM di San Jose, CA. ed è attualmente il più
utilizzato tra i modelli logici disponibili. Tra i DBMS basati sul modello relazionale (RDBMS) vi
sono: Oracle, MySQL, DB2, SQL Server etc. Si chiama modello relazionale perché una relazione tra
dati può essere vista come una relazione matematica. Nella Teoria degli insiemi si definisce una
relazione matematica nel seguente modo:
DEF. Il prodotto cartesiano degli insiemi D , D , … D è definito come l’insieme delle tuple (n-uple)
1 2 n
∈ ∀ .
ordinate (d , d , … d ), con d D Ad esempio dati gli insiemi A = {1, 2, 4} e B = {a, b} il Prodotto
i
1 2 n i i
Cartesiano AxB = {(1, a), (1, b), (2, a), (2, b), (4, a), (4, b)}
DEF. Dati n insiemi D , D , … D , una relazione matematica sugli insiemi D , D , … D è definita
1 2 n 1 2 n
come un sottoinsieme del prodotto cartesiano D x D x … x D
1 2 n.
Dove gli insiemi D sono chiamati Domini della Relazione, il Numero n delle componenti di ogni
I
tupla è chiamato grado della relazione, mentre il numero di tuple è chiamata cardinalità della
relazione. Dalle proprietà ereditate dal concetto di relazione matematica:
Non è definito alcun ordinamento tra le tuple di una relazione, e quindi di conseguenza fra
le righe di una tabella, non importa quale venga prima e quale venga dopo.
Non possono esserci due tuple uguali, e quindi due righe uguali nella stessa tabella.
Quindi nel modello relazionale i dati sono organizzati in record di dimensione fissa, e divisi in
tabelle (relazioni) in cui:
Colonne della tabella Rappresentano gli Attributi, e corrispondono ai Domini di una
relazione. Indicano le Proprietà di interesse di una Tabella.
Intestazione della tabella (nome tabella + nome attributi) è la prima riga di una tabella,
e rappresenta lo Schema della relazione, cioè la dichiarazione dei Domini, che è la parte
fissa della tabella. 6
Righe della tabella Rappresentano le Istanze della relazione, ossia la parte variabile delle
tabelle. Le istanze corrispondono all’insieme delle tuple di una relazione.
Nell’esempio il Nome della Relazione è studente, gli attributi (Domini della relazione) sono la
matricola, Nome, Città ed il Dipartimento a cui egli afferisce; lo schema della relazione è R =
studente(MATR, NOME, CITTA’, C-DIP); le successive righe della tabella rappresentano le varie
istanze, ad esempio una delle istanze è: <123, Carlo, Bologna, Inf>. È possibile avere uno schema
di relazioni senza istanze (es. in fase di creazione del DB) ma non è possibile avere il viceversa. A
volte può succedere che alcune informazioni sono ignote nel riempimento di una tupla per diverse
ragioni, ad esempio perché non si conosce il valore di un dato, oppure perché il dato è assente o
non applicabile a quella specifica tupla; in tal caso si estendono tutti i possibili Domini
∪
aggiungendo un valore speciale NULL (cioè D = D NULL). Ad esempio nella Relazione elenco
I I
Telefonico(NOME, RUOLO, CELLULARE, UFFICIO) nelle tuple in cui il RUOLO è studente, come
valore nel campo UFFICIO occorre inserire NULL in quanto uno studente non ha un numero di
ufficio. E’ fondamentale però limitare il numero di valori NULL in una relazione, altrimenti si
rischia di avere situazioni in cui due righe sono uguali per assenza di informazioni, come nel
seguente esempio:
Non tutte le istanze di una relazione possono essere considerate lecite, perché spesso nelle
relazioni vengono introdotti dei Vincoli di Integrità, ossia delle funzioni booleane che associano ad
una istanza r di una Base di Dati definita su uno schema R = {R (X ), ..., R (X )} un valore di verità
1 1 k k
(true/false). In altre parole i vincoli indicano quando una tupla è valida all’interno di una relazione
mediante delle specifiche regole, se il vincolo non è valida quella specifica tupla non può essere
inserita nella relazione. Tali vincoli vengono memorizzati insieme allo schema della relazione.
Esistono due grandi famiglie di Vincoli di Integrità sulle istanze di una relazione: 7
Vincoli Intra-Relazionali: 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. Fra questi ci sono i Vincoli
di Chiave, Vincoli di Tupla e Vincoli di Dominio.
Vincoli Inter-Relazionali: Vincoli che coinvolgono più
relazioni, cioè più tabelle. Fra questi ci sono i Vincoli di
Chiave Esterna (detti anche Vincoli Referenziali).
1.1.1. Vincoli Intra-Relazionali
Sia considerato il seguente esempio:
Il primo tipo di Vincolo che è possibile imporre su questa relazione è che il Voto deve essere un
numero compreso fra 18 e 30, ovvero (Voto ≥ 18) AND (Voto ≤ 30); questo prende il Nome di
Vincolo di Dominio, perché coinvolge un solo Dominio, cioè l’Attributo Voto. Altro tipo di Vincolo
che è possibile imporre è che la Lode deve essere ammessa se e solo se il Voto dello Studente sia
uguale a 30, cioè (NOT (Lode = SI)) OR (Voto = 30); esso prende il nome di Vincolo di Tupla. Per
spiegare i Vincoli di Chiave si fa riferimento alla seguente relazione:
Innanzitutto viene definita chiave un insieme di attributi che consente di identificare in maniera
univoca le tuple di una relazione: nell’esempio della relazione studente la chiave è semplicemente
la Matricola, in quanto non possono esistere due studenti che hanno la stessa matricola. Gli
attributi dentro una chiave vengono chiamati Attributi Primi. Invece un sottoinsieme K di attributi
di una relazione r è chiamata superchiave di r se NON contiene due tuple distinte t1 e t2 con
t1[K]=t2[K], cioè uguali sulla restrizione dei K attributi. Se togliendo uno qualsiasi dei K attributi dal
8
sottoinsieme, quest’ultimo smette di essere una superchiave di r, allora tale sottoins
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.