{{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