Esercitazione 3 Vincoli di integrità Approccio Procedurale
Dalla progettazione concettuale alla realizzazione del database su MySQL Progettazione concettuale Requisiti Progettazione logica Schema concettuale Schema logico Progettazione fisica Schema fisico 2
Il Dominio Si chiede di progettare lo schema concettuale di un applicazione relativa all indirizzo PLM della facoltà di ingegneria dell università la Sapienza di Roma. Di ogni studente interessa conoscere il numero di matricola (chiave), il suo piano di studi, gli esami sostenuti ed eventualmente informazioni relative alla relazione finale che lo studente presenterà alla sessione di laurea. Ogni studente deve avere un solo piano di studi il quale definisce gli esami che devono essere superati dallo studente prima di laurearsi. Del piano di studi interessa il tipo il quale può essere PLM o Sistemi informatici. Ogni corso ha un nome che lo identifica, un certo numero di crediti e può essere di tipo progettuale o di tipo non progettuale. Gli unici esami di tipo non progettuale previsti sono Progetto di applicazioni software e Progetto di reti di calcolatori e sistemi informatici. È inoltre di interesse conoscere per ogni studente la data in cui ha sostenuto i suoi esami ed il voto. Uno studente può inoltre essere autore di una relazione finale che può essere stata discussa in una sessione di laurea in cui viene assegnato, ad ogni studente, un voto compreso tra 70 e 110. Ogni relazione finale ha come argomento un corso il quale deve essere di tipo progettuale e non appartenere al piano di studi dello studente autore della relazione. 3
Dalla progettazione concettuale alla realizzazione del database su MySQL Progettazione concettuale Requisiti Progettazione logica Schema concettuale Schema logico Progettazione fisica Schema fisico 4
Progettazione concettuale Lo schema concettuale matr (0,1) autore (1,1) Studente (0,n) verbalizza (0,1) (1,1) (0,n) stila n. crediti nome prevede Piano di studi Corso (1,n) (0,n) tipo argomento (0,n) (1,1) discussione Relazione finale (0,1) n. pag voto (1,1) data (1,n) Esame voto data Corso non progettuale Corso progettuale Sessione di laurea
Progettazione concettuale Vicoli di integrità esterni 1. I corsi progettuali previsti sono solamente Progetto di applicazioni software e Progetto di reti di calcolatori e sistemi informatici. 2. Uno studente può discutere la sua tesi di laurea in una certa sessione solo se tutti gli esami previsti nel suo piano di studi sono stati superati e verbalizzati con voto maggiore o uguale a 18. 3. Esistono solo due tipi di piano di studi: PLM e sistemi informatici. 4. Se uno studente ha un piano di studi di tipo PLM, allora deve produrre una relazione finale che verta su un corso di tipo progettuale non compreso nel suo piano di studi. 5. Un voto di laurea deve essere compreso tra 70 e 110 6
Progettazione concettuale Fasi della ristrutturazione dello schema concettuale 1. analisi delle ridondanze 2. eliminazione degli attributi multivalore 3. eliminazione degli attributi composti 4. eliminazione delle ISA e delle generalizzazioni 5. scelta degli identificatori principali 6. specifica degli ulteriori vincoli esterni 7. riformulazione delle operazioni e delle specifiche sul carico applicativo in termini dello schema ristrutturato 7
Progettazione concettuale Ristrutturazione dello schema concettuale matr (0,1) autore (1,1) Studente (1,1) (0,n) Esame verbalizza (0,n) (0,1) (1,1) voto data stila n. crediti nome prevede CNP ISA C Corso non progettuale Piano di studi Corso (1,n) (0,n) (0,1) (0,1) (1,1) (1,1) tipo Corso progettuale argomento (0,n) CP ISA C (1,1) discussione data Relazione finale (0,1) (1,n) Sessione di laurea n. pag voto
Progettazione concettuale Ristrutturazione dello schema concettuale 1. I corsi progettuali previsti sono solamente Progetto di applicazioni software e Progetto di reti di calcolatori e sistemi informatici. 2. Uno studente può discutere la sua tesi di laurea in una certa sessione solo se tutti gli esami previsti nel suo piano di studi sono stati superati e verbalizzati con voto maggiore o uguale a 18. 3. Esistono solo due tipi di piano di studi: PLM e sistemi informatici. 4. Se uno studente ha un piano di studi di tipo PLM, allora deve produrre una relazione finale che verta su un corso di tipo progettuale non compreso nel suo piano di studi. 5. Un voto di laurea deve essere compreso tra 70 e 110 6. Vicolo di generalizzazione: ogni istanza di Corso partecipa o a CP_ISA_C o a CNP_ISA_C 9
Dalla progettazione concettuale alla realizzazione del database su MySQL Progettazione concettuale Requisiti Progettazione logica Schema concettuale Schema logico Progettazione fisica Schema fisico 10
Progettazione logica La traduzione diretta La traduzione diretta ha lo scopo di tradurre lo schema ER ristrutturato (con vincoli) in uno schema relazionale con vincoli che rappresenti le stesse informazioni Consiste delle seguenti attività: traduzione delle entità in relazioni dello schema logico, con relativi vincoli traduzione delle relazioni dello schema ER in relazioni dello schema logico, con relativi vincoli traduzione dei vincoli esterni riformulazione di operazioni e specifiche sul carico applicativo in termini dello schema logico 11
Corso(nome, n _crediti) Studente(matricola) Sessione_di_laurea(data) Progettazione logica Entità senza accorpamento inc: SessioneDiLaurea[data] Discussione[sessioneDiLaurea] 12
PianoDiStudio(studente, tipo) Foreign key: PianoDiStudio[studente] Studente[matricola] inclusione: PianoDiStudio[studente] Prevede [pianodistudio] RelazioneFinale(studente, n pag) Foreign key: RelazioneFinale [studente] Studente[matricola] Foreign key: RelazioneFinale[studente] Argomento[relazione] Esame(studente, corso, voto, data) Foreign key: Esame [studente] Studente[matricola] Foreign key: Esame[corso] Corso[nome] CorsoNonProgettuale(nome) Foreign key: CorsoNonProgettuale[nome] Corso [nome] CorsoProgettuale(nome) Progettazione logica entità con accorpamento Foreign key: CorsoProgettuale[nome] Corso [nome] 13
Prevede(pianoDiStudio,corso) Foreign key: Prevede[pianoDiStudio] PianoDiStudio [studente] Foreign key: Prevede[corso] Corso [nome] Argomento(relazione, corso) Progettazione logica relazioni senza accorpamento Foreign key: Argomento[relazione] RelazioneFinale[studente] Foreign key: Argomento[corso] Corso[nome] Discussione(relazioneFinale, sessionedilaurea, voto) Foreign key: Discussione[relazioneFinale] RelazioneFinale[studente] Foreign key: Discussione[sessioneDiLaurea] SessioneDiLaurea[data] 14
Progettazione logica Ristrutturazione dello schema logico In questo esempio non è presente la ristrutturazione dello schema logico. NOTA: nel progetto ogni fase della progettazione della base di dati deve essere presente ed opportunamente descritta. (fare riferimento alle slide del corso di basi di dati) 15
Dalla progettazione concettuale alla realizzazione del database su MySQL Progettazione concettuale Requisiti Progettazione logica Schema concettuale Schema logico Progettazione fisica Schema fisico 16
Progettazione fisica Creazione dello schema in MySQL Task1: Connettersi al DBMS MySQL: 1. Aprire il programma QueryBrowser (Start-->MySQL-->QueryBrowser) 2. Nella casella server inserire: 192.168.51.254 3. Nella casella user inserire: prog10xx (sostituire xx con il numero assegnato) 4. Nella casella password inserire: prog10 5. Premere il tasto IGNORE nella schermata successiva Task2: Aprire e modificare lo script sql denominato creazione_schema in modo che crei un nuovo database denominato esercitazione + proprio numero di matricola. Per eseguire lo script andare su MENU-->File-->OpenScript e successivamente premere su Execute DOMANDA: Come risolvere il problema dei vincoli di FK ciclici nella creazione delle tabelle? 17
Progettazione fisica Vincoli esterni VINCOLO 5): Un voto di laurea deve essere compreso tra 70 e 110 Task3: Creare una user defined function che, dato un voto di laurea in input (con tipo di dato coerente con la definizione della tabella Discussione), restituisca true se il voto di laurea è compreso tra 70 e 110, false altrimenti. Task4: Creare un trigger che verifichi che le tuple che si stanno tentando di inserire nella tabella Discussione abbiamo un valore del campo voto valido. 18
Progettazione fisica Vincoli esterni VINCOLO 2): Uno studente può discutere la sua tesi di laurea in un certa sessione solo se tutti gli esami previsti nel suo piano di studi sono stati superati e verbalizzati. Task5: Creare una user defined function che, dato l identificatore di una relazione finale in input (con tipo di dato coerente con la definizione della tabella RelazioneFinale) restituisca true se lo studente autore di quella relazione finale può laurearsi, ovvero se per ogni corso previsto dal piano di studi di quello studente esiste un esame, relativo a quel corso e verbalizzato da quello studente con voto maggiore o uguale a 18. Task6: Creare un trigger che, prima dell inserimento di una nuova tupla nella tabella Discussione, verifichi se la relazione finale può essere discussa. ATTENZIONE: Il task 6 richiede di creare un trigger che si attivi prima dell inserimento di una tupla nella tabella Discussione come richiesto anche dal Task 4. 19
Progettazione fisica Vincoli esterni VINCOLO DI INCLUSIONE: SessioneDiLaurea[data] Discussione[sessioneDiLaurea] Task7: Creare una stored procedure con un parametro di input e uno di output: il parametro di input rappresenta una sessione di laurea (con tipo di dato coerente con la definizione della tabella SessioneDiLaurea) mentre il parametro di output è un booleano che rappresenta il risultato della computazione della stored procedure, che è la seguente: se la sessione di laurea compare almeno una volta nella tabella Discussione, allora il valore che viene scritto nel parametro di output è true, altrimenti viene scritto false Task8: Creare un trigger che prima dell'inserimento di una tupla nella tabella SessioneDiLaurea verifichi che la sessione compaia almeno una volta nella tabella Discussione. 20
Progettazione fisica Gestione dei vincoli ciclici Nello schema sono presenti diversi vincoli di foreign key ed inclusione ciclici i quali impediscono l'inserimento di tuple nelle tabelle coinvolte nel ciclo. Si considerino i seguenti vincoli ciclici: CICLO 1: CICLO 2: Fk: RelazioneFinale[studente] Argomento[relazione] Fk: Argomento[relazione] RelazioneFinale[studente] Inc: SessioneDiLaurea[data] Discussione[sessioneDiLaurea] Fk: Discussione[sessioneDiLaurea] SessioneDiLaurea[data] 21
Progettazione fisica Gestione dei vincoli ciclici Task9: risolvere il problema dei vincoli ciclici adottando la seguente strategia: permettere gli inserimenti nelle varie tabelle solo attraverso transazioni appropriate, che disabilitano e riabilitano i vincoli di foreign key o i trigger all'interno di un'unica transazione. Domanda: quale livello di isolamento conviene impostare per le transazioni di cui sopra? Task11: Interrogarsi sulla politica di cancellazione/aggiornamento relative ai vincoli di foreign key. Domanda: la ciclicità di vincoli pone problemi rispetto alla cancellazione/aggiornamento? Se sì, come si risolvono? 22