{{zarovka |z přednášky:
GREATER(x,y) :- x > y (není bezpečné)
FRIEND(x,y) :- M(x) (není bezpečné)
S1(y,w)
:- F(x,y), F(x,w), y ≠ w (je bezpečné, ≠ se bere jako =)
z media:Datalog-unsafe_rules.PNG:
s(X) :- r(Y) (není bezpečné)
s(X) :- r(Y) AND NOT r(X) (není bezpečné)
s(X) :- r(Y) AND X < Y (není bezpečné)
(ve všech připadech nekonečnost X splni pravidlo i když je R konečná relace) | př: nebezpečná pravidla Datalog
}}
Bezpečné pravidla v Datalogu
Omezená proměnná x v Datalogu je taková, která se vyskytuje v těle literálu L a pro jehož tělo platí:
L je dán pravým predikátem, nebo
pravý predikát - jméno zákl.db relace nebo jméno virtuální relace (prakticky EDB nebo levá strana IDB pravidla)
L je *x *= a nebo *a *= *x *, kde a je konstanta nebo omezená proměnná
Pravidlo je bezpečné pokud jsou <u>∀proměnné omezené</u>.
Datalog má <u>povolená</u> pouze bezpečná pravidla a dále platí, že v hlavách jsou pouze jména <u>virtuálních relací</u> :💡 (ktere nejsou v EDB), tzn odvozováním nevytvářím další základní data