Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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.
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)
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.
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.
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
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...)
-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:
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';
-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
Query unione
SELECT *
FROM STUDENTI1 S1
UNION
SELECT *
FROM STUDENTI2 S2
Studenti1-2
MA348 Mario Rossi
LI349 Lino Lini
MA350 Mario Ladri
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)
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
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
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.
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.
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*/
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)