Issuu on Google+

Database 4.1 Relazioni tra i dati: i database (DB) L’orario settimanale regola l’attività scolastica e generalmente si presenta come una tabella ore/giorni della settimana. Nella scuola operano tuttavia diverse persone che, a seconda del ruolo che ricoprono, hanno bisogno di reperire dall’orario informazioni diverse. Ad esempio le caselle dell’orario di un allievo contengono il nome e il numero dell’aula delle materie che devono seguire in ciascuna ora di ogni giorno della settimana.

08h15 – 09h00

LUNEDI

MARTEDI

Ita 213

Ingle 322

MERCOLEDI Storia 30 1

09h05 – 09h50 10h05 – 10h50

Filo 30 4

Ed.Fi Pal2 Tede 311

11h45 – 12h30

Ed.Fi Pal2

13h30 – 14h15

VENERDI

OC Info 143

Mate 208

Ita 213

10h55 – 11h40

12h40 – 13h25

GIOVEDI

Mate 208 Sto 301

OS Fam 207

Ita 213

Mate 208 OS Fam 126

Geo 307

Tede 311

14h20 – 15h05 15h20 – 16h05

LAM 143

16h10 – 16h 5 5

L’orario di un docente contiene invece le classi in cui dovrà insegnare nelle diverse ore della giornata. LUNEDI 08h15 – 09h00

10h55 – 11h40

MERCOLEDI

INFO 1H

09h05 – 09h50 10h05 – 10h50

MARTEDI

OC Matematica

11h45 – 12h30

4C 3E

GIOVEDI

VENERDI

1H Laboratorio

4C

3E

4C 2B

1H

12h40 – 13h25 13h30 – 14h15

3E

MO

1H

LAM

2B

USI

14h20 – 15h05 15h20 – 16h05

USI

16h10 – 16h 5 5

-1-


OC Informatica – Database L’occupazione di una specifica aula è raccolta in un orario che contiene i nomi dei docenti e le classi presenti nelle varie ore dei diversi giorni della settimana. LUNEDI 08h15 – 09h00

RET 2A

MARTEDI

MERCOLEDI RET 2A

CAV 2B

09h05 – 09h50 10h05 – 10h50

PAS 1E

LEO 2C TIZ 1B

11h45 – 12h30

CIT 4D

13h30 – 14h15

VENERDI

TIZ 1B

PAS 2B

CAV 3A

10h55 – 11h40

12h40 – 13h25

GIOVEDI

CIT 4D CAV 3A

CIT 4D

RET 3B

RET 3B PAS 3G

TIZ 4E

SOF 1E

14h20 – 15h05 15h20 – 16h05

PAS 2B

16h10 – 16h 5 5

L’orario che consulta il personale amministrativo è ancora più complesso poiché deve poter reperire gli insegnanti nelle diverse aule. Ad ogni modo è chiaro che solo dopo essere stato organizzato, un insieme di dati diventa informazione effettivamente disponibile per risolvere problemi o gestire situazioni complesse. Per tale motivo si preferisce parlare di strutture di dati, sottintendendo con questo che i dati vengono collegati da una qualche relazione che li rende utilizzabili per gli scopi per cui sono conservati. Un database (DB) è quindi un insieme strutturato d’informazioni.

4.2 Software per gestire i database (DBMS) I software che permettono di manipolare i database sono chiamati Database Management System (DBMS).

Un DBMS è un sistema software in grado di gestire collezioni di dati che siano grandi, condivise e persistenti, assicurando la loro affidabilità e privatezza. Una base di dati è una collezione di dati gestita da un DBMS. -2-


OC Informatica – Database Questi software sono oramai indispensbili vista la mole dei dati strutturati con la quale ci si trova confrontati in campi quali la contabilità, la gestione delle risorse umane, la gestione di rete o la telefonia. I DBMS permettono di organizzare, controllare e modificare i database. Le operazioni sono talvolta formulate in Query Languages (QL), linguaggi che permettono d’interrogare i DB (fare appunto delle query, vale a dire delle interrogazioni). Il più conosciuto fra questi linguaggi è sicuramente SQL (Structured Query Language).

4.3 Database relazionali Il database relazionale è un tipo di database nel quale le informazioni vengono strutturate in tabelle. Si tratta del modello più utilizzato poiché risponde alla maggior parte delle esigenze. Analizziamo un semplice esempio per la gestione degli esami sostenuti da un insieme di studenti universitari. Le colonne rappresentano dei campi (nome, cognome, numero di telefono, data di nascita, materia d’esame, crediti, data dell’esame, nota ottenuta). NOME COGNOME

TELEFONO

NASCITA

Pinco

Pallino

0918783454

Nemo

Pesce

0918342356

Grande

Puffo

0918912106

CREDITI

DATA

NOTA

26-10-1989 Matematica

4

22-12-2011

5

26-10-1989 Informatica

3

29-12-2011

4.5

3

15-2-2012

5.5

3-5-1990

ESAME

Informatica

… Il vantaggio di questo metodo è la sua semplicità: tutto quello che concerne uno studente si trova su una riga e una sola tabella basta per contenere tutte le informazioni. Quindi graficamente si tratta di una buona rappresentazione. Ma non basta, si tratta pure di gestire i dati per mezzo di un software in grado di manipolare una tabella di questo tipo. Il nostro approccio mostra allora degli inconvenienti: cosa succederebbe infatti se per esempio uno studente sostenesse un ulteriore esame? NOME COGNOME

TELEFONO

NASCITA

Pinco

0918783454

26-10-1989 Matematica

Pallino

ESAME

Fisica Nemo

Pesce

0918342356

Grande

Puffo

0918912106

26-10-1989 Informatica 3-5-1990

Informatica

CREDITI

DATA

NOTA

4

22-12-2011

5

2

7-1-2012

4

3

29-12-2011

4.5

3

15-2-2012

5.5

… Ogni riga avrebbe un numero diverso di celle e gestire in questo modo i dati diventerebbe assai complicato. -3-


OC Informatica – Database Si potrebbe allora risolvere il problema completando i dati di tutte le colonne. NOME COGNOME

TELEFONO

NASCITA

Pinco

Pallino

0918783454

Pinco

Pallino

Nemo Grande

CREDITI

DATA

NOTA

26-10-1989 Matematica

4

22-12-2011

5

0918783454

26-10-1989

2

7-1-2012

4

Pesce

0918342356

26-10-1989 Informatica

3

29-12-2011

4.5

Puffo

0918912106

3

15-2-2012

5.5

