BDG Scenario 2

Critique.sql

If Not Exists (Select * From sysobjects Where name = N'Critique' And user_name(uid) = N'dbo')
Begin
   Create Table dbo.Critique
       (
       critique# int Not Null Identity (1, 1),
       bib# int Not Null,
       borrower# int Not Null,
       objectId char(255) Null,
       title varchar(255) Null,
       rating int Not Null Constraint DF_Critique_rating Default (0),
       dateOfCritique datetime Not Null,
       isApproved tinyint Not Null Constraint DF_Critique_status Default (0)
       )
   Alter Table dbo.Critique Add Constraint
       PK_Critique Primary Key Nonclustered
       (
       critique#
       )
   Alter Table dbo.Critique Add Constraint
       UQ_Critique_bib_borrower Unique Nonclustered
       (
       bib#,
       borrower#
       )
   Alter Table dbo.Critique Add Constraint
       FK_Critique_title Foreign Key
       (
       bib#
       ) References dbo.title
       (
       bib#
       )
   Alter Table dbo.Critique Add Constraint
       FK_Critique_borrower Foreign Key
       (
       borrower#
       ) References dbo.borrower
       (
       borrower#
       )
End
Go
If Exists (Select * From sysobjects Where name = N'fm_tr_avg_rating' And user_name(uid) = N'dbo')
   DROP trigger fm_tr_avg_rating
Go
CREATE trigger fm_tr_avg_rating
    on dbo.critique
    for insert,update,delete
as
   set nocount on
      
   declare @avg_rating decimal(2,1)
   declare @avg_rounded decimal(2,1)
   declare @avg_truncated decimal(2,1)
   declare @bibno integer
      
   select @bibno = bib# from inserted
   if @bibno is null
      select @bibno = bib# from deleted
      
   if @bibno is not null
   begin
      select @avg_rating = avg(convert(decimal,rating)) from critique 
             where bib#=@bibno and isApproved=1
      select @avg_rounded = round(@avg_rating,0,0)
      select @avg_truncated = round(@avg_rating,0,1)
      update title set avg_rating=(@avg_rounded+@avg_truncated)/2 where bib#=@bibno
   end
   else
      update title set avg_rating=null where bib#=@bibno
Go