Modello relazionale Basi di dati relazionali - di.unito.itanselma/lingue/11DBRelazionali.pdf ·...

15
1 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere) Basi di dati relazionali Materiale aggiuntivo per il corso di laurea in Lingue e Culture per il Turismo classe L-15 Ultima modifica: 11/11/2013 Modello relazionale Introdotto nel 1970 Affermatosi negli anni 80 Attualmente è il modello di DB più diffuso: probabilmente ogni DB che incontrerete sarà relazionale 2 Il modello relazionale Modello logico dei dati basato sui concetti di relazione e tabella Relazione: nozione matematica Tabella: rappresentazione grafica di una relazione; un concetto intuitivo 3 Modello relazionale Relazione = rappresentazione di unentità tramite attributi Graficamente, una relazione può essere rappresentata da una tabella: Colonna = attributo (oppure campo) Riga = valore degli attributi di un individuo appartenente allentità 4 Modello relazionale Garantisce indipendenza dei dati Utenti che accedono ai dati e programmatori che sviluppano applicazioni fanno riferimento al livello logico dei dati Cioè, agli utenti e ai programmatori, non serve sapere come i dati sono memorizzati fisicamente 5 Schema di una relazione Schema di una relazione = definizione della struttura della relazione È formata dallintestazione della relazione: NomeRelazione(Attr 1 ,…, Attr n ) • Per esempio: nella relazione Studenti Studenti(Matricola, Cognome, Nome, Sesso, DataDiNascita, LuogoDiNascita) 6

Transcript of Modello relazionale Basi di dati relazionali - di.unito.itanselma/lingue/11DBRelazionali.pdf ·...

1 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Basi di dati relazionali

Materiale aggiuntivo per il corso di laurea in Lingue e

Culture per il Turismo classe L-15

Ultima modifica: 11/11/2013

Modello relazionale !  Introdotto nel 1970 !  Affermatosi negli anni ’80 !  Attualmente è il modello di DB più diffuso: probabilmente ogni DB che incontrerete sarà relazionale

2

Il modello relazionale !  Modello logico dei dati basato sui

concetti di relazione e tabella !  Relazione: nozione matematica !  Tabella: rappresentazione grafica di

una relazione; un concetto intuitivo

3

Modello relazionale !  Relazione = rappresentazione di

un’entità tramite attributi !  Graficamente, una relazione può

essere rappresentata da una tabella: !  Colonna = attributo (oppure campo) !  Riga = valore degli attributi di un

individuo appartenente all’entità

4

Modello relazionale !  Garantisce indipendenza dei dati

!  Utenti che accedono ai dati e programmatori che sviluppano applicazioni fanno riferimento al livello logico dei dati

!  Cioè, agli utenti e ai programmatori, non serve sapere come i dati sono memorizzati fisicamente

5

Schema di una relazione !  Schema di una relazione = definizione

della struttura della relazione !  È formata dall’intestazione della relazione:

NomeRelazione(Attr1,…, Attrn) •  Per esempio: nella relazione Studenti Studenti(Matricola, Cognome, Nome, Sesso,

DataDiNascita, LuogoDiNascita)

6

2 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Schema di una base di dati

!  Schema di una base di dati = insieme degli schemi delle relazioni (struttura)

!  Lo schema di una base di dati non (dovrebbe) varia(re) nel tempo

!  Ciò che varia sono i valori dei dati nelle tabelle (record)

7

Accesso ai dati !  Mediante linguaggi testuali (per

esempio, SQL (Structured Query Language))

!  Tramite comandi speciali integrati nei linguaggi di programmazione

!  Tramite interfacce “amichevoli” (per esempio, Wizards, in Access, ecc.)

8

Accesso ai dati

!  Esempio: !   Mediante linguaggi

testuali (per esempio, SQL)

!   … !   Tramite interfacce “amichevoli” (per esempio, Wizards, in Access, ecc.)

Un esempio di SQL: SELECT Disco,GruppoMusicale FROM Gruppi WHERE GruppoMusicale=“Radiohead” OR GruppoMusicale=“Franz Ferdinand”

9

Relazioni e tabelle !  Relazioni rappresentate graficamente

come tabelle !  Le righe si chiamano tuple o record !  Per esempio: risultati partite di calcio

SquadraDiCasa SquadraOspitata RetiCasa RetiOspitata

