数据库系统04----(初学)我对关系运算的理解

加粗样式
关系代数的理解
关系代数我感觉是对整个表(集合)的操作
集合编程另一个集合,但是我认为要用好关系代数,要对集合中元组(对象)的意义有了解。
1. 查找所有女科长的姓名和家庭地址
(寻找职务为科长 且 性别 为女的对象)(职工表)然后在投影出姓名和家庭地址属性。
我们可以这么想一件事情,职工表的对象时候职工—职工的表的意义 是全体职工
职工有姓名属性,寻找到性别为女且 职务为科长的的员工,(这里就构成了一个女科长员工表–意义就是 全体女科长员工)投影出表中姓名属性和家庭地址属性(我们就找到了所有女科长的性名和家庭地址)
选择 和 投影都是大表变小表, 根据属性来变化的。
2*。查找 办公室 的科长姓名和地址*
员工表中没有 部门名称,我们要构建一个新的表可以拥有部门名称的表,
我们找到有部门名称的表,可是没有 姓名和家庭地址,
这个时候我们就要把两个表连接在一起,
我们使用连接操作
把 办公室 部门表搞出来和 科长职工表连成
办公室 -科长 职工表 (全体部门为办公室的科长的办公室 员工 信息)
连接 表1 + 表2 = 表12
然后在表12进行操作
3. 有时候 表1 和表2 没有联系要通过 关系进行连接

学生表 sno sname age sex sdept
学生课程关系表 sno cno grade
课程 cno cname cdept tname

问题1:检索学号为s3的课程名与任课老师名
课程表必须要连 学生课程关系表因为 我们 要cname 和 tname又要通过 sno 来检索出来
选择 sno = ‘s3’的的学生课程关系 连上 课程表
对应的表的意义是 所有 sno = s3的课程表和课程,投影出 tname 和 cname 就可以了
问题2: 检索出选修liu老师所教授课程中的任意一门课的女学生姓名
我门 女学生姓名 在S 表中,刘老师所教授的课程在 课程中,
我们要连接 s 和 c表,
s sc c 自然连接起来,对s和c约束一下,s必须是女学生,c必须tname = liu,形成大表然后在投影出索要的姓名属性
问题三:检索出wang同学不学的课程的课程号
wang 同学不学的课程的课程号
可定要把学生表和学生课程号表连接在一起,投影出cno,再用课程表(所有课程)投影出的课程号 去减就可以了。
问题4 : 检索出全部学生都选修的 课程的课程号和课程名
我们要研究除法操作,除的意义是什么呢?
怎么理解可以更好的运用除法运算呢?
除法运算是有基本运算的构成的,这里我不去理解哪些基本运算构成除法了,我们直接来研究除法的思路。
理解象集:百度文库搜索关系代数偏 —除法讲解
我们在有些表中可以看见
关系R 和关系S ,关系R中ABC , 关系S有BCD属性,属性A中取值 a1 a2 a3 a4
a1的象集等于 原来元组中 除去a1 BC属性的值{(b1,c2),(b2,c1),(b2,c3)}
也就是所 a1 是 (b1,c2)(b2,c1) (b2,c3)都有的值,
a2 对应 (b3,b7)(b2,c3) 那么
(b2,c3)的象集是 a1 a2
a1 a2 是 b2 c3 都有的值
除法的意义可以表达为
R 除 S
S 属性组的 所有可取值 在 R 中元组(对象)都有的值。
S 有 A3 属性 值为 cfgh
R 有 A1 A2 A3 属性
R除S 就是 A3属性 c f g h 都有的A1 A2属性组取值 a e
也就是说 R中 a e对应的象集包括了 cfgh
哪些值的象集是包括S中的值
除法的两种方向的理解

回到问题4 我们要间搜除所有学生都选修的 课程的课程号 和 课程名
我们把 所有课程和学生标号关系 投影出 cno cname sno ,在这个新表 中我们可以看到有课程号对应折相同的学生号,这时候除与 全体学生标号关系就可以得出结果。
检索 所有学生都选修的课程的课程号和课程名,其实就是课程号和课程名有全体学生编号对应,
找到一个 课程号 课程名 学生编号表,如果,课程号,课程名的象集是全体学生编号,那么只用除于全体学生标号关系就可以了。
反过来理解 ,也可以这么想,我们可以找到全体学生学号 如果 全 体学生学号都有某个 课程号和课程名 ,我们也就完成了找到了
问题5 : 检索 选修课程包含刘老师所教授课程的学生学号。
问题 学生学号的所有对应的课程编号 包含 刘老师课程编号的

找到两个表 一个表 所有学生的 学生学号 课程编号 除于 所有刘老师的课程编号

