- اثبات قضیه تعدی آرمسترانگ
فرم کلی قضیه :
در رابطه R( A , B , C , … ) داریم :
فرض :
1- A B
2- B C
اثبات اینکه : C A
با استفاده از برهان خلف داریم که اگر C A در این صورت در رابطه R در حداقل دو تاپل ، به ازاء یک مقدار A دو مقدار متمایز از C داریم .
اما به ازای دو مقدار متمایز C ممکن است دو مقدار متمایز یا یک مقدار باشد .
2- اثبات قضیه هیث
فرم کلی قضیه :
رابطه R( A , B , C ) که در آن A و B و C سه مجموعه از صفات هستند مفروض است .اگر B A آنگاه می توان R را به دو رابطه R1( A,B ) و R2( A, C ) تجزیه کرد و این تجزیه ، بی حشو است ، یعنی: R= R1 JOIN R2 .
رابطه R( A , B , C ) که در آن A و B و C سه مجموعه از صفات هستند مفروض است .اگر B A آنگاه می توان R را به دو رابطه R1( A,B ) و R2( A, C ) تجزیه کرد و این تجزیه ، بی حشو است ، یعنی: R= R1 JOIN R2 .
در این قضیه نیز ما از برهان خلف استفاده می کنیم و فرض می کنیم که دو رابطه R1 و R2 دارای تاپلهای تکراری است یعنی تجزیه دارای حشو است و تجزیه خوبی نیست .
با این حساب اگر این تجزیه دارای حشو باشد پس در نتیجه در رابطه R1 به ازای یک مقدار A ما ممکن است چند مقدار از B را داشته باشیم A B و این مخالف فرض مسئله است .
3- حل مشکل مطرح شده در جدول SP طبق قوانین هر استاد فقط یک درس را می تواند تدریس کند .
هر دانشجو هر درس را فقط با یک استاد می گیرد .
هر درس توسط چند استاد ارائه می شود .
ما دو جدول با نامهای SP و PC داریم که از تجزیه جدول SPC به دست آمده اند .
SP ( st# , pr # ) , PC ( pr# , co # ) مشکل مطرح شده این است که اگر ما بخواهیم تاپل را در جدول SP درج کنیم ممکن است درسی را که استاد pr2 تدریس می کند را قبلاً دانشجوی st1 با استاد دیگری گرفته باشد که این با قوانین مسئله مغایرت دارد .
برای حل این مشکل از trigger زیر استفاده می کنیم .
CREATE TRIGGER projtrigger BEFORE INSERT ON SP REFERENCING OLD AS SP , NEW AS NSP WHEN ( SELECT CO # FROM PC WHERE ( SELECT pr # FROM SP WHERE SP.st # = NSP.
st# ) = SELECT co# FROM PC WHERE PC.pr# = NSP.pr# ABORT TRANSACTION FOR EACH ROW ) ;