پشتیبانی: 09131253620
ارتباط با ما
تلگرام: 09131253620

برجسته ترین ها
گروه های مقاله ها
HyperLink


پایگاه داده رابطه ای بخش ششم تاریخ درج: ١٣٩۴/٠٩/٢۴

5-4 دیتالوگ

دیتالوگ یک زبان برنامه نویسی غیر رویه ای مبتنی بر زبان برنامه نویسی منطقی پرولوگ است. کاربر همانند محاسبه های رابطه ای، بدون ارائه روش خاصی برای کسب آن اطلاعات، اطلاعات مطلوب را توصیف می کند. ترکیب نحوی دیتالوگ مشابه ترکیب نحوی پرولوگ است. البته محتوی برنامه های دیتالوگ صرفاً به روش اعلانی تعریف می شود که این برخلاف ترکیب معنایی بیشتر رویه ای پرولوگ است، بنابراین دیتالوگ نوشتن پرس و جوهای ساده را آسان می کند و بهینه سازی پرس وجو را آسانتر   می کند.

5-4-1 ساختار اساسی
برنامه دیتالوگ شامل مجموعه ای از دستورات است. قبل از ارائه تعریف رسمی دستورات دیتالوگ و معنای رسمی آن، به بررسی نمونه هایی از آن می پردازیم. برای تعریف یک رابطه دیدگاه v1 که شامل شماره های حساب و ترازهایی برای حسابهای درون شعبه Perryridge با تراز بیشتر از 700دلار باشد، به بررسی دستور دیتالوگ بپردازید.
V1 (A,B) :- account (A , "Perryridge" ,B) , B >700
دستورات دیتالوگ دیدگاهها را تعریف می کند. دستور فوق از حساب رابطه ای استفاده می کند و رابط دیدگاه v1 را تعریف می کند. نماد -:  خوانده  می شود  «اگر» و  کامای  جداکننده                  account (A , "Perryridge" , B)"" از "B>700" را « و» می خوانند. دستور فوق را مستقیماً از رابطه زیر استنباط می کنیم.
for all        A,B
if                 (A , "Perryridge" ,B)   account and B >700 
then            (A,B)   v1
فرض کنید که حساب رابطه ای همانند تصویر 5-5 نشان داده شده است. پس رابطه دیدگاه v1 شامل چندگانه های تصویر 5-6 است.

برای بازیابی تراز شماره حساب A-217 در رابطه دیدگاه v1 می توانیم پرس و جویی مطابق زیر بنویسیم.
?v1 ("A-217",B)
پاسخ پرس و جو هست:
(A-217 , 750)
برای بدست آوردن شماره حساب و تراز همه حسابها در رابطه v1 ، که تراز بزرگتر از 800 است می توانیم چنین بنویسیم
?v1 (A,B) , B >800
پاسخ این پرس و جو هست
(A-201 , 900)

balance

Branch-name

Account-number

 

 

 

500

Downton

A-101

700

Mianus

A-215

400

Perryridge

A-102

350

Round Hill

A-305

900

Perryridge

A-201

700

redwood

A-222

750

Perryridge

A-217

شکل  5-5
 

balance

Account-number

900

A-201

750

