BASE DI DAI Progettazione logica Informatica Umanistica Università di Pisa
Concetti Fondamentali (precedente lezione) Introduzione Raccolta dei Requisiti Diagramma Concettuale delle Classi Classe Associazione Cardinalità Generalizzazione Linee Guida per la Modellazione Progettazione logica 2
Sommario Introduzione Il Processo di Progetto della BD Algoritmo di Progettazione Logica raduzione delle Classi raduzione delle Gerarchie raduzione delle Associazioni molti a molti raduzione delle Associazioni 1-1 e 1-molti Progettazione logica 3
Introduzione Siamo nella fase di progettazione si è conclusa (un iterazione del)la fase di analisi Attività da svolgere definire l architettura dell applicazione definire la struttura e i metodi delle classi definire la struttura della base di dati Fase successiva: sviluppo Requisiti della base di dati Progettazione concettuale Schema concettuale Progettazione logica Schema logico Progettazione fisica Schema fisico Progettazione logica 4
Il Processo di Progetto della BD Punto di partenza il modello concettuale dei dati Progettazione Logica dallo schema concettuale viene derivato uno schema logico standard e i necessari schemi esterni viene condotta sulla base di un semplice algoritmo sistematico Progettazione Fisica lo schema logico viene sottoposto a verifica e viene ottimizzato attività mista: progettazione e tuning difficilmente sistematizzabile In questa lezione ci concentriamo sulla progettazione logica Progettazione logica 5
Algoritmo di Progettazione Logica I passo: traduzione iniziale delle classi non coinvolte in gerarchie II passo: traduzione iniziale delle gerarchie III passo: traduzione degli attributi multivalore IV passo: traduzione delle associazioni molti a molti V passo: traduzione delle associazioni uno a molti VI passo: traduzione delle associazioni uno a uno VII passo: introduzione di eventuali ulteriori vincoli VIII passo: progettazione degli schemi esterni Progettazione logica 6
Schema Concettuale 0..* titolarità Corso <<id>> codice titolo ciclo 1..1 < relativo a relatore solo se al 3 anno 1 0..* Esame voto lode data ha sostenuto > 0..* irocinio 0..* cognome nome qualifica numelefono [0..*] relatore > 0..1 0..* <<id>> matricola cognome Nome ciclo anno 1..1 sede datainizio durata ha svolto > 0..1 Interno Supplente Dipartimento Laurea Laurea riennale Specialistica tutor > 0..* 0..1 Progettazione logica 7
Notazione Grafica per le abelle Stereotipo di UML tabella e attributi chiave primaria chiave esterna Esempio: CREAE ABLE ( matricola integer PRIMARY KEY, cognome char(20), nome char(20), anno integer, ciclo char(20), relatore char(4) REFERENCES (codice)); Studenti matricola INEGER anno INEGER ciclo CHAR(20) relatore CHAR(4) codice CHAR(4) FK Progettazione logica 8
I Passo: raduzione delle Classi Idea ogni classe diventa una tabella inizialmente gli stessi attributi monovalore successivamente possono essere aggiunti altri attributi E necessario individuare il tipo degli attributi individuare la chiave primaria individuare eventuali chiavi esterne Progettazione logica 9
I Passo: raduzione delle Classi individuare la chiave primaria Chiave primaria deve essere semplice da usare e compatta identificatore interno esplicito (es: matricola per, codice per Corso) un identificatore esterno può diventare una chiave primaria esterna (es: matricola dello studente per irocinio) purché sia compatto altrimenti si aggiunge un identificatore sintetico Progettazione logica 10
I Passo: raduzione delle Classi Esempio: Classi e chiave primaria Corso codice CHAR(3) identificatore esplicito Corso titolo CHAR(20) <<id>> codice titolo ciclo ciclo CHAR(20) Esame codice CHAR(5) identificatore sintetico Esame voto INEGER voto lode data lode BOOL data DAE irocinio irocinio matricola INEGER, FK identificatore esterno luogo sede CHAR(20) datainizio durata datainizio DAE durata INEGER Progettazione logica 11
I Passo: raduzione delle Classi Esempio: Classi e chiave primaria Corso <<id>> codice titolo ciclo Corso codice CHAR(3) titolo CHAR(20) ciclo CHAR(20) {ADS Algoritmi e Strutt. Dati laurea tr.} {PR1, Programm. I laurea tr.} {INF, Inf. eorica laurea sp.} codice titolo ciclo PR1 Programmazione I laurea tr. ASD Algoritmi e Str. Dati laurea tr. INF Informatica eorica laurea sp. Progettazione logica 12
I Passo: raduzione delle Classi Esempio irocinio luogo datainizio durata irocinio matricola INEGER sede CHAR(20) datainizio DAE durata INEGER, FK {Microsoft, 25/06/2002, 3 mesi} {SOGEI 1/7/2002, 4 mesi} {Microsoft, 25/06/2002, 3 mesi} studente sede datainizio durata 444 Microsoft 2002-05-15 3 77777 Microsoft 2002-05-15 3 88888 Basica 2002-09-01 3 Progettazione logica 13
II Passo: raduzione delle Gerarchie E l unico passo di una certa complessità non esiste la generalizzazione nel modello relazionale re possibili strade: radurre solo il padre della gerarchia (accorpare i figli nel padre) tradurre solo i figli della gerarchia (accorpare il padre nei figli) tradurre il padre e i figli collegandoli con chiavi esterne Progettazione logica 14
II Passo: raduzione delle Gerarchie I Soluzione: Solo il padre un unica tabella con il nome del padre la tabella deve avere tutti gli attributi di padre e figli serve un ulteriore attributo (es: tipo) per distinguere le istanze dei figli conveniente se le operazioni sui figli non sono particolarmente rilevanti nell applicazioni genera valori nulli Esempio: cognome nome qualifica per ora l attributo multivalore viene trascurato codice CHAR(4) numelefono [0..*] Dipartimento CHAR(10) qualifica CHAR(15) Interno Dipartimento Supplente tipo CHAR(10) tipo può valere: -interno oppure -supplente Progettazione logica 15
II Passo: raduzione delle Gerarchie II Soluzione: Solo i figli una tabella per ciascun figlio ciascun figlio eredita le associazioni e gli attributi del padre possibile solo se la gerarchia è completa conveniente se l applicazione richiede spesso di accedere singolarmente ai figli costringe ad effettuare molte unioni cognome Interno codice CHAR(4) Dipartimento CHAR(10) Esempio: nome qualifica numelefono [0..*] qualifica CHAR(15) Supplente codice CHAR(4) Interno Dipartimento Supplente qualifica CHAR(15) Progettazione logica 16
II Passo: raduzione delle Gerarchie III Soluzione: Sia il padre che i figli una tabella per il padre e una per ciascun figlio (per ogni istanza del figlio: parte degli attributi nella tabella specifica, parte nella tabella generale) riferimento da ciascun figlio al padre conveniente se bisogna spesso accedere tanto al padre che singolarmente ai figli costringe ad effettuare molti join Esempio: cognome codice CHAR(4) nome qualifica qualifica CHAR(15) numelefono [0..*] Interno Supplente codice CHAR(4),FK codice CHAR(4), FK Dipartimento CHAR(10) indirizzo CHAR(20) Interno Supplente Dipartimento indirizzo Progettazione logica 17
II Passo: raduzione delle Gerarchie (cont. esempio) III Soluzione: Sia il padre che i figli codice CHAR(4) qualifica CHAR(15) codice cognome nome qualifica Interno Supplente F otti Francesco ordinario CV Vieri Christian associato codice CHAR(4) Dipartimento CHAR(10),FK codice CHAR(4) indirizzo CHAR(20), FK ADP Del Piero Alessandro null Interno Supplente codice Dipartimento codice Indirizzo F Ingegneria ADP Stadio delle Alpi, orino CV Informatica Progettazione logica 18
II Passo: raduzione delle Gerarchie (cont. esempio) Gerarchia: Docenti soluzione n.1 per i docenti (Solo il padre) un unica tabella cognome nome qualifica numelefono [0..*] per ora l attributo multivalore viene trascurato codice CHAR(4) Dipartimento CHAR(10) qualifica CHAR(15) tipo CHAR(10) Interno Dipartimento Supplente tipo può valere: -interno oppure -supplente Progettazione logica 19
II Passo: raduzione delle Gerarchie (cont. esempio) Gerarchia: Studenti soluzione n.1 per gli studenti (Solo il padre) un unica tabella <<id>> matricola cognome Nome anno matricola INEGER anno INEGER Laurea riennale Laurea Specialistica ciclo CHAR(15) Progettazione logica 20
III Passo: rad. degli Attributi Multiv. Ogni attributo multivalore genera una nuova tabella chiave esterna per fare riferimento alla tabella che traduce la classe originale Esempio: cognome codice CHAR(4) Numeri nome numero CHAR(15) qualifica docente CHAR(4) FK numelefono [0..*] Dipartimento CHAR(10) qualifica CHAR(15) tipo CHAR(10) Progettazione logica 21
IV Passo: rad. delle Associazioni m-m Ogni associazione molti a molti genera una tabella riferimenti (chiavi esterne) alle tabelle che traducono le classi coinvolte eventuali attributi dell associazione la chiave della tabella deve includere le chiavi esterne titolarità 1..* 0..* Corso <<id>> codice titolo ciclo cognome nome qualifica Corso codice CHAR(3) titolo CHAR(20) ciclo CHAR(20) itolarità corso CHAR(3) docente CHAR(4) primoannoit INEGER, FK, FK numelefono [0..*] codice CHAR(4) primoannoit Progettazione logica 22
IV Passo: rad. delle Associazioni m-m (cont. esempio) 1..* Corso <<id>> codice titolo ciclo Corso codice CHAR(3) titolo CHAR(20) ciclo CHAR(20) codice titolo ciclo PR1 Programmazione I laurea tr. ASD Algoritmi e Str. Dati laurea tr. INF Informatica eorica laurea sp. titolarità 0..* cognome nome qualifica numelefono [0..*] itolarità corso CHAR(3) docente CHAR(4) primoannoit INEGER codice CHAR(4), FK, FK docente corso primoannoit F PR1 2001 CV ASD 2002 F ASD 1999 codice cognome nome F otti Francesco primoannoit CV Vieri Christian ADP Del Piero Alessandro Progettazione logica 23
V Passo: rad. delle Associazioni 1-m Potrebbero essere tradotte con nuove tabelle sarebbe inefficiente costringerebbe a più join del normale Generano chiavi esterne ciascuna istanza dell associazione è identificata dall oggetto dal lato 1 chiave esterna della tabella dal lato 1 nella tabella corrispondente alla classe dal lato m Oggetto Lato 1 1..1 < relativo a 0..* Oggetto Lato m Chiave esterna su oggetto Lato 1 Progettazione logica 24
V Passo: rad. delle Associazioni 1-m (cont. Esempio) Corso <<id>> codice titolo 1..1 < relativo a 0..* Esame voto lode ciclo data Corso Esame codice CHAR(3) codice CHAR(5) titolo CHAR(20) ciclo CHAR(20) voto INEGER lode BOOL data DAE corso CHAR(3) FK Progettazione logica 25
V Passo: rad. delle Associazioni 1-m (cont. Esempio) cognome nome qualifica numelefono [0..*] relatore > 0..1 0..* <<id>> matricola cognome Nome Anno ciclo codice CHAR(4) matricola INEGER Dipartimento CHAR(10) anno INEGER qualifica CHAR(15) Ciclo CHAR(20) tipo CHAR(10) relatore CHAR(4) FK Progettazione logica 26
V Passo: rad. delle Associazioni 1-m (cont. Esempio) cognome nome qualifica numelefono [0..*] relatore > 0..1 0..* <<id>> matricola cognome Nome Anno ciclo codice CHAR(4) Dipartimento CHAR(10) qualifica CHAR(15) tipo CHAR(10) matricola INEGER anno INEGER Ciclo CHAR(20) relatore CHAR(4) FK codice cognome nome F otti Francesco CV Vieri Christian ADP Del Piero Alessandro matricola cognome nome relatore 111 Rossi Mario null 222 Neri Paolo null 333 Rossi Maria null 444 Pinco Palla F 77777 Bruno Pasquale F 88888 Pinco Pietro CV Progettazione logica 27
V Passo: rad. delle Associazioni 1-m (cont. Esempio) Attenzione: nel caso degli studenti, l associazione del tutorato produrrebbe un vincolo di riferimento ricorsivo (scomodo) Il sistema deve tenere traccia delle attività di tutorato svolte dagli studenti della laurea sp. nei confronti degli studenti della laurea triennale <<id>> matricola cognome Nome anno Lurea Laurea riennale Specialistica 0..* 0..1 tutor > matricola INEGER anno INEGER ciclo CHAR(15) matricola INEGER anno INEGER Ciclo CHAR(20) relatore CHAR(4) FK tutor INEGER FK nonostante non sia scorretta, non adotteremo questa soluzione Progettazione logica 28
V Passo: rad. delle Associazioni 1-m (cont. Esempio) I sistema deve tenere traccia delle attività di tutorato svolte dagli studenti della laurea sp. nei confronti degli studenti della laurea triennale Laurea Laurea riennale Specialistica 0..* 0..1 tutor > utorato studente INEGER tutor INEGER, FK, FK matricola INEGER anno INEGER Ciclo CHAR(20) relatore CHAR(4) FK Progettazione logica 29
VI Passo: rad. delle Associazioni 1-1 Discorso simile a quelle 1 a molti posso scegliere dove mettere la chiave esterna si preferisce un lato in cui la card. min. è 1 matricola INEGER irocinio irocinio <<id>> matricola cognome Nome Anno 1..1 0..1 ha svolto > sede datainizio durata matricola INEGER sede CHAR(20) datainizio DAE durata INEGER, FK ciclo Progettazione logica 30
Corso itolarità codice CHAR(3) corso CHAR(3), FK titolo CHAR(20) Esame docente CHAR(4), FK ciclo CHAR(20) codice CHAR(5) voto INEGER irocinio studente INEGER sede CHAR(20) datainizio DAE, FK codice CHAR(4) lode BOOL data DAE corso CHAR(3) stud INEGER FK FK durata INEGER dipartimento CHAR(10) Numeri qualifica CHAR(15) tipo CHAR(10) numero CHAR(15) docente CHAR(4) FK matricola INEGER utorato anno INEGER Ciclo CHAR(20) studente INEGER tutor INEGER, FK, FK relatore CHAR(4) FK Progettazione logica 31
VII Passo: Aggiunta di Vincoli Ulteriori A questo punto sono definite le tabelle gli attributi le chiavi primarie i vincoli di riferimento Per ottenere lo schema conclusivo è possibile aggiungere altri vincoli (NO NULL, DEFAUL, CASCADE, CHECK ecc.) Progettazione logica 32
VII Passo: Aggiunta di Vincoli Ulteriori In particolare: le cardinalità minime danno origine a vincoli NO NULL Esempio: Corso <<id>> codice titolo < relativo a 1..1 0..* Esame voto lode Corso codice CHAR(3) titolo CHAR(20) ciclo data ciclo CHAR(20) CREAE ABLE Esame ( codice char(5) PRIMARY KEY, corso char(3) NO NULL REFERENCES Corso(codice),... ); Progettazione logica 33
Lo Schema Finale Vincolo: Gli studenti della laurea triennale possono chiedere un relatore solo se sono iscritti al terzo anno codice CHAR(4) CREAE ABLE ( codice char(4) PRIMARY KEY, cognome varchar(20) NO NULL, nome varchar(20) NO NULL, qualifica char(15), dipartimento char(10), tipo char(10) NO NULL ); matricola INEGER CREAE ABLE ( matricola integer PRIMARY KEY, anno INEGER cognome char(20), Ciclo CHAR(20) nome char(20), anno integer, relatore CHAR(4) ciclo char(20), relatore char(4) REFERENCES (codice)) CHECK(relatore is NULL or anno=3 or ciclo= Laurea sp. ) ); FK dipartimento CHAR(10) qualifica CHAR(15) tipo CHAR(10) Progettazione logica 34
CREAE ABLE Corso ( codice char(3) PRIMARY KEY, titolo varchar(20) NO NULL, ciclo char(20) ); CREAE ABLE Esame ( codice char(5) PRIMARY KEY, studente integer NO NULL REFERENCES (matricola) ON DELEE cascade ON UPDAE cascade, corso char(3) NO NULL REFERENCES Corsi(codice), voto integer, lode bool, data date, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), UNIQUE (studente, corso) ); Corso codice CHAR(3) titolo CHAR(20) ciclo CHAR(20) Esame codice CHAR(5) voto INEGER lode BOOL data DAE Vi deve essere un vincolo sul voto? corso CHAR(3) stud INEGER Vi deve essere un vincolo sulla lode? FK FK Vi deve essere un vincolo su «studente» e «corso»? Progettazione logica 35
CREAE ABLE irocinio ( studente integer PRIMARY KEY REFERENCES (matricola), sede char(20) NO NULL, datainizio date, durata integer ); irocinio CREAE ABLE utorato ( studente integer REFERENCES (matricola), tutor integer REFERENCES (matricola), PRIMARY KEY (studente, tutor) ); studente INEGER sede CHAR(20) datainizio DAE durata INEGER matricola INEGER, FK anno INEGER Ciclo CHAR(20) utorato studente INEGER tutor INEGER, FK, FK relatore CHAR(4) FK Progettazione logica 36
Corso itolarità codice CHAR(3) corso CHAR(3), FK titolo CHAR(20) docente CHAR(4), FK ciclo CHAR(20) codice CHAR(4) CREAE ABLE Numeri ( numero char(9) PRIMARY KEY, docente char(4) REFERENCES (codice) ); dipartimento CHAR(10) Numeri qualifica CHAR(15) tipo CHAR(10) numero CHAR(15) docente CHAR(4) FK CREAE ABLE itolarita ( docente char(4) REFERENCES (codice), corso char(3) REFERENCES Corso(codice), PRIMARY KEY (docente, corso) ); Progettazione logica 37
Una Possibile Istanza codice cognome nome qualifica dipartimento tipo F otti Francesco ordinario Ingegneria interno CV Vieri Christian associato Informatica interno ADP Del Piero Alessandro null null supplente matricola cognome nome ciclo anno relatore 111 Rossi Mario laurea tr. 1 null 222 Neri Paolo laurea tr. 2 null 333 Rossi Maria laurea tr. 1 null 444 Pinco Palla laurea tr. 3 F 77777 Bruno Pasquale laurea sp. 1 F 88888 Pinco Pietro laurea sp. 1 CV Progettazione logica 38
Corso utorato Esame codice titolo ciclo PR1 Programmazione I laurea tr. ASD Algoritmi e Str. Dati laurea tr. INF Informatica eorica laurea sp. studente tutor 111 77777 222 77777 333 88888 444 88888 codice studente corso voto lode data pr101 111 PR1 27 false 2002-06-12 asd01 222 ASD 30 true 2001-12-03 inft1 111 INF 24 false 2001-09-30 pr102 77777 PR1 21 false 2002-06-12 asd02 77777 ASD 20 false 2001-12-03 asd03 88888 ASD 28 false 2002-06-13 pr103 88888 PR1 30 false 2002-07-01 inft2 88888 INF 30 true 2001-09-30 Progettazione logica 39
irocinio studente sede datainizio durata 444 Microsoft 2002-05-15 3 77777 Microsoft 2002-05-15 3 88888 SOGEI 2002-09-01 3 Numeri numero docente itolarita docente corso 0971205145 F F PR1 347123456 F 0971205227 VC 0971205363 ADP 338123456 ADP CV ADP ADP F ASD INF PR1 ASD Progettazione logica 40
VIII Passo: Schemi Esterni Dallo schema logico è necessario derivare gli schemi esterni eventuali viste autorizzazioni agli utenti su tabelle e viste Esempio: due categorie di utenti segreteria: accesso a tutti i dati docenti: accesso a dati ristretti sugli esami (es: una vista EsameSenzaVoto ) Progettazione logica 41
Riepilogo Algoritmo di Progettazione Logica raduzione delle Classi raduzione delle Gerarchie traduzione degli attributi multivalore raduzione delle Associazioni molti a molti 1-molti 1-1 introduzione di eventuali ulteriori vincoli progettazione degli schemi esterni Progettazione logica 42
Esempio Università: Schema concettuale 0..* titolarità Corso <<id>> codice titolo ciclo 1 < relativo a relatore solo se al 3 anno 1 0..* Esame voto lode data ha sostenuto > 0..* irocinio 0..* cognome nome qualifica relatore > 0..1 0..* <<id>> matricola cognome nome 1 luogo datainizio durata numelefono [0..*] annodicorso ha svolto > 0..1 Interno Supplente facolta Laurea Laurea riennale Specialistica 0..* tutor > 0..1 Progettazione logica 43
Esempio Università: Schema logico Corso itolarità codice CHAR(3) corso CHAR(3), FK titolo CHAR(20) Esame docente CHAR(4), FK ciclo CHAR(20) codice CHAR(5) voto INEGER irocinio studente INEGER sede CHAR(20) datainizio DAE, FK codice CHAR(4) lode BOOL data DAE corso CHAR(3) stud INEGER FK FK durata INEGER dipartimento CHAR(10) Numeri qualifica CHAR(15) tipo CHAR(10) numero CHAR(15) docente CHAR(4) FK matricola INEGER utorato anno INEGER studente INEGER, FK Ciclo CHAR(20) tutor INEGER, FK relatore CHAR(4) FK Progettazione logica 44