3-5-1990

ESAME

Fisica Informatica

… L’inconveniente è però evidente: le informazioni diverrebbero ridondanti e, apparendo più volte i dati relativi ad uno studente, caricherebbero inutilmente la memoria. Sarebbe sicuramente più conveniente avere un’altra tabella nella quale registrare le coordinate di uno studente una volta per tutte. Supponiamo poi che venga deciso che l’esame d’Informatica passi da 3 a 4 crediti. La modifica è semplice ma è impensabile procedere ad una modifica riga per riga! Insomma, è abbastanza evidente che una sola tabella non può gestire un grande database. Per ovviare a questi incovenienti si fa capo ai database relazionali che servono proprio ad ottimizzare problemi di questo tipo ottenendo grande velocità di accesso e minima probabilità di errore. In parole semplici si tratta di utilizzare più tabelle collegate fra loro. Riprendiamo ora il nostro esempio e adattiamolo alla luce della teoria dei database relazionali. L’informazione viene suddivisa in più tabelle, ciascuna legata ad un tipo di informazione distinto e ciascuna dotata di righe con un numero fisso di colonne. Avremo per esempio una tabella con i dati relativi ad ogni studente iscritto: MATRICOLA

NOME

COGNOME

TELEFONO

NASCITA

1

Pinco

Pallino

0918783454

26-10-1989

2

Nemo

Pesce

0918342356

26-10-1989

3

Grande

Puffo

0918912106

3-5-1990

Ci sarà poi una tabella relativa ai corsi: CODICE

TITOLO

CREDITI

04

Informatica

3

06

Matematica

4

07

Fisica

2

-4-


OC Informatica – Database E infine una con le informazioni relative agli esami sostenuti: STUDENTE

CORSO

DATA

NOTA

1

06

22-12-2011

5

1

07

7-1-2012

4

2

04

29-12-2011

4.5

3

04

15-2-2012

5.5

Quest’ultima relazione fa riferimento ai dati contenuti nelle altre due: agli studenti, attraverso il numero di matricola, e ai corsi, attraverso i relativi codici. MATRICOLA

NOME

COGNOME

TELEFONO

NASCITA

1

Pinco

Pallino

0918783454

26-10-1989

2

Nemo

Pesce

0918342356

26-10-1989

3

Grande

Puffo

0918912106

3-5-1990

CODICE

TITOLO

CREDITI

04

Informatica

3

06

Matematica

4

07

Fisica

2

STUDENTE

CORSO

DATA

NOTA

1

06

22-12-2011

5

1

07

7-1-2012

4

2

04

29-12-2011

4.5

3

04

15-2-2012

5.5

La struttura appare più ordinata, trasparente e risolve i diversi inconvenienti elencati in precedenza. Se ad esempio vogliamo modificare i crediti dell’esame d’Informatica basterà modificare una sola cella. Insomma questo modello permette di conservare l’informazione senza ridondanza.

-5-


OC Informatica – Database

4.4 Vocabolario La prima riga in alto della tabella contiene i nomi degli attributi della tabella: questi nomi, nel linguaggio dei database, si chiamano campi. Le righe successive contengono gli oggetti archiviati, uno per ogni riga. Questi prendono il nome di record. Ogni record è costituito dall'insieme dei valori che assumono i campi per quell'oggetto. Il legame fra le diverse tabelle è costituito da una serie di relazioni che vengono definite fra alcuni dei campi che compaiono nelle tabelle. Da qui la denominazione di database relazionale. Nel nostro esempio la tabella con i dati relativi agli studenti è resa significativa e completa attraverso il riferimento alle altre due tabelle (relazioni): a quella relativa ai corsi per il tramite del campo CORSO e a quella relative alle matricole per mezzo del campo STUDENTE. I campi utilizzati per creare le relazioni prendono il nome di chiavi. Ogni tabella deve avere almeno una chiave, detta chiave primaria (primary key), che deve assumere un valore unico per ogni riga della tabella e viene utilizzata dal sistema per reperire rapidamente le informazioni. Altri campi che vengono messi in relazione con chiavi primarie di altre tabelle prendono il nome di chiavi esterne. Graficamente, si aggiunge il nome delle relazione e vengono sottolineate le chiavi primarie. Nel nostro esempio le relazioni verrebbero quindi rappresentate nel modo seguente (nella relazione ESAME la chiave primaria che permette di individuare univocamente una tupla è formata dai tre attributi STUDENTE, CORSO e DATA ): STUDENTE

CORSO

ESAME

MATRICOLA

NOME

COGNOME

TELEFONO

NASCITA

1 2 3

Pinco Nemo Grande

Pallino Pesce Puffo

0918783454 0918342356 0918912106

26-10-1989 26-10-1989 3-5-1990

CODICE

TITOLO

CREDITI

04 06 07

Informatica Matematica Fisica

3 4 2

STUDENTE

CORSO

DATA

NOTA

1 1 2 3

06 07 04 04

22-12-2011 7-1-2012 29-12-2011 15-2-2012

5 4 4.5 5.5

STUDENTE e CORSO sono le chiavi esterne che legano le relazioni. -6-


OC Informatica – Database

ESERCIZI 1.

Descrivi a parole le informazioni organizzate nella seguente base di dati: INFRAZIONI

AGENTI

AGENTE

ARTICOLO

CANTONE

TARGA

143256 987554 987557 630876 539856

26-02-2012 27-02-2012 27-02-2012 28-02-2012 28-02-2012

567 456 456 456 567

44 34 34 53 44

TI TI TI BE BE

345678 345678 445566 445566 445566

COGNOME

NOME

567 456 638

Rossi Neri Neri

Mario Luigi Pietro

CANTONE

TARGA

PROPRIETARIO

INDIRIZZO

TI TI TI BE

445566

Verdi Pietro Verdi Pietro Bini Luca Luca Gino

Via Tigli Via Tigli Via Aceri Via Aceri

123456 345678 445566

Indica i due problemi che presenta invece la seguente base di dati. INFRAZIONI

AGENTI

CODICE

DATA

AGENTE

ARTICOLO

CANTONE

TARGA

143256

22-02-2012

456

35

TI

345678

539856

23-02-2012

456

56

SG

991122

MATRICOLA

COGNOME

NOME

567 638

Rossi Neri

Mario Pietro

AUTOMOBILI

3.

DATA

MATRICOLA

AUTOMOBILI

2.

CODICE

CANTONE

TARGA

PROPRIETARIO

INDIRIZZO

TI SG BE

765432

Verdi Pietro Bini Luca Luca Gino

