域关系演算
2015-10-07 19:16
253 查看
域关系演算
原子公式有两种形式:
⑴ R(x1…xk),R是一个k元关系,每个xi是常量或域变量;
⑵ xθy,其中x,y是常量或域变量,但至少有一个是域变量,θ是算术比较符。
公式中可使用∧、∨、┐和=>等逻辑运算符,也可用(∃x)和(∀x)形成公式,但变量x是域变量,不是元组变量。
自由域变量、约束域变量等概念和元组演算中一样。
域演算表达式是形为{t1…tk∣P(t1,…,tk)}的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。
例 图2.21的(a)、(b)、(c)是三个关系R、S、W,(d)、(e)、(f)分别表示下面三个域表达式的值。
R1={xyz|R(xyz)∧x<5∧y>3 }
R2={xyz|R(xyz)∨(S(xyz)∧y=4)}
R3={xyz|(∃u)(∃v)(R(zxu)∧W(yv)∧u>v)}
元组表达式到域表达式的转换
我们可以很容易地把元组表达式转换成域表达式,转换规则如下:
⑴ 对于k元的元组变量t,可引入k个域变量t1…tk,在公式中t用t1…tk替换,元组分量t[i]用ti替换。
⑵ 对于每个量词(∃u)或("u),若u是m元的元组变量,则引入m个新的域变量u1…um。在量词的辖域内,u用u1…um替换,u[i]用ui替换,(∃u)用(∃u1)…(∃um)替换,(∀u)用(∀u1)…(∀um)替换。
例 设教学数据库中有三个关系:
学生关系 S(S#,SNAME,AGE,SEX)
选课关系 SC(S#,C#,GRADE)
课程关系 C(C#,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩。
{t|(∃u)(SC(u)∧u[2]='C2'∧t[l]=u[1]∧t[2]=u[3])}
{t1t2|(∃u1)(∃u2)(∃u3)(SC(u1u2u3)∧u2='C2'∧t1=u1∧t2=u3)}
可以化简为:
{t1t2| (SC(t1'C2' t2))}
(2) 检索学习课程号为C2的学生学号与姓名。
{t|(∃u)(∃v)(S(u)∧SC(v)∧v[2]='C2'∧u[l]=v[1]∧t[l]=u[1]∧t[2]=u[2])}
{t1t2|(∃u1)(∃u2)(∃u3)(∃u4)(∃v1)(∃v2)(∃v3)(S(u1u2u3u4)∧SC(v1v2v3)∧v2='C2'∧u1=v1∧t1=u1∧t2=u2)}
可以化简为:
{t1t2|(∃u3)(∃u4)(∃v3)(S(t1t2u3u4)∧SC(t1'C2' v3)}
原子公式有两种形式:
⑴ R(x1…xk),R是一个k元关系,每个xi是常量或域变量;
⑵ xθy,其中x,y是常量或域变量,但至少有一个是域变量,θ是算术比较符。
公式中可使用∧、∨、┐和=>等逻辑运算符,也可用(∃x)和(∀x)形成公式,但变量x是域变量,不是元组变量。
自由域变量、约束域变量等概念和元组演算中一样。
域演算表达式是形为{t1…tk∣P(t1,…,tk)}的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。
例 图2.21的(a)、(b)、(c)是三个关系R、S、W,(d)、(e)、(f)分别表示下面三个域表达式的值。
R1={xyz|R(xyz)∧x<5∧y>3 }
R2={xyz|R(xyz)∨(S(xyz)∧y=4)}
R3={xyz|(∃u)(∃v)(R(zxu)∧W(yv)∧u>v)}
元组表达式到域表达式的转换
我们可以很容易地把元组表达式转换成域表达式,转换规则如下:
⑴ 对于k元的元组变量t,可引入k个域变量t1…tk,在公式中t用t1…tk替换,元组分量t[i]用ti替换。
⑵ 对于每个量词(∃u)或("u),若u是m元的元组变量,则引入m个新的域变量u1…um。在量词的辖域内,u用u1…um替换,u[i]用ui替换,(∃u)用(∃u1)…(∃um)替换,(∀u)用(∀u1)…(∀um)替换。
例 设教学数据库中有三个关系:
学生关系 S(S#,SNAME,AGE,SEX)
选课关系 SC(S#,C#,GRADE)
课程关系 C(C#,CNAME,TEACHER)
(1) 检索学习课程号为C2的学生学号与成绩。
{t|(∃u)(SC(u)∧u[2]='C2'∧t[l]=u[1]∧t[2]=u[3])}
{t1t2|(∃u1)(∃u2)(∃u3)(SC(u1u2u3)∧u2='C2'∧t1=u1∧t2=u3)}
可以化简为:
{t1t2| (SC(t1'C2' t2))}
(2) 检索学习课程号为C2的学生学号与姓名。
{t|(∃u)(∃v)(S(u)∧SC(v)∧v[2]='C2'∧u[l]=v[1]∧t[l]=u[1]∧t[2]=u[2])}
{t1t2|(∃u1)(∃u2)(∃u3)(∃u4)(∃v1)(∃v2)(∃v3)(S(u1u2u3u4)∧SC(v1v2v3)∧v2='C2'∧u1=v1∧t1=u1∧t2=u2)}
可以化简为:
{t1t2|(∃u3)(∃u4)(∃v3)(S(t1t2u3u4)∧SC(t1'C2' v3)}
相关文章推荐
- 创建型模式之一——简单工厂模式
- C++ const用法
- @ModelAttribute运用详解
- 程序题
- HP实训软件测试第一阶段测试基础知识总结
- LeetCode -- Length of Last Word
- 欧拉回路 定理
- 倍增算法的一些应用
- 1023. 组个最小数 (20)
- 软件测试行业浅析
- [原创]MongoDB_Sharding
- php date 处理
- iOS编程------动画
- 关系演算
- C#学习之多线程开发技术(十一)
- Log4j1X迁移至Log4j2(基于SLF4j)
- sitemesh入门总结
- hibernate单边的一对一关系
- Activity之间返回结果
- MYISAM表批量压缩