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


یکی دیگر از خدمات ما طراحی وب سایتهای واکنشگرا یا Responsive با کیفیت بالا می باشد. برای طراحی این وب سایتها از تکنولوژیهای روز دنیا استفاده می شود.


       
صفحه اصلی  |  فروشگاه ما  |  استخدام  |  نرم افزار مدیریت برنامه غذایی رستوران ها  |  seo تضمینی اصفهان  |  ثبت نام  |  طراحی وب سایت در اصفهان  |  برنامه نویسی اصفهان  |  انجام پروژه های پایگاه داده SQL Server  |  انجام پروژه مهندسی نرم افزار  |  انجام پروژه های مالتی مدیا بیلدر  |  در مورد ما  |  انجام پروژه های اکسس Microsoft access  |  نمونه پروژه ها  |  ارتباط با ما  |  اخبار و مقاله  |  انجمن رفع اشکالات مشتریان
برجسته ترین ها
گروه های مقاله ها
HyperLink


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

 5-4-4 ایمنی

امکان این وجود دارد که دستوراتی بنویسیم که تعدادی بی نهایت پاسخ تولید کنند. این دستور را ملاحظه کنید:
gt( X , Y) :- X>Y
از این رو  این رابطه که < را تعریف می کند بی نهایت است، این دستور می خواهد بی نهایت حقایق متعدد برای رابطه gt ایجاد کند که محاسبه مطابق با آن، زمان و مکان بی نهایتی لازم دارد.
کاربرد منفی هم می تواند موجب مشکلات مشابهی شود. دستور زیر را ملاحظه کنید:
not_in_loan (L , B , A):- not loan (L , B , A)
این موضوع به این معناست که اگر چندگانه در رابطه loan موجود نباشد، چند تایی 
( loan_number , branch_name , amount ) در رابطه دیدگاه not_in_loan است. البته اگر مجموعه loan_number , branch_name , amount بی نهایت باشد، not in loan  هم        بی نهایت است.

در پایان اگر ما متغیری در head داریم که در بدنه ظاهرنمی شود، ممکن است تعداد بی نهایت حقایق در جائی داشته باشیم که متغیر برای مقادیر مختلف نمونه سازی می شود.
برای اینکه از این احتمالات جلوگیری شود، لازم است که دستورات دیتالوگ را با شرایط امنیتی زیر اقناع کنیم:
1. هر متغیری که در راس دستور ظاهر شود، در بدنه دستور در یک لیترال غیر محاسباتی مثبت نیز ظاهر می شود.
2. هر متغیری که در یک لیترال منفی در بدنه دستور ظاهر شود، در چند لیترال مثبت هم در بدنه دستور ظاهر می شود.
اگر همه دستورات درون برنامه دیتالوگ غیر بازگشتی دارای شرایط امنیتی پیشین باشند، پس می توان همه رابطه دیدگاههایی را که در برنامه تعریف شده اند را متناهی نمایش داد به شرط اینکه همه رابطه های پایگاه داده متناهی باشند. از این شرط می توان تا اندازه ای کاست که به متغیرهایی که در راس قرار دارند، تنها در چند مورد در لیترال غیر محاسباتی درون بدنه ظاهر می شوند. برای مثال در دستور:
P(A) :- q(B) , A = B + 1
می توانیم ببینیم که طبق خواص جمع اگر رابطه q متناهی باشد، پس به همین ترتیب P هم متناهی است مگر آنکه متغیر A تنها در لیترال غیر محاسباتی ظاهر شود.

5-4-5 عملیاتهای رابطه ای در دیتالوگ
عبارتهای دیتالوگ غیر بازگشتی، بدون عملیاتهای محاسباتی در رسایی بیان معادل عبارتهایی هستند که در جبر رابطه ای از عملهای اصلی استفاده می کنند. (U , - , × , σ , П و ρ). ما در اینجا نمی خواهیم به تفضیل به اثبات این ادعا بپردازیم، بلکه می خواهیم با نشان دادن چند مثال به این موضوع بپردازیم که در دیتالوگ چگونه می توان عملیاتهای مختلف جبر رابطه ای را بیان کنیم. در همه موارد، رابطه دیدی را تعریف می کنیم که عنوان query  را دارد تا عملیات ها را با مثال روشن کنیم.
قبلاً دیدیم که چگونه با استفاده از دستورات دیتالوگ گزینش انجام می دهیم. و با استفاده از تنها صفات لازم در راس دستور براحتی طرحها را اجرا می کنیم. برای طراحی صفت account_name از حساب از فرمول زیر استفاده می کنیم:
query (A) :- account (A , N , B)
ما می توانیم حاصل فلسفه دکارت را از دو رابطه r1 و r2 طبق زیر بدست آوریم:
query(X1 , X2 , … , Xn , Y1 , Y2 , … , Ym):-r1( X1 , X2 , … , Xn), r2(Y1 , Y2 , … , Ym)

