BASI DI DATI APPUNTI + SLIDE
UNIVERSITÀ DI BOLOGNA
2023/24
1
INTRODUZIONE
DATI = tutto quello che è salvato sull’hard disk, che è salvato su memoria fisica
BASI = collezioni = insiemi di dati che fanno parte della stessa collezione
Chi produce dati?
- Organizzazioni (aziende / ente pubblico): ognuna ha comparti che gestiscono dati prodotti dall’azienda stessa.
- Social media
- Big data
- Dispositivi mobili
Perché di dati sono importanti?
Dati sono importanti per 3 punti di vista:
1. Sono (così come il capitale/beni prodotti/ecc.), qualsiasi azienda ha una struttura e ad ogni livello
RISORSA AZIENDALE →in
di questa struttura vengono prodotti dati ogni azienda c’è sempre necessità di software per custodire, manipolare
e analizzare dati;
2. Nell’economia digitale ci sono aziende che hanno come dei , così come altre aziende hanno
BENE PRODOTTO DATI
prodotti come macchine, abbigliamento, ci sono aziende che producono dati quini vendono bit;
3. Applicando tecniche di analisi dei dati e intelligenza artificiale spesso dai dati si ricavano quindi
INFORMAZIONI
conoscenze che possono essere da supporto per le decisioni perché possono creare vantaggi competitivi.
Conoscenze sui dati dai corsi precedenti del Corso di studi:
• Sistemi Operativi→ algoritmi e tecniche per rappresentare i dati ed organizzarli all’interno della memoria secondaria
(file system).
• Architettura di Internet→ algoritmi e tecniche per trasmettere i dati in un sistema di comunicazione.
• →
Programmazione linguaggi e metodi per realizzare sistemi software in grado di gestire dati persistenti memorizzati su
file esterni all’applicazione.
Introduzione al mondo delle basi di dati (database - DB) da quattro prospettive complementari:
→
1. Utente come interagire con un DB (aggiungere/modificare informazioni, recuperare informazioni, etc).
→
2. Progettista come progettare un DB.
→
3. Programmatore come sviluppare applicazioni Web/stand-alone che si interfaccino con un DB [CENNI].
→
4. Analista come reperire informazioni da un DB attraverso tecniche di data-mining [CENNI]
DIFFERENZA TRA INFORMAZIONE E DATO
INFORMAZIONE = notizia o concetto che dà conoscenza su un fatto
DATO = codifica simbolica dell’informazione (versione ‘asciugata’ dell’informazione)→ modo di rappresentare informazioni
mediante dei simboli, nel nostro caso mediante degli 0 e 1.
→ Informazione è qualcosa di più del dato: se ho un dato, senza contesto, non mi fa risalire all’informazione.
Esempio: se immagino di trovare nota leggendo questa nota posso dedurre che la Ferrari sia arrivata ottava nella
FERRARI, 8
corsa di formula 1 se sto parlando di contesto sportivo, ma posso dedurre che ho comprato 8 bottiglie di Ferrari se sono in un
contesto di ristorante→ quindi questo dato senza contesto non mi permette di capire l’informazione.
Esempio più concreto: file Excel con dati di azienda agricola della Campania, dati relativi a sensori all’interno dell’azienda che
raccoglie informazioni relative al tempo, pioggia, ecc.
Se ho solo dati, risalire alle informazioni è molto difficile, se ho un foglio Excel ma non è specificato il contesto, unità di misure
ecc, non capisco l’informazione.
→Dal DATO NON è POSSIBILE RISALIRE ALL’INFORMAZIONE SENZA AVERE DEI DETTAGLI IMPORTANTI.
DATI possono essere di tanti tipi, in base alla tipologia possono esserci metodi di analisi diversi.
Noi analizziamo caso generico in cui i dati possono appartenere a queste tipologie: numerico intero o con virgola, booleano,
data, stringa, testo, binario. 2
APPROCCI DI GESTIONE DEI DATI
SISTEMA INFORMATIVO (SI) = è una parte/componente di un’organizzazione il cui scopo è quello di gestire informazioni utili
ai fini dall’organizzazione stessa.
Con SI non necessariamente si parla di informatica, si intende tutto quello che consente all’organizzazione di gestire le
informazioni, quindi che siano componenti, personale, ecc., non per forza componenti digitali/automatizzate.
La porzione automatizzata di un sistema informativo prende il nome di SISTEMA
INFORMATICO, dove al suo le informazioni sono rappresentate da dati.
Noi ci occupiamo solo della parte del SI in cui si utilizzano i computer. →
Gran parte dei sistemi informatici ha necessità di gestire dati in Dati memorizzati su MEMORIA
MANIERA PERSISTENTE
SECONDARIA, cioè su hard disk quindi non vengono persi al riavvio della macchina.
Per costruire sistema informativo, sono presenti due approcci di gestione:
1. APPROCCIO CONVENZIONALE (basato su software non specializzati): per gestire i dati mi appoggio su software non
specializzati nella gestione di dati (Esempio Excel) e costruisco da zero, con un linguaggio, un software e per salvare dati di
volta in volta devo salvare dati sottoforma di file o cartelle. Lo stesso applicativo ha una parte di codice per leggere e
scrivere su file e una parte di codice per gestire interfaccia utente, filtrare dati e in mezzo vi è il S.O. che offre supporto per
la lettura e scrittura su file.
Limitazioni:
- Non c’è chiara distinzione tra codice/applicazioni e dati →
- Assume che dati siano salvati su file con un chiaro e preciso modo
applicazione contiene al suo interno la logica di gestione e memorizzazione dei dati stessi (es. formato interno dei dati)
Applicazione salva dati su file: deve sapere dove si trova file e sapere come sono scritti i dati.
→problemi
PROBLEMA 1: quando devo gestire grandi collezioni di dati di scalabilità
PROBLEMA 2: quando ci sono piu utenti o applicazioni che accedono contemporaneamente ai dati.
Questo approccio può andare bene se il sistema gestisce pochi dati e se viene usato da singolo utente o pochi ma entra in
crisi quando sistema deve gestire tanti dati e che viene usato da molti utenti.
2. APPROCCIO SPECIALIZZATO che impariamo nel corso Basi di Dati: separa i dati dall’applicazione, i dati vengono gestiti
DBMS
da un software specializzato = categoria di software pensata per gestire collezione di dati grandi, condivisi e
persistenti con vincoli di efficienza e sicurezza. Come se fosse una cassaforte che si fa carico di organizzare e custodire dati
in modo sicuro. →altrimenti
BASE DI DATI = collezione di dati persistente (salvata in hard disk) e gestita da DBMS NON è UNA BASE DI
DATI.
Come cambia gestione: tra dati ed effettiva memorizzazione su
disco, quindi tra l’applicazione e file, c’è un software intermedio che
→divisione
è DBMS tra applicazione e dati quindi non devo scrivere
dove si trovano dati e come vengono salvati perché se ne occupa
DBMS, dati possono trovarsi anche in un’altra macchina. Applicazione deve
curare solo aspetto logico ma non i dettagli di come sono salvati i dati e dove
sono salvati.
Dati si trovano da qualche parte e l’applicazione si rivolge a DBMS chiedendo
dei dati, senza specificare dove sono i file e in che formato, questo se ne
→
occupa DBMS distinzione netta tra applicazione e gestione dei dati.
DBMS non fa riferimento a specifico software, ma fa riferimento a una
categoria di prodotti che sanno gestire insieme di dati ma in maniera diversa,
più o meno hanno stesse caratteristiche e struttura interna complessa.
DBMS non si fa solo carico di scrivere dei dati in disco, ma fa molto di più, si occupa anche di:
- EFFICIENZA: DBMS garantiscono che operazioni sui dati siano gestite in maniera piu efficiente di quanto potrebbe
fare un programmatore scrivendo codice in java, Python, ecc. per salvare file. Questa efficienza deriva dall’utilizzo
intelligente delle strutture dati. Nei DBMS si usano strutture a indice che contengono informazioni sulla posizione dei
contenuti di interesse sulla base del valore di un campo chiave. Strutture ad albero dinamiche di tipo B (B-tree) e
3 →
B+(B+-tree) sono quelle più frequentemente utilizzate per la realizzazione di indici. Ricerca O(log(N)). Inserimento
→ →
O(log(n)). Cancellazione O(log(n)).
All’interno di molti DBMS si interagisce con un linguaggio, per esempio con il linguaggio SQL previsto per utilizzatore
finale, ma internamente ha un linguaggio nascosto che si basa su operatori algebrici per l’accesso dei dati (algebra
→
relazionale). DBMS garantisce l’ottimizzazione di operazioni di ricerca (interrogazioni) query SQL viene tradotta in
una sequenza di operatori algebrici per l’accesso ai dati (algebra relazionale), cioè viene tradotta in linguaggio
matematico, programma viene riscritto in modo più efficiente per consumare meno memoria e poi avviene l’accesso
ai dati.
DBMS forniscono adeguate strutture dati per organizzare i dati all’interno dei file e per supportare le operazioni di
ricerca, aggiornamento, inserimento, modifica (operazioni CRUD). In genere, parliamo di strutture dati ad albero o
tabelle hash.
- CONCORRENZA: tutti DBMS sono pensati per far sì che più utenti o applicazioni vadano a lavorare/modificare stessi
dati in regime di concorrenza. La maggior parte dei DBMS forniscono un livello di granularità di locking più fine di
quello convenzionale (a livello di tabella, pagina, o singola entry). Se non gestisco concorrenza e più utenti effettuano
modifiche su stessi dati, posso ottenere output diversi, non desiderati e quindi eventualmente sbagliati. Per prevenire
tali situazioni, i DBMS implementano algoritmi di controllo della concorrenza che garantiscono che operazioni sui dati
concorrenti producano lo stesso risultato di un’esecuzione seriale. Per gestire la concorrenza si utilizzano LOCK
MANAGER = componente del DBMS responsabile di gestire i lock alle risorse del DB e di implementare le
transazioni.
- AFFIDABILITÀ: ci sono operazioni sui dati particolarmente delicate che devono essere gestite nella logica del tutto o
niente, o vengono eseguite tutte le operazioni o nessuna. Esempio: faccio trasferimento da un conto all’altro: prelevo
da un conto e incremento l’altro conto. Se bancomat va in crash mentre faccio queste operazioni? Cioè, prelevo da un
conto ma non fa l’operazione di versarli nell’altro conto. Quindi DBMS devono fornire strumenti per annullare
operazioni non completate e meccanismi di roll-back quindi che ripristino la situazione iniziale. In molti casi i DBMS
mettono a disposizione appositi strumenti ed algoritmi per garantire la persistenza dei dati anche in presenza di
malfunzionamenti hardware/software. Il controllore di affidabilità utilizza dei file di LOG, nei quali sono indicate tutte
le operazioni svolte dal DBMS. Algoritmi ad-hoc (es. algoritmo di ripresa a caldo/a freddo) per ripristinare lo stato dei
dati a partire dai LOG del DBMS.
- SICUREZZA: maggior parte dei DBMS implementa politiche di controllo degli accessi ai dati mediante sistemi di
permessi. Utenti diversi possono fare operazioni diverse sui dati. Più utenti possono usare dati ma in modo diverso,
con permessi diversi. Alcuni utenti possono vedere alcuni dati e altri no, avere permessi di lettura ma non di scrittura
ecc. →
Altra caratteristica dei DBMS è la SCALABILITÀ: dati spalmanti su più macchine Possibilità di gestire grandi moli di dati
aumentando il numero di istanze del DBMS presenti nel sistema (DATABASE DISTRIBUITO). Quasi tutti i sistemi informativi
hanno database distribuiti, ma in questo corso non li tratteremo.
ARCHITETTURA A LIVELLI
Un DBMS organizza i dati secondo 3 LIVELLI DI ASTRAZIONE COMPLEMENTARI:
1. LIVELLO/SCHEMA FISICO→descrive come i dati sono memorizzati su memoria secondaria: dove sono salvati e che
struttura dati ho usato per salvare i dati. Sviluppatore non vede queste funzionalità, può solo dare preferenze sulla
struttura dati da usare.
2. LIVELLO/SCHEMA LOGICO (più importante)→ descrive l’organizzazione logica dei dati: indica logicamente come
sono organizzati/rappresentati (dal punto di vista logico) i dati da parte del DBMS e le relazioni tra i dati. Inoltre,
definisce come l’utilizzatore del DBMS deve preparare i dati in modo che siano utilizzabili dal DBMS.
DBMS classificati in 4/5 famiglie in base al modello logico dei dati che supportano, ovvero a come richiedono che
devono essere classificati i dati:
Modello Relazionale (il più usato): dati strutturati in tabelle, con tutte le righe che hanno lo stesso numero di colonne.
Modello Gerarchico
Modello Reticolare
Modello ad Oggetti
Approcci NoSQL (ce ne sono diversi). 4
3. LIVELLO/SCHEMA ESTERNO (o delle viste)→ descrive come i dati
appaiono per un utente o un gruppo di utenti: consente di avere viste
personalizzate della stessa base di dati da parte di diversi
utenti/applicazioni→ specifica la sicurezza, quale porzione di dati è
visibile a ciascun utente.
PROPRIETÀ DI INDIPENDENZA TRA I LIVELLI: INDIPENDENZA MODELLO LOGICO – MODELLO FISICO
L’organizzazione logica dei dati non dipende dalle strutture dati usate per
→
l’effettiva memorizzazione degli stessi su disco applicazioni accedono al DBMS
specificando i concetti logici del modello dei dati, NON i dettagli relativi alla loro
memorizzazione.
INTERAZIONE CON UN DBMS
È possibile interagire con DBMS in 3 modi:
1. mediante INTERFACCIA GRAFICA
2. mediante LINGUAGGIO ORIENTATO AI DATI: DBMS prevedono linguaggio di programmazione (diverso dai linguaggi
interattivi come java) orientato ai dati che hanno caratteristica di implementare solo operazioni sui dati (inserire dato,
cancellare, ricercare, aggiornare, modificare) ma non posso scrivere software a sè stante, un’interfaccia grafica ecc. ì
Oppure usa linguaggio orientato ai dati, ma immerso all’interno all’applicazione.
3. LINGUAGGIO INTERNO per fare operazione piu efficiente e consuma meno tempo ma è nascosto al programmatore.
Quasi tutti i DBMS mettono a disposizione dei linguaggi:
- Definizione dello schema logico (Linguaggio DDL)
- Manipolazione delle istanze (Linguaggio DML)
Linguaggi orientati ad i dati, molto diversi da linguaggi di programmazione “tradizionali” (es. C/C++/Java/etc).
Noi vedremo il linguaggio (DDL+DML) SQL per il MODELLO RELAZIONALE.
Le applicazioni che si interfacciano con un DBMS:
- integrano codice delle operazioni sul DB (es. SQL) all’interno del loro codice, o di quello di una libreria/framework.
- utilizzano le API (fornite dal DBMS) per la connessione dati.
I DBMS NON sono tutti UGUALI, hanno differenze sostanziali, ad esempio in termini di: modello logico supportato (Es.
relazionale), linguaggio DDL/DML (SQL-2? SQL-3? varianti?), algoritmi di indicizzazione (es. R+ tree?), supporto alle transazioni
(es. proprietà ACID?), gestione della concorrenza, ecc.
Vantaggi nell’uso di DBMS: Quando usare un DBMS in un progetto SW?
- Necessità di gestire volumi consistenti di dati
- Necessità di costruire sistemi data-centric con molte operazioni di accesso ai dati
- Necessità di condividere dati, fornendo l’accesso a diversi sistemi SW/applicazioni
- Necessità di garantire la persistenza dei dati anche a fronte di possibili guasti e malfunzionamenti HW/SW
- Necessità di implementare meccanismi di sicurezza per l’accesso ad i dati in un ambiente multi-utente
Svantaggi nell’uso di DBMS: Quando NON usare un DBMS in un progetto SW?
- Pochi dati o persistenza non necessaria.
- Prestazioni: In alcuni sistemi con richieste di efficienza sull’elaborazione (es. real-time), l’overhead computazionale
introdotto dal DBMS può essere eccessivo …
- Costo: Spese per l’acquisto di DBMS, formazione del personale, amministrazione del DB, etc
- Complessità: Applicazioni/sistemi di dimensioni ridotte, o dispositivi hardware con risorse limitate (es. microcontrollori).
5
MODELLO RELAZIONALE
Abbiamo detto che i dati sono articolati su 3 LIVELLI DI ASTRAZIONE: esterno, logico e fisico.
Ora analizziamo il LIVELLO LOGICO che indica come logicamente devo organizzare i dati per poterli far gestire da un DBMS,
quale struttura dati logica devo usare per dare i dati al DBMS.
MODELLO LOGICO consiste in un:
- insieme di concetti per strutturare/organizzare i dati relativi ad un certo dominio d’interesse. Posso strutturare dati
attraverso grafi, oppure con strutture fisse o variabili.
- insieme di regole per modellare eventuali vincoli e restrizioni sui dati: definisce formalismo per esprimere se i dati
sono validi o no.
Regole e concetti generali per strutturare dati devono essere generici ed indipendenti dalla base di dati che ho in mente, che
andrò a realizzare, quindi le regole devono applicarsi qualsiasi sia il caso d’uso della banca di dati.
Proprietà (auspicabili) dei livelli in un DBMS:
• →interagire
INDIPENDENZA FISICA con il modello logico in modo indipendente dallo schema fisico.
• →
INDIPENDENZA LOGICA interagire con il livello esterno in modo indipendente dallo schema logico dei dati.
Esistono diversi modelli logici (non tanti, circa 10 modelli) quindi possono essere suddivisi in circa 10 classi di diversi modelli
logici. Noi ci concentriamo su 2 modelli:
1. MODELLO RELAZIONALE (più utilizzato) quello che andremo a spiegare ora.
2. MODELLO SCHEME-LESS
MODELLO RELAZIONALE è il più usato e datato, proposto nel 1970 da Codd. Molto usato perché ha tante caratteristiche
accattivanti:
- è modello generale che si può applicare nella maggior parte dei casi in cui devo costruire una base di dati (cioè è il più
efficiente)
- è intuitivo e si basa su nozioni di algebra di base quindi ha basi matematiche
- garantisce indipendenza tra i livelli (esterno e fisico) quindi come strutturo i dati è indipendente da come il DBMS
strutturerà fisicamente i dati per la memorizzazione ecc.
Intuizione che c’è dietro: se voglio organizzare dati per farli gestire da DBMS devo strutturarli in record di dimensione fissa,
quindi a modi di tabella: righe e colonne, tutte righe stesso numero di colonne. La ta
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.
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.