Torino Lazio 3 2

Roma Milan 2 0 Juventus Roma 0 2

Roma Milan 2 1

10

Relazioni e tabelle

Torino Lazio 3 2 Roma Milan 2 0 Juventus Roma 0 2 Roma Milan 2 1

Sequenza di caratteri (stringa)

Numero naturale (intero)

11

Relazioni e tabelle !  Una relazione è un insieme di tuple:

!  le tuple della relazione devono essere distinte (no righe ripetute in tabella)

!  le tuple non sono tra loro ordinate (tabelle con stesse righe ordinate in modo diverso rappresentano la stessa relazione)

12

3 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Relazioni con attributi !  Attributi

!  Usiamo nome di attributo per identificare le rispettive componenti delle tuple

!  In una tabella: attributo → intestazione di colonne della tabella

!  Per esempio: !  SquadraDiCasa, SquadraOspitata, RetiCasa,

RetiOspitata

13

Relazioni con attributi

SquadraDiCasa SquadraOspitata RetiCasa RetiOspite

Torino Lazio 3 2

Roma Milan 2 0 Juventus Roma 0 2

Roma Milan 2 1

14

Relazioni e Basi di Dati !   Un DB è solitamente costituito da più relazioni

le cui tuple contengono valori comuni (usati per stabilire corrispondenza tra tuple)

!   Per esempio: relazioni che descrivono studenti, esami e corsi

15

Matricola Cognome Nome DataNascita 276545 Rossi Maria 25/11/1981 485745 Neri Anna 23/04/1982 200768 Verdi Fabio 12/02/1982 587614 Rossi Luca 10/10/1981 937653 Bruni Mario 01/12/1981

Studenti

Relazioni e Basi di Dati

16

Codice Titolo Docente 01 Analisi Giani 03 Chimica Melli 04 Chimica Belli

Studente Voto Corso 276545 28 01 485745 27 04 200768 25 01 587614 24 04

Esami

Corsi

Relazioni e Basi di Dati !  Sono ammissibili relazioni con un solo

attributo !  Per esempio:

!  Si possono rappresentare informazioni complesse mediante relazioni diverse

17

Matricola 276545 485745 200768

Lavoratori

Schemi di relazioni e di DB !  Schema di relazione: R(X)

!  Costituita da simbolo R (nome della relazione) e dall’insieme dei nomi di attributi X={A1,…,An}

!  Per esempio: !  Esami(Studente,Voto,Corso)

18

Studente Voto Corso 276545 28 01 485745 27 04 200768 25 01 587614 24 04

Esami

4 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Schemi di relazioni e di DB

!  Schema di base di dati: D={R1(X1),…, Rn(Xn)} !  Insieme di schemi di relazioni

•  Le relazioni sono identificate per nome è i nomi devono essere diversi

!  Per esempio: Università = �

{ Studenti(Matricola,Cognome,Nome,DataNascita), Esami(Studente,Voto,Corso), Corso(Codice,Titolo,Docente) }

19

Esempi di relazioni

20

“DA MARIO”

Ricevuta n. 1357

Del 5/2/04

3 coperti 3,00

2 antipasti 6,00

3 primi 12,00

2 bistecche 18,00

Totale 39,00

“DA MARIO”

Ricevuta n. 2334

Del 7/2/04

2 coperti 2,00

1 antipasti 3,00

2 primi 8,00

2 orate 14,00

2 caffè 2,00

Totale 29,00

“DA MARIO”

Ricevuta n. 3002

Del 13/2/04

3 coperti 3,00

2 antipasti 6,00

3 primi 14,00

1 Orate 18,00

1 Caprese 2,00

2 Caffè 2,00

Totale 45,00

Esempi di relazioni

!  Le ricevute hanno una struttura che prevede alcune informazioni fisse !  Numero, data e totale

!  … e un numero di righe variabile

21

Esempi di relazioni

22

Num Qtà Descr Importo

1357 3 Coperti 3,00

1357 2 Antipasti 6,00

1357 3 Primi 12,00

1357 2 Bistecche 18,00

2334 2 Coperti 2,00

2334 1 Antipasti 3,00

2334 2 Primi 8,00

2334 2 Orate 14,00

2334 2 Caffè 2,00

3002 3 Coperti 3,00

3002 2 Antipasti 6,00

3002 3 Primi 14,00