بطوریکه r1 arity n ، r2 arity m و X1 , X2 , … , Xn و Y1 , Y2 , … , Ym همگی نام متغیرهای جداگانه هستند.
اتحاد دو رابطه r1 و r2  را به این صورت تشکیل می دهیم:
query(X1 , X2 , … , Xn) : -r1 ( X1 , X2 , … , Xn)
query(X1 , X2 , … , Xn) : - r2 ( X1 , X2 , … , Xn)
و مجموعه تفاوت دو رابطه r1 و r2  را به این صورت تکیل می دهیم:
query(X1 , X2 , … , Xn) : -r1 ( X1 , X2 , … , Xn), not r2(X1 , X2 , … , Xn)
بالاخره به این نکته توجه داریم که با نماد سازی وابسته به موقعیت که در دیتالوگ بکار میرود، تغییر نام عملگر ρ لازم نیست. یک رابطه می تواند بیش از یک بار در بدنه دستور اتفاق بیفتد اما در عوض تغییر نامی که نامهای جداگانه ای به هر رابطه بدهد، می توانیم نامهای متفاوت متغیر را در هر بار مختلف که اتفاق می افتد استفاده کنیم.
غیر ممکن نیست که بتوانیم بدون محاسبه و با کمک عملیاتهای جبر رابطه ای بیان پرس و جوی دیتالوگ غیر بازگشتی را نشان دهیم. ما این کار را به عنوان تمرینی به شما می سپاریم که انجام دهید. به این ترتیب شما می توانید بدون عملیات محاسباتی معادله عملیات اصلی جبر رابطه ای و دیتالوگ غیر بازگشتی را پایه گذاری کنید.
برخی توسعه ها برای پشتیبانی دیتالوگ  از عملیاتهای بروز رسانی رابطه ای (درج کردن، حذف کردن و بروز کردن) است. این تر کیب نحوی برای چنین عملیات هایی از اجرا تا اجرا متفاوت است. برخی از سیستم ها استفاده کردن از - یا + را در رئوس دستور برای علامت گذاری درج کردن وحذف کردن مجاز می دانند. برای مثال ما می توانیم در شعبه perryridge ، همه account ها را به Johnstownتغییر دهیم. 
+account(A,"Johnstown",B):-account(A,"Perryridge",B)     
-account(A,"Perryridge",B):-account(A,"Perryridge",B)     
بعضی از اجراهای دیتالوگ، عملیات تجمعی جبر رابطه ای توسعه یافته را نیز پشتیبانی می کنند. از سوی دیگر هیچ ترکیب معنایی استانداردی برای این عملیات وجود ندارد.
5-4-6 بازگشتی در دیتالوگ
چند تا از کاربرد های پایگاه داده با ساختارهایی سروکار دارند که مشابه ساختارهای درختی اند    (داده درختی) .برای مثال کارکنان یک سازمان را در نظر بگیرید. بعضی از کارکنان مدیر هستند و هر مدیر مجموعه ای از نفراتی را که به او(زن یا مرد) گزارش میرسانند اداره می کند. اما هر یک از این نفرات ممکن است به نوبت مدیر باشند و خود به نوبت افراد دیگری دارند که به آنها گزارش می دهند. بنا براین این کارکنان را شاید در ساختاری مشابه با ساختار درخت سازمان بندی کرد. 
فرض کنید که ما جدول رابطه ای زیر را داریم:
Manager – schema = (employee-name, Manager –name)
بگذارید که Manager در این الگو یک رابطه باشد.
اکنون فرض کنید که می خواهیم بدانیم کدام کارمند مستقیم یا غیر مستقیم تحت نظارت مدیر معینی یعنی جونز است.  بنابر این اگر مدیر alon ،Barinsky باشد و مدیرBarinsky ،Estovar و مدیر Estovar ، جونز باشد در نتیجه Alon ،Barinsky و Estovar کارمندانی هستند که تحت کنترل جونز هستند. اغلب مردم با بازگشتی (recursion) برنامه هایی برای دستکاری ساختارهای درختی داده ها می نویسند. با استفاده از ایده بازگشتی می توانیم مجموعه کارکنانی را که تحت کنترل و اداره جونز هستند مطابق زیر تعریف کنیم. افرادی که جونز سرپرست آنهاست شماره (1) است (افرادی که مدیرشان جونز است) و افرادی که مدیرشان را جونز سرپرستی می کند شماره (2) است. توجه داشته باشیدکه مورد (2) بازگشتی است.
ما می توانیم تعریف بازگشتی بالا را با عنوان دیدگاه  دیتالوگ بازگشتی کدگذاری کنیم که       empl –Jones   نامیده می شود.
empl-jones (X) :- manager (X,"jones")
empl-jones (X) :- manager (X,Y) , empl-jones (Y)

