1 / 13

Decomposizione Schemi e Trigger

Decomposizione Schemi e Trigger. Tabella R. Dipendenze funzionali: F = {SR  G, G  S } La tupla (Argentina, Zanetti, Centrocampista) non è ammessa perché viola la dipendenza SR  G. Decomposizione che non preserva i dati. π SR (R). π GS (R) join π SR (R). π GS (R).

stacia
Télécharger la présentation

Decomposizione Schemi e Trigger

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Decomposizione Schemi e Trigger

  2. Tabella R Dipendenze funzionali: F ={SR  G, G  S} La tupla (Argentina, Zanetti, Centrocampista) non è ammessa perché viola la dipendenza SR  G.

  3. Decomposizione che non preserva i dati πSR(R) πGS(R) join πSR(R) πGS(R) E’ possibile inserire nelle tabelle le due tuple: (Argentina, Centrocampista) e (Zanetti, Argentina) Questa decomposizione non preserva le dipendenze funzionali.

  4. Decomposizione che preserva i dati πGR(R) πGS(R) join πSR(R) πGS(R) Questa decomposizione preserva i dati.

  5. Trigger su R Per conservare le dipendenze funzionali sulla tabella R prima di tutto dichiariamo una chiave composta da tutti i campi. Primary key(squadra, giocatore, ruolo) Per conservare le dipendenze funzionali serve un trigger sulla tabella R che controlli gli inserimenti e gli update sulle tuple della tabella R.

  6. Trigger su R (cont.) CREATE TRIGGER Controllo_DF_R ON R FOR INSERT, UPDATE AS --- Dichiaro delle variabili di comodo Declare @s nvarchar(50), @g nvarchar(50), @is nvarchar(50), @cont int -- controllo S,R --> G -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @cont = count(*) from R, inserted where R.squadra = inserted.squadra and R.ruolo = inserted.ruolo and R.giocatore <> inserted.giocatore if @cont > 0 begin raiserror('Il ruolo che si vuole inserire per la squadra scelta ha già un giocatore.',16,1) rollback transaction end

  7. Trigger su R -- controllo G --> S Select @g = R.giocatore, @s = R.squadra, @is = inserted.squadra from R, inserted where R.giocatore = inserted.giocatore and R.squadra <> inserted.squadra and R.ruolo <> inserted.ruolo if (@g <> '') and (@s <> @is) begin raiserror('Il giocatore che si vuole inserire può appartenere a una sola squadra.',16,1) rollback transaction end go

  8. Trigger su GR Sulla tabella GR viene definita la chiave PRIMARY KEY(giocatore, ruolo) e viene definito il seguente trigger per preservare le dipendenze. Trigger per il controllo degli update. CREATE TRIGGER Controllo_DF_GR_UP ON GR FOR UPDATE AS --- Dichiaro delle variabili di comodo Declare @contG int, @cont int -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @contG = count(*) from GS,inserted where GS.giocatore = inserted.giocatore

  9. Trigger su GR -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @cont = count(*) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo = inserted.ruolo and GR.giocatore <> inserted.giocatore if @contG = 0 begin raiserror('Il giocatore non appartiene a nessuna squadra!',16,1) rollback transaction end else if @cont > 0 begin raiserror('Il ruolo che si vuole inserire ha già un giocatore per quella squadra!',16,1) rollback transaction end go

  10. Trigger su GR Creo un trigger per controllare gli inserimenti. CREATE TRIGGER Controllo_DF_GR ON GR FOR INSERT AS --- Dichiaro delle variabili di comodo Declare @contG int, @cont int -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @contG = count(*) from GS,inserted where GS.giocatore = inserted.giocatore

  11. Trigger su GR -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @cont = count(GR.ruolo) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo = inserted.ruolo and GS.giocatore <> inserted.giocatore and GS.squadra = (select squadra from GS, inserted where GS.giocatore = inserted.giocatore) group by GR.ruolo if @contG = 0 begin raiserror('Il giocatore non appartiene a nessuna squadra!',16,1) rollback transaction end else if @cont > 0 begin raiserror('Il ruolo che si vuole inserire ha già un giocatore per quella squadra!',16,1) rollback transaction end go

  12. Trigger su GS Sulla tabella GS viene definita una chiave solo sul giocatore. In questo modo è conservata la dipendenza funzionale G S. Primary key(giocatore) Scrivo un trigger per controllare le modifiche fatte alle tuple presenti in GS. In particolare controllo che nel caso si cambi la squadra di un giocatore, esso non abbia ruoli già presenti per la squadra modificata. CREATE TRIGGER Controllo_DF_GS ON GS FOR UPDATE AS --- Dichiaro delle variabili di comodo Declare @cont int

  13. Trigger su GS -- recupero i valori inseriti facendo uso della tabella temporanea "inserted" Select @cont = count(GR.ruolo) from GR, GS,inserted where GR.giocatore = GS.giocatore and GR.ruolo in (select GR.ruolo from GR, inserted where GR.giocatore = inserted.giocatore) and GS.giocatore <> inserted.giocatore and GS.squadra = (select GS.squadra from GS, inserted where GS.giocatore = inserted.giocatore) if @cont > 0 begin raiserror('Non è possibile modificare la squadra del giocatore!',16,1) rollback transaction end go

More Related