Corso di · 2020-01-28 · Oggi studieremo le basi di dati (DB) • Le basi di dati (database, in...

Post on 03-May-2020

3 views 0 download

Transcript of Corso di · 2020-01-28 · Oggi studieremo le basi di dati (DB) • Le basi di dati (database, in...

Corso di

Sistemi di Elaborazione delle Informazioni

Dott. Francesco Rossia.a. 2019/2020

SCUOLA DI MEDICINA E CHIRURGIA

Università degli Studi di Napoli Federico II

1

Le basi di dati

Prima parteCosa abbiamo fatto e cosa faremo

Oggi studieremo le basi di dati (DB)

• Le basi di dati (database, in inglese) servono per organizzare, memorizzare e poter rielaborare automaticamente l’informazione

• Hanno alcuni aspetti in comune con i fogli di calcolo:

– gestiscono tipi diversi di informazione

– visualizzano l’informazione in forma tabulare

• Tuttavia, sono profondamente diverse dai fogli di calcolo

Fogli di calcolo e DB: differenze

• Nonostante abbiano finalità e metodi di visualizzazione simili, i fogli di calcolo e le DB sono sostanzialmente differenti

• DB strutturano “maggiormente” l’informazione:

– vediamo tra poco cosa vuol dire

• DB sono utilizzate principalmente per memorizzare grandi quantità di informazione:

– non tanto per elaborare automaticamente l’informazione

La logica booleana

• Per poter capire le DB, dobbiamo imparare le nozioni della logica booleana:

– è utilizzata in diversi ambiti informatici

– in realtà l’abbiamo già vista:

• nei circuiti elettronici del processore

• nelle funzioni avanzate dei motori di ricerca per Internet

Seconda parteLa logica booleana

La logica booleana

• Definisce espressioni costituite da operatori e operandi

• Gli operandi possono assumere solo valori binari:

– “vero” o “falso”

– 0 o 1

• Ogni operatore può essere applicato ad uno o due operandi

Gli operatori booleani

• Operatori con due operandi:

– AND: restituisce il valore “vero” solo se entrambi gli operandi sono veri

– OR: restituisce il valore “vero” se almeno uno dei due operandi è vero

• Operatore con un solo operando:

– NOT: restituisce il valore “vero” se il valore dell’operando è falso (altrimenti restituisce il valore “falso”)

Tavole di verità

a b a AND b

VERO VERO VERO

VERO FALSO FALSO

FALSO VERO FALSO

FALSO FALSO FALSO

a b a OR b

VERO VERO VERO

VERO FALSO VERO

FALSO VERO VERO

FALSO FALSO FALSO

a NOT a

VERO FALSO

FALSO VERO

a b “a x b”

1 1 1

1 0 0

0 1 0

0 0 0

AND

a b “a + b”

1 1 1

1 0 1

0 1 1

0 0 0

a NOT a

1 0

0 1

OR NOT

Espressioni booleane

• Così come è possibile comporre le operazioni algebriche (somma, prodotto, …), è possibile comporre anche le operazioni booleane

• Esempio: a AND (b OR (NOT c))– dove a, b, c sono singoli operandi o intere proposizioni,

ognuna delle quali può assumere valore vero o falso

– Esempio di proposizioni (vere o false?):

• a = “il triangolo è una figura geometrica con tre lati”

• b = “3+2 = 7”

• c = “4 è un numero dispari”

Tavola di verità di espressioni booleane

• Permette di valutare la verità di un’espressione per tutte le possibili combinazioni di valori delle variabili:

– l’espressione è valutata nell’ordine dato dalle parentesi

a b c NOT c b OR (NOT c) a AND (b OR (NOT c))

VERO VERO VERO FALSO VERO VERO

VERO VERO FALSO VERO VERO VERO

VERO FALSO VERO FALSO FALSO FALSO

VERO FALSO FALSO VERO VERO VERO

FALSO VERO VERO FALSO VERO FALSO

FALSO VERO FALSO VERO VERO FALSO

FALSO FALSO VERO FALSO FALSO FALSO

FALSO FALSO FALSO VERO VERO FALSO

Espressioni booleane

• Così come è possibile comporre le operazioni algebriche (somma, prodotto, …), è possibile comporre anche le operazioni booleane

• Esercizi

– (a AND b) OR (c AND d)

– NOT (a OR b)

– ((NOT a) AND b) OR c

Terza parteIntroduzione alle basi di dati:

le entità

Cosa può essere rappresentato nei DB?

• Nei DB è possibile rappresentare qualunque entità che sia rappresentabile su un computer

– Es: una casa, una persona, ecc.

• Per rappresentare un’entità, si identificano le sue caratteristiche, dette attributi

– in particolare, si identificano quegli attributi che sono necessari agli scopi di uno specifico contesto applicativo

Entità e attributi: un esempio

• Es: attributi dell’entità “appartamento”

– Applicazione “agenzia immobiliare”: superficie commerciale, piano, numero di stanze, indirizzo, box, etc....

– Applicazione “catasto”: indirizzo, numero piantina catastale, valore catastale, etc....

Come si rappresentano gli attributi

• Gli attributi hanno un nome e un dominio

– non un “valore”, come scritto nel libro di testo

– il dominio è l’insieme di possibili valori che possono essere assunti

– es. entità “appartamento”:

• attributo “indirizzo”: dominio un testo

• attributo “numero di stanze”: dominio un numero

Distinzione tra dati e metadati

• Il dominio è un metadato:

– informazione che descrive il dato

• nei fogli di calcolo: il formato della cella è un metadato che descrive i dati della cella

• I metadati definiscono il tipo di informazione che può essere memorizzato in una specifica base di dati

• I dati sono gli specifici valori inseriti per gli attributi.

Metadati: esempio

• Entità: “appartamento”

• Attributi:

– “superficie commerciale”, dominio: numero

– “piano”, dominio: numero

– “numero di stanze”, dominio: numero

– “indirizzo”, dominio: testo

– “box”, dominio: booleano (“sì” o “no”)

Istanza

Superficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

– I metadati specificano il tipo di dati ma non i dati stessi

– Uno specifico insieme di dati in una tabella viene detto istanza

Tabella: appartamenti

Atomicità degli attributi

• Gli attributi devono contenere dati che non necessitano di essere scomposti

• Esempio:

– attributo “nome completo” (es: “Mario Rossi”)

– Attributo “nome” e attributo “cognome” (es: “Mario”, “Rossi”)

• Se il nome e il cognome si trattano sempre assieme, va bene anche “nome completo”

– altrimenti “nome” e “cognome” è indispensabile

Unicità delle entità• Due entità possono avere lo stesso valore per

uno o più attributi

– es: due appartamenti possono essere allo stesso piano

• In pratica: non esistono due entità con gli stessi valori per tutti gli attributi

Chiavi candidate• Non possono esistere due entità con gli stessi

valori per tutti gli attributi. Quindi:

– esistono insiemi di attributi i cui valori non possono essere

ripetuti in due entità

– come minimo, l’insieme di tutti gli attributi

– ognuno di questi insiemi identifica univocamente un’entità

• Un insieme di attributi che identifica univocamente un’entità è detto chiave candidata

Chiavi candidate: esempio• Entità “persona”, attributi:

– Nome, cognome, data di nascita, luogo di nascita, codice fiscale

• Chiavi candidate:

– Nome, cognome, data di nascita, luogo di nascita, codice fiscale• l’insieme di tutti gli attributi è sempre una chiave candidata

– Codice fiscale

– Codice fiscale con un qualunque insiemi di attributi è una chiave candidata

– Nome, cognome, data di nascita, luogo di nascita• in molti contesti applicativi può essere considerata una chiave

candidata

Chiave primaria

• Tra tutte le chiavi candidate, ne viene scelta una che svolge il ruolo di chiave primaria

• La chiave primaria viene utilizzata per identificare tutte le righe in una tabella

• Esempio:

– “codice fiscale” è una buona scelta: è una chiave candidata ed è composta da pochi attributi (uno solo)

Quarta parteLe operazioni sulle tabelle

Il formalismo dei DB

• I DB sono basati su solidi risultati teorici

• E’ possibile definire 5 operazioni sulle tabelle, analoghe alle operazioni algebriche:

– selezione, proiezione, unione, differenza, prodotto

– si applicano a tabelle, restituiscono come risultato una tabella

1. Selezione

• Permette di selezionare alcune righe da una tabella

• Si specifica una condizione (o “test”) e una tabella di input

• Il risultato è dato da una tabella con gli stessi attributi della tabella in input e contenente solo le righe in cui la condizione è verificata

– la condizione viene valutata per ogni riga.

Selezione, esempio

• Tabella: appartamentiSuperficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

• Seleziona appartamenti piano = 4Superficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

Combinazione di condizioni: la logica booleana

• E se volessimo esprimere più condizioni?

– Usiamo la logica booleana

• Es: “è al quarto piano e non ha il box”

– Piano=4 AND Box=“no”

• Es: “è al quarto piano e non ha il box, oppure è al primo piano e ha il box”

– (Piano = 4 AND Box=“no”) OR (Piano=1 AND Box = “Sì”)

2. Proiezione

• Permette di scegliere quali attributi di una tabella

visualizzare

• Si specificano una tabella e una lista di attributi di quella

tabella

• Il risultato è una tabella con solo quell’insieme di

attributi e tutte le righe della tabella in input

Proiezione, esempio

• Tabella: appartamentiSuperficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

• Proiezione Indirizzo, Box from appartamentiIndirizzo Box

Via Rossi, 5 No

Via Verdi, 4 Sì

Via Bianchi, 9 Sì

3. Unione

• Operazione applicata a due tabelle che hanno esattamente gli stessi attributi

• Restituisce la tabella che contiene l’unione delle righe di entrambe le tabelle in input

Unione, esempio

• Tabella: appartamenti

Superficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

Piccolo = selezione appartamenti stanze < 3

Grande = selezione appartamenti stanza > 5

Piccolo unito Grande:

Superficie Piano Stanze Indirizzo Box

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

4. Differenza

• Operazione applicata a due tabelle che hanno esattamente gli stessi attributi

• Assume in input due tabelle, A e B

• Restituisce la tabella che contiene le righe che fanno parte di A ma non di B

– “sottrae da A le righe di B”

Differenza, esempio

• Tabella: appartamentiSuperficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

Grande = seleziona appartamenti stanze > 5

Superficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

Superficie Piano Stanze Indirizzo Box

150 8 7 Via Bianchi, 9 Sì

Differenza = appartamenti - Grande:

5. Prodotto

• Si applica ad una coppia di tabelle (anche senza gli stessi attributi)

• Restituisce una tabella che contiene tutti gli attributi delle due tabelle in input e tutte le combinazioni dei valori delle due tabelle in input

– funziona come il prodotto cartesiano fra due insiemi

• {a, b} x {c, d, e} = {{ a,c }, {a, d}, {a, e}, {b, c}, {b, d}, {b, e}}

Il prodotto: esempio

Tabella: BambiniNome Anni Genere

Andrea 2 Maschio

Luca 3 Maschio

Anna 4 Femmina

Gioco Colore GiocoDa

Macchinina blu Maschio

Bambola rosa Femmina

Tabella: Giochi

Bambini x GiochiNome Anni Genere Gioco Colore GiocoDa

Andrea 2 Maschio Macchinina blu Maschio

Andrea 2 Maschio Bambola rosa Femmina

Luca 3 Maschio Macchinina blu Maschio

Luca 3 Maschio Bambola rosa Femmina

Anna 4 Femmina Macchinina blu Maschio

Anna 4 Femmina Bambola rosa Femmina

Composizione di operazioni

• E’ possibile combinare le operazioni in modo da utilizzare il risultato di una operazione come operando per una nuova operazione

– analogo a 5 + (2 * 3): prima svolgiamo (2*3) e otteniamo un numero che poi usiamo come operando sommato a 5

Composizione di operazioni, esempio

• Tabella: appartamentiSuperficie Piano Stanze Indirizzo Box

100 4 4 Via Rossi, 5 No

50 4 2 Via Verdi, 4 Sì

150 8 7 Via Bianchi, 9 Sì

Proiezione superficie, piano selezione di appartamenti con stanze > 3

Superficie Piano

100 4

150 8

Il join

• E’ una forma di composizione:

– si applica una selezione ad un prodotto

• E’ molto usata, quindi prende un nome specifico

• L’idea è: fai il prodotto ma non restituire tutti le combinazioni ma solo alcune per cui vale una certa condizione

Il join naturale

• Si moltiplicano due tabelle A e B e si

selezionano solo le righe per le quali un

attributo (specificato) di A ha valore uguale ad

un attributo (specificato) di B

Join naturale, esempio

Tabella: BambiniNome Anni Genere

Andrea 2 Maschio

Luca 3 Maschio

Anna 4 Femmina

Gioco Colore GiocoDa

Macchinina blu Maschio

Bambola rosa Femmina

Tabella: Giochi

Join Bambini, Giochi on Bambini.genere = Giochi.GiocoDaNome Anni Genere Gioco Colore GiocoDa

Andrea 2 Maschio Macchinina blu Maschio

Luca 3 Maschio Macchinina blu Maschio

Anna 4 Femmina Bambola rosa Femmina

Quinta partePrincipi di progettazione di DB

La ridondanza dei dati• Molti contesti applicativi portano ad avere,

come soluzione naturale, la duplicazione di dati tra diverse tabelle.

Tabella: StudentiNome Cognome Matricola Indirizzo

Andrea Bianchi 111111 Via Roma, 1

Beatrice Verdi 222222 Corso Milano, 2

Carlo Rossi 333333 Piazza Genova, 3

Libro Autore Nome Cognome Indirizzo

Fluency Snyder Andrea Bianchi Via Roma, 1

La Relatività Einstein Beatrice Verdi Corso Milano, 2

Tabella: Libri prestati

I problemi derivanti dalla ridondanza

• Spreco di spazio di memorizzazione:

– le stesse informazioni vengono memorizzate due volte: sarà necessario utilizzare il doppio dello spazio per memorizzare quei dati

• Inconsistenza dei dati:

– se un dato cambia, deve essere cambiato in tutte le tabelle dove quel dato è presente.

– è difficile verificare automaticamente che questa operazione venga realizzata correttamente

– se non viene realizzata correttamente, i dati diventano inconsistenti

Esempio di inconsistenza dei dati

Tabella: StudentiNome Cognome Matricola Indirizzo

Andrea Bianchi 111111 Via Roma, 1

Beatrice Verdi 222222 Viale Monza, 4

Carlo Rossi 333333 Piazza Genova, 3

Libro Autore Nome Cognome Indirizzo

Fluency Snyder Andrea Bianchi Via Roma, 1

La Relatività Einstein Beatrice Verdi Corso Milano, 2

Tabella: Libri prestati

• Beatrice Bianchi cambia indirizzo e comunica la modifica solo alla segreteria (ma non alla biblioteca)

“mmm, non capisco dovevuoi andare a parare”• “Va bene, ho capito che la

ridondanza è tanto brutta, però l’informazione dell’indirizzo serve in entrambe le tabelle, quindi non posso fare a meno di duplicarla”

La soluzione: l’intuizione

• Nella tabella della biblioteca non memorizzo tutte le informazioni di uno studente, ma solo la sua matricola:

Tabella: StudentiNome Cognome Matricola Indirizzo

Andrea Bianchi 111111 Via Roma, 1

Beatrice Verdi 222222 Corso Milano, 2

Carlo Rossi 333333 Piazza Genova, 3

Titolo Autore Matricola

Fluency Snyder 111111

La Relatività Einstein 222222

Tabella: Libri

La soluzione: cosa abbiamo fatto

• Abbiamo scelto l’insieme di attributi {Matricola} come chiave primaria della tabella Studenti

• Nella tabella Libri usiamo un riferimento alla matricola dello studente che ha preso in prestito il libro:

– l’insieme di attributi {Matricola} prende il nome di chiave esterna

La chiave esterna

• Una chiave esterna è un insieme di attributi di una tabella che fanno riferimento alla chiave primaria di un’altra tabella.

“Non mi stai convincendo”

• “Ci sono almeno due cose che non mi vanno bene di quello che ci hai appena detto:

1. non hai tolto del tutto la ridondanza dei dati, in quanto la matricola viene sempre ripetuta due volte

2. nella tabella Libri non ci sono più i dettagli dello studente ma solo la matricola: se volessi sapere come si chiama chi ha preso un certo libro, come faccio?”

1 – la ridondanza

• E’ vero che la chiave esterna ripete i valori della chiave primaria

– nel nostro esempio: Libri.Matricola ripete i valori di Studenti.Matricola

1 – la ridondanza (cont)

• tuttavia:

– abbiamo scelto una chiave primaria che richiede poco spazio per essere memorizzata (dunque si spreca poco spazio)

– abbiamo aggiunto metadati (abbiamo specificato che Libri.Matricola è una chiave esterna che si riferisce a Studenti.Matricola) quindi possiamo aggiornare automaticamente i dati qualora un valore di Studenti.Matricola o di Libri.Matricolavenisse aggiornato.

2-la completezza dei dati

• Come fa la libreria a sapere il nome degli studenti a cui i libri sono stati prestati?

• Applichiamo un’operazione tra tabelle:

– quale?

– Usiamo il Join naturale

2-la completezza dei dati (cont)

• Usiamo il Join naturale

LibriStudenti = join Libri, Studenti on Studenti.Matricola =

Libri.Matricola

Titolo Autore Libri.Matricola

Nome Cognome Studenti.Matricola

Indirizzo

Fluency Snyder 111111 Andrea Bianchi 111111 Via Roma, 1

La Relatività Einstein 222222 Beatrice Verdi 222222 Corso Milano, 2

Relazioni tra tabelle

• Relazione tra tabelle: corrispondenza tra attributi di una tabella con alcuni attributi di un’altra tabella.

– Es: Studenti e Libri sono in relazione in quanto Libri.Matricolaè una chiave esterna che fa riferimento a Studenti.Matricola

– La relazione inPrestitoA collega Libri a Studenti

– diagramma entità-relazione: è uno schema usato per rappresentare le entità (con i loro attributi) e le loro relazioni

Libro

TitoloAutore

Studente

NomeCognomeMatricolaIndirizzo

inPrestitoA

Esempi Relazioni

Il modello relazionale

Il Modello Relazionale può essere ricavato direttamente dal

Modello E/R attraverso una sequenza di operazioni di

conversione:

Conversione Entità:

Si crea ana tabella per ciascuna entità del Modello E/R

• Inserendo i campi gli stessi attributi semplici dell'entità di

provenienza

• chiave primaria scelta tra le chiavi candidate

Il modello relazionale

• Inserire nelle relazioni gli attributi composti delle entità,

considerando però solo gli attributi semplici componenti.

Ad esempio, se nel Modello E/R avevamo un attributo composto

"indirizzo" dell'entità "studente" costituito a sua volta da "via",

"numero", "città", ecc. allora nella relazione dovremo

considerare tali sotto-attributi come tanti campi indipendenti.

Il modello relazionale

• Le relazioni 1:1 si possono conglobare come le 1:N, a scelta nell'una o nell'altra tabella.

• Le relazioni N:1 si possono conglobare nella tabella relativa all'entità dalla parte dell' 1. La chiave della tabella dalla parte dell' N viene inglobata nella tabella dalla parte dell' 1.

Il modello relazionale

Associazioni:

• Le associazioni M:N devono essere tradotte in tabelle che hanno come attributi gli eventuali attributi della relazione e (da non dimenticare!) le chiavi di entrambe le entità collegate dalla relazione.

Esercizi

Testo del problema

Si vuole costruire una base dati per un'azienda sanitaria locale, tenendo traccia delle seguenti informazioni:

• Gli ospedali sono caratterizzati da un codice identificativo, dal nome e dall'indirizzo

• I dipendenti di ciascun ospedale sono caratterizzati dalla matricola (univoca all'interno dell'ospedale), dal cognome, dal nome, dalla data di nascita, dall'indirizzo e dal numero di figli a carico.

• L'ospedale è suddiviso in reparti, caratterizzati da un codice, un nome, il numero di posti letto disponibili.

Modello relazionale

• Ospedale(CodOsp, Nome, Indirizzo)

• Dipendente(Matricola, Nome, Cognome, DataNascita, Indirizzo, Figli, Tipo, Mansione, CodOsp, CodR)

• Reparto(CodR, Nome, PostiLetto, CodOsp)

Esercizi

Testo del problema

Si vuole rappresentare una base di dati per la gestione delle informazioni relative ai musei di una città, tenendo conto delle seguenti informazioni:

• Ciascun museo è identificato attraverso il suo nome. Inoltre la base dati contiene le informazioni relative all'indirizzo del museo, il numero telefonico, il numero di fax e l'indirizzo del relativo sito web (se esiste)

• Le mostre che si tengono nella città sono indentificate univocamente dal nome dell'argomento della mostra e dal nome del museo presso cui la mostra stessa è tenuta (ad es. David Hockney alla GAM, i Fauves a Palazzo Bricherasio,….). Inoltre sono noti l'intervallo di tempo in cui la mostra si è tenuta in quel museo ed il numero di persone che hanno visitato la mostra stessa.

Esercizi

• Per incentivare l'afflusso di visitatori ai musei, è possibile acquistare una tessera di abbonamento annuale ai musei, che da' diritto a visitare tutte le mostre organizzate nella città. Gli abbonamenti possono essere di vario tipo: per ciascuno di essi è nota la categoria ("Giovani", "Regolari", "Anziani") ed il costo. Le tessere di abbonamento sono identificate univocamente attraverso un codice numerico.

Traduzione modello relazionale

• Museo(Nome, Indirizzo, Telefono, Fax, Web)

• Mostra(NomeMostra, DataInizio, DataFine, NumeroVisitatori, NomeMuseo)

• Abbonamento(CodA, Tipo, Costo, Rinnovo, NomeMuseo)

Esercizi

Testo del problema

Si vuole rappresentare una base dati per una società di spedizione di pacchi, tenendo conto delle seguenti informazioni:

• le sedi della società di spedizione sono dislocate sul territorio nazionale. Ciascuna sede è identificata da un codice e caratterizzata da indirizzo, numero di telefono e nominativo del responsabile.

• I dipendenti della società di spedizione, identificati da una matricola univoca per ogni sede, sono caratterizzati da nome, indirizzo, data di nascita e mansione.

• I clienti della società di spedizione sono identificati da un codice e caratterizzati da un nome, un indirizzo, il responsabile amministrativo e da un insieme di più numeri telefonici di riferimento.

Esercizi

Testo del problema

Si vuole rappresentare una base dati per una società di spedizione di pacchi, tenendo conto delle seguenti informazioni:

• I pacchi che vengono trasmessi si distinguono in documenti cartacei ed in altri tipi di pacchi. Ogni pacco ha un codice univoco relativo alla sede di spedizione ed è caratterizzato da data e ora in cui è stato consegnato dal mittente.

Per ogni documento si vuole memorizzare il peso; per gli altri pacchi si indicano le dimensioni del pacco, se il pacco è fragile e se contiene materiali degradabili. Ad ogni pacco corrisponde un unico cliente mittente. Inoltre, per ogni pacco sono noti il giorno e l’ora di arrivo nella sede destinazione del pacco.

Traduzione modello relazionale

• Sede(CodS, Indirizzo, Ntel, MatrResp)

• Dipendente(Matr, Nome, Mansione, DataNascita, Indirizzo, CodSede)

• Cliente(CodC, Nome, Indirizzo)

• Pacco(CodP, DataSpedizione, Oraspedizione, Tipo Indirizzo, CodeSedeP, CodeSedeA, CodC)