A-217

 
شکل5-6رابطهv1
در کل ما به بیش از یک دستور برای تعریف رابطه دیدگاه نیازمندیم. هر دستور مجموعه ای از متغیرها را تعیین می کند که رابطه دیدگاه باید شامل آن شود. در برنامه دیتالوگ که در ادامه می آید، interest-rates را برای account ها مشخص می کند.
interset-rate (A,5) :- account (A,N,B) , B < 10000
interset-rate (A,6) :- account (A,N,B) , B >= 10000
این برنامه دو دستور دارد که تعریف کننده interest-rate رابطه دیدگاه اند، ویژگی های این دو قاعده account-namber و interest-rate هستند. این دستورات می گویند: اگر balance کمتر از 10000$ باشد، پس interest-rate 5 درصد است و اگر balance بزرگتر یا مساوی 10000$ باشد پس     interest-rate6 درصد است.
دستورات دیتالوگ را همچنین می توان برای خنثی سازی استفاده کرد. دستوراتی که در زیر می آید، رابطه دیدگاهی را تعریف می کند که شامل نامهای همه مشتریان (مصرف کنندگان) است، کسانیکه      پس انداز دارند اما وامی از بانک نداشته اند:
c(N) :-depositor (N,A), not is-borrower(N)
is-borrower(N) :- borrower (N,L)
اکثر پیاده سازی های دیتالوگ و پرولوگ ویژگی های رابطه را از طریق موقعیت و حذف نام ویژگی باز می شناسد. بنابراین دستورات دیتالوگ، خلاصه هستند و با پرس و جوهای SQL مقایسه می شوند. البته وقتیکه رابطه ها ویژگی یا ترتیب خیلی زیادی دارند،یا تعداد ویژگی رابطه ها بتواند تغیییر کند، نشان گذاری مرتبه ای می تواند طاقت فرسا و مستعد خطا باشد و ایجاد گونه ای ترکیب دیتالوگ که از ویژگی های     نام گذاری شده استفاده کند، بجای اینکه از ویژگی های مرتبه ای استفاده کند سخت نیست. در چنین سیستمی، دستور دیتالوگ که v1 را تعریف می کند چنین نوشته می شود:
v1(account-number A, balance B) :- account (account-number A, branch-name "Perryridge" , balance B), B>700
 با ارائه مدل رابطه می توان بدون تلاش زیاد به تفسیر  بین دو فرم پرداخت.
 
5-4-2 ترکیب دستورات دیتالوگ
اکنون که دستورات پرس و جوها را جداگانه توضیح داده ایم، می توانیم ترکیب آنها را به تفصیل تعریف کنیم. در بخش 5-4-3 به بحث راجع به مفهوم آنها می پردازیم. و از همان قراردادهای جبر رابطه ای را برای تفکیک نامهای رابطه، نامهای صفات و ثابتها (از قبیل رشته های اعداد یا نقل قول) استفاده می کنیم.

برای مشخص کردن کلماتی که برای نام متغیرها بکار می بریم از حروف بزرگ و کلماتی که با حروف بزرگ شروع می شوند، استفاده می کنیم و برای مشخص کردن  نام رابطه ها و نام صفات از حروف کوچک وکلماتی که با حروف کوچک شروع می شوند، استفاده می کنیم. مثالهایی از ثابت ها عبارت اند از 4 که عدد است و «john»که یک رشته است؛  xو Name که متغیرند. یک لیترال مثبت یا positive literal شکل زیر را داراست:
P(t1 , t2 , ….. , tn )
بطوریکه p نام رابطه با n صفت، و t1 ، t2 ،  t3، ....tn یا ثابتند یا متغیر، و لیترال منفی یا negative literal شکل زیر را دارد:
not P(t1 , t2 , ….. , tn )
بطوریکه رابطهp ، n صفت دارد. در اینجا نمونه ای از یک لیترال آمده است
account(A,"perryridge",B)
این مفاهیم در بر گیرنده عملیات های ریاضیاتی هستند که بصورت خاصی عمل می کنند، برای مثال می توان بصورت انتزاعی دریافت که لیترال B>700 با اینکه در ترکیب توصیف دقیقی نشده است به جای >(700, B)  قرار می گیرد، که در ترکیب لازم وجود دارد، بطوریکه > یک رابطه است.
اما این علامت گذاری همچون "<" در عملیات های ریاضی به چه معناست؟ رابطه > (بصورت انتزاعی شامل چندگانه هایی از شکل X,Y) برای هر جفت مقدار ممکن x,y است به طوری که x>y  است. بنابراین (2,1) و (5,-33) هر دو چند تایی های درون > هستند. روشن است که رابطه > بصورت انتزاعی  بی نهایت است. دیگر عملیات ریاضی (همچون >، =، - و - ) را هم بصورت انتزاعی رابطه تلقی می کنند.       برای مثال A=B-C  را بصورت انتزاعی برای (B,C,A) –  قرار دهند در حالیکه رابطه –  شامل هر چندگانه (x,y,z) است به صورتی که = X-Y Z

