DB1-Assignment4.pdf

‫مجموعه تمرینهای سری چهارم درس پایگاه دادهها (‪)۱‬‬
‫نحوهی تحویل ‪ :‬نسخه کاغذی تمرین خود را قبل از شروع امتحان پایان ترم به استاد تحویل دهید‪ .‬تحویل تمرین بعد از امتحان شامل حداقل‬
‫‪ 50‬درصد کسر نمره خواهد بود‪.‬‬
‫تمرینات را می توانید به صورت دو نفره نیز تحویل دهید‪.‬‬
‫‪ )1‬با توجه به تعریف دیدهای داده شده‪ ،‬در هر مورد پذیرا یا ناپذیرا بودن دید را به طور کامل و با قید مثال بررسی کنید (جدولهای ‪ S‬و‬
‫‪ ،SP‬به ترتیب جدولهای تهیهکننده و تهیهکننده‪-‬قطعه از مثال آموزشی کتاب ‪ DATE‬است و جدول ‪ ،COT‬جدول درس از پایگاه داده‬
‫سیستم آموزشی است)‪.‬‬
‫‪V1=S JOIN SP‬‬
‫)‪V2=S JOIN P (on CITY‬‬
‫‪V3=SELECT S# FROM S‬‬
‫‪EXCEPT | UNION | INTERSECT‬‬
‫‪SELECT DISTINCT S# FROM SP‬‬
‫‪V4=SELECT COTITLE , COCREDIT FROM COT.‬‬
‫‪ )2‬دیدهایی برای تهیه گزارشهای زیر به زبان ‪ SQL‬بنویسید (با توجه به جداول داده شده در تمرین چهارم) ‪:‬‬
‫‪ -1‬نام هر شهر و تعداد تهیهکنندگان‪ ،‬تعداد پروژهها‪ ،‬و تعداد قطعات آن شهر‪.‬‬
‫‪ -2‬شماره ‪ ،‬نام ‪ ،‬و وزن هر قطعه به همراه وزن حساب شده برای آن از روی زیرقطعات بکاررفته در آن‪.‬‬
‫‪ )3‬آیا دیدهای ‪ V1‬و ‪ V2‬با تعریفهای داده شده‪ ،‬از نظر «معنايي» یکسان هستند؟ آیا پذیرا هستند یا ناپذیرا؟‬
‫‪.'V1 : SELECT * FROM STT WHERE STLEV = 'bs' OR STMJR = 'Comp.eng‬‬
‫)'‪V2 : (SELECT * FROM STT WHERE STLEV = 'bs') UNION (SELECT * FROM STT WHERE STMJR = 'Comp.eng.‬‬
‫‪ )4‬جدول زیر مفروض است ‪:‬‬
‫(‪) 1‬‬
‫دید ‪ DSAL‬را به صورت زیر تعریف میکنیم ‪:‬‬
‫)‪CREATE VIEW DSAL (D,C,SSAL,AVSAL‬‬
‫)‪AS (SELECT DN, COUNT(*), SUM(SAL), AVG(SAL‬‬
‫‪FROM EMPL‬‬
‫);‪GROUP BY DN‬‬
‫در هر مورد بیان کنید آیا تبدیل ‪ E/C‬امکانپذیر است (هم در تئوری و هم در عمل) و اگر بله‪ ،‬تبدیل را انجام دهید‪.‬‬
‫;‪SELECT D,C FROM DSAL WHERE SSAL>100000‬‬
‫;)'‪SELECT D,AVSAL FROM DSAL WHERE C > (SELECT C FROM DSAL WHERE D='D111‬‬
‫;'‪UPDATE DSAL SET D='D333' WHERE D='D444‬‬
‫;‪DELETE FROM DSAL WHERE C>10‬‬
‫;)‪INSERT INTO DSAL VALUES ('D555','20',200000,40000‬‬
‫‪ )5‬دید ‪ V1‬بر روی جدول مبنای ‪ S‬به صورت زیر تعریف شده است ‪:‬‬
‫)‪S ( S# , SNAME , STATUS , CITY‬‬
‫‪CREATE VIEW V1‬‬
‫‪AS ( SELECT S# , SNAME‬‬
‫‪FROM S‬‬
‫)‪WHERE STATUS < ANY ( SELECT STATUS FROM S‬‬
‫با فرض هیچمقدارپذیری ستونهای ‪ STATUS‬و ‪ ،CITY‬آیا عملیات درج در این دید پذیراست؟ توضیح دهید‪.‬‬
‫‪ )6‬کدامیك از تبدیلهای ‪E/E ،E/C ،C/I‬در چه وضعی الزم نیست انجام شود؟‬
‫‪ )7‬در عمل چه زمانی از مفهوم دید خارجی استفاده نمیکنیم؟‬
‫‪ )8‬آیا ممکن است یك رابطه از طریق یك کلید خارجی واحد به چند رابطه ارجاع دهد؟ چگونه؟ در صورت نیاز مثال بزنید‪.‬‬
‫‪ )9‬در ‪ )SQL(RM‬محدودیتهای معنایی زیر چگونه اِعمال میشوند؟ به طور کامل بررسی کنید‪.‬‬
‫‪ ‬محدودیت چندی ارتباط‬
‫‪ ‬محدودیت الزامی بودن مشارکت در ارتباط‬
‫‪ )10‬رابطهای که چهار کلید خارجی از یك دامنه داشته باشد‪ .‬اینگونه رابطهها در چه وضعی پدید میآیند؟‬
‫‪ )11‬مثالی از حلقه ارجاع یك رابطهای نمایشگر یك ارتباط ‪M:N‬قید کنید‪.‬‬
‫(‪) 2‬‬
‫‪a.‬‬
‫‪b.‬‬
‫‪c.‬‬
‫‪d.‬‬
‫‪e.‬‬
‫‪ )12‬میدانیم 𝑛 = 𝑛 × ‪ .𝑛 × 1 = 1‬در جبر رابطهای نقش ‪ 1‬را چه رابطهای ایفا میکند؟‬
‫‪ )13‬میدانیم ‪ .𝑛 × 0 = 0 × 𝑛 = 0‬در جبر رابطهای نقش ‪ 0‬را چه رابطهای ایفا میکند؟‬
‫‪ )14‬رابطههای ‪STUD‬و ‪COUR‬و ‪SCR‬را در نظر میگیریم‪ .‬برای کنترل جامعیت پایگاه دادهها در هریك از عملهای زیر‪ ،‬رهانا و اظهار‬
‫خواستهشده را بنویسید‪.‬‬
‫‪ ‬درج تاپل در ‪( SCR‬رهانا و اظهار)‬
‫‪ ⅔ ‬حذف تاپل از ‪( COUR‬رهانا ‪ -‬با روش ‪)CASCADE‬‬
‫‪ ‬بهنگامسازی شماره دانشجو و شماره گروه آموزشی او (رهانا ‪ -‬با روش ‪)CASCADE‬‬
‫‪ ‬جلوگیری از اخذ بیش از ‪n‬واحد در یك ترم توسط دانشجویانی که در ترم قبل معدل کمتر از ‪a‬دارند (اظهار و ⅔رهانا)‬
‫‪ ‬عمل درج یك تاپل از دید )‪ V (COID, COTITLE, COCRED, CODEID‬تعریف شده روی ‪COUR‬و حاوی درسهای "عملی"‬
‫(رهانا)‬
‫‪ ‬جلوگیری از درج تاپل در ‪SCR‬در صورت مشخص نبودن مقدار صفت "نمره" در آن تاپل (اظهار و ‪³‬رهانا)‬
‫‪ ‬اِعمال این محدودیت که "مقدار نمره وارد شده هیچگاه تغییر نمیکند‪( ".‬رهانا)‬
‫‪ )15‬عمل رهانای زیر را با فرض رابطهی زیر برای کارمندان شرح دهید ‪:‬‬
‫)…‪EMPLOYEE ( Ssn , EmpName, Salary, …, SuperVisor_ssn ,‬‬
‫‪CREATE TRIGGER Inform_supervisor1‬‬
‫‪BEFORE INSERT OR UPDATE OF Salary, Supervisor_ssn‬‬
‫‪ON EMPLOYEE‬‬
‫‪FOR EACH ROW‬‬
‫‪WHEN ( NEW.Salary > ( SELECT Salary FROM EMPLOYEE‬‬
‫) ) ‪WHERE Ssn = NEW.Supervisor_ssn‬‬
‫;) ‪inform_supervisor ( NEW.Supervisor_ssn, NEW.Ssn‬‬
‫(‪) 3‬‬