3002 1 Orate 18,00

3002 1 Caprese 2,00

3002 2 Caffè 2,00

Num Data Totale 1357 5/2/04 39,00

2334 7/2/04 29,00

3002 13/2/04 45,00

Ricevute

Dettaglio

Esempi di relazioni

!  La base di dati nella slide precedente rappresenta correttamente le ricevute solo a due condizioni: !  Non ci interessa mantenere traccia

dell’ordine con cui le righe compaiono in ciascuna ricevuta

!  In una ricevuta non compaiono due righe uguali

!  Altrimenti, si può risolvere il problema aggiungendo un attributo, che indica la posizione della riga sulla ricevuta

23

Esempi di relazioni

24

Num Posiz Qtà Descr Importo

1357 1 3 Coperti 3,00

1357 2 2 Antipasti 6,00

1357 3 3 Primi 12,00

1357 4 2 Bistecche 18,00

2334 1 2 Coperti 2,00

2334 2 1 Antipasti 3,00

2334 3 2 Primi 8,00

2334 4 2 Orate 14,00

2334 5 2 Caffè 2,00

3002 1 3 Coperti 3,00

3002 2 2 Antipasti 6,00

3002 3 3 Primi 14,00

3002 4 1 Orate 18,00

3002 5 1 Caprese 2,00

3002 6 2 Caffè 2,00

Num Data Totale 1357 5/2/04 39,00

2334 7/2/04 29,00

3002 13/2/04 45,00

Ricevute

Dettaglio

5 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Esempi di relazioni

25

Esami

Studenti Matricola Nome Cognome 654321 Mario Rossi

321654 Franca Verde

123456 Marta Bianco

456123 Livia Nero

135246 Marta Bianco Studente Cod

Corso Voto Lode Data

123456 0010 19 No 1/2/2010

654321 0021 30 No 3/2/2010

456123 0001 24 No 2/2/2010

321654 0121 30 Sì 7/2/2010

123456 0001 21 No 9/2/2010

135246 0010 25 No 1/2/2010

Esempio di cattivo DB

26

Esami

Studenti

Nome studente

Cognome studente

Ultimo esame superato

Voto Lode Data

Marta Bianco 0010 19 No 1/2/2010 Mario Rossi 0021 30 No 3/2/2010 Livia Nero 0001 24 No 2/2/2010 Franca Verde 0121 30 Sì 7/2/2010

Matricola Nominativo Esami superati Media

654321 Rossi Mario 23 27

321654 Verde Franca 13 21

123456 Bianco Marta 0

456123 Nero Livia 10 26

135246 Bianco Marta 13 24

Esempio di cattivo DB

27

Esami

Studenti

Nome studente

Cognome studente

Ultimo esame superato

Voto Lode Data

Marta Bianco 0010 19 No 1/2/2010 Mario Rossi 0021 30 No 3/2/2010 Livia Nero 0001 24 No 2/2/2010 Franca Verde 0121 30 Sì 7/2/2010

Matricola Nominativo Esami superati Media

654321 Rossi Mario 23 27

321654 Verde Franca 13 21

123456 Bianco Marta 0

456123 Nero Livia 10 26

135246 Bianco Marta 13 24

Non si può risalire univocamente allo studente a causa delle possibili omonimie

Di solito, i DB contengono dati “primitivi”, non risultati di calcoli statistici sui dati

Nonostante l’interfaccia utente possa consentire di inserire un solo esame per volta, occorre memorizzare tutti gli esami

Dato “poco strutturato”: un solo attributo per nome e cognome impedisce di effettuare ricerche per cognome

Esempio di cattivo DB

28

Studenti Matricola Nome Cognome Voto

Esame 1 Data Esame 1

… Voto Esame 33

Data Esame 33

654321 Mario Rossi 30 e lode 14/02/09 NULL NULL

321654 Franca Verde 18 12/01/08 28 12/01/10

123456 Marta Bianco 27 01/01/01 NULL NULL

456123 Livia Nero NULL NULL NULL NULL

135246 Marta Bianco NULL NULL NULL NULL

Si limita in modo arbitrario e restrittivo il numero di esami; probabilmente non è stato disegnato lo schema EA: i dati degli esami dovrebbero essere rappresentati in una tabella distinta

Dato “poco strutturato”: è poco agevole, per es., calcolare le medie o contare le lodi in modo automatico

