zoukankan      html  css  js  c++  java
  • 2020春季数据库-->关系演算安全性的理解

    一、安全关系元组演算表达式

      先来看一个例子,{ t | ┐( t ∈ instructor) } ,不在instructor中的元组有无限多个,且大多数这样的元组所包含的值并不在数据库中,故我们通常不希望有这样的表达式。

      此时,需要对元组关系演算进行限制,引入元组关系公式P的域(domain),用dom(P)表示P所引用的所有值的集合,既包括P自身用到的值,又包括P中涉及的关系的元组中出现的所有值。P的域是P中显式出现的值名称出现在P中的关系的所有值的集合。这里给出一个例子,dom(t∈instructor ^ t[salary] >80000) 为 :80000 和 出现在instructor中的所有值的集合;dom(┐( t ∈ instructor))为:出现在instructor中的所有值的集合。

      如果出现在表达式{ t | P(t) }结果中的所有值均来自dom(P),则说该表达式是安全的。{ t | ┐( t ∈ instructor) } 不安全,,因为dom(┐( t ∈ instructor))是出现在instructor中的所有值的集合,但很可能有某个不在instructor中的元组t,它包含不在instructor中出现的值,即它允许在结果中出现不在表达式的域中的值。

      安全的表达式一定包含有限的结果,因此限定只有安全的元组关系演算表达式被认为是允许的。

    这里给出定义:

    二、安全关系域演算表达式

      同关系的元组演算,关系域演算中,也可能出现产生结果为无限关系的表达式,例如:{ <i,n,d,s> | ┐( <i,n,d,s> ∈ instructor) },它允许结果中出现不在表达式的域中的值。此外,我们还需考虑“存在”和“对所有的”子句中公式的形式。再来看下面一个例子: 

      

       在进行第二部分的测试时,还需考虑不在r中的z值,如果不考虑z的取值有无限多中可能,则无法完成对第二部分的测试。因此,需要加一些约束来限制上面这样的表达式。因为在元组关系演算中,将所有存在量词修饰的变量限制在某个关系范围内,而域关系演算中并没有这样做,故增加用于定义安全性的规则,处理上述情况。认为 { <x1,x2,...,xn>| P(x1,x2,...,xn> } 是安全的:

      1.表达式的元组中所有值均来自dom(P)

      2.对每个形如 存在x(P1(x))的“存在”子公式而言,子公式为真iff在dom(P1)中有某个值x使P1(x)为真

      3.对每个形如 任意x(P1(x))的“对所有的”子公式而言,子公式为真iffP1(x)为真对dom(P)中所有值x均为真 (或者如上图中那样定义dom(P1)为不满足的,测试P1(x)为假)

      上述规则的目的是,保证我们不需要测试无限多的可能性就可以完成对“存在”和“对所有的”子公式的测试。如果表达式是安全的,则只需对dom(P1)中的值来测试P1(x)就足够了。

    To see I can not see, to know I do not know.
  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/aluomengmengda/p/12367192.html
Copyright © 2011-2022 走看看