Via Tigli Via Aceri Via Noci

991122 345678

Definisci uno schema di base di dati che organizzi le informazioni del personale amministrativo dei vari licei (ognuno con nome, cognome, data di nascita, sede e direttore del liceo). -7-


OC Informatica – Database

SOLUZIONI 1.

La prima relazione contiene informazioni relative a un insieme di infrazioni al codice della strada, la seconda agli agenti di polizia che le hanno rilevate e la terza a un insieme di automobili. Le informazioni della relazione INFRAZIONI sono rese significative e complete attraverso il riferimento alle altre due relazioni: alla relazione AGENTI, per il tramite dell’attributo AGENTE e alla relazione AUTOMOBILI, per mezzo degli attributi CANTONE e TARGA.

2.

I due problemi sono i seguenti: - AGENTI non contiene nessuna riga con valore di MATRICOLA 456. - AUTOMOBILI non contiene nessuna riga con valore TI su CANTONE e 345678 su TARGA (occorrono entrambi gli attributi CANTONE e TARGA e non uno soltanto per fare riferimento a una riga della relazione AUTOMOBILI)

3.

Un possibile schema per questo database è il seguente: PERSONALE (Id, Nome, Cognome, Nascita, Liceo) LICEO (Codice, Sede, Direttore) PERSONALE

LICEO

Id

Nome

Cognome

Nascita

Liceo

572 812 1032 23 761 18 890 2316 399

Aldo Brenno Carlo Dario Emilio Fabio Giacomo Igor Luca

Ape Bue Cane Daino Ermellino Faina Ghiro Istrice Libellula

21-03-1963 02-01-1952 15-05-1974 28-02-1962 31-12-1952 22-02-1960 15-11-1965 04-06-1970 12-09-1976

2 4 4 1 3 5 3 1 5

Codice

Sede

Direttore

1 2 3 4 5

Arosio Arosio Bedano Cademario Dalpe

2316 572 890 1032 18

Ogni valore dell’attributo Liceo di PERSONALE compare in Codice di LICEO; in modo simile succede tra Direttore di LICEO e Id di PERSONALE.

-8-


OC Informatica – Database

4.5 Modello entità-relazione Il modello entità-relazione (E-R) è database, soprattutto quelli relazionali. 1975 e fornisce una serie di strutture, interesse) in una maniera facile da organizzazione dei dati nei calcolatori.

uno schema concettuale molto utilizzato per i È stato inventato da Peter Pin-Shan Chen nel dette costrutti, atte a descrivere la realtà (di comprendere e che prescinde dai criteri di

I costrutti principali del modello entità-relazione sono le entità, le relazioni, gli attributi e la cardinalità.

Entità Le entità sono gli oggetti concreti che si possono identificare (CLIENTE, LIBRO, AUTOMOBILE, IMPIEGATO e CITTA o, per restare nel nostro esempio, STUDENTE e CORSO). Una occorrenza di un’entità è un oggetto che la rappresenta (per uno studente per esempio nome, cognome, indirizzo, …). Graficamente vengono indicate mediante un rettangolo con il nome dell’entità all’interno.

STUDENTE

CORSO

IMPIEGATO

CITTA

Relazioni Le relazioni (o associazioni) fra le entità rappresentano i legami logici fra due o più entità (ESAME è un esempio di relazione che sussiste fra le entità STUDENTE e CORSO mentre RESIDENZA è un esempio di relazione fra CITTA e IMPIEGATO). In uno schema E-R ogni relazione ha un nome che la identifica univocamente e viene rappresentata graficamente mediante un rombo, con il nome della relazione all’interno, e da linee che connettono la relazione con ciascuna delle sue componenti.

STUDENTE

ESAME

CORSO

SEDE DI LAVORO

IMPIEGATO

RESIDENZA

Possono esistere relazioni diverse che coinvolgono le stesse entità. -9-

CITTA


OC Informatica – Database

Attributi Gli attributi descrivono le proprietà elementari di entità e relazioni che sono di interesse ai fini dell’applicazione. Per esempio Data e Voto sono possibili attributi per la relazione ESAME tra STUDENTE e CORSO. Per le entità, fra questi attributi se ne definisce uno che le identifica in maniera unica (la chiave primaria, per esempio il numero di matricola). Graficamente: ESAME

STUDENTE

CORSO

- Data - Voto

- Codice - Titolo - Crediti

- Matricola - Nome - Cognome - Telefono - Nascita SEDE DI LAVORO

IMPIEGATO

CITTA

RESIDENZA

- Nome - Abitanti

- ID - Cognome - Stipendio - Età

Cardinalità La cardinalità di una entità rispetto ad una relazione esprime il numero minimo e il numero massimo di occorrenze di relazione a cui una occorrenza dell’entità può partecipare. Cardinalità minima: 0 oppure 1 Cardinalità massima: 1 o N (dove N sta a indicare “molti”) Per esempio l’entità STUDENTE partecipa alla relazione ESAME con cardinalità pari a (0,N), in quanto uno studente può non aver svolto nessun esame oppure averne svolti più di uno. Graficamente:

STUDENTE - Matricola - Nome - Cognome - Telefono - Nascita

(0,N)

ESAME - Data - Voto

(1,N)

CORSO - Codice - Titolo - Crediti

-10-


OC Informatica – Database

ESERCIZI 1.

Realizza uno schema entità-relazione (E-R) appropriato per il database che hai già considerato nell’esercizio 1 del paragrafo precedente. INFRAZIONI

AGENTI

DATA

AGENTE

ARTICOLO

CANTONE

TARGA

143256 987554 987557 630876 539856

26-02-2012 27-02-2012 27-02-2012 28-02-2012 28-02-2012

567 456 456 456 567

44 34 34 53 44

TI TI TI BE BE

345678 345678 445566 445566 445566

MATRICOLA

COGNOME

NOME

567 456 638

Rossi Neri Neri

Mario Luigi Pietro

AUTOMOBILI

2.

CODICE

CANTONE

TARGA

PROPRIETARIO

INDIRIZZO

TI TI TI BE

445566 123456 345678 445566

Verdi Pietro Verdi Pietro Bini Luca Luca Gino

Via Tigli Via Tigli Via Aceri Via Aceri

Immaginiamo di voler creare un database che permetta di gestire i clienti di un operatore telefonico. Ciascun cliente può avere più numeri di telefono e per ognuno di questi numeri l’operatore deve registrare le informazioni necessarie per stilare una fattura mensile. La tariffa della chiamata può variare a seconda dell’ora e del numero chiamato. Osserva le tabelle e realizza uno schema entità-relazione (E-R) appropriato. CLIENTE

NUMERI

Id

Nome

Cognome

Indirizzo

156 10234 ...

Aldo Brenno

Arancia Banana

Strada Bella, 6900 Lugano Via Ricca, 6500 Bellinzona

Numero

Cliente

0918756587 0918364911 0918491122 …

156 10234 10234

-11-


OC Informatica – Database CHIAMATE

Id

No_Chiamante

No_Chiamato

123465

0918364911

004191341221

145674

0918364911

0918505050

162346

0918491122

0918505050

124369

0918756587

0918990099

Data_Ora

12-2-2012 14:32 13-2-2012 18:37 15-2-2012 09:21 16-2-2012 19:01

Durata Tariffa

455

1.00

62

0.20

145

0.20

302

0.10

… secondi CHF/min

ESERCIZI DA CONSEGNARE 3.

Crea un database che permetta di mantenere i contatti con i compagni di classe. Si vogliono registrare le informazioni seguenti: nome, cognome, sesso, data di nascita, telefono, via, CAP, città e cantone. Realizza uno schema entità-relazione (E-R) appropriato.

4.

Realizza uno schema entità-relazione (E-R) per gestire la lista delle classi liceali. Una classe è formata da allievi (sempre gli stessi e un allievo appartiene solo ad una classe). C’è un docente di classe e un professore può insegnare più materie.

-12-


OC Informatica – Database

SOLUZIONI 1.

Ci sono 3 entità (AGENTI, INFRAZIONI, AUTOMOBILI), ognuna con i suoi attributi. Le relazioni CONSTATA e CAUSATA possiedono le seguenti cardinalità: - un’agente constata da 0 a molte infrazioni - un’infrazione è riscontrata da 1 e un solo agente - un’infrazione è causata da 1 e una sola automobile - un’automobile può commettere da 0 a molte infrazioni Graficamente:

AGENTI

(0,N)

CONSTATA

(1,1)

- Codice - Data - Agente - Articolo - Cantone - Targa

- Voto

- Matricola - Cognome - Nome

INFRAZIONI

(1,1)

AUTOMOBILI

(0,N)

- Voto

- Cantone - Targa - Propritario - Indirizzo 2.

CAUSATA

Ci sono 3 entità (CLIENTE, NUMERI, CHIAMATE), ognuna con i suoi attributi. Le relazioni POSSIEDE e EFFETTUA possiedono le seguenti cardinalità: - un cliente possiede 1 o più numeri - un numero appartiene a 0 o 1 clienti - un numero può fare 0 o più telefonate - una chiamata è fatta da 1 e un solo numero

CLIENTE - Id - Nome - Cognome - Indirizzo

(1,N)

POSSIEDE

(0,1)

NUMERI - Numero

- Voto

(0,N)

CHIAMATE - Id - No_Chiamante - No_Chiamato - Data_Ora - Durata - Tariffa -13-

(1,1)

EFFETTUA

- Voto


OC Informatica – Database

4.6 Dallo schema concettuale al modello relazionale Riassumiamo brevemente quelle che sono le regole principali per trasformare lo schema concettuale in quello relazionale. Regola 1 Ogni entità è tradotta in una tabella relazionale nella quale: - il nome della tabella è il nome dell’entità; - la chiave della tabella è l’attributo che identifica in maniera univoca l’entità; - gli altri attributi della tabella formano le altre colonne della tabella. Regola 2 Ogni relazione binaria molti a molti è tradotta in una tabella relazionale nella quale: - il nome della tabella è il nome della relazione; - la chiave della tabella è formata dalla somma degli identificanti delle entità principali che partecipano alla relazione; - gli attributi specificati dalla relazione formano le altre colonne della tabella.

CLIENTE

(0,N)

ACQUISTO

(0,N)

- Id - Nome - Cognome - Indirizzo

CLIENTE

Id

PRODOTTO

- quantità

- Id - Descrizione

Nome

ACQUISTO

Cognome

Id_Cliente

Indirizzo

Id_Prodotto

Quantità

PRODOTTO -14-

Id

Descrizione


OC Informatica – Database Regola 3 Ogni relazione binaria uno a molti viene tradotta: (1) o riportando la chiave (vedi esempio sottostante); (2) o creando una tabella specifica con le seguenti caratteristiche: - il nome della tabella è il nome della relazione; - la chiave della tabella è l’identificante dell’entità che partecipa alla relazione; - gli attributi specifici della relazione formano le altre colonne della tabella. (1,N)

CLIENTE

POSSIEDE

(0,1)

NUMERI - Numero

- Voto

- Id - Nome - Cognome - Indirizzo

CLIENTE

Id

NUMERI

Nome

Cognome

Numero

Indirizzo

Id_Cliente

Regola 4 Ogni relazione binaria uno a uno può essere tradotta in uno dei seguenti tre modi: (1) fusione delle tabelle delle entità che lega; (2) riporto della chiave di una delle tabelle nell’altra (vedi schema sottostante); (3) creazione di una tabella specifica che lega le chiavi delle due entità.

IMPIEGATO

(1,1)

DIRIGE

(1,1)

LICEO - Nome

- Voto

- Id - Nome - Cognome - Funzione

IMPIEGATO

Id

LICEO

Nome

Nome -15-

Cognome

Funzione

Id_Dir


OC Informatica – Database

ESERCIZI 1.

Trasforma in un modello relazionale il seguente schema entità relazione.

GIOCATORE

(1,1)

CONTRATTO

(0,N)

- ingaggio

- Data nascita - Cognome - Ruolo

SQUADRA - Nome - Città - Colori sociali

ESERCIZIO DA CONSEGNARE 2.

Trasforma in un modello relazionale gli schemi entità relazione (E-R) degli esercizi 3 e 4 svolti nel paragrafo precedente.

SOLUZIONI 1.

Schema logico:

GIOCATORE

DataNascita

SQUADRA

Cognome

Nome

Ruolo

Città

-16-

NomeSquadra

ColoriSociali

Ingaggio


OC Informatica – Database

4.7 Il linguaggio SQL SQL è il linguaggio di riferimento per le basi di dati relazionali. La prima versione di SQL è stata sviluppata nel 1970 presso IBM da Donald Chamberlain e Raymond Boyce. Il nostro obiettivo è minimo per rapporto alle potenzialità di questo linguaggio, focalizzeremo infatti la nostra attenzione unicamente sulla specifica delle interrogazioni. Per facilitare la comprensione dell’argomento utilizzeremo le seguenti tabelle: IMPIEGATO

Id

Nome

Cognome

Dipartimento

Ufficio

Stipendio

64 34 18 79 31 44 90 04

Mario Carlo Giovanni Franco Carlo Lorenzo Paola Marco

Rossi Bianchi Verdi Neri Rossi Gialli Rosati Franco

3 6 3 4 1 1 3 6

10 20 20 16 14 7 75 20

45 36 40 48 80 73 40 46

DIPARTIMENTO

Id

Nome

Indirizzo

Citta

3 6 4 1 5

Amministrazione Produzione Distribuzione Direzione Ricerca

Via Abete 2 Strada Alta 4 Via Bella 9 Via Abete 2 Via Sole 8

Milano Torino Roma Milano Milano

Vediamo qualche semplice interrogazione (query) con i relativi risultati. Interrogazione 1: estrarre il nome e l’ufficio degli impiegati di cognome ”Rossi” SELECT FROM WHERE

Nome, Ufficio Impiegato Cognome = ”Rossi”

Nome

Ufficio

Mario Carlo

10 14

Interrogazione 2: estrarre il salario dell’impiegato di cognome ”Gialli” SELECT FROM WHERE

Stipendio AS Salario Impiegato Cognome = ”Gialli”

Salario 73

Interrogazione 3: estrarre tutte le informazioni relative all’impiegato di cognome ”Verdi” SELECT FROM WHERE

* Impiegato Cognome = ”Verdi”

Id

Nome

18

Giovanni

Cognome Dipartimento Ufficio Stipendio Verdi

3

20

-17-

40


OC Informatica – Database Interrogazione 4: estrarre lo stipendio mensile dell’impiegato di cognome ”Neri” SELECT FROM WHERE

Stipendio/12 as StipendioMensile Impiegato Cognome = ”Neri”

StipendioMensile 4,00

Interrogazione 5: estrarre il nome e il cognome degli impiegati che lavorano nel dipartimento Amministrazione SELECT FROM WHERE

Nome, Cognome Impiegato, Dipartimento Dipartimento.Nome = ”Amministrazione” AND Dipartimento.Id = Impiegato.Dipartimento

Nome

Cognome

Mario Giovanni Paola

Rossi Verdi Rosati

Interrogazione 6: estrarre il nome e il cognome degli impiegati che lavorano nell’ufficio 20 del dipartimento Amministrazione SELECT FROM WHERE

Nome, Cognome Impiegato, Dipartimento Impiegato.Ufficio = ”20” AND Dipartimento.Nome = ”Amministrazione” AND Dipartimento.Id = Impiegato.Dipartimento

Nome

Cognome

Giovanni

Verdi

Interrogazione 7: estrarre i nomi e i cognomi degli impiegati che lavorano nel dipartimento Amministrazione o in quello Produzione Nome Cognome SELECT Nome, Cognome Mario Rossi FROM Impiegato, Dipartimento Carlo Bianchi WHERE (Dipartimento.Nome = ”Amministrazione” OR Giovanni Verdi Dipartimento.Nome = ”Produzione”) AND Paola Rosati Dipartimento.Id = Impiegato.Dipartimento Marco Franco Interrogazione 8: contare il numero di impiegati ”Rossi” SELECT FROM WHERE

COUNT(*) Impiegato Cognome = ”Rossi”

2

Interrogazione 9: contare il numero di impiegati che lavorano nel Dipartimento Produzione SELECT FROM WHERE

COUNT(*) Impiegato, Dipartimento 2 Dipartimento.Nome = ”Produzione” AND Dipartimento.Id = Impiegato.Dipartimento

-18-

2


OC Informatica – Database Interrogazione 10: elencare in ordine alfabetico il cognome di chi lavora nell’ufficio 20 SELECT FROM WHERE

Cognome Impiegato Ufficio= ”20” ORDER BY Cognome

Cognome Bianchi Franco Verdi

Interrogazione 11: trovare tutti i dipendenti che guadagnano più di 45, classificarli secondo lo stipendio ed elencare i campi Nome, Cognome, Stipendio Nome

SELECT FROM WHERE

Nome, Cognome, Stipendio Impiegato Stipendio>45 ORDER BY Stipendio

Cognome Stipendio

Mario Marco Franco Lorenzo Carlo

Rossi Franco Neri Gialli Rossi

45 46 48 73 80

Interrogazione 12: estrarre il numero di diversi valori dell’attributo Ufficio fra tutti i record di Impiegato SELECT FROM

COUNT(DISTINCT Ufficio) Impiegato

6

Interrogazione 13: estrarre la somma degli stipendi del dipartimento Amministrazione (osserva in questo caso l’uso di alias) SELECT FROM WHERE

SUM(Stipendio) Impiegato AS I, Dipartimento AS D D.Nome = ”Amministrazione” AND D.Id= I.Dipartimento

125

Interrogazione 14: estrarre gli stipendi minimo, massimo e medio fra quelli di tutti gli impiegati SELECT FROM

36 80 51

MIN(Stipendio), MAX(Stipendio), AVG(Stipendio), Impiegato

Interrogazione 15: estrarre il massimo degli stipendi tra quelli degli impiegati che lavorano in un dipartimento con sede a Milano SELECT FROM WHERE

MAX(Stipendio) Impiegato AS I, Dipartimento AS D D.Citta = ”Milano”

-19-

80


OC Informatica – Database Interrogazione 16: estrarre la somma degli stipendi degli impiegati che lavorano nello stesso dipartimento Dipartimento SUM(Stipendio) SELECT FROM GROUP BY

Dipartimento, SUM(Stipendio) Impiegato Dipartimento

3 6 4 1

125 82 48 153

L’operatore GROUP BY serve a raggruppare i risultati di una SELECT in base al campo specificato dopo il BY.

Interrogazione 17: estrarre i cognomi degli Impiegati con uno Stipendio superiore a 44, facendo comparire ogni cognome al più una volta. SELECT DISTINCT FROM WHERE

Cognome

Cognome Impiegato Stipendio>44

Rossi Neri Gialli Franco

L’operatore SELECT DISTINCT serve ad estrarre una sola volta ogni diversa occorrenza riscontrata in un dato campo. Interrogazione 18: estrarre i dipartimenti nei quali la somma degli stipendi supera 100 SELECT FROM WHERE GROUP BY HAVING

D.Nome, SUM(Stipendio) as Somma Impiegato AS I, Dipartimento AS D I.Dipartimento=D.Id D.Nome SUM(Stipendio)>100

Nome

Somma

Amministrazione Direzione

125 153

L’operatore HAVING è molto simile all’operatore WHERE ma anziché operare sui campi del database opera sui raggruppamenti. Interrogazione 19: estrarre il nome dei dipartimenti che elargiscono unicamente stipendi minori o uguali a 50. SELECT Nome FROM Dipartimento AS D WHERE NOT EXISTS (SELECT* FROM Impiegato AS I WHERE I.Dipartimento=D.Id AND Stipendio>50)

Nome Amministrazione Produzione Distribuzione

Nelle query nidificate l’operatore NOT EXISTS restituisce vero solo se il risultato della query è vuoto. -20-


OC Informatica – Database

ESERCIZI 1.

Considera il seguente schema relazionale:

ATTORE

Id_Attore

Nome

RECITA

FILM

Id_Film

PROIEZIONI

Titolo

SALE

Attore

Anno

Id_Proiezioni

AnnoNascita

Film

Nazionalità

Film

Id_Sala

Nazionalita

Sala

Posti

Regista

Incasso

Nome

Genere

Durata

DataProiezione

Citta

Scrivi le interrogazioni SQL che restituiscono le seguenti informazioni: 1-

Il nome di tutte le sale di Lugano.

2-

Il titolo dei film di F. Fellini prodotti dopo il 1960.

3-

Il titolo e la durata dei film di fantascienza giapponesi o francesi prodotti dopo il 1990.

4-

Il titolo dei film di fantascienza giapponesi prodotti dopo il 1990 oppure francesi.

5-

Il titolo dei film dello stesso regista di “Casablanca“.

6-

Il titolo ed il genere dei film proiettati il giorno di Natale 2010.

7-

Il titolo ed il genere dei film proiettati a Lugano il giorno di Natale 2010.

8-

I nomi delle sale di Lugano in cui il giorno di Natale 2010 è stato proiettato un film con G. Clooney.

9-

Il titolo dei film in cui recita M. Mastroianni oppure S. Loren.

10 - Il titolo dei film in cui recitano M. Mastroianni e S. Loren. 11 - Per ogni film in cui recita un attore francese, il titolo del film e il nome dell’attore. 12 - Per ogni film che è stato proiettato a Lugano nel gennaio 2011, il titolo del film e il nome della sala. 13 - Il numero di sale di Lugano con più di 100 posti. 14 - Il numero totale di posti nelle sale di Lugano. 15 - Per ogni città, il numero di sale. -21-


OC Informatica – Database 16 - Per ogni città, il numero di sale con più di 60 posti. 17 - Per ogni regista, il numero di film diretti dopo il 2000. 18 - Per ogni regista, l’incasso totale di tutte le proiezioni dei suoi film. 19 - Per ogni film di S. Spielberg, il titolo del film, il numero totale di proiezioni a Lugano e l’incasso totale. 20 - Per ogni regista e per ogni attore, il numero di film del regista con l’attore. 21 - Il regista ed il titolo dei film in cui recitano meno di 6 attori. 22 - Per ogni film prodotto dopo il 2000, il codice, il titolo e l’incasso totale di tutte le sue proiezioni. 23 - Il numero di attori dei film in cui appaiono solo attori nati prima del 1970. 24 - Per ogni film di fantascienza, il titolo e l’incasso totale di tutte le sue proiezioni. 25 - Per ogni film di fantascienza, il titolo e l’incasso totale di tutte le sue proiezioni successive al 1. gennaio 2010. 26 - Per ogni film di fantascienza che non è mai stato proiettato prima del 1. gennaio 2010, il titolo e l’incasso totale di tutte le sue proiezioni. 27 - Per ogni sala di Lugano, che nel mese di gennaio 2011 ha incassato più di 30’000 Fr, il nome della sala e l’incasso totale. 28 - I titoli dei film che non sono mai stati proiettati a Lugano. 29 - I titoli dei film che sono stati proiettati solo a Lugano. 30 - I titoli dei film dei quali non vi è mai stata una proiezione con incasso superiore a 500 Fr. 31 - I titoli dei film le cui proiezioni hanno sempre ottenuto un incasso superiore a 500 Fr. 32 - Il nome degli attori italiani che non hanno mai recitato in film di Fellini. 33 - Il titolo dei film di Fellini in cui non recitano attori italiani. 34 - Il titolo dei film senza attori. 35 - Gli attori che prima del 1960 hanno recitato solo nei film di Fellini. 36 - Gli attori che hanno recitato in film di Fellini solo prima del 1960.

-22-


OC Informatica – Database

SOLUZIONI 1.

Interrogazioni SQL (ogni volta viene presentata una fra le possibili soluzioni):

1 - Il nome di tutte le sale di Lugano. SELECT s.Nome FROM Sale s WHERE s.Città = ”Lugano”

2 - Il titolo dei film di F. Fellini prodotti dopo il 1960. SELECT f.Titolo FROM Film f WHERE f.Regista = ”Fellini” AND f.Anno > 1960

3 - Il titolo e la durata dei film di fantascienza giapponesi o francesi prodotti dopo il 1990. SELECT f.Titolo, f.Durata FROM Film f WHERE f.Genere = ”Fantascienza” AND (f.Nazionalità = ”Giapponese” OR f.Nazionalità = ”Francese”) AND f.Anno > 1990

4 - Il titolo dei film di fantascienza giapponesi prodotti dopo il 1990 oppure francesi. SELECT f.Titolo FROM Film f WHERE f.Genere=”Fantascienza” AND ((f.Nazionalità=”Giapponese” AND f.Anno>1990) OR f.Nazionalità=”Francese”)

5 - I titolo dei film dello stesso regista di “Casablanca”. SELECT f.Titolo FROM Film f WHERE f.Regista = (SELECT f.Regista FROM Film f WHERE f.Titolo = ”Casablanca”)

-23-


OC Informatica – Database 6 - Il titolo ed il genere dei film proiettati il giorno di Natale 2010. SELECT DISTINCT f.Titolo, f.Genere FROM Film f, Proiezioni p WHERE p.DataProiezione=25/12/2010 AND f.Id_Film=p.Film

7 - Il titolo ed il genere dei film proiettati a Lugano il giorno di Natale 2010. SELECT DISTINCT f.Titolo, f.Genere FROM Film f, Proiezioni p, Sale s WHERE p.DataProiezione =25/12/2010 AND s.Città=”Lugano” AND f.Id_Film=p.Film AND p.Sala=s.Id_Sala

8 - I nomi delle sale di Lugano in cui il giorno di Natale 2010 è stato proiettato un film con G.Clooney. SELECT DISTINCT s.Nome FROM Attori a, Recita r, Film f, Proiezioni p, Sale s WHERE p.DataProiezione=25/12/2010 AND s.Città=”Lugano” AND a.Nome=“G.Clooney” AND a.Id_Attore=r.Attore AND r.Film=f.Id_Film AND f.Id_Film=p.Film AND p.Sala=s.Id_Sala

9 - Il titolo dei film in cui recita M. Mastroianni oppure S. Loren. SELECT DISTINCT f.Titolo FROM Film f, Recita r, Attore a WHERE (a.Nome = ”M.Mastroianni” OR a.Nome = ”S.Loren”) AND f.Id_Film = r.Film AND r.Attore = a.Id_Attore

10 - Il titolo dei film in cui recitano M. Mastroianni e S. Loren. SELECT f.Titolo FROM Film f, WHERE “M.Mastroianni” IN (SELECT a.Nome FROM Attori a, Recita r WHERE f.Id_Film = r.Film AND r.Attore = a.Id_Attore) AND ”S.Loren” IN (SELECT a.Nome FROM Attori a, Recita r WHERE f.Id_Film = r.Film AND r.Attore = a.Id_Attore)

-24-


OC Informatica – Database 11 - Per ogni film in cui recita un attore francese, il titolo del film e il nome dell’attore. SELECT f.Titolo, a.Nome FROM Attori a, Recita r, Film f WHERE a.Id_Attore=r.Attore AND r.Film=f.Id_Film AND a.Nazionalità=”Francese”

12 - Per ogni film che è stato proiettato a Lugano nel gennaio 2011, il titolo del film e il nome della sala. SELECT DISTINCT f.Titolo, s.Nome FROM Film f, Proiezioni p, Sale s WHERE f.Id_Film = p.Film AND p.Sala=s.Id_Sala AND s.Città = “Lugano” AND p.DataProiezione BETWEEN 01/01/2011 AND 31/01/2011

13 - Il numero di sale di Lugano con più di 100 posti. SELECT COUNT(*) FROM Sale s WHERE s.Città = ”Lugano” AND s.Posti > 100

14 - Il numero totale di posti nelle sale di Lugano. SELECT SUM(s.Posti) FROM Sale s WHERE s.Città = ”Lugano”

15 - Per ogni città, il numero di sale. SELECT s.Città, COUNT(*) FROM Sale s GROUP BY s.Città

16 - Per ogni città, il numero di sale con più di 60 posti. SELECT s.Città, COUNT(*) FROM Sale s WHERE s.Posti > 60 GROUP BY s.Città

-25-


OC Informatica – Database 17 - Per ogni regista, il numero di film diretti dopo il 2000. SELECT f.Regista, COUNT(*) FROM Film f WHERE f.Anno > 2000 GROUP BY f.Regista

18 - Per ogni regista, l’incasso totale di tutte le proiezioni dei suoi film. SELECT f.Regista, sum(p.Incasso) as IncassoTotale FROM Film f, Proiezioni p WHERE f.Id_Film = p.Film GROUP BY f.Regista

19 - Per ogni film di S. Spielberg, il titolo del film, il numero totale di proiezioni a Lugano e l’incasso totale. SELECT f.Titolo, COUNT(*)AS NumeroProiezioni, sum(p.Incasso) AS IncassoTotale FROM Film f, Proiezioni p, Sale s WHERE f.Id_Film = p.Film AND p.Sala=s.Id_Sala AND f.Regista = ”S.Spielberg” AND s.Città = ”Lugano” GROUP BY f.Id_Film, f.Titolo

20 - Per ogni regista e per ogni attore, il numero di film del regista con l’attore. SELECT f.Regista, a.Nome, COUNT(*) AS NumeroFilm FROM Attori a, Recita r, Film f WHERE a.Id_Attore=r.Attore AND r.Film = f.Id_Film GROUP BY f.Regista, a.Id_Attore, a.Nome

21 - Il regista ed il titolo dei film in cui recitano meno di 6 attori. SELECT f.Regista, f.Titolo FROM Film f, Recita r WHERE f.Id_Film = r.Film GROUP BY f.Id_Film, f.Titolo, f.Regista HAVING COUNT(*) < 6

22 - Per ogni film prodotto dopo il 2000, il codice, il titolo e l’incasso totale di tutte le sue proiezioni. SELECT f.CodFilm, f.Titolo, SUM(f.Incasso) AS IncasssoTotale FROM Film f, Proiezioni p WHERE f.Anno > 2000 AND f.Id_Film = p.Film GROUP BY f.Id_Film, f.Titolo -26-


OC Informatica – Database 23 – Il numero di attori dei film in cui appaiono solo attori nati prima del 1970. SELECT f.Titolo, COUNT(*) AS NumeroAttori FROM Attori a, Recita r, Film f WHERE a.Id_Attore=r.Attore AND r.Film = f.Id_Film GROUP BY f.Id_Film, f.Titolo HAVING MAX(a.AnnoNascita) < 1970

24 - Per ogni film di fantascienza, il titolo e l’incasso totale di tutte le sue proiezioni. SELECT f.Titolo, SUM(p.Incasso) AS IncassoTotale FROM Film f, Proiezioni p WHERE f.Genere=”Fantascienza”AND f.Id_Film = p.Film GROUP BY f.Id_Film, f.Titolo

25 - Per ogni film di fantascienza il titolo e l’incasso totale di tutte le sue proiezioni successive al 1/1/2010. SELECT f.Titolo, SUM.Incasso) AS IncassoTotale FROM Film f, Proiezioni p WHERE f.Genere=”Fantascienza”AND f.Id_Film = p.Film AND p.DataProiezione > 1/1/2010 GROUP BY f.Id_Film, f.Titolo