Informazione incompleta e valori nulli

!  In una tupla di una relazione un attributo può non avere valore !  Per esempio: Mario Rossi non ha telefono in

Persone(CF,Cognome,Nome,Indirizzo,Telefono) !  Oppure il valore di un attributo potrebbe

esistere ma essere sconosciuto a chi inserisce i dati nel DB !  Per esempio: Mario Rossi ha telefono, ma non

ne conosciamo il numero

29

Informazione incompleta e valori nulli

!  NULL: valore nullo !  Assegnato agli elementi di tuple inesistenti

o sconosciuti !  NULL è un valore aggiuntivo rispetto al

dominio di un attributo

30

6 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Informazione incompleta e valori nulli

!  Nelle basi di dati, i due casi sopra sono trattati come assenza di informazione

!  In assenza di informazione su un attributo bisogna usare NULL perché NULL non può venire confuso con gli altri valori del dominio dell’attributo

31

Informazione incompleta e valori nulli

!  Per esempio: !  Numero di telefono sconosciuto potrebbe

essere rappresentato con 0 (numero che nessun telefono può avere). Però questa convenzione non è generalizzabile

!  Inoltre, per altri attributi, potrebbe non esistere un valore di dominio che non si può assegnare mai

è usare NULL

32

Informazione incompleta e valori nulli

!   Non tutti gli attributi di una relazione devono potere assumere valore nullo

!   Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple

33

Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL

NULL Neri Anna 23/04/1982

NULL Verdi Fabio 12/02/1982

587614 Rossi Luca 10/10/1981

937653 Bruni Mario 01/12/1981

Studenti

Informazione incompleta e valori nulli

!   Non tutti gli attributi di una relazione devono potere assumere valore nullo

!   Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple

34

Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL

NULL Neri Anna 23/04/1982

NULL Verdi Fabio 12/02/1982

587614 Rossi Luca 10/10/1981

937653 Bruni Mario 01/12/1981

Studenti

OK

Informazione incompleta e valori nulli

!   Non tutti gli attributi di una relazione devono potere assumere valore nullo

!   Nella definizione di relazione, si può specificare quali attributi non devono mai essere nulli nelle tuple

35

Matricola Cognome Nome DataNascita 276545 Rossi Maria NULL

NULL Neri Anna 23/04/1982

NULL Verdi Fabio 12/02/1982

587614 Rossi Luca 10/10/1981

937653 Bruni Mario 01/12/1981

Studenti

No: matricola usata per correlare relazione

Informazione incompleta e valori nulli

36

No: informazione inutile

Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli

Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL

Esami

Corsi

7 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Informazione incompleta e valori nulli

37

No: informazione inutile

Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli

Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL

Esami

Corsi

Informazione incompleta e valori nulli

38

Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli

Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL

Esami

Corsi

No: codice usato Per correlare relazione

Informazione incompleta e valori nulli

39

Codice Titolo Docente 01 Analisi Giani 03 Chimica NULL NULL Chimica Belli

Studente Voto Corso 276545 28 01 NULL 27 NULL 200768 25 01 587614 24 NULL

Esami

Corsi

OK

Istanze incoerenti !  Non tutte le tuple rappresentano

informazione corretta per un’applicazione !  Valori nulli !  Valori fuori del dominio di un attributo

•  Per esempio: voto = 36

!  Tuple incoerenti (valori di più attributi non simultaneamente assegnabili) •  Per esempio: voto = 24, lode = Sì

40

Istanze incoerenti … !  Tuple con valori uguali per attributi

identificanti •  Per esempio: tuple con la stessa matricola in

relazione Studenti !  Valori inesistenti in attributi usati per

corrispondenze tra relazioni •  Per esempio: studente in relazione Esami non

presente nella relazione Studenti

41

Vincoli di integrità !  Proprietà che devono essere soddisfatte

dalle istanze corrette per un’applicazione

!  Sono predicati che associano ad ogni istanza il valore vero o falso !  Vero: istanza corretta (ammissibile, lecita) !  Falso: istanza incoerente

42

8 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di integrità !  Definendo lo schema di una base di dati

si associano vincoli di integrità che si riferiscono a tutte le istanze della base di dati

!  Questi vincoli permettono di considerare corrette le sole istanze che li verificano tutti

43

Vincoli intrarelazionali Vincoli interni a una relazione:

!   Soddisfacimento definito rispetto ad una singola relazione della base di dati

!   Vincolo di tupla: esprime condizioni sui valori di ciascuna tupla indipendentemente dalle altre tuple !   Vincolo di dominio (vincolo su valori): restrizione su

dominio di attributo !   Vincoli su assegnamento di valori ad attributi diversi

di una tupla

44

Vincoli di tupla !  Esprimibili mediante espressioni booleane

(AND, OR, NOT) i cui termini contengono: !  Uguaglianze (=), disuguaglianze (<>),

ordinamenti (<,>,<=,>=) di valori di attributo

!  Espressione aritmetiche su valori di attributo

45

p q p AND q F F F

F T F

T F F

T T T

p q p OR q F F F

F T T

T F T

T T T

p NOT p F T

T F

Vincoli di tupla !  Per esempio:

!  Vincolo di dominio Voto >= 18 AND Voto <= 30

!  Vincolo su più attributi

NOT(Lode = “Sì” AND Voto <> 30)

!  Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute

46

Vincoli di tupla !  Per esempio:

!  Vincolo di dominio Voto >= 18 AND Voto <= 30

47

Studente Corso Voto Lode 123456 0010 30 Sì 654321 0021 18 No 456123 0001 24 No 321654 0121 30 Sì 135246 0001 25 No

Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo

Vincoli di tupla !  Per esempio:

!  Vincolo di dominio Voto >= 18 AND Voto <= 30

48

Studente Corso Voto Lode 123456 0010 30 Sì 654321 0021 18 No 456123 0001 24 No 321654 0121 36 Sì 135246 0001 25 No

Un record della tabella non soddisfa il vincolo Quindi, la relazione/tabella non soddisfa il vincolo

9 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di tupla !  Per esempio:

!  Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)

49

Studente Corso Voto Lode 123456 0010 30 Sì 654321 0021 18 No 456123 0001 24 No 321654 0121 30 Sì 135246 0001 25 No

Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo

Vincoli di tupla !  Per esempio:

!  Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)

50

Studente Corso Voto Lode 123456 0010 30 Sì 654321 0021 18 No 456123 0001 24 No 321654 0121 26 Sì 135246 0001 25 No

Una riga della tabella non soddisfa il vincolo Quindi, la relazione/tabella non soddisfa il vincolo

Vincoli di tupla !  Per esempio:

!  Vincolo su più attributi NOT(Lode = “Sì” AND Voto <> 30)

51

Studente Corso Voto Lode 123456 0010 30 No 654321 0021 18 No 456123 0001 24 No 321654 0121 30 Sì 135246 0001 25 No

Un cambiamento in questa cella, ma comunque la tupla/record soddisfa il vincolo La relazione/tabella continua a soddisfare il vincolo

Vincoli di tupla !  Per esempio:

!  Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute

52

Importo Ritenute Netto 30 10 20 45 15 30 50 5 45 20 8 12 5 3 2

Tutte le tuple/record della relazione/tabella soddisfano il vincolo Quindi, diciamo che la relazione/tabella soddisfa il vincolo

Vincoli di tupla !  Per esempio:

!  Pagamenti(Data, Importo, Ritenute, Netto) Netto = Importo - Ritenute

53

Importo Ritenute Netto 30 10 20 45 15 30 50 5 5 20 8 12 5 3 25

Alcune tuple/record della tabella non soddisfano il vincolo Quindi, la relazione/tabella non soddisfa il vincolo

Vincoli di chiave !   Superchiave: insieme di attributi usato per

identificare univocamente le tuple di una relazione

!   Più formalmente, un insieme di attributi K è detto superchiave di una relazione r se r non può contenere due tuple che hanno valori uguali su K

!   È quella che in precedenza e impropriamente abbiamo chiamato “chiave primaria”

54

10 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di chiave !  {Matricola} è una superchiave

55

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Cognome, Nome, DataDiNascita} è

una superchiave (forse insufficiente)

56

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Matricola, Corso} è una superchiave

57

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Matricola, Cognome, Nome,

DataDiNascita, CorsoDiLaurea} è una superchiave

58

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Nome, Corso} non è una superchiave

59

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Nome, Corso} sembra una superchiave “per caso”

60

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Informatica

Studenti

! Il concetto di superchiave riguarda tutte le possibili tuple di una relazione e non soltanto quelle esistenti in un dato momento

