Sei sulla pagina 1di 15

DB

Tecnologia che consiste in raccolta di dati organizzati in una maniera da agevolare la


manipolazione di questi ultimi.

Progettazione divisa in 4 fasi:


1) analisi dei requisiti: si analizzano le richieste dei clienti e la realtà che ruota attorno
al progetto chiamata minimondo.
Lo scopo di questa fase è stilare un riassunto dei bisogni e delle richieste del cliente
utilizzando anche grafici (flowchart e gantt) per organizzare meglio la distribuzione del
lavoro in modo da rendere più facile e fluido il processo.
2) progettazione concettuale: analisi, generalizzazione e unificazione di concetti
estrapolati dalla realtà analizzata al fine di realizzare il modello concettuale (schema grafico
che rappresenta i soggetti che descrivono la realtà e i loro legami logici).
Il progettista del database può e in certi casi deve (applicazioni troppo specifiche dove non conosce
l’ambiente) discutere con il cliente le eventuali modifiche, correzioni, migliorie da
apportare al modello concettuale (anche se farà un po' da solo cercando su internet).
Due tipi fondamentali:
-ER (Entity Relationship, entità-relazioni)
-UML (UNIFIED MODELLING LANGUAGE)
si basano sugli stessi concetti e servono entrambi a rappresentare concettualmente la struttura
di una DB ma differiscono per le simbologie grafiche.
Questo modello è indipendente dai valori dei dati e dalle applicazioni che permettono interazioni
con i dati.
3) progettazione logica: processo che produce il modello logico a partire dal modello
concettuale.
È lo schema che rappresenta il minimondo mediante le strutture previste dal tipo di DB
usato.
Il modello logico è indipendente dalle applicazioni usate e dall’implementazione fisica.
4) Progettazione fisica: in questa fase ci si occupa della memorizzazione dei dati sulla
memoria di massa (implementazione fisica dei database) e ha come fine quello di
produrre lo schema fisico.

Organizzazione
(INFO utili per capire il resto)
- Un dato: è un aspetto della realtà considerata a cui è assegnato un valore ma che
non ha necessariamente un significato (marco, rossi, 5,f presi da soli e decontestualizzati
sono dei dati).
- Informazione: dato che ha un significato (marco rossi studente della classe 5f è una info).
1)Sistema organizzativo: insieme di risorse coordinate necessarie per svolgere attività
di una organizzazione.
2)Sistema informativo: sottosistema di un sistema organizzativo che si occupa della
gestione dei dati (memorizzazione, aggiornamento, cancellazione e consultazione).
3)Sistema informatico: è la parte del sistema informativo che usa dispostivi
informatici.
Entità debole: non ha attributi sufficienti per stabilire una chiave primaria e
quindi fa ausilio di attributi di altre tabelle che combinate con uno o più di quelli presenti in essa
formeranno la chiave
primaria.

(matricola non può essere chiave perché diverse università potrebbero avere la stessa matricola)