procedure Datalog-Fixpoint
I = set of facts in the database
repeat
old_I = I
I=I U infer (R,I)
until I = Old_I
تصویر 5-11   رویه Datalog-Fixpoint
دستور اول با مورد (1) مطابقت دارد و دستور دوم با مورد (2) .دیدگاه empl- jones  به دلیل دستور دوم به خودش وابستگی دارد. از اینرو برنامه دیتالوگ بالا بازگشتی است. ما فرض می کنیم که برنامه های دیتالوگ بازگشتی حاوی هیچ دستوری با لیترال منفی نیستند. دلیل آن بعدا روشن می شود. یادداشتهای مربوط به فهرست کتاب به مطالعاتی اشاره دارد که محل استفاده منفی را توضیح می دهد. 
رابطه های دیدگاه برنامه بازگشتی که حاوی مجموعه ای از دستورات R هستند برای احاطه کامل حقایق I که در تصویر 5-11 بوسیله رویه تکرار شونده دیتالوگ –Fixpoint  محاسبه شده اند، تعریف    می شوند.در برنامه دیتالوگ این بازگشتی به از تکرار در رویه تبدیل میشود.
درپایان این رویه  infer (R,I) UD = I بطوریکه D مجموعه حقایق درون پایگاه داده است وI راFixed point  برنامه می نامند.
این برنامه را که empl-jones همانطور که در تصویر 5-12 آمده است به همراه رابطه manager تعریف می کند، بررسی کنید. مجموعه حقایقی که برای رابطه دیدگاه empl-jones در هر تکرار محاسبه می شود، دیده می شود. در هر بار تکرار برنامه یک سطح بیشتر کارکنانی را که تحت نظارت jones هستند را محاسبه کرده و انرا به به مجموعه empl-jones می افزاید. این رویه زمانی به پایان می رسد که هیچ مبادله ای با مجموعه empl-jones صورت نگیرد که سیستم با یافتن I=old_I این را کشف می کند. به این چنین نقطه پایانی باید دست یافت. زمانیکه مجموعه مدیران و کارکنان متناهی است، در خصوص رابطه manager ارائه شده، رویه Datalog-fixpoint بعد از 4 بار تکرار، زمانیکه در می یابد که به هیچ حقیقت تازه ای پی نمی برد، به پایان می رسد.
شما باید تحقیق کنید که در پایان از تکرار، رابطه دیدگاه empl-jones آن کارکنانی را که تحت نظارت جونز کار می کنند، بطور کامل در بر بگیرد. برای چاپ کامل نامهای کارکنانی را که جونز بر انها نظارت دارد و با این دیدگاه تعریف می شود، می توانید از پرس و جو استفاده کنید.
?empl-jones (N)
 

Manager_name

Employee_name

Barinsky

Estovar

Duarte

Jones

Jones

Klinger

Klinger

Alon

Barinsky

Corbin

Duarte

Estovar

Jones

Rensal






 
 
 
 
 
 
 
 
 
شکل5-12رابطهmanager
 

  empl-jones  چندگانه های موجود در

شماره تکرار

 

(Duarte) , (Estovare)