11 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di chiave !   Dato che una relazione è un insieme di tuple e

che in un insieme non possono esistere due elementi uguali, in una relazione non possono esistere due tuple identiche: quindi l’intero insieme degli attributi di una relazione è banalmente una superchiave per qualunque relazione

!   Quindi è utile restringere il concetto di superchiave…

61

Vincoli di chiave !  K è una chiave (candidata) di r se è una

superchiave minimale di r Minimale = se si toglie un attributo dalla superchiave, questa non è più superchiave

!  Di conseguenza, ogni chiave è una superchiave

!  L’insieme di tutti gli attributi di una relazione, pur essendo una superchiave, non è detto che sia una chiave, infatti potrebbe essere una superchiave non minimale 62

Vincoli di chiave !  {Matricola} è una chiave

63

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Cognome, Nome, DataDiNascita} è

una chiave

64

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  {Matricola, Corso} è una superchiave,

ma non una chiave

65

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

4328 Rossi Luigi 29/04/79 Informatica

6328 Rossi Dario 29/04/79 Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca 01/05/81 Economia

5536 Neri Luca 05/03/78 Economia

Studenti

Vincoli di chiave !  Una chiave primaria di r è una

particolare chiave (candidata) di r scelta dal progettista del DB come modo preferito per identificare univocamente le tuple di r

!  Ogni relazione ha una chiave primaria, mentre può avere più di una chiave (candidata)

66

12 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di chiave

67

Superchiavi

Chiavi

Chiave primaria

Vincoli di chiave !   N.B.: Il concetto di chiave è relativo alla

relazione: uno stesso insieme di attributi potrebbe essere chiave di una relazione, ma non esserlo di un’altra

!   Per es., l’attributo Matricola è chiave della relazione Studenti, ma non della relazione Esami

Esempi di relazioni

69

Esami

Studenti Matricola Nome Cognome 654321 Mario Rossi

321654 Franca Verde

123456 Marta Bianco

456123 Livia Nero

135246 Marta Bianco

Studente Corso Voto Lode Data 123456 0010 19 No 1/2/2010

654321 0021 30 No 3/2/2010

456123 0001 24 No 2/2/2010

321654 0121 30 Sì 7/2/2010

123456 0001 21 No 9/2/2010

135246 0010 25 No 1/2/2010

Codice Nome 0010 Inglese

0021 Psicologia clinica

0001 Informatica

0121 Diritto

Corsi

Vincoli di chiave !  Ogni relazione ha almeno una chiave

(banalmente può essere l’insieme di tutti gli attributi). Questo fatto garantisce: !  Identificabilità univoca dei dati !  Possibilità di definire corrispondenze tra dati

contenuti in relazioni diverse

!  Per esempio: nella base di dati Università !  Studente corrisponde a Matricola della

relazione Studenti !  Corso corrisponde a Codice della relazione

Corsi 70

Chiave e valori nulli !  Tupla 1: ha entrambi le chiavi

incomplete ({Matricola} e {Cognome, Nome, DataDiNascita})

71

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

NULL Rossi Dario NULL Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca NULL NULL

NULL Neri Luca 05/03/78 Economia

Chiave e valori nulli !  Tuple 3 e 4: hanno una chiave

completamente specificata, ma è sicuro che non siano lo stesso individuo?

72

Matricola Cognome Nome DataDi Nascita

CorsoDi Laurea

NULL Rossi Dario NULL Informatica

4766 Rossi Luca 01/05/81 Fisica

4856 Neri Luca NULL NULL

NULL Neri Luca 05/03/78 Economia

13 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Chiave e valori nulli !  Chiave primaria: la chiave primaria non

può assumere valori nulli !  Identificata mediante sottolineatura !  Usata per stabilire corrispondenza tra

relazioni !  Se nessun attributo della relazione può

assumere il ruolo di chiave primaria, se ne definisce uno aggiuntivo a tale scopo

73

Vincoli interrelazionali !  I vincoli interrelazionali sono i vincoli

che coinvolgono più relazioni della base di dati

!  Per verificare che siano rispettati, occorre considerare istanze di più relazioni

74

Vincoli interrelazionali !  Vincoli di integrità referenziale (foreign

keys, referential integrity constraints): !  Servono a garantire che i riferimenti tra

tabelle siano possibili !  Un vincolo di integrità referenziale fra

