طراحی، مدلسازی و مدیریت سیستمهای پایگاه داده: حساب رابطهای دامنهای
در چارچوب نظریه پایگاه داده رابطه ای، حساب رابطه ای دامنه ای یکی از زبان های غیر رویه ای برای بیان پرس و جوها است. این زبان به همراه حساب رابطه ای توییپی و جبر رابطه ای، مبنای صوری SQL به شمار می رود. در این درس، هدف اصلی آن است که دانشجو بتواند یک پرس و جو را به صورت منطقی بیان کند، با معادل های جبری آن مقایسه کند و در نهایت به بهینه سازی پرس و جو نزدیک شود.
حساب رابطه ای دامنه ای یک زبان استعلام غیر رویه ای است که بر پایه متغیرهای دامنه بنا شده است. در این زبان، به جای متغیری که روی کل یک سطر (توییپ) مقدار می گیرد، از متغیرهایی استفاده می شود که روی مقادیر یک دامنه خاص، یعنی مقدار یک صفت، مقدار می گیرند. این تفاوت ظریف، زبان را به فرمول های منطقی نزدیک می کند و در عین حال توانایی بیان پرس و جوها را به شکلی فشرده و دقیق فراهم می آورد. در یک سیستم پایگاه داده رابطه ای، هر رابطه از چند ستون تشکیل شده و هر ستون دارای یک دامنه از مقادیر مجاز است. متغیر دامنه ای دقیقا به یک ستون از یک سطر اشاره می کند.
یک عبارت حساب رابطه ای دامنه ای به صورت { | P(x1, x2, ..., xn)} نوشته می شود. در این عبارت، x1 تا xn متغیرهای دامنه ای هستند که در خروجی ظاهر می شوند و P یک فرمول منطقی است. این فرمول از اتم های زیر تشکیل می شود: یک رابطه به همراه آرگومان ها، مانند student(s_id, name, major) که در آن هر آرگومان یا یک متغیر دامنه ای است یا یک مقدار ثابت؛ و یک شرط مقایسه ای مانند grade 18 یا name = 'Ali'. اتم های فوق با عملگرهای منطقی ∧ و ∨ و ¬ ترکیب می شوند و با سورهای وجودی (∃) و عمومی (∀) می توان متغیرهای اضافی را به فرمول وارد کرد.
برای روشن شدن مطلب، فرض کنید سه رابطه student(s_id, name, major)، course(c_id, title) و takes(s_id, c_id, grade) در یک پایگاه داده آموزشی موجود باشد. پرس و جوی «نام دانشجویانی که در درس پایگاه داده نمره بالای ۱۸ گرفته اند» را می توان در حساب دامنه ای به این صورت نوشت: { | ∃ s_id, major, c_id, title, grade (student(s_id, name, major) ∧ takes(s_id, c_id, grade) ∧ course(c_id, title) ∧ title = 'پایگاه داده' ∧ grade 18)}. در این عبارت، متغیر name در سمت چپ ظاهر می شود و آزاد است، اما بقیه متغیرها با سور وجودی مقید شده اند. توجه کنید که رابطه course به یک متغیر title نیاز دارد که مقدار آن برابر رشته مورد نظر باشد. این مثال نشان می دهد که چگونه یک پرس و جوی طبیعی به فرمول منطقی تبدیل می شود.
در حساب دامنه ای، متغیرهایی که در سمت چپ علامت | ظاهر می شوند، متغیرهای آزاد نامیده می شوند و نتیجه نهایی شامل مقادیر آن ها است. متغیرهایی که تنها در فرمول ظاهر می شوند و توسط سور مقید می شوند، متغیرهای مقید هستند. سور وجودی ∃ به این معنی است که حداقل یک مقدار وجود دارد که شرط را برقرار کند، و سور عمومی ∀ بیان می کند که شرط برای همه مقادیر صادق است. در فرمول های منطقی، اولویت سورها و عملگرها مهم است. برای مثال، در عبارت { | ∃ y (R(x, y) ∧ y 5)} متغیر x آزاد و متغیر y مقید است. نتیجه شامل همه مقادیر x است که در رابطه R با حداقل یک y بزرگتر از 5 همراه هستند.
یکی از مباحث مهم در حساب دامنه ای، مفهوم امن بودن عبارت است. یک عبارت حساب دامنه ای امن است که نتیجه آن متناهی باشد و برای تولید مقادیر، به دامنه های بی نهایت اتکا نکند. عبارت { | x 5} امن نیست، زیرا x می تواند هر عددی بزرگتر از 5 باشد و نتیجه بی نهایت مقدار دارد. برای امن کردن این عبارت، باید متغیر x را به یک رابطه محدود کنیم، مثلا { | R(x) ∧ x 5}. در این صورت، نتیجه از مقادیر موجود در R استخراج می شود و متناهی است. قواعد امنیت در حساب دامنه ای عبارتند از: هر متغیر در خروجی باید در یک اتم رابطه مثبت ظاهر شود؛ و هر متغیر مقید با سور عمومی باید در یک اتم رابطه منفی یا شرطی ظاهر شود تا دامنه آن محدود بماند. در کنکور ارشد، سوالات متداول در این باره عبارتند از تشخیص عبارت ناامن و تبدیل آن به عبارت امن.
حساب رابطه ای توییپی از متغیرهایی استفاده می کند که روی کل سطرها مقدار می گیرند. برای مثال، عبارت {t | student(t) ∧ t.grade 18} در حساب توییپی نوشته می شود. در مقابل، حساب دامنه ای به جای توییپ، مقادیر ستونها را به کار می برد. این تفاوت باعث می شود که حساب دامنه ای به ساختار SQL نزدیک تر باشد، زیرا در SQL شرط ها روی ستونها اعمال می شوند. با این حال، ترجمه یک پرس و جو از جبر رابطه ای به حساب دامنه ای ممکن است در ابتدا دشوار به نظر برسد، اما با تمرین، الگوهای مشخصی شکل می گیرد. به عنوان مثال، عملیات انتخاب در جبر به یک شرط منطقی در حساب تبدیل می شود و عملیات تصویر به انتخاب متغیرهای خروجی محدود می شود.
برای درک سور عمومی در حساب دامنه ای، پرس و جوی «کد دانشجویانی که همه دروس را گذرانده اند» را در نظر بگیرید. در حساب دامنه ای، این پرس و جو به صورت زیر نوشته می شود: { | student(s_id, name, major) ∧ ∀ c_id, title (course(c_id, title) → ∃ grade (takes(s_id, c_id, grade)))}. در این عبارت، برای هر درس موجود، باید حداقل یک نمره در جدول takes برای آن دانشجو ثبت شده باشد. علامت → (ایمپلیکیشن) شرط را به یک ساختار منطقی تبدیل می کند. نکته امنیتی در اینجا آن است که متغیر c_id در مقدم ایمپلیکیشن توسط course(c_id, title) محدود شده است، بنابراین دامنه آن متناهی است. اگر این محدودیت وجود نداشت، عبارت ناامن می شد.
حساب رابطه ای دامنه ای یک ابزار نظری قدرتمند برای بیان پرس و جوهای رابطه ای است. در دوره کنکور ارشد کامپیوتر، تسلط بر این زبان به دانشجو کمک می کند تا مفاهیم جبر رابطه ای و SQL را به یکدیگر پیوند دهد و درک عمیق تری از بهینه سازی پرس و جو پیدا کند. سوالات این مبحث معمولاً به صورت تبدیل یک عبارت از جبر رابطه ای یا SQL به حساب دامنه ای، یا تعیین صحت و امن بودن یک عبارت مطرح می شوند. بنابراین، تمرین مداوم بر روی مثال های متنوع و توجه دقیق به قواعد امنیت، کلید موفقیت در این بخش است.
منبع آموزشی این مطلب
این مطلب برگرفته از محصول آموزشی «دوره جامع «پایگاه داده ویژه کنکور ارشد کامپیوتر – از مدلسازی داده تا بهینهسازی پرسوجو»» است
برای مشاهده توضیحات کامل، جزئیات دوره و دریافت محصول، روی دکمه زیر کلیک کنید.
اطلاعات بیشتر و دریافت محصول