26 - Per ogni film di fantascienza che non è mai stato proiettato prima del 1 gennaio 2010 il titolo e l’incasso totale di tutte le sue proiezioni. SELECT f.Titolo, SUM(p.Incasso) AS IncassoTotale FROM Film f, Proiezioni p WHERE f.Genere=”Fantascienza”AND f.Id_Film=p.Film GROUP BY f.Id_Film, f.Titolo HAVING MIN(p.DataProiezione) > = 1/1/2010

27 - Per ogni sala di Lugano, che nel mese di gennaio 2011 ha incassato più di 30'000 Fr, il nome della sala e l’incasso totale. SELECT s.Nome, SUM(P.Incasso) FROM Sala s , Proiezioni p WHERE p.Sala=s.Id_Sala AND s.Citta = “Lugano” AND p.DataProiezione BETWEEN 1/1/2011 AND 31/1/2011 GROUP BY s.Id_Sala, s.Nome HAVING SUM(p.Incasso) > 30’000 -27-


OC Informatica – Database 28 - I titoli dei film che non sono mai stati proiettati a Lugano. SELECT f.Titolo FROM Film f WHERE NOT EXISTS ( SELECT * FROM Proiezioni p, Sala s WHERE s.Citta=”Lugano” AND f.Id_Film=p.Film AND p.Sala =s.Id_Sala)