یک حقیقت  به شکل زیر نوشته می شود.
P(v1,v2,…vn)
و مشخص می کند که چندگانه(v1,v2,…,vn)  در رابطه p است. مجموعه حقایق مربوط به رابطه را می توان در نماد سازی جدولی معمول هم نگاشت. مجموعه حقایق برای رابطه ها در یک الگوی پایگاه داده برابر با نمونه الگوی پایگاه داده است. دستورات بدور از عبارات هستند و چنین شکلی دارند:
P(t1 , t2 , ….. , tn) :- L1,L2,…,Ln
بطوریکه هر  Li  یک لیترال (مثبت یا منفی) است. لیترال P(t1 , t2 , ….. , tn) به راس  دستور اشاره دارد و بقیه لیترالهای بدنه  را در بر می گیرند.

برنامه دیتالوگ شامل مجموعه ای از دستورات است، ترتیبی که در آن دستورات نوشته می شوند اهمیتی ندارد. همانطور که قبلاً اشاره شد، ممکن است چند دستور وجود داشته باشد که رابطه را تعریف کند.
تصویر شماره 5-7 برنامه دیتا لوگی را نشان می دهد که سود را در شعبه Perryridge در مورد هر حساب معین می کند. دستور اول این برنامه، رابطه دید interest را تعریف می کند که خصوصیاتش عبارتند از شماره حساب و سود بدست آمده از حساب. و از رابطه account و رابطه دیدگاه  interest_rate استفاده می کند. دو قانون بعدی برنامه قوانینی هستند که ما قبلاً دیدیم.
Interest  ( A , I ) :- account (  A, "perryridge" , B ),
Interest_rate (A ,R) , I = B * R/100
Interest  ( A , 5 ) :- account (  A, N , B ), B <    10000
Interest  ( A , 6 ) :- account (  A, N , B ), B >= 10000
شکل 5-7 برنامه دیتالوگ که سود مربوط به حسابهای Perryridge را تعریف می کند.

گفته می شود رابطه دیدگاه V1 وابستگی مسقیم به رابطه دیدگاه V2 دارد اگر V2 در تعریف عبارت V1 بکار رود. در برنامه بالا رابطه دیدگاه interest وابستگی مستقیم به رابطه های  account و interest_rat دارد. رابطهinterest _rate به نوبه خود وابستگی مستقیم به account دارد.

گفته می شود اگر ردیفی از رابطه های میانجی i1 , i2, …. , in,   برای چندn  وجود داشته باشد، به نحوی که  v1 وابستگی مستقیم به i1 و i1 وابستگی مستقیم به i2  و به همین ترتیب تا in-1 وابستگی مسقیم به in  داشته باشد ، یک رابطه دیدگاه v1 وابستگی مستقیم به رابطه دیدگاه v2 دارد.

در مثال شکل 5-7 ، از آنجائیکه یک زنجیره وابستگی از interest به interest_rate  و account  داریم، رابطه interest  نیز وابستگی مستقیم به account  دارد.
بالاخره گفته می شود که رابطه دیدگاه v1 بستگی دارد به رابطه دیدگاه v2 اگر که v1 وابستگی مستقیم یا غیر مستقیم به v2داشته باشد. 
گفته می شود که رابطه دیدگاه v بازگشتی است اگر به خودش وابستگی داشته باشد. رابطه دیدگاهی که بازگشتی نباشد غیر بازگشتی خوانده می شود. 
برنامه شکل 5-8 را ملاحظه کنید. در آنجا رابطه دیدگاه mpl به خودش بستگی دارد. (طبق قانون دوم) ، و بدین ترتیب بازگشتی است. در مقابل برنامه شکل 5-7  بازگشتی نیست.
 

 


تگها: پایگاه داده   پایگاه داده رابطه ای   جبر رابطه ای   حساب رابطه ای   دیتالوگ   زبان های رابطه ای   
 

HyperLink

ارسال نظر در مورد این مطلب
نام :  
آدرس ایمیل :  
متن پیام :  
کد امنیتی :  
   
   
نظری برای نمایش وجود ندارد
 
این مطلب را به اشتراک بگذارید: