Skip to content

Commit

Permalink
vault backup: 2025-01-31 18:46:12
Browse files Browse the repository at this point in the history
  • Loading branch information
AglaiaNorza committed Jan 31, 2025
1 parent 0b1e722 commit cc26b48
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
11 changes: 8 additions & 3 deletions basi di dati 1/18 - Il controllo della concorrenza.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,25 @@ ACID
### schedule seriale

> [!info] schedule seriale
> Uno schedule seriale corrisponde ad una **esecuzione sequenziale** (non interfogliata) delle transizioni (ogni transazione entra ed esce solo una volta finita).
> Uno schedule seriale corrisponde ad una **esecuzione sequenziale** (non interfogliata) delle transazioni (ogni transazione entra ed esce solo una volta finita).
> (è quindi una permutazione delle transazioni in $T$)
- tutti gli schedule seriali sono corretti
## problemi
Visto che quando un item viene letto, esso viene portato nella memoria centrale in uno *spazio privato* della singola transazione, possono nascere una serie di problemi.
- se un'altra transazione leggerà lo stesso dato, lo porterà nella sua propria zona di memoria - avremmo quindi due copie dello stesso dato che verranno modificate, e potremmo avere dati sbagliati (una sovrascriverà l'altra)

I possibili problemi sono:
- **ghost update**
- **dato sporco**
- **aggregato non corretto**

### ghost/lost update
Avviene quando si perde un aggiornamento di un dato.

>[!example] esempio
>Abbiamo due transazioni, $T_{1},\,T_{2}$
>
>![[transazioni-es.png|center|350]]
>
>Consideriamo il seguente schedule:
Expand All @@ -55,7 +61,7 @@ Avviene quando un valore è il risultato di una transazione fallita (che va quin
> [!example] esempio
> ![[dato-sporco.png|center|200]]
>
> A causa dell'atomicità delle transazioni, se $T_{1}$ fallisce, il valore di $X$ deve essere riportato a quello iniziale (quindi il `write` di $T_{2}$ dovrebbe dare risultato $X_{0}+M$ - ma, visto che $T_{2}$ ha usato il dato sporco prima del fallimento di $T_{1}$, il risultato sarà $X_{0}-N+M$
> A causa dell'atomicità delle transazioni, se $T_{1}$ fallisce, il valore di $X$ deve essere riportato a quello iniziale (quindi il `write` di $T_{2}$ dovrebbe dare risultato $X_{0}+M$ - ma, visto che $T_{2}$ ha usato il dato sporco prima del fallimento di $T_{1}$, il risultato sarà $X_{0}-N+M$)
### aggregato non corretto
Avviene quando l'ordine delle operazioni fa sì che alcuni dati vengano processati dopo le operazioni che li richiedono.
Expand All @@ -74,7 +80,6 @@ Uno schedule non seriale è corretto se è **serializzabile**, ovvero se è *equ
Due schedule sono equivalenti se:
- (per ogni dato modificato) *producono valori uguali*
- e due valori sono uguali solo se sono prodotti dalla *stessa sequenza di operazioni*
- ovvero se ho lo stesso ordine di accesso agli stessi item di almeno uno schedule seriale

>[!question]- perché non basta che siano uguali?
>
Expand Down
13 changes: 10 additions & 3 deletions basi di dati 1/7 - terza forma normale.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,10 @@ Siano R uno schema di relazione e F un insieme di dipendenze funzionali su R.
>(quindi, invece di $X$ superchiave ho $X$ primo - è contenuto invece di contenere - non è rispettata la 3NF)
>>[!example]- esempio
>>
>>Per esempio, nella relazione $$\text{Curriculum(Matr, CF, Cogn, Nome, DataN, Com, Prov, C\#, Tit, Doc, DataE, Voto)}$$
>>Per esempio, nella relazione
>>
>>$$\text{Curriculum(Matr, CF, Cogn, Nome, DataN, Com, Prov, C\#, Tit, Doc, DataE, Voto)}$$
>>
>>(con $Matr, C\#$ chiave), abbiamo $Matr\to Cogn$.
>>
>>Quindi, ad una coppia numero di matricola-codice corso, corrisponde un solo cognome: $(Matr, C\#)\to Cogn$ - l'attributo $Cogn$ *dipende parzialmente* dalla chiave $Matr, C\#$, perché è la conseguenza di $Matr\to Cogn$ (e $Matr$ è contenuto propriamente in una chiave)
Expand All @@ -112,6 +115,7 @@ Siano R uno schema di relazione e F un insieme di dipendenze funzionali su R.
>>[!example]- esempio
>>
>>$$\text{Studente (Matr, CF, Cogn, Nome, Data, Com, Prov)}$$
>>
>>con $Matr$ chiave
>>
>>Abbiamo $Matr\to Com$ e $Com\to Prov$.
Expand Down Expand Up @@ -168,11 +172,11 @@ entrambi sono in 3NF, ma il secondo *non è soddisfacente*.
> [!question] perché?
> Consideriamo due istanze legali degli schemi ottenuti:
>
> ![[3nf-non-basta.png]]
> ![[3nf-non-basta.png|center|350]]
>
> - l'istanza dello schema originario R che posso ricostruire (con il join naturale) è:
>
> ![[3nf-non-basta2.png|300]]
> ![[3nf-non-basta2.png|center|300]]
>
> - questa non è però un'istanza legale di R, perché non soddisfa la dipendenza funzionale $B\to C$
Expand All @@ -181,8 +185,11 @@ entrambi sono in 3NF, ma il secondo *non è soddisfacente*.
>[!example]- esempio
>consideriamo lo schema
>
>$$\text{R = (Matricola, Comune, Provincia)}$$
>
>$$F=\{Matricola\to Comune,\, Comune\to Provincia\}$$
>
>(con chiave $Matricola$)
>non è in 3NF a causa della dipendenza transitiva $Comune\to Provincia$.
>
Expand Down

0 comments on commit cc26b48

Please sign in to comment.