29 - I titoli dei film che sono stati proiettati solo a Lugano. SELECT f.Titolo FROM Film f WHERE NOT EXISTS ( SELECT * FROM Proiezioni p, Sala s WHERE Città< > ”Lugano” AND f.Id_Film = p.Film AND p.Sala = s.Id_Sala)

30 - I titoli dei film che non hanno mai avuto una proiezione con incasso superiore a 500 Fr. SELECT f.Titolo FROM Film f WHERE NOT EXISTS ( SELECT * FROM Proiezioni p WHERE Incasso > 500 AND f.Id_Film = p.Film)

31 - I titoli dei film le cui proiezioni hanno sempre ottenuto un incasso superiore a 500 Fr. SELECT f.Titolo FROM Film f WHERE 500 < = ( SELECT MIN(p.Incasso) FROM Proiezioni p WHERE f.Id_Film = p.Film)

32 - Il nome degli attori italiani che non hanno mai recitato in film di Fellini. SELECT a.Nome FROM Attori a WHERE a.Nazionalità = ”Italiana” AND NOT EXISTS (SELECT * FROM Film f, Recita r WHERE f.Id_Film = r.Film AND r.Attore = a.Id_Attore AND f.Regista = ”Fellini”) -28-


OC Informatica – Database 33 - Il titolo dei film di Fellini in cui non recitano attori italiani. SELECT f.Titolo FROM Film f WHERE f.Regista = ”Fellini” AND NOT EXISTS (SELECT * FROM Attori a, Recita r WHERE f.Id_Film=r.Film AND r.Attore=a.Id_Attore AND a.Nazionalità=”Italiana”)

