UNIVERSITÀ: SCHEMA E/R & PROGETTO LOGICO Lo schema descrive i professori, gli studenti e i corsi di una università. I professori afferiscono ad un dipartimento e tengono dei corsi; gli studenti hanno nel programma del piano di studio e seguono dei corsi. Sia per i professori che per gli studenti è riportato il luogo di nascita; in aggiunta, per gli studenti si riporta anche il luogo di residenza. Per gli studenti laureandi è rappresentato il relatore. Per i corsi sono rappresentati le aule e gli orari. Generalizzazioni: I professori e gli studenti sono raggruppati in una gerarchia con entità generica PERSONA. I laureandi sono un sottoinsieme di studenti. STATO CITTA' RESIDENZA PERSONA (t,e) PROFESSORE TELEFONO DIPARTIMENTO AFFERISCE RELATORE Associazioni: AFFERISCE: ogni professore afferisce ad uno e un solo dipartimento LAUREANDO card(professore,afferisce)= ad un dipartimento afferisce almeno un professore card(dipartimento,afferisce)= SEGUE PIANO_DI STUDIO TENUTO_DA: ogni professore tiene da uno a due corsi card(professore,tenuto_da)=(1,2) ogni corso è tenuto da uno o più professori ANNO_ACC ANNO_ACC TENUTO_DA (1,2) card(,tenuto_da)= (3,5) SEGUE: SI_TIENE: ogni studente può seguire più corsi card(,segue)= ogni corso è seguito da uno o più studenti card(,segue)= ogni corso si tiene da tre a cinque volte la settimana card(,si_tiene)=(3,5) in un aula si tiene, durante la settimana, almeno un corso card(aula,si_tiene)= in un certo orario settimanale si tiene almeno un corso card(orario,si_tiene)= SI_TIENE ORARIO AULA GIORNO ORA SCHEMA E/R DI UNA UNIVERSITA' NUMERO_AULA FACOLTA' SISTEMI INFORMATIVI A.A. 2003/2004 1 2
SCHEMA DI UNA UNIVERSITÀ : Progetto logico CHECK: C-NASC,S-NASC NOT NULL STATO CITTA' RESIDENZA PERSONA (t,e) PROFESSORE MIN-CARD(,_) = 1 CHECK: S-RESID,C-RESID NOT NULL MIN-CARD(,RESIDENZA) = 1 Anche da un punto di vista implementativo conviene tenere le due clausole separate; ad esempio, possiamo modificare la cardinalità COLLASSO VERSO IL BASSO MIN-CARD(,RESIDENZA) = 0 eliminando (tramite il comando ALTER TABLE di SQL) la clausola CHECK: S-RESID,C-RESID NOT NULL CITTA' RESIDENZA PROFESSORE PROFESSORE(,,C-NASC,S-NASC, FK: C-NASC,S-NASC REFERENCES CITTA CHECK: C-NASC,S-NASC NOT NULL La relazione AFFERISCE è riportata in PROFESSORE DIPARTIMENTO(,TELEFONO) CITTA( CITTA,STATOCITTA) (,,C-NASC,S-NASC,C-RESID,S-RESID FK: C-NASC,S-NASC REFERENCES CITTA FK: S-RESID,C-RESID REFERENCES CITTA CHECK: C-NASC,S-NASC NOT NULL CHECK: S-RESID,C-RESID NOT NULL PROFESSORE(,,C-NASC,S-NASC,N-DIPARTIMENTO) FK: C-NASC,S-NASC REFERENCES CITTA FK: N-DIPARTIMENTO REFERENCES DIPARTIMENTO CHECK: C-NASC,S-NASC NOT NULL CHECK: N-DIPARTIMENTO NOT NULL Nota: si potrebbe usare un unica clausola di NOT NULL per tutti gli attributi CHECK: S-RESID,C-RESID,C-NASC,S-NASC NOT NULL Comunque, è meglio tenere due clausole separate, ovvero mettere una clausola di not null per ogni foreign key; infatti queste due clausole di not null si riferiscono a due differenti vincoli di cardinalità : SISTEMI INFORMATIVI A.A. 2003/2004 3 4
LAUREANDO Si mantengono entrambe le entità (0,1) LAUREANDO (3,5) SI_TIENE AULA NUMERO_AULA FACOLTA' + Vincoli: 1) Non sovrapposizione 2) Non sdoppiamento ORARIO GIORNO ORA LAUREANDO(, FK: REFERENCES La relazione RELATORE è riportata in LAUREANDO LAUREANDO(,-RELATORE) FK: REFERENCES FK: -RELATORE REFERENCES PROFESSORE Nota: CHECK: -RELATORE NOT NULL Per semplicità di notazione, nel seguito il vincolo di not null relativo ad una foreign key verrà anche indicato semplicemente tramite [NOT NULL] nel vincolo di foreign key, cioè scriveremo indifferentemente LAUREANDO(,-RELATORE) FK: REFERENCES FK: -RELATORE REFERENCES PROFESSORE ( ) AULA( NUMERO,FACOLTA ) ORARIO( GIORNO,ORA) SI-TIENE(,GIORNO,ORA,NUMEROAULA,FACOLTA ) AK:GIORNO,ORA,NUMEROAULA,FACOLTA FK: REFERENCES FK:GIORNO,ORA REFERENCES ORARIO FK:NUMEROAULA,FACOLTA REFERENCES AULA [NOT NULL] Si noti che nella traduzione di una associazione tramite relazione (nel nostro caso, dell associazione ternaria SI-TIENE) tutte le foreign key devono essere not null; è stato indicato [NOT NULL] solo per la FK:NUMEROAULA,FACOLTA in quanto gli altri attributi fanno parte della primary key e quindi sono già not null. GIORNO ORA CHECK: -RELATORE NOT NULL Oppure, più semplicemente LAUREANDO(,-RELATORE) FK: REFERENCES FK: -RELATORE REFERENCES PROFESSORE [NOT NULL] AULA ( ) A SITIENE B (3,5) AULA( NUMERO,FACOLTA ) SISTEMI INFORMATIVI A.A. 2003/2004 5 ORARIO(,GIORNO,ORA,NUMEROAULA,FACOLTA ) AK:GIORNO,ORA,NUMEROAULA,FACOLTA FK: REFERENCES FK:NUMEROAULA,FACOLTA REFERENCES AULA [NOT NULL] 6
Schema relazionale finale: (,,C-NASC,S-NASC,C-RESID,S-RESID) FK: C-NASC,S-NASC REFERENCES CITTA [NOT NULL] FK: S-NASC,C-RESID REFERENCES CITTA [NOT NULL] PROFESSORE(,,C-NASC,S-NASC,N-DIPARTIMENTO) FK: C-NASC,S-NASC REFERENCES CITTA [NOT NULL] FK: N-DIPARTIMENTO REFERENCES DIPARTIMENTO [NOT NULL] LAUREANDO(,-RELATORE) FK: REFERENCES FK: -RELATORE REFERENCES PROFESSORE [NOT NULL] CITTA (,STATO) Nota Il vincolo che i corsi seguiti siano corsi inseriti nel piano di studio, non espresso nello schema ER, si può aggiungere facilmente nello schema relazionale tramite un vincolo di integrità referenziale sulla relazione SEGUE: SEGUE (,,ANNO-ACCADEMICO) FK:, REFERENCES PIANODISTUDIO Il vincolo che i corsi seguiti siano corsi inseriti nel piano di studio può essere espresso in ER nel seguente modo: DIPARTIMENTO(,TELEFONO) ( ) AULA( NUMERO,FACOLTA ) ORARIO(,GIORNO,ORA,NUMEROAULA,FACOLTA ) AK:GIORNO,ORA,NUMEROAULA,FACOLTA FK: REFERENCES FK:NUMEROAULA,FACOLTA REFERENCES AULA [NOT NULL] TENUTO-DA(,PROFESSORE) FK: REFERENCES FK:PROFESSORE REFERENCES PROFESSORE PIANODISTUDIO (,,ANNO-) FK: REFERENCES FK: REFERENCES SEGUE (,,ANNO-ACCADEMICO) FK: REFERENCES FK: REFERENCES PIANO_DI A B STUDIO ANNO ANNO SEGUE Traducendo questo schema in relazionale (per il subset si mantengono entrambe le entità) si ottiene ancora : PIANODISTUDIO (,,ANNO-) FK: REFERENCES FK: REFERENCES SEGUE (,,ANNO-ACCADEMICO) FK:, REFERENCES PIANODISTUDIO SISTEMI INFORMATIVI A.A. 2003/2004 7 8
Si vogliono memorizzare gli esami che gli studenti sostengono per i vari corsi, riportandone la data e il voto. Uno studente può sostenere fino ad un massimo di 29 esami. Nessuna limitazione per il numero di esami registrabili per un corso. 2. Per un dato studente e un dato corso possono essere registrati più esami, ciascuno con il relativo voto e la relativa data. 1. Per un dato studente e un dato corso può essere registrato un unico esame, con il relativo voto e la relativa data. (0,29) REG. (0,29) (MATRICOLA, ) (, ) (MATRICOLA,,,) FK : MATRICOLA REFERENCES FK : REFERENCES Si noti che lo stesso schema relazionale si ottiene dalla reificazione dell associazione : Caso a) : un valore (ovvero una coppia <voto,data>) può comparire una sola volta nella ripetizione (MATRICOLA,) FK : MATRICOLA REFERENCES FK : REFERENCES REG(MATRICOLA,,,) FK : MATRICOLA, REFERENCES A B (0,29) Caso b) : un valore (ovvero una coppia <voto,data>) può comparire più volte nella ripetizione : si introduce un numero-ordine (MATRICOLA,) FK : MATRICOLA REFERENCES FK : REFERENCES REG(MATRICOLA,,N-ORDINE,,) FK : MATRICOLA, REFERENCES SISTEMI INFORMATIVI A.A. 2003/2004 9 10
3. Per un dato studente e un dato corso possono essere registrati più esami, ma in date differenti, per un dato studente, un dato corso e una certa data, può essere registrato un unico esame, con il relativo voto (0,29) FK : MATRICOLA REFERENCES FK : REFERENCES 4. Uno studente non può registrare due o più esami nella stessa data, cioè per una certa data e per un certo studente si può registrare un unico esame (relativo ad un preciso corso) A B (0,29) () (MATRICOLA,,,) FK : MATRICOLA REFERENCES FK : REFERENCES FK : REFERENCES Si noti che lo stesso schema relazionale si ottiene dalla reificazione dell associazione : (MATRICOLA,,,) FK : MATRICOLA REFERENCES FK : REFERENCES [NOT NULL] 5. Vincolo 4 + Vincolo 1 C A B (0,29) A B (0,29) Invece la traduzione del seguente schema ER (MATRICOLA,,,) AK : MATRICOLA, FK : MATRICOLA REFERENCES FK : REFERENCES [NOT NULL] (0,29) A B Non richiede più l introduzione della relazione : (MATRICOLA,,,) SISTEMI INFORMATIVI A.A. 2003/2004 11 12