Modello E-R
modello concettuale che si basa su tre costrutti:
1) Entità: L’entità è un’astrazione di un elemento della realtà esaminata definita da un
nome e da caratteristiche (attributi).
Quando si assegnano valori alle caratteristiche di un’entità, si fa riferimento ad un soggetto preciso
della realtà che prende il nome di istanza dell’entità (lo studente Mario Rossi è un’istanza dell’entità
studente)
2)Attributi: gli attributi sono le caratteristiche comuni alle istanze di un’entità.
Hanno 3 proprietà:
-a tipo: un attributo può essere numerico, carattere, data/ora(può essere solo data nel
formato aaaa mm-dd , esempio 2022-09-17, può essere solo ora hh:mm:ss , esempio 10:26:53 e data
e ora 2022-09-17 10:26:53)
-b La dimensione: ovvero il numero delle cifre o dei caratteri
-c Opzionalità: Ovvero si stabilisce se l’attributo deve avere un valore o può non
averlo ( in questo caso si può non impostare il valore e verrà automaticamente impostato a null;
numeropatente è opzionale perché non può essere attribuito ad un dodicenne o perché non è
momentaneamente reperibile per smarrimento)
3) Associazione/ relazione: legame logico tra due o più entità
Automobilista – possesso/ possiede – Automobile
le entità possono essere rappresentate in forma tabellare:
- l’istanza: di un’entità se rappresentata in forma tabellare è una riga della tabella.
-Una superchiave: di un’entità è un insieme di attributi che identificano
univocamente un’istanza dell’ entità (non esistono due istanze diverse dell’entità che
presentano gli stessi valori degli attributi della superchiave).
Una superchiave esiste sempre ed è quella formata da tutti gli attributi .
-Una chiave candidata: è una superchiave con un numero minimale di attributi
(ovvero
a cui non si può togliere nemmeno un attributo ed avere comunque una superchiave).
-La chiave primaria: è la chiave candidata scelta dal progettista.
La chiave primaria non può essere nulla (ovvero deve necessariamente avere un
valore). La chiave primaria in inglese è primary key e può essere indicata con due
notazioni:
telefono
telefono(pk).
potrebbe essere formata anche da più attributi:
Tabella volo
sigla dataOra numPasseggeri nomeComandante
AZ24 … …… Giorgio Giorgi

Nomecomandante è un attributo composto, ovvero formato da più attributi:


Se di ogni comandante voglio archiviare più informazioni, il procedimento migliore non è
aggiungere altre colonne perché ci sarebbero dati ripetuti più volte (ridondanza) e quindi probabile
incoerenza (ovvero valori diversi per lo stesso dato); è preferibile invece creare una nuova entità,
l’entità comandante in cui inserire i dati dei comandanti.
Comandante
codFisc nome cognome eta oreDiVolo

Per collegare le 2 tabelle devo inserire la chiave primaria di comandante nella tab voli.
Una chiave esterna: è l’attributo o l’insieme degli attributi di una tabella A che è
chiave primaria di una tabella B. La tabella A è chiamata tabella referenziante
mentre la B è chiamata referenziata.
La chiave esterna non è univoca, ovvero nella tabella referenziante un valore della chiave
esterna può essere ripetuto più volte.
Nell’esempio del prof c’è un valore della chiave esterna che non è presente tra i valori della chiave
primaria (si fa riferimento ad un comandante che non esiste nella tabella comandanti)
per evitare questi problemi si introduce il vincolo di integrità referenziale, ovvero il vincolo che
impone che tutti i valori della chiave esterna siano presenti tra i valori della chiave primaria
collegata.

il vincolo di integrità referenziale: è un vincolo interrelazionale (ovvero è un vincolo


che riguarda + tabelle)
in generale ci sono 2 tipi di vincoli:
- interrelazionale: riguarda + tabelle
-intrarelazionale: riguarda una singola tabella e può essere di 2 tipi:
a) vincolo di dominio: riguarda un solo attributo della tabella
b) vincolo di tupla: riguarda 2 o + attributi
es:
esame
cod voto lode
es1 32 no
es2 24 si

nel primo caso viene violato il vincolo di dominio: bisognorebbe impostare il vincolo in maniera
tale da avere voto <31
(dominio insieme dei valori dell’attributi)

nel secondo : voto<30 lode:no

Gli attributi possono esser composti (possono essere scomposti):


es indirizzo (via, civico, complesso, piano…)
gli attributi multivalore: sono attributi che possono assumere +valori come as
esempio la lingua parlata.

Un attributo si dice atomico se non può essere scomposto in +attributi

una relazione si dice binaria se collega 2 entità e può essere di 3 tipi:


1) 1 a 1 (1:1): è il legame logico tra 2 entità in cui ad ogni elemento della prima
corrisponde al +(probabile: solo un elemento...) un elemento della seconda entità e
viceversa
Città (0,1) --- capitale --- (1,1) stato
una città può non essere capitale (0) ma al limite è capitale di un solo stato (1, eccetto per casi
particolari in cui ci sono +capitali diverse)
mentre uno stato ha perforza una capitale (1) ed è soltanto una.
2)Relazione 1 a molti (si indica 1:n): è la relazione binaria tra due entità in cui
esiste almeno un elemento della prima entità che è collegato a più elementi della
seconda entità ed in ogni elemento della seconda entità è collegato al massimo ad un elemento
della prima entità.
Classe (1,n)--- iscrizione --- (1,1)studente.
3)Relazione molti a molti (si indica n:n o n:m): è la relazione binaria tra due
entità in cui esiste almeno un elemento della prima entità che è collegato a più
elementi della seconda entità e viceversa.
Docente (1,n)--- insegnamento ---(1,n) studente

In una relazione binaria la cardinalità: è una coppia di duple in cui la prima dupla
contiene il numero minimo ed il numero massimo di elementi della seconda entità collegati ad un
elemento della prima entità e la seconda dupla contiene il numero minimo ed il numero massimo di
elementi della prima entità collegati ad un elemento della seconda entità.

L’entità (nel modello ER pk c’è anche UML) sono rappresentate da rettangoli al cui
interno vi è il nome dell’entità. Gli attributi dell’entità sono rappresentati da segmenti che
terminano con un cerchio ed il nome dell’attributo. Se l’attributo è chiave primaria il cerchio è
pieno.
Se la chiave primaria è formata da più attributi si collegano gli attributi (si intersecano le loro linee)
con un segmento e si pone il pallino pieno su questo segmento.
La cardinalità di un attributo multivalore: è la coppia indica il numero minimo e
massimo di valori.

La chiave candidata di un’entità (forse istanza): nel modello E-R prende il nome di
identificatore. Le associazioni o relazioni non hanno mai identificatore mentre
possono avere attributi.

Quando in una entità, c’è un insieme di attribuiti dell’entità valorizzabili in un


certo insieme di istanze e che non sono valorizzabili nelle altre istanze dell’entità, è preferibile
considerare una sottoentità che contiene tale istanze. In questo caso si parla di
generalizzazione o entità padre e specializzazione (entità figlia). Supponiamo di voler
progettare il modello concettuale di un circolo sportivo in cui ogni socio ha un nome, un cognome,
un numero di telefono ed eventualmente il numero di goal fatti, il ruolo, il colpo preferito, tipo di
racchetta.

In un modello concettuale di questo tipo vi sono istanze (soci del circolo) che hanno attributi non
valorizzabili( tennista non ha né ruolo né numgol valorizzabili). In questo caso è preferibile dividere
l’entità in due sottoentià, la sottoentità tennista, la sottoentità. Socio verrà chiamata
generalizzazione o entità padre. Le sottoentità tennista e calciatore verranno chiamate
specializzazioni o entità figlie.
Le entità figlie ereditano associazioni e attributi dell’entità padre ma hanno
attributi propri e possono avere associazioni proprie.
Attributi: nome
cognome telefono (pk
Socio anche dei figli

(p,s)

colpo NumGoal
Tennista calciatore
racchetta Ruolo

La copertura di una generalizzaione: è una coppia (t/p, e/s), ove t sta per totale, p
sta per parziale, e sta per esclusivo e s sta per sovrapposto e fa riferimento
all’unione delle istanze dell’entità figlie (quindi è totale se l’unione è l’intera entità padre,
parziale nell’altro caso) e all’intersezione dell’entità di figlie (ed è esclusiva se l’intersezione è
vuota, spovrapposta nell’altro caso)
Si parla di sottoinsieme di un’entità: del modello E-R quando dell’entità si
individua una sola sottoentità figlia.

Si parla di relazione (rare, e preferibilmente evitabili) ternaria: quando le entità


logicamente legate sono tre e ogni elemento di ciascuna entità può essere legato a
1 o più coppie di elementi formate da elementi delle altre due entità. Supponiamo di
voler progettare il modello concettuale relativo ad un database che contiene informazioni sugli
studenti e sugli esami superati dagli studenti. In questo caso avrei due entità ed una relazione
binaria.

Supponiamo di voler creare il modello E-R relativo ad un database che gestisca la fornitura di
prodotti da parte di venditori ad un’azienda che è suddivisa in dipartimenti. In questo caso può
essere utile considerare una relazione ternaria (ad esempio il venditore A fornisce la stampante S100
al dipartimento magazzino, quindi A è legato alla coppia (S100, magazzino), il venditore B fornisce
il pc HP3 al dipartimento produzione, quindi B è legato alla coppia (HP3, produzione)).
Dipartimento(0,n) --- fornitura --- (0,n)prodotto
|
venditore(0,n) (questi 0 possono essere discussi)

Una relazione ricorsiva: è una relazione che lega istanze della stessa entità e
generalmente si usa se vi è una gerarchia (un persona può essere genitore ma è anche
figlio di qualcuno).

Genitore di
persona Figlio di

*dat i numerici in sql: https://www.mrw.it/mysql/tipi-dati-mysql-dati-numerici_9724.html


*Scaricare guidaMySQLWidnows a corso uni torino
*guardare video su YT, usare e cercare con chat GPT
*guardare le query messe su classroom, sul cell, e su Ipad

definition query manipulation control transaction

Il linguaggio SQL
il linguaggio sql (structured query lenguage) è un linguaggio di programmazione che permette di
creare, modificare aggiornare e interrogare (ricercare informazioni) un database.
Può essere considerato come l’unione di più sottolinguaggi:
-DDL (data definition lenguage): è l’insieme delle istruizoni che permettono di creare il
database
Esempi:
1- Create Table nomeTabella( nomeAttributo tipoAttributo …)
2- Alter Table nomeTabella Add nomeAttributo tipoAttributo
3- Drop Table NomeTabella (per eliminare una colonna si fa alter table … drop column nome
colonna, presenta però dei rischi/ complicanze se gestita male perché porta alla cancellazione
irrevocabile di tutti i valori e dati al suo interno e può avere ripercussioni sugli altri attributi e
talvolta su altre tabelle)
(per eliminare una riga si fa delete from nome tabella where...)

-DML (data manipulation lenguage): è l’insieme delle istruizoni che permettono di


manipolare il database
1- INSERT INTO NOMETABLE(nomeAttributo1, nomeAttributo2,Attributo3....)VALUES(......);
2- UPDATE nometabella set nomeattributo =valoreattributo where....;

-DQL (data query lenguage): insieme delle istruzioni che permettono di effettuare
interrogazioni sul database
SELECT...
FROM
WHERE
(GROUP BY)
(HAVING)

-DCL (data control lenguage): è l’insieme delle istruzioni che permettono di gestire i permessi
dei diversi utenti in relazoine all’uso del DB
Un problema molto frequente durante la fase di progettazione di DB è il dover assegnare privilegi o
permessi limitati a particolari utenti o categorie
in MySQL (DBMS) avviene tramite:

GRANT (concessione di privilegi): permette oltre a gestire e consentire permessi, di creare


nuovi utenti.
Sintassi:
GRANT <istruzioni_consentite>: statement che vogliamo permettere (CREATE, SELECT,
UPDATE, DELETE, ALTER) se si vogliono dare tutti i permessi si utilizza KEY WORD ‘ALL’

ON <DB> (nome db in considerazione, quello con cui stiamo lavorando) .<TABELLA> (tabella in
considerazione, se si vogliono includere tutte le tabelle è possibile farlo aggiungento carattere ‘*’

TO <USER> (specifica il nome dell’utente che vogliamo creare)@<HOST> (specifica gli host a cui
è ammmessa la connessione (XAMPP, UNIFORM_SERVER: almeno credo) )

IDENTIFIED BY <PASSWORD> (psw associata all’user che stiamo creando, va scritta in chiaro,
se si vuole utilizzare la funzione di SQL che permette di salvare la psw in maniera criptata bisogna
far precedere la stringa dalla parola PASSWORD);
Immaginiamo di dover gestire un database per un cinema, e che il cinema voglia che gil accessi al
database avvengano solo da utenti di questi 3 tipi:
-Root: è l’utente a cui tutto è permesso, può leggere e modificare i dati dalle table inserire
nuove tuple...
-Amministratori (admin): possono inserire, leggere, modificare o cancellare i dati però
non gli è concesso creare nuove tabelle, + nello specifico non possono alterare la struttura del DB
(no Alter, no Drop)
-Statisti: sono gli utenti con accesso in lettura a tutto il DB ma non hanno i permessi di
scrittura e modificando

root
GRANT ALL
ON Cinema.*
TO (tutto attaccato) cinemaRoot chiocciola hostLocale (il suffisso localhost è una sorta di
controllo di sicurezza (+ una verifica e specifica che le connessioni dall’utente possono essere
accettate solo se provenienti da localhost ovvero dalla macchina locale, è inoltre possibile
specificare un indirizzo IPv4 on un range), se si vuole consenti di assegnare ad un utente certi
permessi da parte di tutti gli host si deve mettere il carattere jolly: %
IDENTIFIED BY PASSWORD '*6C8989366EA95CEF4';

Admin
GRANT SELECT, INSERT, UPDATE, DELETE
ON Cinema.*
TO 'cinema_admin'
IDENTIFIED BY 'admin_pass';

Statisti
GRANT SELECT
ON Cinema.*
TO 'cinema_stat'
IDENTIFIED BY 'statista_pass';

REVOKE (revoca di privilegi)


REVOKE <istruzioni_revocate>
ON <database>.<tabella>
FROM <utente>;
(valgono le stesse regole per GRANT)

-TCL (transaction control lenguage): è l’insieme delle istruzioni che riguardano transazioni
del database
Operatori relazionali
un operatore relazionale è un operatore che dati in input una o più relazioni (ovvero tabelle)
restituisce in output una relazione (tabella)

si dividono in:
- unari (ovvero che agiscono su una singola relazione ovvero tabella)
esempi di operatori unari sono
1- proiezione: operatore unario che data una tabella restituisce una tabella formata dalle stesse righe
della tabella precedente ma da un sottoinsieme delle sue colonne
EX: tabella studente
Matricola Nome Cognome eta votoMedio anno sezione
Proiezione studente
Matricola Nome Cognome Eta
(in questo caso la tabella risultante avrà la stessa cardinalità (numero righe) ma grado diverso (num
colonne).

2- Selezione: è l’operatore unario che considerata una tabella restituisce la tabella che contiene tutte
le colonne (stesso grado) ma solo le righe che soddisfano una feterminata condizione (quindi
cardinalità diversa).

Esempio studente
Matricola nome cognome eta anno ...
a a a 15 3
b b b 17 4

select *
from studente s
where s.anno=4

- Binari (agiscono su 2 relazioni):


1-Unione: l’unione di 2 (o + tabelle) è la tabella che si ottiene aggiungendo alle righe della prima
tabella le righe della seconda tabella che non sono contenute nella prima tabella.
Perchè sia possibile le due tabelle devono avere lo stesso grado e gli stessi domini (stesso tipo di
valore degli attributi e stesso numero)
Ex
Studenti1
MA348 Mario Rossi
LI349 Lino Lini
Studenti 2
MA348 Mario Rossi
MA350 Mario Ladri

Query unione
SELECT *
FROM STUDENTI1 S1
UNION
SELECT *
FROM STUDENTI2 S2
Studenti1-2
MA348 Mario Rossi
LI349 Lino Lini
MA350 Mario Ladri

altro esempio di query


Query Unione
SELECT *
FROM FILM F
UNION
SELECT *
FROM FIMSOTT FS

2-Intersezione: è la tabella che contiene le righe che sono comuni ad entrambi le tabelle.
Perchè sia possibile le due tabelle devono avere stesso grado e stessi domini. (esempi in riferimento
alle tabelle sopra s1,s2)

SELECT *
FROM STUDENTI1 S1
WHERE S1.MATRICOLA IN (SELECT S2.MATRICOLA
FROM STUDENTI2 S2)

Studente 1 INTERSECTION STUDENT 2


MA348 Mario Rossi

altra query esempio


Query Interserzione
SELECT *
FROM film f WHERE f.IdFilm IN (SELECT fs.IdFilm FROM filmsott fs)

3- differenza: è la tabella che si ottien considerando le righe della prima tabella che non sono
presenti nella seconda (stesso dominio e grado)

SELECT *
FROM STUDENTI1 S1
WHERE S1.MATRICOLA NOT IN (SELECT S2.MATRICOLA
FROM STUDENTI2 S2)

Studenti1 - Studenti2
LI349 Lino Lini
MA350 Mario Ladri

4- prodotto cartesiano: è la tabella che si ottiene combinando ognuna delle righe della
prima tabella con ciascuna delle righe della seconda.

Studente
Matricola Nome Cognome Eta VotoMedio anno sezione
MA350 Mario Ladri 16 7 4 F
LI349 Lino Lini 13 2 1 A

Docenti-Studenti
CodFisc Nome Cognome Materia
PBC29 paolo bichiels tps
LMS02 laura mosca GPOI

(dato che su mariaDB non esiste un vero e proprio comando per fare il prodotto cartesiano usiamo il
CrossJoin)

SELECT *
FROM STUDENTI S1
CROSS JOIN DOCENTI_STUDENTI DS
(faccio solo la prima perché poi tanto è uguale)
Matricola Nome Cognome Eta VotoMedio anno sezione CodFisc Nome Cognome Materia
MA350 Mario Ladri 16 7 4 F PBC29 paolo bichiels tps
MA350 Mario Ladri 16 7 4 F LMS02 laura mosca GPOI

5- Join: è un’operazione che combina il prodotto cartesiano alla selezione, tipi:


(le query si riferiscono al database miocinema2.sql pubblicato su classroom il 6 febbraio)

1- Inner Join: combina le righe della prima tabella con le righe della seconda che sono legate
tra loro dalla condizione FK=PK (se non venisse espressa questa condizione, Inner join
equivarrebbe all’operazione di cross join

SELECT *
FROM film_persona fp INNER JOIN persona p ON fp.IdPersona=p.IdPersona

esempio mio

2- Query NaturalJoin :come l'innerJoin ma si elminano le ripetizioni delle colonne


SELECT *
FROM film_persona fp NATURAL JOIN persona p

3- Query LeftJoin: combinazione delle righe della prima tabella con le righe della seconda
tabella che sono legate alle righe della prima tabella dalla condizione chiaveesterna=chiaveprimaria
e delle righe della prima tabella che non sono collegate a righe della seconda tabella ponendo in
questo caso i campi della seconda tabella null)
SELECT *
FROM film_persona fp LEFT JOIN persona p ON fp.IdPersona=p.IdPersona

4- Query RightJoin: combinazione delle righe della prima tabella con le righe della
seconda tabella che sono legate alle righe della prima tabella dalla condizione
chiaveesterna=chiaveprimaria e delle righe della seconda tabella che non sono collegate a righe
della prima tabella ponendo in questo caso i campi della prima tabella null)
SELECT *
FROM film_persona fp right JOIN persona p ON fp.IdPersona=p.IdPersona

5- Query FullJoin:combinazione delle righe della prima tabella con le righe della seconda
tabella che sono legate alle righe della prima tabella dalla condizione chiaveesterna=chiaveprimaria
e delle righe della seconda tabella che non sono collegate a righe della prima tabella ponendo in
questo caso i campi della prima tabella null ;

(in mariadb non esiste ma può essere ottenuto come unione di leftjoin e rightjoin)
SELECT *
FROM film_persona fp LEFT JOIN persona p ON fp.IdPersona=p.IdPersona
union
SELECT *
FROM film_persona fp right JOIN persona p ON fp.IdPersona=p.IdPersona

Transazioni
- unità elementari di lavoro svolte da un programma applicativo su un DBMS.
-può comprendere 1 o + operazioni sui dati.
- esecuzione di una applicazione viene vista come una serie di transazioni, intervallate
dall’esecuzione di operazioni relative ai dati.

BOT(begin of transaction): inizio transazione


EOT(end of transaction): fine transazione
commit: operazione che rende definitivi i cambiamenti
rollback: operazione che annulla i cambiamenti eseguiti a partire dall’ultimo
commit (check point/putno di salvataggio).

Stati di una transazione:

begin: stato iniziale dove la transazione non ha ancora iniziato ad agire sul DB.
Active:fase in cui la transazione è in esecuzione (rispettando le proprietà), ovvero quando
sta elaborando e modificando i dati del sistema, durante questo stato acquisice il lock sui dati che
sta modificando impedendo ad altre transazioni di accedere a questi dati fine al termine di quest’
ultima.
In questo stato, la transazione può essere soggetta a fallimenti o errori, e se ciò accade la
transazione potrebbe dover essere ripetuta o annullata.
Partially committed: la transizione non ha riscontrato problemi (per il momento
e quindi potrebbe avvenire con successo)
committed: se non ci sono errori la transazione avviene con successo e rende
definitivi i cambiamenti sui dati.
Rollback: (non proprio uno stato ma una condizione/ciclo in cui si potrebbe trovare):se si
verificano problemi, prima di abortire il processo la transazione rimbalza
continuamente nello stato di active cercando di tornare allo stato precedente della
transazione che non da errori in modo da riprendere e portare a termine l’operazione.
Failed: (quando non funge rollback o fallisce (partially committed) prima dell’esecuzione: le
modifiche fino ad allora apportarete sono annullate e il db ritorna allo stato
precedente della suddetta transazione lasciando spazio di agire ad altre
transazioni.

Active, aborted, committed: ovvi^ (???)


partially committed: subito dopo l’esecuzione dell’ultimo statement della transazione
failed: precede immediatamente ABORTED; la transazione va in failed quando non si può
fare commit o quando un abort è esplicitamente invocato
SQL e la modalità di auto-commit
- i DBMS mettono a disposizione una modalità di auto-commit, grazie alla quale ogni
comando SQL sul DB è implicitamente seguito dal commit
-in tale modalità tutte le transazione sono costituite da uno solo comando SQL
-per transazioni così semplici, utilizzare la modalità autocommit porta vantaggi
in termini di praticità della scrittura del codice dell’applicazione e di efficienza
-ad ogni modo , nelle applicazioni è spesso necessario impostare transazioni che
contegngono più di un comando SQL. In tutti questi casi il commit deve essere
esplicitamente gestito dal programmatore.
Proprietà “acide” delle transazioni
-Atomicità: garantisce che le operazioni di una transazione vengano eseguite in
modo atomico (o tutte o nessuna), è cruciale per l’integrità dei dati e se qualcosa va storo, il
sistema deve essere in grado di annullare tutti i cambiamenti fatti a partire dall’inizio della
transazione.
-Consistency: assicura che l’esecuzione della transazione porti il DB in uno stato
consistente i.e. che non violi in vincoli di integtità sulla base di dati.
In accordo con questa proprietà, la verifica della violazione dei vincoli dovrebbe essere fatta alla
fine della transazione
-Isolation/isolamento: garantisce che l’esecuzione di una transazione sia
indipendente dall’ esecuzione contemporanea di altre transazioni.
Le transaziooni concorrenti non si influenzano l’una con l’altra.
-Durability/persistenza: garantisce che se la transazione va a buon fine, ovvero
dopo che un commit è stato eseguito con successo, l’effetto della transazione sia
registrato in maniera permanente sul DB.
Forme Normali (3 tipi)
è un insieme di condizioni la cui verifica permette di testare la qualità del DB
considerato in termini di ridondanza di dati, assenza di anomalie di aggiornamento/modifica,
inserimento e cancellazione.
La normalizzazione di un DB è il procedimento che permette di modificare il DB
in modo che soddisfi le condizioni previste dalla forma normale .
Generalmente la normalizzazione consiste nella divisione di una tabella del DB in +
tabelle.

CodFiscale CodProg nome cognome budget indirizzo figli ruolo Costo orario Nomeprogetto
MTFHT P01 MARIO ROSSI 5000 Via Ciri 12 Carlo,Elisa Tecnico 20 Alfa
MTFHT P02 MARIO ROSSI 15000 Via Ciri 12 Ferrara Carlo, Elisa Respons abile 40 Beta
Gasdas P01 Anna Mari 5000 Via Mari 50 Cesenatico Giovanni Responsabile 40 Alfa
Gasdas P03 Anna Mari 10000 Via Mari 50 Cesenatico Giovanni Addetto relazioni esterne 25 Gamma
weretr P04 GINO BINI 20000 Via fiumi 14 Ravenna Alda, Sara 20 Lambda

il DB precedente presenta anomalie di inserimento (non posso inserire un impiegato che non è stato
associato ad un progetto e viceversa non posso inserire un progetto a cui non sono stati associati
impiegati), anomalie di cancellazione (non si può cancellare un progetto a cui è associato un
impiegato presente solo in quel progetto, oena perdita dei dati dell’impiegato e viceversa).

1)
Si dice che una tabella è in prima forma normale (1NF) se esiste una chiave
primaria e gli attributi non sono composti e non presentano valori multipli (ossia
il valore dell’attributo è dato da un insieme di valori).
La tabella precedente non è in 1NF (c’è l’attributo composto indirizzo e multivalore figli).
Il problema dell’attributo composto si risolve scomponendo l’attributo (rendendolo atomico).
Il problema dell’attributo multivalore si risolve considerando in luogo della tabella due tabelle, una
che è quella iniziale in cui è cancellato l’attributo multivalore e una tabella che contiene i dati
dell’attributo multivalore.

Impiegato
CodFiscale CodProg nome cognome budget via citta civico ruolo Costo orario Nomeprogetto
Figlio
cod nome codPadre codMadre

2)
un DB è in 2NF se è in 1NF e ogni attributo non dipende da una sola parte della
chiave primaria .
Non è in 2NF pk, ad esempio, il budget dipende solo dalla parte di chiave primaria codprog.
Per trasformare il DB occorre considerare una tabella per ogni parte della chiave primaria per cui
esistono attributi che dipendono solo da quella parte della chiave primaria e le eventuali tabelle
necessarie a collegare le tabelle create.
Progetti(Codprog, nomepr, budget)
Impiegati(Codfisc, nome, cognome,viapiazza, citta, numerocivico)
Ruolo (Codprog, Codfisc,ruolo, costoOrario)
3)
un DB è in 3NF se è in 2NF e ogni attributo dipende esclusivamente dalla chiave
priamria (ovvero non può dipendere da un altro attributo).
Nel nostro caso il DB non è in 3NF pk costoOrario dipende da ruolo )si fa l’ipotesi che dipenda
solo dal ruolo).
Per ottenere la 3NF basta sostituire la tabella ruolo con le tabelle:
Ruolonew(CodPro, Codfisc, ruolo)
Costoorario(ruolo, costoorario)

informazioni random
/*ID auto ùincrement lo metti per identificare relazioni N M che hanno attributi*/

se riesci riguardati i comandi + utili di sql sul drive e la query difficile

indicare quale specie ha avuto il maggior numero di esemplari affetti per una specifica
patologia per l’anno 2022:

SELECT e.NomeS
FROM esemplari e, esemplari_patologie ep
WHERE e.IdEsemplare=ep.IdEsemplare and ep.NomeP="bronchite" and year(ep.dataP)=2022
GROUP BY e.NomeS
HAVING count(e.IdEsemplare)=(select MAX(ne) from(SELECT count(e.IdEsemplare)as ne
FROM esemplari e, esemplari_patologie ep
WHERE e.IdEsemplare=ep.IdEsemplare and ep.NomeP="bronchite" and year(ep.dataP)=2022
GROUP BY e.NomeS)as de)

funzione di aggregazione: fanno operazioni ...

Potrebbero piacerti anche