34 - Il titolo dei film senza attori. SELECT f.Titolo FROM Film f WHERE NOT EXISTS

(SELECT * FROM Recita r WHERE f.Id_Film = r.Film)

35 - Gli attori che prima del 1960 hanno recitato solo nei film di Fellini. SELECT a.Nome FROM Attori a WHERE f.Anno < 1960 AND NOT EXISTS (SELECT * FROM Film f, Recita r WHERE f.Id_Film = r.Film AND r.Attore = a.Id_Attore AND f.Anno < 1960 AND f.Regista < > ”Fellini”)

36 - Gli attori che hanno recitato in film di Fellini solo prima del 1960. SELECT a.Nome FROM Attori a WHERE f.Anno<1960 AND NOT EXISTS (SELECT * FROM Film f, Recita r WHERE f.Id_Film = r.Film AND r.Attore = a.Id_Attore AND f.Anno >= 1960 AND f.Regista = ”Fellini”)

-29-


OC Informatica – Database

4.8 MySQL Workbench MySQL Workbench è un software che permette di progettare, modellare, generare e gestire visivamente database. Si tratta di uno strumento professionale e in questo capitolo affronteremo solo un’infima parte delle sue potenzialità. Nell’interfaccia si distinguono 3 parti: - SQL Development, per fare delle interrogazioni (query) SQL; - Data Modeling, per creare i database in modo grafico; - Server Administration, per gestire il nostro server.