(Duarte) , (Estovare), (Barinsky),(Corbin)

(Duarte) , (Estovare), (Barinsky),(Corbin),(Alon)

(Duarte) , (Estovare), (Barinsky),(Corbin),(Alon)

0

1

2

3

4

تصویر 5-13 کارکنان جونز در تکرار رویه Datalog-Fixpoint
 
برای فهم و درک روش Datalog-fixpoint یاد آور می شویم که یک دستور از مجموعه مفروض حقایق به حقایق جدیدی پی می برد. تکرار با مجموعه ای از حقایق I شروع می شود که بسوی حقایقی در پایگاه داده پیش می رود. این حقایق همگی به درست بودن معروفند اما ممکن است حقایق دیگری باشد که به همان اندازه درست باشد. پس از آن مجوعه دستورات R در برنامه دیتالوگی مفروض برای این نتیجه گیری بکار می رود که چه حقایقی درست هستند. مسلم این است که حقایق در I درست باشند. حقایقی که استنباط می شوند به I اضافه می شوند و دستورات دوباره برای استنتاج دیگر بکار میرود. این رویه تکرار می شود تا اینکه هیچ حقیقت جدیدی را نتوان بدست آورد.
برای برنامه های امنیتی دیتالوگ می توانیم چنین نشان دهیم که در آنجا چند نقطه خواهد بود که   نمی توان از آنها حقیقت جدید دیگری نتیجه گیری کرد؛ این یعنی به ازای هر k، Ik+1 = Ik  . پس در این نقطه، ما مجموعه نهایی حقایق درست را داریم. علاوه بر این روش Fixed-point در برنامه دیتالوگ ارایه شده، همه حقایقی را که می توان بصورت درست نتیجه گیری کرد استنتاج می کند.
اگر برنامه بازگشتی دارای یک دستور با لیترال منفی باشد، می تواند مشکل زیر پیش آید. یادآور   می شویم که وقتی با استفاده از اصل نمونه سازی یک دستور، نتیجه گیری می کنیم، برا هر لیترال منفی not q در بدنه دستور چک می کنیم که q در مجموعه حقایق I نیامده باشد. در این تست فرض بر آن است که q را بعداً نمی توان نتیجه گیری کرد. البته در تکرار fixed point مجموعه حقایق I در هر یک از تکرارها رشد می کند و حتی اگر q در I موجود نباشد، ممکن است بعدها در I ظاهر شود. بنابر این ما در یک تکرار استنتاجی ساخته ایم که نمی تواند در تکرار بعدی به مدت طولانی تر بوجود آید و استنتاج درست نمی شود. ما برای پرهیز از چنین مشکلاتی نیازمند آن هستیم که برنامه های بازگشتی دارای لیترال منفی نباشد.
به جاي آنکه براي کارکناني که توسط مدير خاصي، Jones، سرپرستي مي شوند، ديدگاه بسازيم، مي توانيم يک رابطه ديدگاه کلي ترempl را با استفاده از برنامه زير توليد کنيم که داراي هر چندتايي (y،x) باشد بنحويکه x مستقيماً يا به طور غير مستقيم تحت نظارت y  باشد (در تصوير 5-8 نيز آمده است)
empl(X,Y) :- manager(X,Y)
empl(X,Y) :- manager(X,Z) , empl (Z,Y)
براي يافتن زیردستان مستقيم يا غير مستقيم Jones ، براحتي از اين پرس وجو استفاده مي کنيم که همان مجموعه مقادير را براي x بعنوان ديدگاه empl-jones ارائه مي دهد.
("Jones",x) empl؟
بيشتر کاربردهاي ديتالوگ بهينه سازهاي پرس وجو وابزارهاي ارزشيابي را خبره و پيشرفته ساختند تاآنجا که مي توانند پرس وجوي قبلي را تقريباً باهمان سرعتي که آنها مي توانستند ديدگاه  empl-jones را ارزشيابي کنند، اجرا کنند. 
اين ديدگاه empl را که قبلاً تعريف کرده ايم بستار انتقالي  رابطه manager  مي نامند. اگر رابطه manager را به جاي هر کدام از رابطه هاي دودويي ديگر R بياوريم، برنامه قبلي، بستار انتقالی R را تعريف مي کند.

 


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

HyperLink

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