Informatica
Database (base di dati) 🗂️
Di che cosa ci occupiamo? Di raccogliere, organizzare e conservare dei dati (milioni di dati).
La gestione di grandi e persistenti quantità di dati può avvenire attraverso l’utilizzo di file 📁 (file system) o attraverso DBMS (Data Base Management System).
Il DBMS gestisce quantità di dati che sono:
- grandi (milioni di dati)
- persistenti (reperibili successivamente)
- condivise
- garanti di riservatezza
- efficienti
- efficaci
Ciclo di vita di un sistema informativo
- Studio di fattibilità → analisi dei costi e delle alternative possibili
- Analisi dei requisiti → analisi dei requisiti hardware e software
- Progettazione
- progettazione concettuale
- progettazione logica
- progettazione fisica
- Attuazione con eventuali revisioni e correzioni
- Funzionamento
Progettazione concettuale → Modello E-R (Entità - Relazione)
Costrutti principali:
- Entità → attraverso l’entità si rappresenta una categoria di soggetti che hanno vita propria.
- Relazione o Associazione → una relazione associa due o più entità e si rappresenta attraverso il rombo.
- Attributi di entità e relazioni → descrivono le caratteristiche di un'entità o di una relazione
Esempio modello E-R
Componenti
Tipi di relazione
La relazione è il legame fra due o più entità e ne esistono di 3 tipi:
- Relazione 1-1: definisce un legame tra le occorrenze di due entità di tipo uno ad uno
- Relazione 1:n: lega ciascuna occorrenza di un’entità con più occorrenze di un’altra entità
- Relazione n:m; lega più occorrenze di un’entità a più occorrenze di un’altra entità
Cardinalità
CARDINALITA’ MINIMA:
- 0 → partecipazione opzionale
- 1 → partecipazione obbligatoria
CARDINALITA’ MASSIMA:
- 1 → massimo 1 partecipante
- n → più partecipanti
Generalizzazioni
Rappresentazione:
Relazione IS-A: Come può essere?
- TOTALE O PARZIALE
- TOTALE: si verifica quando nella relazione i figli rappresentano completamente l’entità padre (Es: persona → uomo e donna).
- PARZIALE: si verifica quando nella mia relazione i figli rappresentano solo parzialmente l’entità padre (Es: persona → studente e lavoratore). In questo esempio una persona può essere né uno studente né un lavoratore.
- ESCLUSIVA O SOVRAPPOSTA
- ESCLUSIVA: si verifica quando un elemento del padre può essere attribuito solamente ad un’entità figlia (Es: persona → uomo e donna). Una persona può essere solo uomo o donna.
- SOVRAPPOSTA: si verifica quando un elemento del padre può essere attribuito a due o più entità figlie (Es: persona → studente e lavoratore). In questo esempio uno studente può essere anche un lavoratore.
Anomalie ⚠️
nome_dip | nome_prog | stipendio | budget | ruolo |
---|---|---|---|---|
Rossi | Marte | 2200 | 50000 | responsabile |
Rossi | Mercurio | 2200 | 70000 | collaboratore |
Verdi | Marte | 2300 | 50000 | collaboratore |
Neri | Marte | 2400 | 50000 | collaboratore |
ANOMALIE:
- di inserimento: posso inserire i dati del dipendente solo se partecipa ad un progetto perché la chiave è composta da nome_dip + nome_prog.
- di cancellazione: se un dipendente termina la sua collaborazione con un progetto devo cancellare tutta la tupla (riga).
- di aggiornamento: se varia un campo (ES: stipendio) devo aggiornare tutte le tuple nelle quali è presente.
Analisi delle ridondanze
Ci sono vari tipi di ridondanze:
- derivabili da operazioni tra attributi della stessa entità/relazione
- derivabili da operazioni tra attributi di entità/relazioni diverse
- derivabili da operazioni di conteggio
La presenza di ridondanze porta a vantaggi e svantaggi
👍🏼 Vantaggi
- riduce al minimo gli accessi necessari per calcolare la variabile ridondante
👎🏼 Svantaggi
- occupazione di memoria
- aumenta gli accessi per aggiornare il dato ridondante
Normalizzazione
Normalizzazione classica
La normalizzazione è un procedimento che ha come obiettivo l’eliminazione di ridondanze e inconsistenze (anomalie).
Ridondanza = presenza di dati ripetuti
Anomalia:
- di aggiornamento: se viene modificato il budget del progetto p1 si devono aggiornare più dati;
- di inserimento: se un nuovo impiegato non partecipa ad un progetto non lo posso inserire;
- di cancellazione: se un dipendente termina la partecipazione a tutti i progetti perde l’informazione relativa al suo stipendio.
codice imp. | stipendio | progetto | budget | ruolo |
---|---|---|---|---|
i1 | 1000 | p1 | 10000 | impiegato |
i1 | 1000 | p2 | 20000 | impiegato |
i2 | 3000 | p1 | 10000 | amministratore |
i3 | 2500 | p1 | 10000 | analista |
Livelli di Forma normale
1 Forma normale (1NF)
Uno schema è in 1NF solo se ogni attributo è espresso in forma atomica (non ulteriormente scomponibile.
2 Forma Normale (2NF)
Uno schema è in 2NF solo se:
- è in 1NF;
- tutti i campi non chiave dipendono funzionalmente dalla chiave intera e non da una parte di essa.
3 Forma Normale (3NF)
Uno schema è in 3NF solo se:
- è in 2NF;
- ogni attributo non chiave dipende dalla chiave in forma diretta e non transitiva.
Normalizzazione di Boyce-Codd
Dipendenza funzionale: vincolo di integrità che esprime una dipendenza di tipo funzionale tra attributi di una relazione (tabella).
matricola | nome | cognome | materia | docente | voto |
---|---|---|---|---|---|
m1 | Aldo | Paoli | matematica | Rinaldi | 25 |
m2 | Luigi | Neri | matematica | Rinaldi | 26 |
m3 | Anna | Neri | chimica | Rossi | 25 |
m4 | Ada | Rinaldi | chimica | Rossi | 27 |
m1 | Aldo | Paoli | economia | Baldi | 30 lode |
Dipendenze funzionali:
→ matricola → (nome, cognome)
matricola → nome
matricola → cognome
→ materia → docente
→ matricola, materia → voto
Una relazione R è nella forma normale di Boyce-Codd se per ogni dipendenza funzionale X→Y, X è chiave di R.
Possiamo notare che questa tabella non è normalizzata secondo Boyce-Codd.
Progettazione logica → Modello logico
Per passare dal modello concettuale al modello logico bisogna effettuare alcune operazioni:
ENTITÀ
ENTITÀ
Bisogna eliminare tutti gli attributi composti
Dipendente (matricola, nome, cognome, cap, via, civico)
RELAZIONE M-N
RELAZIONE M-N
Bisogna specificare i legami con il vincolo di integrità referenziale
Studente (matricola, nome, cognome)
Materia (nome, descrizione)
Esame (matricola, materia, data, voto)
con v.i.r. di matricola con matricola di Studente
con v.i.r. di materia con nome di Materia
RELAZIONE 1-N
RELAZIONE 1-N
Bisogna specificare i legami con il vincolo di integrità referenziale
Preside (c.f., cognome, nome)
Studente (matricola, nome, cognome, preside)
con v.i.r. di preside con c.f. di Preside
RELAZIONE 1-1
RELAZIONE 1-1
- con cardinalità minima = 1
Presidente (codP, nome, cognome) Stato (sigla, nome, popolazione, presidente) con v.i.r. di presidente con codP di Presidente
- con cardinalità minima = 0
Persona (c.f., nome, cognome) Auto (targa, modello, colore, proprietario) con v.i.r. di proprietario con c.f. di Persona
– In questo caso abbiamo messo il codice fiscale di Persona all’interno di Auto poiché un’auto ha sempre un proprietario. Se avessimo fatto il contrario il campo targa messo dentro a Persona sarebbe potuto essere risultato vuoto per alcune tuple.
- con entrambe le cardinalità minime = 0
Impiegato (c.f., cognome, nome) Dipartimento (codD, nome, descrizione, impiegato) con v.i.r. di impiegato con c.f. di Impiegato
– In questo caso abbiamo inserito la chiave di Impiegato dentro Dipartimento poiché ipotizziamo abbia meno tuple.
ENTITÀ DEBOLI (con chiave esterna):
ENTITÀ DEBOLI (con chiave esterna):
Università (nome, città, anno)
Studente (matricola, uni, nome, cognome)
con v.i.r. di uni con nome di Università
RELAZIONE IS-A
RELAZIONE IS-A
Devo prima ristrutturare la relazione IS-A
- Ristrutturazione alla Superclasse (all’entità padre)
In questo caso rimane solo l’entità padre che assorbe gli attributi e le relazioni delle entità figlie e aggiunge un campo per distinguerle.
- Ristrutturazione alle Sottoclassi (alle entità figlie) In questa ristrutturazione rimangono solo le entità figlie che assorbono chiave e attributi dell’entità padre.
- Ristrutturazione ad Entità deboli
In questa ristrutturazione rimangono tutte le entità ma le figlie prendono dal padre chiave e attributi. La ristrutturazione ad entità deboli è sempre possibile ed è consigliabile utilizzarla quando le entità figlie sono fortemente specializzate.
Progettazione fisica → Modello fisico
Il modello fisico si attua attraverso il linguaggio 🗂️SQL
Programmazione delle pagine web principali
La programmazione delle pagine web principali di un applicativo può essere effettuata attraverso diversi linguaggi. Noi abbiamo utilizzato 💻PHP.
💻PHP è un linguaggio utilizzato per la programmazione di pagine web dinamiche.
Transazioni
Una transazione è un’unità logica di elaborazione che corrisponde a una serie di operazioni fisiche elementari (letture/scritture) sul DB.
Esempi:
In entrambi i casi tutte le operazioni elementari devono essere eseguite.
ACID
L’acronimo ACID indica le 4 proprietà che il DBMS deve garantire che valgano per ogni transazione
- Atomicity = una transazione è un’unità di elaborazione Il DBMS garantisce che la transazione venga eseguita come un tutt’uno
- Consistency = una transazione lascia il DB in uno stato consistente Il DBMS garantisce che nessuno dei vincoli di integrità del DB venga violato
- Isolation = una transazione esegue indipendentemente dalle altre Se più transazioni eseguono in concorrenza, il DBMS garantisce che l’effetto netto è equivalente a quello di una qualche esecuzione sequenziale delle stesse.
- Durability = gli effetti di una transazione che ha terminato correttamente la sua esecuzione devono essere persistenti nel tempo Il DBMS deve proteggere il DB a fronte di guasti
Esiti di una transazione
Nel modello considerato una transazione (il cui inizio viene indicato nel seguito dalla parola chiave BEGIN
, anche se in SQL è implicito)
può avere solo 2 esiti:
- Terminare correttamente:
Questo avviene solo quando l’applicazione, dopo aver eseguito tutte le proprie operazioni, esegue una particolare istruzione SQL, detta
COMMIT
(oCOMMIT WORK
), che comunica “ufficialmente” al Transaction Manager il termine delle operazioni.
- Terminare non correttamente (anticipatamente)
- È la transazione che, per qualche motivo, decide che non ha senso continuare e quindi “abortisce” eseguendo l’istruzione SQL
ROLLBACK
(oROLLBACK WORK
).
- È il sistema che non è in grado (ad es. per un guasto o per la violazione di un vincolo) di garantire la corretta prosecuzione della transazione, che viene quindi abortita.
- È la transazione che, per qualche motivo, decide che non ha senso continuare e quindi “abortisce” eseguendo l’istruzione SQL
Se per qualche motivo la transazione non può terminare correttamente la sua esecuzione il DBMS deve “disfare” (UNDO
) le eventuali modifiche da essa apportate al DB.
Esecuzione seriale di transazioni
Un DBMS, dovendo supportare l’esecuzione di diverse transazioni che accedono a dati condivisi, potrebbe eseguire tali transazioni in sequenza (“serial execution”). Ad esempio, due transazioni T1 e T2 potrebbero essere eseguite in questo modo, in cui si evidenzia la successione temporale (“schedule”) delle operazioni elementari sul DB:
Possibili errori
Lost update
Il seguente schedule mostra un caso tipico di lost update, in cui per comodità si evidenziano anche le operazioni che modificano il valore del dato X e si mostra come varia il valore di X nel DB.
Il problema nasce perché T2 legge il valore di X prima che T1 (che lo ha già letto) lo modifichi (“entrambe vedono l’ultimo biglietto”).
Dirty Read
In questo caso il problema è che una transazione legge un dato “che non c’è”:
Unrepeatable read
Ora il problema è che una transazione legge due volte un dato e trova valori diversi (“il prezzo nel frattempo è aumentato”):
Riassumendo
Una transazione è un’unità logica di elaborazione che, nel caso generale, si compone di molte operazioni fisiche elementari che agiscono sul DB.
Le proprietà di cui deve godere una transazione si riassumono nell’acronimo ACID (Atomicity, Consistency, Isolation, Durability)
Isolation richiede che venga correttamente gestita l’esecuzione concorrente delle transazioni.
Consistency è garantita dal DBMS verificando che le transazioni rispettino i vincoli definiti a livello di schema del DB.
Fonti
- Riassunto Fragonas
- Transazioni
- Altre pagine