-30-


OC Informatica â&#x20AC;&#x201C; Database Riprendiamo ora il nostro semplicissimo esempio iniziale e cerchiamo di implementare il modello relazionale con lâ&#x20AC;&#x2122;ausilio di MySQL Workbench.

STUDENTE

(0,N)

ESAME - Data - Voto

(1,N)

CORSO - Codice - Titolo - Crediti

- Matricola - Nome - Cognome - Telefono - Nascita

Iniziamo a creare uno schema con il modello fisico. Cliccando il pulsante + (cerchiato nella figura).

Rinominiamo il modello ESEMPIO. Mentre scriviamo possiamo osservare sullo schermo il suo aggiornamento in tempo reale.

-31-


OC Informatica – Database Chiudiamo la finestra e conferma.

Creiamo ora le due tabelle STUDENTE e CORSO che formano il nostro database relazionale. Doppio click sul pulsante Add Diagram.

Selezioniamo (click) l’icona Place a New Table (tasto rapido T), posizioniamo il mouse nel diagramma E-R fermandoci nella posizione desiderata e clicchiamo per creare la prima tabella. Ripetiamo l’operazione per creare pure la seconda tabella

-32-


OC Informatica – Database Ora, concentriamoci sulla prima tabella. Doppio click o tasto destro Edit Table... Rinominiamo la tabella STUDENTE.

Aggiungiamo ora le colonne selezionando Columns. Per coerenza con il nostro schema, la chiave primaria che viene suggerita, idSTUDENTE, va sostituita con Matricola (lascia selezionato INT come tipo di dato). Vogliamo inoltre che la colonna Matricola venga numerata progressivamente dal database MySQL, così la specifichiamo AI (Auto Increment). Nell’editor aggiungiamo pure le altre colonne: Nome, Cognome, Telefono, Nascita. Il numero di telefono è composto da 9 cifre ed è più semplice da trattare come testo piuttosto che come numero "grande".

-33-


OC Informatica â&#x20AC;&#x201C; Database

Simbolo che identifica la chiave primaria (PK, Primary Key) Colonna senza valori nulli (NN, Not Null)

Allo stesso modo creiamo ora la tabella CORSO.

Non ci resta che creare la relazione ESAME fra le nostre tabelle. Trattandosi di una relazione molti a molti ci aspettiamo che il software crei una nuova tabella la cui chiave primaria sia la somma degli identificanti delle entitĂ  principali che partecipano alla relazione.

-34-


OC Informatica â&#x20AC;&#x201C; Database Clicchiamo sul pulsante che permette la creazione di questa relazione e in seguito selezioniamo le due tabelle STUDENTE e CORSO.

Cambiamo il nome della relazione (ESAME) e aggiungiamo gli attributi Data e Voto.

Salviamo il modello nei documenti.

-35-


Database