BASI DI DATI
Database
Informatica
Dispense
INTRODUZIONE
Una base di dati è una collezione di dati (fatti noti) che ha le seguenti proprietà:
- rappresenta un aspetto del mondo reale (Universo del Discorso);
- i dati contenuti sono logicamente correlati e consistenti, e non sono una raccolta casuale;
- è costruita e popolata per una scopo;
- le basi di dati possono essere di qualsiasi dimensione e avere diversa complessità
informazione e dato
L’informazione è tutto ciò che produce variazioni del patrimonio conoscitivo di un soggetto.
Il dato è la registrazione della descrizione di una caratteristica della realtà.
ES:
dato: “G24”
informazione: “in G24 si terrà la lezione”
contesto interpretativo:
per trasformare un dato in un informazione bisogna dargli un contesto interpretativo.
Transazione: è un programma che esegue uno o più accessi alla base di dati per leggere e/o modificare.
Query: è l’interrogazione che viene fatta alla base di dati per estrarre informazioni.
DBMS
Un sistema di gestione di basi di dati DBMS (Data Base Management System), è un sistema software
specificamente realizzato per supportare la definizione, costruzione, manipolazione e condivisione di BD.
Base di dati significa quindi collezione di dati gestita da un DBMS.
Definizione: specificare i tipi, le strutture e i vincoli dei dati che devono essere memorizzati nella BD;
Costruzione: popolare la BD, memorizzando i dati su un supporto di memorizzazione gestito dal DBMS;
Manipolazione: interrogare la BD (reperire dati) e/o aggiornare la BD (aggiungere, modificare, eliminare
dati);
Condivisone: più utenti e programmi applicativi possono accedere contemporaneamente ai dati contenuti
nella base di dati;
Catalogo: una BD non contiene solo i dati, ma anche descrizione completa di vincoli, tipi di dati, file,
formati. Queste informazioni sono i metadati e sono contenuti nel catalogo.
La struttura della BD è memorizzata separatamente dai programmi nel catalogo (indipendenza tra
programmi e dati).
Viste multiple: la BD ha molti utenti; ogni utente può chiedere una diversa prospettiva o vista. Una
vista può essere un sottoinsieme della BD oppure un insieme di dati virtuali che sono derivati dai file
memorizzati. Il DMBS offre funzioni per le viste multiple.
Attori di una BD
Un modello dei dati è un insieme di costrutti e operazioni che descrivono la struttura della BD. L’uso del
modello permette al DBMS di fare astrazione dei dati, cioè nasconde agli utenti come vengono strutturati
i dati. Il modello si occupa di due aspetti:
- come rappresentare i dati;
- come rappresentare i legami tra i dati.
Per un modello di dati bisogna quindi determinare:
- oggetto
- insieme degli oggetti
- attributi
- associazioni
Es dell’università:
-oggetto= lo studente
-insieme = tutti gli studenti
-attributi = matricola, cognome, nome…
-associazioni = un certo studente segue un certo corso…
Modello relazionale
Un esempio di modello dei dati è il modello relazionale.
È un modello basato su un singolo costrutto, la relazione.
Una relazione si può vedere come un tabella in cui:
- le righe sono i record
- le colonne sono i campi
Terminologia
Stato:
Lo stato (insieme delle istanze) della base di dati è l’insieme dei dati in un certo momento.
È quindi variabile nel tempo. Il primo caricamento di dati si chiama stato iniziale.
Livelli di astrazione del DMBS
Una BD può essere vista a 3 diversi livelli di astrazione, e per ogni livello c’è uno schema:
- Schema Logico : descrizione della BD con modello logico (es: relazionale);
- Schema Fisico : descrizione della BD con modello fisico (file, indici…);
- Schema Esterno o Vista : descrizione della BD o di una parte di essa che costituisce la visione
dell’utente.
Queste distinzioni permette all’utente e al programmatore di fare riferimento solo allo schema logico.
Infatti i dati descritti a livello logico sono memorizzati attraverso strutture fisiche, ma non è necessario
conoscerle: ci pensa il DMBS a mantere la corrispondeza tra i 3 schemi (mapping).
Componenti di un DBMS
Linguaggi
Il modello relazionale rappresenta la BD come una collezione di relazioni o una collezione di tabelle.
Quando si pensa ad una relazione come una tabella, ogni riga è una collezione di dati collegati. I nomi
della tabella e delle colonne aiutano a interpretare il significato dei valori delle righe.
Ogni riga è una tupla, il nome della colonna è l’attributo, il nome della tabella è la relazione.
Il tipo di dati di ogni attributo è rappresentato da un dominio di possibili valori, e per ogni dominio si
specifica il tipo di dato e il formato. (ad es la data è un numero e il formato è gg.mm.aa).
Ordinamento: non c’è alcuno ordine da rispettare, sia per le tuple che per gli attributi. Quello che conta
è rispettare l’ordine, una volta stabilito.
Null (informazione incompleta): esiste un valore speciale null che può avere diversi significati:
- valore sconosciuto
- valore esistente ma non disponibile
- valore non applicabile per la tupla
Vincoli e chiavi
Forme normali
Tipi di attributi:
- Attributo semplice: a valori atomici (un valore unico e indivisibile)
- Attributo multivalore: valore è un insieme di valori dello stesso dominio
- Attributo strutturato: valore è un insieme di valori che appartengono a domini diversi
Uno schema di relazione R è detto in prima forma normale (1NF) se ogni suo attributo è semplice.
ALGEBRA E CALCOLO RELAZIONALE
L’insieme di operazioni per il modello relazionale è l’algebra relazionale. Il calcolo relazionale specifica le
interrogazioni relazionali.
Operatori unarie
Selezione σ
* Seleziona le righe, quindi le tuple di R. È un filtro che fa partizione orizzontale.
Proiezione π
* Seleziona le colonne, quindi gli attributi. È un filtro che fa partizione verticale.
* Si indica π <lista attributi > (R)
* Eliminazione dei duplicati:
facendo proiezione su attributi non chiave, possono presentarsi delle nuove tuple duplicate; la
proiezione prevede l’eliminazione di duplicati.
* Il grado della relazione risultante è minore del grado di quella iniziale.
* Non vale la proprietà commutativa.
Ridenominazione ρ
Operatore che cambia il nome degli attributi nelle interrogazioni (contenuto delle relazioni inalterato).
* Si indica ρ <nuovoNome> ← <nomeAttributo> (R)
Operatori insiemistici
Sono usate per fondere due relazioni diverse. Per poter essere fuse, devono essere compatibili all’unione,
cioè devono avere lo stesso grado e, ad attributi corrispondenti, lo stesso dominio. Per convenzione noi
scegliamo che gli attributi corrispondenti devono anche avere lo stesso nome, per questo si ricorrerà
all’operatore di ridenominazione.
Operatori binari
Prodotto Cartesiano X
Noto anche come Join Incrociato, si applica a 2 relazioni R e S, e produce una relazione finale Q in cui
ogni tupla è combinazione di ogni tupla di R con ogni tupla di S. Per cui data R(a1,a2…an) e
S(b1,b2…bm), diremo che R X S = Q (a1,a2…an,b1,b2…bm). Se grado_R = n e grado_S = m allora
grado_Q = n+m.
Il prodotto cartesiano è poco utile. Correla tuple nel risultato anche se non sono correlate da un punto di
vista semantico. In generale è necessario operare una selezione sul risultato del prodotto cartesiano per
selezionare un sottoinsieme significativo di tuple.
Join
Il join è un prodotto cartesiano seguito da un’operazione di selezione.
Si indica con R <condizione> S
Divisone ÷
Come si vede dalla sequenza, r:s significa prendere tutte le tuple di r contengono tutte le tuple di s, e
creare una nuova relazione che ha solo gli attributi che non si trovano in s.
Ci deve essere compatibilità sugli attributi (C e D in questo caso).
Una richiesta classica in cui si fa la divisione è “trovare i nomi degli impiegati che lavorano a tutti i
progetti su cui lavora John Smith.
Progettazione concettuale
Dopo l’analisi dei requisiti, si crea uno schema concettuale ER, specificando tipi di entità,
attributi, tipi di associazioni, gerarchie. Le strategie per la produzione dello schema possono
essere:
- top down – si parte da astrazioni di alto livello e si procede con successivi raffinamenti.
- inside out - Caso particolare della strategia bottom-up: si individuano inizialmente alcuni
concetti di maggiore rilevanza e da questi si procede rappresentando via via i concetti vicini a
quelli iniziali seguendo i requisiti (procedimento a “macchia d’olio”).
Leggibilità
Uno schema concettuale e’ leggibile quando presenta i
requisiti in maniera facilmente comprensibile
scelta di nomi significativi e adeguati
minimizzazione di intersezioni (elementi con più
legami posizionati centralmente)
Minimalità
Uno schema concettuale e’ minimale quando non
presenta ridondanze (es., presenza di dati derivati),
ovvero le specifiche sui dati sono rappresentate una
volta sola nello schema
si può tollerare la ridondanza come scelta
progettuale ma va documentata (vedi prog. logica)
Completezza
Uno schema concettuale e’ completo quando
descrive tutti i requisiti di interesse e le operazioni
possono essere eseguite a partire dai concetti
contenuti nello schema
tutti i requisiti sono rappresentati da qualche
concetto nello schema
tutti i concetti coinvolti nelle operazioni sono
raggiungibili nello schema
Correttezza
Uno schema concettuale è corretto quando fa un
uso proprio dei costrutti del modello concettuale
utilizzato
errori sintattici
uso non ammesso di costrutti (es., generalizzazione
su associazioni)
errori semantici
uso dei costrutti che non rispetta la loro definizione
(es., associazione per esprimere specializzazione)
Progettazione logica
Dalla progettazione concettuale si passa alla progettazione logica. Le attività compiute sono:
- ristrutturazione dello schema concettuale (ER);
- traduzione nello schema logico (relazionale);
- verifica della ‘normalizzazione’ sullo schema relazionale ottenuto.
Dipendenza funzionale:
Un attributo B dipende funzionalmente da A se dato un valore di A si deduce un valore di B.
Si indica con A→B.
1^ forma normale:
una relazione è in 1FN se tutti gli attributi sono atomici.
2^ forma normale:
una relazione è in 2FN se è in 1FN e se tutti gli attributi non-chiave dipendono funzionalmente
da tutta la chiave (cioè da tutti gli attributi della chiave, e non solo uno).
3^ forma normale:
una relazione è in 3FN se è in 2FN e se tutti gli attributi non-chiave NON dipendendono
transitivamente dalla chiave.
FORMA NORMALE BOYCE-CODD (BCNF)
Una relazione R è in BCNF se per ogni dipendenza A→B l’insieme A contiene una chiave di R
Progettazione fisica
INDICI
Un indice è una struttura ausiliaria, separata dai file di dati, realizzata per migliorare i tempi di
ricerca (query) dei dati. Se una tabella non ha indici, ogni ricerca obbliga il sistema a leggere
tutti i dati presenti in essa. L'indice consente invece di ridurre l'insieme dei dati da leggere per
completare la ricerca. Gli indici hanno anche degli effetti negativi in quanto rendono più lente
le operazioni di inserimenti e modifica (update), ed aumentano l'uso della memoria di massa.
Un indice si può pensare nella forma <Ki,Pi> dove Ki è il valore dell'attributo chiave e Pi è il
puntatore al record di dati. Generalmente il file indice è ordinato secondo i valori del campo Ki
affinché sia possibile effettuare una ricerca binaria.
Tecnica di sicurezza:
Controllo dell’accesso: ci sono meccanismi che, per ogni richiesta di accesso ai dati,
verificano che l’utente sia autorizzato a compiere l’accesso. Il Reference Monitor è un
meccanismo di controllo che ha il compito di stabilire se l’utente può essere autorizzato
(totalmente o parzialmente) a compiere l’accesso.
Politiche:
Le politiche di controllo stabiliscono la limitazione degli accessi, cioè stabiliscono se e come i
soggetti possono accedere a quali dati contenuti nel sistema.
- Need-To-Know (minimo privilegio): molto restrittiva, permette ad ogni utente l’accesso solo
ai dati strettamente necessari per eseguire le proprie attività; offre ottime garanzie di
sicurezza, può portare ad un sistema eccessivamente protetto.
- Maximized Sharing (massima condivisione): consente agli utenti il massimo accesso alle
informazioni nella base di dati, mantenendo comunque informazioni riservate; soddisfa il
massimo numero possibile di richieste di accesso.
Politiche mandatorie:
Regolano l’accesso ai dati mediante la definizione di classi di sicurezza per i soggetti e gli
oggetti del sistema:
Le classi di sicurezza sono ordinate (es., TS>S>C>U).
La classe di sicurezza assegnata ad un oggetto rappresenta il livello di sensitività dell’oggetto:
maggiore è la classe assegnata ad un oggetto, più ingente sarà il danno derivante dal rilascio
delle informazioni in esso contenute a soggetti non autorizzati.
Con questa politica sono vietati flussi (controllo di flusso) da oggetti ad elevata
classificazione in oggetti a bassa classificazione (per risolvere il Cavallo di Troia). In questo
caso la flessibilità è però ridotta e la circolazione di informazioni tra gli utenti è più difficile.
Politiche discrezionali:
Per contrasto, queste politiche sono più flessibili: Gli utenti possono a loro discrezione
concedere o revocare i diritti di accesso sugli oggetti. Ci sono regole di autorizzazione flessibili
ed adatte a numerosi contesti applicativi. Non c’è controllo di flusso.