“数据库原理”课程中关系代数的重难点分析
时间:2022-03-20 10:19:19 浏览次数:次
打开文本图片集
摘 要:“数据库原理”课程是广西师范大学 计算机科学与信息工程学院计算机专业及信息管理专业本科生的必修课,关系代数中的“除”运算是该课程的一个重难点。文章结合笔者多年的教学研究和实践,对关系代数“除”运算的教学进行了探讨,希望能够有益于该课程教学的研究。
关键词:“数据库原理”课程教学;关系代数;“除”运算;包含
广西师范大学计算机科学与信息工程学院在学生大二时会开设必修课程—“数据库原理”。课程目标是使学生掌握数据库技术相关概念、理论和方法,并具有一定的数据库系统设计能力,为下面开发数据库应用系统打下良好的基础[1]。课程的用书是中国人民大学王珊[2]老师的国家精品课程团队编写的教材—《数据库系统概论》,高等教育出版社出版,已经到了第5版。教材比较简洁,比如在讲解“除”运算时,首先讲了“除”运算的定义,然后给了3个“除”运算的例题就结束了。这个台阶跨度太大,很多学生不好理解,表现为“除”运算的题目做不出。为了让学生上得去,好理解,老师的作用就是在中间多加几级台阶。笔者加的第1级台阶是:讲解“除”运算的由来及用处,引发学生学习兴趣;第2级台阶:将“除”运算题目分成两类,分别讲解解决方法,对症下药;第3级台阶:及时总结,并对学生的易错点进行错误原因讲解,鼓励学生学好这个重难点。以下为具体的授课过程。
1 关系代数中“除”运算的由来及用处探讨,引发学生学习兴趣
由一道除法题引出思考:9÷2=4…1是什么意思?商等于4,表示被除数9里面包含有4个除数2。还剩下1没有完全包含一个2,只包含了部分,所以1是余数。即“除”有包含(覆盖)的意思。总结推广到二维表(关系)做“除”运算,是在二维上实现包含(覆蓋)的含义。即在一个大表中找包含(覆盖)了一个小表的运算。为了好让学生理解,补充以下例子。
补充例子(“除”运算的实际应用)如下:我们有选修情况表SCG表(见表1),包括姓名、性别、课程名称、院系、成绩属性,若想查询有哪些同学的离散数学课程得了优且数据结构课程也是优?即,谁的选修情况包含(覆盖)了以下的CG表(见表2),这时就需要用到除法:SCG÷CG。
2 将“除”运算题目分成两类,分别讲解解决方法
2.1 “除”运算的定义
下面给出关系代数中“除”运算的明确定义,在教材55页。首先复习以前学过的象集Zx的概念,在教材51页。
“除”运算定义:给定关系R (X,Y) 和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合,记作:R÷S={tr[X]"tr∈R∧πY(S)⊆Yx}。Yx:x在R中的象集,x= tr[X]。
讲解该概念要注意的地方:关系R的所有属性被分成了X和Y两个属性组(或叫属性集),S的所有属性被分成了Y和Z两个属性组。关系R和S有公共属性组Y,也就是要求要覆盖的部分,Y结构要相同,体现在其属性个数、属性的类型长度等相同。该定义即为求解第一类题目—求“除”运算结果的解题步骤。
2.2 第一类题目—求“除”运算结果
总结第一类题目解题步骤,从二维表的行、列两个方向来控制“除”运算的结果。
(1)首先求属性列:先找出公共属性Y,则R÷S的属性列是大表(被除数)R的属性差掉公共属性后剩余的属性X。
(2)再求元组记录行:分成3步。
①求元组在X上分量值x的象集Yx。
②S在Y上投影的集合。
③谁的象集Yx包含投影,则为结果元组行。
以下为补充例子解题步骤,SCG÷CG=?
(1)首先求属性列:首先找公共属性组Y={CNAME,GRADE},则X={SNAME,SEX,DEPT},Z为空。所以SCG÷CG的属性列是大表SCG(被除数)的属性差掉公共属性,即结果为属性组 {SNAME,SEX,DEPT}。
(2)再求元组记录行。
①在关系SCG中,{SNAME,SEX,DEPT}可以取4个值{(李明,男,通信),(刘月莹,女,计算机),(吴康,男,通信),(王文晴,女,计算机)},分别设为a1,a2,a3,a4,则
a1的象集为{(离散数学,优),(数据结构,优),(高等数学,良)}
a2的象集为{(离散数学,良),(数据结构,优)}
a3的象集为{(离散数学,优),(高等数学,良)}
a4的象集为 {(数据结构,优),(离散数学,优)}
②CG在公共属性(CNAME,GRADE)上的投影为:{(离散数学,优),(数据结构,优)}
③(李明,男,通信),(王文晴,女,计算机)的象集包含了CG在公共属性(CNAME,GRADE)上的投影,所以,SCG÷CG结果:
总结:刘月莹和吴康都是余数,没有除尽,因为他们的象集只包含了一部分 {(离散数学,优),(数据结构,优)},没有完全包含。
同样可以求解教材例题,[例2.9]设关系R和S,求R÷S的结果。
2.3 第二类题目—构造“除”运算
有教材51页的学生—课程数据库:包括学生关系Student(Sno,Sname,Ssex, Sage, Sdept), 课程关系Course(Cno,Cname,Cpno,Ccredit)和选修关系SC(Sno,Cno,Grade)。[例2.13]对学生—课程数据库,用关系代数表达式表达查询:选修了全部课程的学生号码和姓名。总结第二类题目解题步骤:
(1)判断是否用 “除”运算。题目中有“全部”“所有”的字眼时,要求在一个大表中要包含(覆盖)一个小表时用“除”运算。
(2)构造“除”运算的大表(即被除数)和要包含(覆盖)的小表(除数)的元组行。
(3)构造两个表包括的属性,使大表属性差掉公共属性即为所求属性列。
用以上步骤做[例2.13]:
(1)判断是否用“除”运算。题目要求查询:谁的选修情况包含(覆盖)了所有课程,所以要用“除”运算。
(2)构造大表(被除数)和小表(除数)元组行:大表是所有同学的选修情况SC表,小表是所有的课程情况Course表,求学生号码和姓名。先求学生号码。写出SC÷Course。
(3)构造两个表包括的属性,使大表属性差掉公共属性即为所求属性列:
πSno,Cno(SC)÷πCno(Course)
(4)学号是学生的主键,当学生的学号确定了,与学生基本情况表Student表自然连接,就能获得该学生的姓名等信息了。
πSno,Cno(SC)÷πCno(Course) πSno,Sname(Student)
3 易错点:“除”运算与“选择” 运算的区别
在补充例子SCG表,若要覆盖、包含以下的L表,应该用“除”运算SCG÷L。若要覆盖、包含以下的K表,应该用“选择”运算σCNAME= ‘离散数学’ ^ GRADE= ‘优’ (SCG)。
总结:因为一个表的当前记录指针只有一个,所以只要包含(覆盖)的信息只涉及一条元组时,用“选择”运算;要包含(覆盖)两条及以上元组时,则用“除”运算。
4 结语
关系“除”运算是关系代数中最难的一种运算。在教学中,笔者总结了一种求“除”运算结果的步骤和一种构造“除”运算表达式来实现查询的方法及技巧,并对学生易错点:“除”运算与“选择”运算的区别进行了探讨。经过课堂教学证明,这些方法和技巧教学效果良好,希望能够对该类问题教学研究的发展有所帮助。
[参考文献]
[1]何冬黎.数据库原理教学中数据库优化设计方法的探讨[J].科技信息(学术研究),2007(24):329-330.
[2]王珊,萨师煊.数据库系统概论[M].5版.北京:高等教育出版社,2014.
- 上一篇:从信息角度看实数加群的自同构
- 下一篇:高职数学应用性分析