Diapositiva 1 - Sito web dell`Insegnamento di Informatica

Introduzione ai Database
Versione 1.0
tag P. = Preliminary
Pablo Genova
[email protected]
I. I. S. “Angelo Omodeo”
Indirizzo Tecnico-Economico
Mortara
A. S. 2015 – 2016
Cos'è una base di dati?
Definizione: base di dati o database è una raccolta di dati logicamente correlati
utilizzata per modellare ‡ una realtà.
Utilizzi nei campi più svariati dal database di una banca a quello dell’orario ferroviario a
quello della calibrazione delle misure di un esperimento scientifico.
Per semplificare pensiamo ad una tabella o ad un elenco di dati, ma in realtà un
database è molto di più, come cercheremo di vedere.
Proprietà fondamentali di un database (termini tecnici precisi):
•consistenza
•integrità
•sicurezza
•condivisibilità
i dati devono essere significativi e logicamente coerenti
le operazioni degli utenti non devono danneggiare i dati
protezione da eventi accidentali o da intrusioni
tanti utenti possono accedervi in rete
•persistenza
i dati rimangono salvati, non si perdono quando si chiude il
programma, non sono temporanei (con tempi opportuni a seconda dei casi)
•scalabilità
si può espandere aggiungendo nuovi dati, senza cambiarne la
struttura
Naturalmente il database perfetto NON esiste!
‡ gli informatici usano “modellare” i fisici “modellizzare”
Vedi pag 120-121
Dati ed informazioni
Termini tecnici da sapere
Differenza tra dato ed informazione il dato (dal latino datum plurale data) è il valore
grezzo in sé, l’informazione è l’incremento di conoscenza o l’interpretazione dei dati.
I dati grezzi non sono informazione, bisogna corredarli di una opportuna chiave di
interpretazione che consente di comprendere il loro significato
Esempio:
l’insieme
{1Kg, 3 TB, 45 €, 23 $}
è un insieme di dati, diventa informazione se dico ad esempio che gli elementi
corrispondono, per un disco fisso a
{peso, dimensione, costo in euro, costo in dollari}
schema o intensione: è la chiave di interpretazione dei dati, ovvero il significato la
semantica che si attribuisce al dato per ricavare l’informazione
istanza di uno schema o estensione: insieme dei valori assunti da uno schema da un
certo istante di tempo o per un certo oggetto
Il significato intensionale (o schema) è quindi il contenuto informativo completo, mentre
il significato estensionale (o istanza) sono i valori concreti che può assumere uno
schema in un dato caso
Per ricordarsi: FOR INSTANCE = FOR EXAMPLE in english ;-)
Vedi pag 124-125
Categorie, occorrenze, modelli
Categoria: gruppo di dati aventi la stessa chiave di interpretazione ovvero lo stesso
schema (nell’esempio sopra, categoria dei dischi fissi).
Occorrenza: insieme delle istanze delle categorie in un dato istante di tempo
Per intenderci la base di dati concreta (la “tabella coi valori”) è appunto una occorrenza
della base di dati generale... imparare ad ASTRARRE (e MODELLARE i problemi)
Modello di dati: insieme di concetti utilizzati per organizzare i dati di interesse,
descriverne la struttura e la dinamica, comprese le associazioni e i vincoli da
rispettare
Modelli concettuali: permettono di rappresentare i concetti (e i dati) in modo
indipendente da ogni sistema. Mettono in evidenza i concetti piuttosto che la struttura
concreta di memorizzazione nel computer. Sono usati nella fase iniziale di
progettazione. Vedremo il modello E-R Entity-Relationship (Entità - Associazioni)
Modelli logici: consentono una specifica rappresentazione dei dati, che riflette una
ben precisa organizzazione (tabelle,grafi oggetti,strutture). Di questo noi vedremo la
progettazione logica relazionale, con la costruzione di opportune relazioni tra i dati
Il passo successivo è il progetto fisico vero e proprio, l’implementazione
concreta e la scrittura su memorie di massa dei dati
Vedi pag 125
Progettazione
Dunque le fasi generali di progettazione di un database sono tre
1.Progettazione concettuale
2.Progettazione logica
3.Progettazione fisica
Nella fase 1 si elabora il modello concettuale, rappresentazione astratta della realtà
Input: caratteristiche specifiche della realtà Output: schema concettuale, diagramma ER
Nella fase 2 si elabora lo schema logico, per esempio rappresentazione mediante tabelle
Input: diagamma ER
Output tabelle (o modello relazionale)
Nella fase 3 si elabora la concreta implementazione sul supporto fisico (memorie di massa)
Input: tabelle
Output file(s) in memoria di massa
Ci sono quindi più livelli di progettazione dal più astratto al più concreto
Un DBMS DataBase Management System è strutturato a livelli
Il DBMS è il gestore del database, il software che gestisce
il database a tutti i livelli (esterno, logico, fisico)
Vedi pag 126-127 e 128-129
MODELLO E-R Entity Relationship
In italiano modello Entità – Associazioni (traduciamo Relationship con Associazione)
Entità: ciò che esiste nel nostro modello, i “soggetti” del modello
Proprietà o Attributi: caratteristiche delle entità (andranno scelte in modo opportuno)
Gli attributi possono essere semplici, composti o multipli.
Un attributo semplice non può essere ulteriormente scomposto e ha un nome, un
formato, una dimensione, un valore, un’opzionalità.
Un attributo composto (o aggregato) è un attributo composto da più attributi.
Un attributo multiplo è un attributo costituito da un elenco di attributi di lunghezza
variabile.
Esempio: l’entità Fattura può avere come attributi semplici un CodFattura (codice
fattura), una Data, un Numero, una Nota (opzionale! talvolta c’è talvolta non c’è)
L’entità Cliente può avere come attributi semplici un CodCliente (codice cliente), un
Nome un Cognome, come attributo composto un Indirizzo, composto da Via,
NumCivico, Città, CAP.
Se vogliamo gestire gli eventuali più nomi propri del cliente, conviene definire l’attributo
Nome come attributo multiplo che conterrà almeno un nome proprio, oppure se
vogliamo gestire più Indirizzi del cliente, ci vorrà un attributo multiplo Indirizzo.
La fattura con CodFattura CXYZ001, emessa in Data 1/2/2016, Numero 41
è una ISTANZA d’entità fattura
ISTANZA: un singolo esemplare di entità, una entità concreta con determinati valori.
Vedi pag 132-134
ATTRIBUTI CHIAVE
Un attributo che permette di identificare univocamente una istanza di un’entità è detto
attributo chiave o chiave candidata.
Tra tutti i possibili attributi chiave (o chiavi candidate) quella più semplice, con il
minor numero di attributi è detta chiave primaria.
Come suggerisce il nome, la chiave primaria, primary key in inglese, vi permette di
identificare univocamente l’istanza della vostra identità, va scelta in modo opportuno e
sensato (se è scelta male ci saranno conflitti, incoerenze, errori).
La si indica sottolineando il nome: <Nome attributo> è un attributo generico
<Nome attributo> è un attributo chiave
Nell’esempio precedente CodFattura è la chiave primaria della fattura, CodCliente la chiave
primaria del cliente.
Se per esempio sceglievamo Nome era un errore perché posso avere due clienti differenti
con lo stesso nome, se sceglievo la data della fattura posso avere tante fatture nello stesso
giorno. Se inserivamo anche il CodiceFiscale del cliente allora potevo utilizzarlo come
chiave primaria (identifica univocamente il cliente).
Attenzione, non c’è un unico modo di progettare un database!
Indicare sempre la chiave primaria scelta.
Vedi pag 135-137
RAPPRESENTAZIONE GRAFICA
CodCliente
PIVA
Nome
Cognome
Cliente
RagSociale
Indirizzo
È un attributo composto
CodFattura
Numero
CodFiscale
Nome
Data
Fattura
Nota
ComuneNascita
DataNascita
Professione
Persona
Cognome
sottolineato =
Primary key =
Attributo chiave
Hobby
È un attributo multiplo
Rispettare le convenzioni!
Vedi pag 135, 197
Associazioni - Relationships
Una associazione è un legame logico tra due o più entità.
Una istanza di una associazione è una combinazione o una aggregazione di istanze delle
entità che prendono parte all’associazione. Nello schema si indica con un rombo.
Matricola
Nome
Cognome
Paziente
1
possiede
1
Documento
sanitario
CodDoc
DataEmissione
Validità
I numeri indicano la cardinalità dell’associazione: ogni Paziente ha uno e un solo Documento
Sanitario, ad ogni Documento Sanitario è associato uno e un solo paziente
In generale, date le entità X e Y e data una associazione tra di loro, essa può essere:
• biunivoca o 1:1 (uno a uno) se ad una istanza dell’entità X corrisponde una e una
sola istanza dell’entità Y
• 1:N (uno a N, uno a molti), se ad una istanza dell’entità X possono corrispondere N
istanze dell’entità Y, ma per una istanza dell’entità Y vi è una sola istanza dell’entità
X
• N:1 (N ad uno, molti ad uno) se per una istanza dell’entità X vi è una sola istanza
dell’entità Y, ma per una istanza dell’entità Y possono corrispondere N istanze
dell’entità (è lo stesso della precedente scambiando l’ordine delle entità)
• N:N (N a N, molti a molti) per una istanza dell’entità X corrispondono N istanze
dell’entità Y e viceversa
Esempi di associazioni 1:N
Matricola
Nome
Cognome
Data
Studente
Nota
N
Numero
emessa
1
Indirizzo
Fattura
N
frequenta
CodScuola
CodFattura
Nome
1
CodCliente
NomeScuola
Scuola
TipoScuola
Cliente
Cognome
RagSociale
PIVA
Una scuola è frequentata da tanti studenti, ma uno studente frequenta una sola scuola (alla
volta), un cliente può essere associato a tante fatture, ma ogni fattura deve essere intestata
ad un solo cliente. Sono associazioni di tipo 1:N (equivalenti a N:1 perché le associazioni
si possono leggere in entrambi i versi)
Vedi pag 149,197
Esempi di associazioni N:N
CodDisciplina
Cognome
Nome
Docente
N
insegna
N
Disciplina
Matricola
NomeDisciplina
NumOre
NumClassi
Un docente insegna N discipline e viceversa ad una data disciplina sono associati N
docenti, si noti che in questo esempio l'associazione insegna ha degli attributi specifici
(NumOre e NumClassi), anche una associazione può avere degli attributi così come una
entità.
Finora abbiamo visto solo associazioni binarie o di grado 2, ma ci possono essere anche
associazioni di grado maggiore ad esempio
TipoProdotto
Prodotto
N
CodCliente
N
Nome
Cliente
CodProdotto
CodCassa
N
fatturazione
Cassa
Reparto
Cognome
ImportoFattura
DataFattura
Vedi pag 151 e 153
Progettazione logica-relazionale
E' il secondo passo nella progettazione di un database, dal modello E-R
passiamo al modello logico relazionale, dal diagramma E-R passiamo
alla definizione di tabelle, ntuple e operazioni da compiere su di esse.
Vediamo prima un esempio, un'istanza concreta del modello e poi diamo
le definizioni rigorose:
Marca
Modello
Targa
Nome
Cognome
Indirizzo
Codice
Automobile
AUTOMOBILE(Targa, Marca, Modello)
Cliente
CLIENTE (Codice, Nome, Cognome,
Via, NumeroVia,Città)
Modello E-R
Modello logico relazionale
Nel modello logico relazionale sono state introdotte le relazioni
AUTOMOBILE(...) e CLIENTE (…) rispettando le convenzioni
di tale modello
Vedi pag 146-153
Relazioni ed ntuple
Definizione matematica rigorosa di relazione, dalla teoria degli insiemi:
Una relazione R su una sequenza di insiemi D1, D2,... Dn (non
necessariamente distinti) è un sottoinsieme finito del prodotto cartesiano
tra tali insiemi ovvero indicando D1 x D2 x … x Dn il prodotto cartesiano si
ha:
R⊆D
R
D1 x D2 x … Dn
Gli insiemi D sono detti dominî della relazione, ad ogni dominio è associato
un nome detto ATTRIBUTO ed n è il grado della relazione.
Gli elementi di una relazione R sono detti n-uple (leggi 'ennuple') o
n-tuple (leggi 'entuple' from the english word 'ntuple' plural 'ntuples') o
anche t-uple e si indicano così:
(d1, d2,..., dn)
con d 1∈D 1, d2∈D 2,... , Dn∈dn
Ricorda che il PRODOTTO CARTESIANO TRA DUE INSIEMI A x B è l'insieme delle coppie
ordinate (a,b) con a appartenente ad A, b appartenente a B
https://it.wikipedia.org/wiki/Prodotto_cartesiano
Vedi pag 146-153
Relazioni, ntuple e tabelle
Una relazione può essere rappresentata vedi pag. 147 del libro
1) per elencazione
ecco le “famose” tabelle di un
2) in forma tabellare
database
3) in forma insiemistica
ISTANZA DI UNA RAPPRESENTAZIONE: insieme delle sue ntuple in un
determinato istante di tempo.
Come nei casi precedenti (entità, associazione etc etc) l'istanza è il “caso
concreto”, il significato estensionale della relazione
Prendiamo la relazione Automobile ecco le tre possibili rappresentazioni di una istanza
della relazione AUTOMOBILE(Targa, Marca, Modello)
AUTOMOBILE(Targa, Marca, Modello) = { Nelle convenzioni utilizzate nel libro
(AA000ZZ, Fiat, Grande Punto),
ogni riga dell'elenco è una ntupla
(CC200LN,Volkswagen, Passat),
TARGA
MARCA
MODELLO
AUTOMOBILE
(RR100AA,Renault,Megane)
AA00ZZ
Fiat
Grande Punto
AUTOMOBILE
(KK200II,Lada, Kalina)
CC200LN
Volkswagen
Passat
}
1) (AA000ZZ, Fiat, Grande Punto),
insiemistica
2) (CC200LN,Volkswagen, Passat),
elencazione
3) (RR100AA,Renault,Megane)
4) (KK200II,Lada, Kalina)
Ricordarsi che c'è sempre anche il
significato intensionale, lo schema, l'astrazione!
RR200AA
Renault
Megane
KK200II
Lada
Kalina
tabellare
Esempi E-R → modello relazionale
STUDENTE (Matricola, Cognome,
Nome, CodScuola)
Matricola
Nome
Cognome
Studente
N
chiave esterna!
frequenta
1
CodScuola
Indirizzo
Scuola
NomeScuola
TipoScuola
SCUOLA (CodScuola, NomeScuola,
TipoScuola, Indirizzo)
Nel modello relazionale l'introduzione di una chiave esterna, CodScuola nella relazione
STUDENTE, permette di rappresentare l'associazione esistente tra le due relazioni.
La chiave esterna va messa nel posto giusto
Non avrebbe avuto senso mettere Matricola come chiave esterna nella relazione
Scuola: è lo studente che è associato ad una scuola
Vedi pag 149
Esempi E-R → modello relazionale
CodDisciplina
Cognome
Docente
Nome
N
insegna
N
Disciplina
Matricola
MODELLO E-R
NumOre
NumClassi
NomeDisciplina
MODELLO RELAZIONALE
DOCENTE (Matricola, Cognome, Nome)
DISCIPLINA (CodDisciplina, NomeDisciplina)
INSEGNA(Matricola,CodDisciplina, NumOre , NumClassi)
chiave esterna
ESERCIZIO: PROVA A TRASFORMARE
L'ESEMPIO DI SLIDE 9 DAL MODELLO E-R
AL MODELLO RELAZIONALE (vedi anche
pag 152)
Per rappresentare l'associazione N:N
(molti a molti) ho introdotto una
relazione specifica con due chiavi
primarie esterne
Vedi pag 152-153
SQL Structured Query Language
SQL è il tipico linguaggio informatico in cui sono scritti i database, è un
linguaggio pensato per questo campo dell'informatica.
Query: interrogazione/domanda al Database
Di SQL vediamo soltanto alcune istruzioni (le principali) che potrebbero
tornarvi utili.
SQL non è case sensitive ovvero maiuscolo = minuscolo, di solito le
istruzioni SQL sono scritte in caratteri maiuscoli
I tipi di dati che possono essere utilizzati (vedi pagina 173) sono simili ad
altri linguaggi di programmazione ad esempio:
BIT
per un tipo booleano 1, 0 (TRUE/FALSE)
INT o INTEGER
per un intero (da -2147483648 a 2147483648)
FLOAT
per un numero reale (da 1E-38 a 1E38)CHAR O
CHAR o CHARACTER per un carattere (ad es 'o', 'P' '0')
DATE
per una data (formato “anno/mm/gg”)
TIME
per un tempo (formato “anno/mm/gg h:min:s:ms)
NB: il termine tipo in informatica ha un significato ben preciso
tipo = formato del dato. Modificare il tipo può avere effetti devastanti!
Ad es. pensare alla differenza tra il carattere zero '0' e il numero 0
PRINCIPALI ISTRUZIONI IN SQL
SQL is a DDL, DML and DCL
;-)
Data Definition Language
→
definizione del database
Data Manipulation Language
→
manipolazione dei dati:
inserimento cancellazione modifiche e QUERY cioè interrogazione
Data Control Language
→
controllo delle operazioni:
gestione accessi, permessi di autorizzazioni a fare o non fare
determinate cose a seconda degli utenti
Sono presenti istruzioni dedicate per ciascuna delle tre fasi sopra
CREATE DATABASE Negozio;
Sto creando il database
chiamato Negozio
ci vuole un ';' alla fine della linea come in C rispettare la sintassi!
Vedi pag 174-183
SQL istruzioni DDL da sapere
CREATE TABLE Azienda
attenzione alla ,
Vincoli su attributi
(
CodAzienda
CHAR(5)
NOT NULL ,
RagioneSociale CHAR(5)
NOT NULL ,
Fatturato
DECIMAL(9,2)
DEFAULT 1000000.00,
NumDipendenti INT(5),
PRIMARY KEY(CodAzienda),
Chiave primaria
);
Per dichiarare una chiave esterna e quindi una relazione tra due tabelle si utilizza
l'istruzione:
FOREIGN KEY(<ATTRIBUTO1>,...)
Ad esempio in
REFERENCES <TABELLA> (<ATTRIBUTO1>,...)
CREATE TABLE DIPENDENTE
(
/* inserire attibuti di dipendente */
Un dipendente per definizione
deve essere associato ad una
azienda, introduco quindi una
chiave esterna
FOREIGN KEY(CodAzienda) REFERENCES AZIENDA (CodAzienda)
);
Vedi pag 177
Questo è un vincolo di integrità referenziale: garantisce la consistenza e l'integrità dei dati
SQL istruzioni DML da sapere
INSERT INTO → per inserire i valori delle righe della tabella
UPDATE
→ per modificare i valori delle righe della tabella
DELETE FROM → per cancellare i valori delle righe della tabella
SELECT
→ per selezionare, interrogare il database, query
ECCO LA QUERY!!
Esempio di sintassi delle istruzioni per la tabella Azienda
INSERT INTO AZIENDA
VALUES (“M001”,“Mortara Export”,1500000.00,80);
/* Definiamo la nostra
azienda Mortara Export */
/* La Mortara Export è stata assorbita dalla
UPDATE AZIENDA
SET RagioneSociale =“Pavia Export”; Pavia Export, cambiamo la Ragione Sociale */
DELETE FROM AZIENDA
WHERE CodAzienda = “M001”;
/* La Pavia Export è fallita :-( non esiste più
nel database delle aziende lombarde */
Vedi pag 178
SQL istruzioni DML da sapere
Una volta creato e riempito il database, useremo il comando
SELECT per estrarre le informazioni ovvero fare le query, le
interrogazioni, è un comando complesso perché permette tanti
tipi di interrogazioni anche molto articolate, con vincoli e
condizioni da rispettare. Alcuni esempi semplici e da sapere:
SELECT RagioneSociale
FROM AZIENDA;
/* Stiamo cercando tutte le ragioni
sociali delle aziende presenti in
database */
CARATTERE JOLLY * (ASTERISCO - STAR)
SELECT *
FROM AZIENDA;
/* Stiamo cercando tutti gli attributi delle
aziende presenti in database */
/* Stiamo cercando il codice
azienda dell'azienda che ha
ragione sociale Pavia Export */
SELECT CodAzienda
FROM AZIENDA
WHERE RagioneSociale=“Pavia Export”;
THAT'S VERY
POWERFUL ;-)