insieme di attributi X di una relazione R1 ed una relazione R2 è soddisfatto se i valori su X di ciascuna tupla di R1 (eccetto potenzialmente NULL) compaiono come valori della chiave (di solito primaria) di R2. In altre parole: R1 non può contenere valori per X che non esistono in R2 (eccetto NULL)

75

Vincoli di integrità referenziale

76

K1 A K2 …

R1 R2

Vincoli di integrità referenziale !  Per esempio: le relazioni

Studenti(Matricola,Cognome,Nome,DataNascita) Corsi(Codice,Titolo,Docente) Esami(Studente,Corso,Data,Voto,Lode)

–  I valori dell’attributo Studente nella relazione Esami devono comparire come valori di Matricola nella relazione Studenti (indicato come freccia che va dall’attributo Studente all’attributo Matricola)

–  I valori dell’attributo Corso nella relazione Esami devono comparire come valori di Codice nella relazione Corsi (indicato come freccia che va dall’attributo Corso all’attributo Codice)

77

Vincoli di integrità referenziale

78

Codice Data Agente Articolo Targa

987554 26/10/02 456 34 RM2F7643

630876 15/10/93 456 53 FI4E5432

Matricola CF Cognome Nome

456 RSSM… Rossi Mario

638 NREP… Neri Piero

Targa Proprietario Indirizzo

RM2F7643 Verdi Piero Via Tigli

MI2F7643 Luci Gino Via Noci

FI4E5432 Bini Luca Via Po

Infrazioni

Agenti

Auto

14 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Vincoli di integrità referenziale

79

Codice Data Agente Articolo Targa

987554 26/10/02 456 34 RM2F7643

630876 15/10/93 456 53 FI4E5432

Matricola CF Cognome Nome

456 RSSM… Rossi Mario

638 NREP… Neri Piero

Targa Proprietario Indirizzo

RM2F7643 Verdi Piero Via Tigli

MI2F7643 Luci Gino Via Noci

FI4E5432 Bini Luca Via Po

Infrazioni

Agenti

Auto

Vincoli di integrità referenziale

80

Codice Data Agente Articolo Targa

987554 26/10/02 456 34 RM2F7643

630876 15/10/93 456 53 FI4E5432

Matricola CF Cognome Nome

456 RSSM… Rossi Mario

638 NREP… Neri Piero

Targa Proprietario Indirizzo

RM2F7643 Verdi Piero Via Tigli

MI2F7643 Luci Gino Via Noci

FI4E5432 Bini Luca Via Po

Infrazioni

Agenti

Auto

Esercizi !   La tabella seguente soddisfa il vincolo

SeggiAperti>400 AND SeggiAperti<600 ?

81

Regione SeggiAperti Piemonte 567 Lombardia 670 Puglia 504 Sicilia 594

Esercizi !   La tabella seguente soddisfa il vincolo

NOT(Lode = “Sì” AND Voto <> 30) ?

82

MatricolaStudente

CodiceCorso

Voto Lode

123456 0010 19 No 654321 0021 30 No 456123 0001 24 No 321654 0121 20 Sì 135246 0001 24 No

Esercizi !  Quali sono le superchiavi della tabella

seguente?

83

MatricolaStudente

CodiceCorso

Voto Lode

123456 0010 19 No 654321 0021 30 No 456123 0001 24 No 321654 0121 20 Sì 135246 0001 24 No

Esercizi !  Quali sono le chiavi della tabella

seguente?

84

MatricolaStudente

CodiceCorso

Voto Lode

123456 0010 19 No 654321 0021 30 No 456123 0001 24 No 321654 0121 20 Sì 135246 0001 24 No

15 Corso di Informatica (per classe L-15 – Dipartimento di Lingue e Letterature Straniere)

Esercizi !  È rispettato il vincolo di integrità

referenziale dall’attributo Studente all’attributo Matricola?

85

Studente Cod Corso

Voto Lode Data

123456 0010 19 No 1/2/06 654321 0021 30 No 3/2/06 456123 0001 24 No 2/2/06 321654 0121 30 Sì 7/2/06 123456 0001 21 No 9/2/06 135246 0010 25 No 1/2/06

Matricola Nome Cognome 654321 Mario Rossi 321654 Franca Verde 123456 Marta Bianco 456123 Livia Nero 135246 Gianfranco Bianco