元组演算理解:
可以用编程语言来表示
关键是 理解全称量词 和存在量词,以及元组变量。
检索所有课程都及格的同学
t|t属于studnet ^ 全部(u属于sc ^ t[s#]=u[c#])(u[score]>=60)
t[s#]=u[c#]代表只验证 t中s# 等于 u中s#的,也就只验证student表

域演算的理解

检索出不是03系的所有学生
域演算的核心是域变量,我们要明白我们操作的是域变量,也就是列。域变量和元组演算中的元组变量不同,他是从属性(列)中的属性范围中任意取出一个变量。
检索出不是03系的所有学生
|shuyu student ^ e<>“03”
检索不是(小于20岁的男同学)的所有同学 的姓名
| shuyu student ^ -(d < 20 ^ c = ‘man’)
检索成绩不及格的同学姓名,课程,成绩
|acdefgljk(<a,b,c,d,e,f>属于student ^ shuyu kecheng ^ shu sc ^ m <60)
域变量的组合,域是某一列的取值范围,
元组演算是以元组为变量,以元组为基本单位处理单元,先找到元组再找到元组分量,进行谓词判断
域演算 以 域变量为基本处理单元,现有域变量,然后在判断这些域变量组成的元组是否存在是否满足的谓词判断。

域演算给人的感觉就像无脑添加判断

元组演算和域演算是可以装换的。

域演算看不出过程。适合用户(无脑)

元组演算和关系代数的理解
关系代数的操作有: 并 差 广义积 选择 投影 交 连接

R 并 S = {t|t 属于 R v t属于 S} t 是元组
差运算 R - S = {t | t 属于 R ^ - t 不属于S }
交 R 交 S = {t| t 属于 R ^ t 属于S }
广义笛卡尔积 = R(A) 积 S(B) = {t| 存在(u属于R)存在(s 属于 S)(t[A] = u[A])^t[B] = s[b]}
解释一下: 就是t 前面A个分量和 u 前面A分量相同, B代表的分量和 s 相同
选择运算 选择 R = {t| t 属于 R ^ F(con)}
投影 投影 R = {t[A] | }
关系代数可以简单的装换为元组演算公式

元组演算公式总结
逻辑表达的思维
以元组为基本单位进行循环,先找到元组 在找到元组分量 进行所谓的谓词判断
用递归公式 组合 递归的 构造公式

研究四个例子
可以熟练表达这种关系就很不错了。
学生关系 s# sname sage ssex sclass
课程关系 c# cname chours credit Tname
选课关系 s# c# score
或得理解
全都学过

1: 学过李明老师讲授的所有课程的学生姓名
从关系代数的角度讲,关系代数是对集合的操作,我们把集合看作对象
学生关系表----学生 – 集合意义 全体学生
课程关系----课程 – 集合意义 全体课程
选课关系 – 关系–集合 全体关系
我们要找到,(李明老师讲授的所有课程)这个对象
我们可以这么操作:全体课程中选择 老师名= 李明 ,投影出 课程号。
我们通过 选择 投影c#(Tname = ‘李明’(课程关系))
我们要知道李明老师讲授的所有课程的学生姓名,我们要建立新的对象,学生课程对象,
Student sc course 连接 成为 学生课程对象0----- 表的意义就是 全体学生以及他们的课程
我们投影出我们要的属性名字 课程号和学生名
对应的表中 元组意义就是----全体 学生以及课程号名求包含李明老师的课程号的所有学生,也就是处于 李明老师课程号

简单的来说,求李明老师讲授的所有课程的学生姓名,有一个求包含的操作,我们一定要用到除法
我们要需要学生姓名 ,求包含操作涉及的属性有 李明老师所有课程号
大表 属性 就有 Sname C# 小表 C#
大表条件是全体学生姓名 课程号 小表 条件是李明老师课程号
大表除与 小表 作投影除Sname 就好了,不过这题都不许哟啊投影 了。
用元组演算来表达:
t[Sname]| t 属于 Student ^ 任意(u shuyu 课程) ^ u[Tname]=‘李明’)(存在(w属于关系表)(w[s#]=t[s#] ^ w[c#]=u[c#]))
其实可用编程语言来解释,

             for 遍历 课程表 u
                  if u[tname] = 'liming'
                  reurn u 
                for 遍历  新的u   
                     if w[s#] = t[s#]  and w[c#] == u[c#]
                             return t 
              for 遍历 newt 为t 
              return t【sname】
               我猜测的

全没学过
所有学生姓名减去 李明老师的所有学生
元组

至少学过一门
李明老师所有学生
student 连接 sc 连接 course 选择李明 )再投影 姓名
至少一门没学过

全体学生 减去 学全了的

关系代数确实难以理解,但是我觉的我可以继续前进了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值