Controllo su un vincolo nel database delle piscine comunali di Torino

Messaggioda astrifiammante » 10/12/2020, 17:48

Salve a tutti. Mi sono appena cimentato nella creazione di database, con sql, e mi sono imbattuto in questo esercizio https://docplayer.it/5275050-Progettazione-di-basi-di-dati-temi-d-esame-svolti.html quello riguardante la gestione delle piscine comunali di torino. Per quanto riguarda all'entità tempo nell'associazione ternaria "rotazione" l'ho concepito come coppia degli attributi (giorno,ora) (la sua PK), così come sono organizzate le ore di lezione in una scuola: lunedì prima, seconda......ora, martedì........ecc. Quello che vorrei fare nella realizzazione in sql è effettuare un controllo nella "tabella ponte" rotazione(insegnante,piscina,giorno,ora) dell'associazione ternaria in modo tale che l'insegnante inserito in tale tabella abbia la qualifica necessaria per insegnare un determinato corso (coppia piscina, tipo corso cfr. riferimento esterno in tiene). Le tabelle in grado di effettuare tale collegamento alla tabella rotazione sono (almeno io le ho chiamate così) Qualificazioni e Orario_Corsi. Poichè qualifica in Insegnante è un attributo multivalore si introduce un'associazione molti a molti ove Qualificazioni(insegnante,qualifica) costituisce la tabella ponte. A sua volta Orario _Corsi(piscina,tipo,giorno,ora) è la tabella ponte dell'associazione lezione (basso destra). Si noti che tipo corso altri non è che qualifica!
La mia idea era di fare un trigger da azionare allorquando si inserisce una riga in rotazione e controllare, tramite un select count, se le righe di una determinata tabella join per un determinato insegnante sono nulle in corrispondenza di Qualificazioni.qualifica = Orario_Corsi.tipo e per Orario_Corsi.giorno = Rotazione.giorno e Orario_Corsi.ora = Rotazione.ora. In tal caso faccio fare al trigger un roll back. Non riesco però ad organizzare bene le "concatenazioni" nel trigger, qualcuno ha un'idea di come fare per sbrogliare la matassa?
astrifiammante
Junior Member
Junior Member
 
Messaggio: 49 di 118
Iscritto il: 16/02/2014, 21:05

Re: Controllo su un vincolo nel database delle piscine comunali di Torino

Messaggioda astrifiammante » 11/12/2020, 01:25

Stavo pensando per ottenere il tipo di corso basterebbe eseguire la query:

Codice:
select tipo
         from Rotazione,OrarioCorsi
         where Rotazione.giorno = OrarioCorsi.giorno
                  and
                  Rotazione.ora = OrarioCorsi.ora


Dovrò allora annullare l'update nella tabella Rotazione quando un determinato insegnante non ha la qualifica che coincide con il tipo di corso. Per far ciò dovrò andare a contare il numero di righe nella tabella Qualificazioni nelle quali compare l'insegnante in questione (Rotazione.insegnante) e come valore dell'attributo Qualificazioni.qualifica il tipo di corso ovvero il risultato della query sopra scritta. Se questo conteggio risulta nullo allora dovrò effettuare il Rollback. Perciò il trigger dovrebbe essere:

Codice:
Create trigger Insegnanti_Idonei
         after update on Rotazione
         for each row
         begin
              if(select count(*)
                 from Qualificazioni
                 where Qualificazioni.insegnante = Rotazione.insegnante
                          and
                          Qualificazione.qualifica = (select tipo from Rotazione, OrarioCorsi
                                                  where Rotazione.giorno = OrarioCorsi.giorno
                                                  and
                                                  Rotazione.ora = OrarioCorsi.ora))=0
                 Rollback Transaction
          end

E' corretto così?
astrifiammante
Junior Member
Junior Member
 
Messaggio: 50 di 118
Iscritto il: 16/02/2014, 21:05


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite