مباني نظري مدل رابطهاي پايگاه دادهها مباني نظري مدل رابطهاي
فهرست تعاريف مدل رابطهاي انواع کليد جامعيت جبر رابطهاي
تعاريف دامنه (Domain) مجموعه تمام مقادير ممکن براي صفت (Attribute) است.
تعاريف رابطه (Relation) زير مجموعهاي از ضرب دکارتي چند دامنه است. مثال: اگر داشته باشيم D2: Integer و D1: String آنگاه هر مجموعهاي که عضوهايش زوجهاي (D1,D2)باشند يک رابطه است. D1: String D2: Integer علي رضا -- 10 20 بهترين راه نمايش و پيادهسازي رابطه به وسيله جدول است
مفاهيم اساسي بانک اطلاعات تعاريف مدل رابطهاي نحوه نمايش معادل در مدل رابطهاي مفاهيم اساسي بانک اطلاعات جدول Table رابطه Relation موجوديت Entity Row زوج مرتب Tuple Entity Instance Col Attribute توسط کليد (اصلي و خارجي) - Relation ship
تعريف خاصيت کليدي کليد يک رابطه، تمام عضوهاي آن را به صورتي منحصر به فرد مشخص ميکند. در مدل رابطهاي، کليد مجموعهاي از صفتها است که بايد دو مورد زير را در مورد آنها رعايت کرد. کليد تکراري وارد رابطه (جدول) نشود. مقدار تهي (NULL) براي کليد وارد نشود.
انواع کليد ابر کليد (Super key) کليد کانديد (Candidate key) کليد اصلي (Primary key) کليد فرعي (Secondary key) کليد خارجي (Foreign key)
1- ابر کليد هر صفت يا مجموعهاي از صفات که خاصيت کليدي داشته باشد. “ابر کليد لزوماً کمينيه نيست“
2-کليد کانديد هر صفت يا مجموعهاي از صفات که خاصيت کليدي داشته باشد و کمينه باشد. کمينه (Minimal): کليدي کمينه است که اگر هر يک از صفات آنرا حذف نماييم ديگر کليد نباشد.
3- کليد اصلي: يکي از کليدهاي کانديد است که توسط مدير بانک اطلاعات انتخاب شده است. 4- کليد فرعي: يکي ديگر از کليدهاي کانديد است که براي برخي کاربردها انتخاب ميشود. 5- کليد خارجي: صفتي است در يک رابطه که در رابطه ديگري کليد اصلي (يا فرعي) است و براي برقراري ارتباط بين دو رابطه (جدول) استفاده ميشود.
ابرکليد کليد کانديد کليد اصلي S# جدول دانشجو ابرکليد کليد کانديد کليد اصلي S#
جدول استاد کليد اصلي Pname
معيارهاي تعيين کليد عدد طول کمتري صفات کمتر تغييرات بيروني محفوظ
جامعيت (Integrity) انواع جامعيت در مدل رابطهاي جامعيت دامنهاي (Domain integrity) جامعيت درون رابطهاي (Intra-relation integrity) جامعيت ارجاع (Referential integrity)
جامعيت دامنهاي (Domain integrity) هر صفت بايد از نوع خودش باشد. هر صفت بايد مقادير مجاز خود را رعايت کند.
جامعيت درون رابطهاي (Intra-relation integrity) کليدهاي اصلي و فرعي نبايد مقادير تکراري داشته باشند.
جامعيت ارجاع (Referential integrity) کليد خارجي نميتواند مقداري داشته باشد که در جدول مرجع وجود ندارد.
جداول نمونه تصوير ادراکي بخشي از بانک اطلاعات دانشگاه در مدل رابطهاي Stud ( s#, sname, city, ave, clg#) (شماره دانشکده، معدل کل، شهر محل تولد، نام، شماره) دانشجو Prof ( pname, office, esp, degree,clg#) (شماره دانشکده، مدرک تحصيلي، تخصص، دفتر کار، نام) استاد Crs ( c#, cname, unit, clg#) (شماره دانشکده ارائه دهنده، تعداد واحد، نام، شماره) درس Sec ( sec#, c#, s#, term, pname, score) (نمره، نام استاد، ترم، شماره دانشجو، شماره درس، شماره گروه) گروه درس Clg ( clg#, clgname, city, pname) (نام رئيس، نام شهر، نام دانشکده، شماره) دانشکده
جبر رابطهاي (Relational algebra) نوع داده (عملوند) در جبر رابطهاي فقط رابطه است. عملگرهاي جبر رابطهاي به چهار دسته تقسيم ميشوند. عملگرهاي ساده (П، σ) عملگرهاي مجموعهاي (- ، ، ) عملگرهاي پيوند (∝ , ∞ , xθ , x ) ساير عملگرها ( ÷←ρ )
انواع عملگرها عملگرهاي اصلي عملگرهاي اضافي عملگرهاي اضافي را ميتوان با ترکيب عملگرهاي اصلي جايگزين کرد، بنابراين حالت کمکي و ساده کردن کار را دارد.
عملگر گزينش (Select با علامت σ) σθ (نام جدول) انتخاب سطر ورودي: يک رابطه خروجي: يک رابطه ستونهاي خروجي برابر با تمام ستونهاي ورودي سطرهاي خروجي برابر با آن سطرهايي از ورودي که داراي شرط ذکر شده باشند
مثال: مشخصات دانشجوياني که معدل الف دارند؟ σ ave>=17 (stud)
مثال: مشخصات دانشجوياني که متولد تهران هستند و معدل الف دارند؟ σ ave>=17 ^ city=‘تهران’ (stud)
عملگر پرتو (Progect با علامت П) П col (نام جدول ورودي) انتخاب ستون ورودي: يک رابطه خروجي: يک رابطه ستونهاي خروجي: فقط آن ستونهايي از جدول ورودي، که در دستور ذکر شده است. سطرهاي خروجي: شامل تمام سطرهاي ورودي است. نکته: اين عملگر روي سطر شرط اعمال نميکند.
مثال: شهرهايي که دانشجويان متولد آن شهرها هستند؟ П city (stud)
مثال: شماره دانشجويي و نام دانشجويان؟ П S#,sname(stud)
عملگرهاي مجموعهاي ورودي: دو رابطه خروجي: يک رابطه توجه: دو رابطه بايد همتا باشند، يعني: تعداد ستونها برابر و نوع ستونها نظير به نظير يکسان باشند. ستونهاي خروجي: همتا با ستونهاي ورودي سطرهاي خروجي: برابر با اجتماع/اشتراک/تفاضل سطرهاي ورودي
مثال: اسامي افرادي که يا دانشجو هستند يا استاد؟ П pname(prof) П sname(stud)
مثال: ليست نام اساتيدي که رئيس دانشکده نيستند. П pname(prof) - П pname(clg) مثال: ليست اسامي دانشجويان و اساتيد همنام. П pname(prof) П sname(stud)
عملگرهاي پيوند عملگر ضرب دکارتي (cartesian product با علامت×) ترکيب جداول ورودي: دو رابطه خروجي: يک رابطه ستونهاي خروجي برابر با تمام ستونهاي دو رابطه ورودي سطرهاي خروجي برابر با همه ترکيبهاي ممکن از دو جدول
ضرب دکارتي ریاضی 1 فیزیک 2 کامپیوتر 10 Clgname Clg# Clgname Clg# CLG# SNAME S# ریاضی 1 10 محمدی 71133848 وکیلی 72130502 علینقی زاده 72203305 فیزیک 2 کامپیوتر
عملگرهاي پيوند - مثال نام دانشکدهاي که درس شبيهسازي در آن ارايه ميشود؟ اسامي اساتيد دانشکده کامپيوتر.
عملگر پيوند شرطي A ×θ B = σθ (A × B) مانند ضرب دکارتي عمل ميکند با اين تفاوت که شرط θ را نيز روي سطرها اعمال ميکند. ورودي: دو رابطه خروجي: يک رابطه A ×θ B = σθ (A × B)
پيوند شرطي - مثال شماره درس، نام دروس و نام دانشکده ارايه دهنده دروس چهار واحدي؟
پيوند شرطي - مثال شماره و نام دانشجويان به همراه شماره و نام دانشکده محل تحصيل آنها؟
پيوند شرطي - مثال اسامي دانشجوياني که در درس مدار منطقي ثبت نام کردهاند؟
عملگر پيوند طبيعي (natural Join با علامت ∞) مانند عملگر پيوند شرطي عمل ميکند با اين تفاوت که شرط بطور اتوماتيک و خودبه خود اعمال ميگردد. اين عملگر روي همه ستونهاي همنام شرط تساوي را اعمال ميکند. ستون همنام فقط يکبار در خروجي ميآيد.
پيوند طبيعي - مثال اسامي دروس دانشکده کامپيوتر.
پيوند طبيعي - مثال نام دانشکده دانشجويي به نام محمدي؟ Пclgname(σsnme=‘محمدي’ (stud∞Пclg#,chgname(clg)))
پيوند طبيعي - مثال اسامي دروسي که دانشجويي به نام محمدي در ترم 761 اخذ نموده است؟
پيوند طبيعي - مثال Пsname(stud∞clg) اسامي دانشجوياني که در دانشکده محل تولدشان تحصيل ميکنند.
عملگر نيم پيوند (Semi Join با علامت ∝) ورودي: دو رابطه خروجي: يک رابطه در خروجي فقط ستونهاي جدول اول ميآيد. A ∝ B = ПA (A ∞ B) بيشترين کاربرد در بانک اطلاعات نامتمرکز
نيم پيوند - مثال شماره و نام دانشجوياني که در دانشکده کامپيوتر درس ميخوانند؟
نيم پيوند - مثال اسامي دانشجوياني که در نيمسال 841 با رئيس دانشکده خود درس داشتهاند؟
ساير عملگرها عملگر جايگزيني (←) عملگر نامگذاري (ρ) عملگر تقسيم ( ÷ )
عملگر جايگزيني (←) حاصل عبارت سمت راست را در رابطه سمت چپ قرار ميدهد. A ← B
عملگر جايگزيني - مثال فرض کنيد جدولي به نام goodstud با همان ساختار جدول دانشجو وجود دارد، مشخصات دانشجويان معدل الف را در آن قرار دهيد.
عملگر نامگذاري (ρ) با دستور ، نام b بر روي جدول a گذاشته ميشود. نکته1: حوزه اعتبار نام جديد، فقط در آن دستور است. نکته2: کاربرد زماني که از يک جدول دو يا چند بار در پرس و جو استفاده ميشود.
اسامي استاداني که هم اتاقي دارند. عملگر نامگذاري – مثال اسامي استاداني که هم اتاقي دارند.
عملگر تقسيم (÷) ورودي: دو رابطه خروجي: يک رابطه پيش شرط: جدول اول بايد شامل تمام ستونهاي جدول دوم باشد.
عملگر تقسيم (÷) ستونهاي خروجي: تمام ستونهاي غير مشترک جدول ميباشد. سطرهاي خروجي: ابتدا جدول اول بر اساس ستونهاي غيرمشترک گروهبندي ميگردد و آن گروههايي در خروجي ميآيد که مقادير ستونهاي مشترک آن شامل مقادير جدول دوم باشد.
عملگر تقسيم - مثال T2 T1 A B C D E a1 b1 c1 d1 e1 d2 e2 a2 b2 c2 d3 e3
عملگر تقسيم - مثال شماره دانشجوياني که در همه درسهاي استاد ميرشمسي ثبت نام نمودهاند؟
عملگر تقسيم - مثال شماره دانشجوياني که در همه درسهاي استاد ميرشمسي که در ترم 841 ارايه کرده است، ثبت نام نمودهاند؟
بهينه سازي پرس و جو مثال: مشخصات دروس چهار واحدي که در ترم 901 ارايه شده است؟ σunit=4^term=901(crs∝sec) دستور غلط σunit=4(crs∝(σterm=901(sec)) (σunit=4(crs))∝(σterm=901(sec)) σunit=4(crs)∝(σterm=901(Пc#,term(sec))) σunit=4(crs)∝Пc# (σterm=901(sec))
اولويت هزينه عملگرها عملگرهاي پرهزينه عملگرهاي کم هزينه
قواعد بهينه سازي گزينش را هر چه ممکن است زودتر انجام دهيد. شرطهاي ترکيبي را به شرطهاي متوالي تبديل کنيد. σp1^p2(e) σp1(σp2(e)) پرتو را زود انجام دهيد (ولي ديرتر از گزينش) عملگرهاي ترکيبي مانند عملگرهاي مجموعهاي و پيوند در انتها بيايند.
بهينهسازي در زمان اجرا مثال: مشخصات کامل دروس و گروههاي درسي آنها. حل: crs∞sec يا sec∞crs الگوريتم 1: crs∞sec براي هر سطر جدول crs{ براي هر سطر جدول sec{ مقايسه کن انتخاب کن{{ الگوريتم 2: sec∞crs براي هر سطر جدول sec{ براي هر سطر جدول crs{ مقايسه کن انتخاب کن{{
نيازهاي DB استخراج اضافه کردن داده به جدول حذف داده از جدول تغيير دادههاي جدول
اضافه کردن داده به جدول با عملگرهاي اجتماع و جايگزيني اين کار انجام ميگيرد. وارد کردن اطلاعات به دو صورت امکانپذير است: اضافه کردن يک سطر به جدول وارد کردن چند سطر از جدول ديگر
اضافه کردن يک سطر اطلاعات مثال: دانشجويي به نام ”صمدي“ به شماره دانشجويي ”85427335“، متولد ”تهران“، با معدل ”13/40“ که در دانشکده 10 تحصيل ميکند را به جدول stud اضافه نماييد.
اضافه کردن چند سطر اطلاعات مثال: فرض کنيد جدولي به نام good_stud با همان ساختار جدول studوجود دارد و دانشجويان معدل الف دانشکدههاي 10 و 15 در آن قرار دارند. دانشجويان معدل الف دانشکده 5 را نيز به آن اضافه نماييد.
حذف کردن سطر از جدول با استفاده از عملگرهاي تفاضل و جايگزيني اينکار انجام ميگيرد. مثال: دانشجوياني که معدل زير 10 دارند را از جدول stud حذف نماييد.
به روز درآوردن فقط بخشي از سطر تغيير ميکند. مثال: تغيير نام باختران به کرمانشاه در جدول clg؟
به روز درآوردن مثال: اضافه کردن يک نمره به همه دانشجويان؟
محاسبات رابطهای دامنهای (DRC) Domain Relational Calculus آقاي کاد دو سال بعد از ارائه جبر رابطهاي، تئوري ديگري به نام حساب رابطهاي تاپلي ارائه نمود. پنج سال بعد دانشمندي ديگر روش سومي به نام حساب رابطهاي دامنهاي ارائه نمود.
شکل کلی حساب رابطهای دامنهای یعنی: ستون های C1، ...، Cn را بده به طوریکه شرط P(C1, C2, … ,Cn, Cn+1, …) برقرار باشد.
قواعد حساب رابطهای دامنهای خروجی دستور شامل همه ستونهای <C1, C2, … ,Cn> خواهد بود. برای ارتباط متغیرها به جداول، از تعلق (Є) استفاده میشود و شرط همتایی باید رعایت شود. ترکیب شرط ها با عملگرهای منطقی AND, OR, NOT امکانپذیر است. علاوه بر متغیرهای خروجی، استفاده از سایر متغیرها در شرط بلامانع است به شرط آنکه با یکی از علائم ∃ یا ∀ تعریف شده باشند. پیوند جداول با استفاده از متغیرهای هم نام صورت میپذیرد. عدم تعلق با منفی کردن شرط (Є ┐) صورت میگیرد.
مثال: مشخصات دانشجویانی که معدل الف دارند.
مثال: شماره و نام دانشجویانی که معدل الف دارند يا متولد زاهدان هستند.
مثال: شماره و نام دروس چهار واحدی
مثال: نام دانشکدهای که رئیس آن دکتر جاهدمطلق است.
مثال: شماره و نام دانشجویان دانشکده کامپیوتر. {<s,sn> | ci,a,cl (<s,sn,ci,a,cl> ∊ stud ^ clgn,ci2,pn (<cl,clgn,ci2,pn> ∊ clg∧ clgn= ‘کامپیوتر’)}
مثال: مشخصات روسای دانشکده ها. {< pn,o,e,d,cl > | < pn,o,e,d,cl > ∊ prof ^ cl2,clgn,ci (<cl2,clgn,ci,pn> ∊ clg)}
مثال: اسامی دانشکدههایی که تمام دانشجویان آن معدل الف هستند.
مثال: دانشکدههایی که همه اساتید آنها مدرک دکتری دارند. {<cl,cn,ct,p> | <cl,cn,ct,p> ∊ clg ^ ∀p2,o,e,d (<p2,o,e,d,cl> ∊ prof ∧ d= ‘دکتری’)}