您好,欢迎访问三七文档
重点提示(数据库原理中涉及概念众多,比如,数据库的三级结构,分布式数据库系统,这些概念都很重要,可以参见“课程学习”部分,本版块只给出特别重要或容易混淆的内容)一、关系数据模型的基本概念实体、实体集、属性、属性值域、关系、元组、表、行、列、侯选键等概念。主键和外键概念。以及关系与关系之间的联系的实现方法。关系与关系之间的联系:通过公共属性。公共属性是一个表的主键,是另一个表的外键。这是关系数据库的重要特点。关系模型可提供3种完整性约束:实体完整性、参照完整性、用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,称为关系完整性约束条件规则。二、关系代数与关系数据库操作关系代数是关系数据库系统查询语言的理论基础。关系代数的9种操作:并、交、差、乘、选择、投影、联接、除、自然联接运算。五个基本操作:并(∪)差(-)笛卡尔积(×)投影(σ)选择(π)四个组合操作:交(∩)联接(等值联接)自然联接(RS)除法(÷)关系代数表达式:由关系代数运算经有限次复合而成的式子称为关系代数表达式。这种表达式的运算结果仍然是一个关系。可以用关系代数表达式表示对数据库的查询和更新操作。关系代数(演算)要求掌握各种语句的应用,多做书中的例题可以帮助自己熟能生巧。关系代数表达式举例用关系代数表示数据查询的典型例子[例]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系C(CNO,CNAME,TEACHER)下面用关系代数表达式表达每个查询语句。(1)检索学习课程号为C2的学生学号与成绩。πSNO,GRADE(σCNO='C2'(SC))(2)检索学习课程号为C2的学生学号与姓名πSNO,SNAME(σCNO='C2'(SSC))由于这个查询涉及到两个关系S和SC,因此先对这两个关系进行自然连接,同一位学生的有关的信息,然后再执行选择投影操作。此查询亦可等价地写成:πSNO,SNAME(S)(πSNO(σCNO='C2'(SC)))这个表达式中自然连接的右分量为学了C2课的学生学号的集合。这个表达式比前一个表达式优化,执行起来要省时间,省空间。(3)检索选修课程名为MATHS的学生学号与姓名。πSNO,SANME(σCNAME='MATHS'(SSCC))(4)检索选修课程号为C2或C4的学生学号。πSNO(σCNO='C2'∨CNO='C4'(SC))(5)检索至少选修课程号为C2或C4的学生学号。π1(σ1=4∧2='C2'∧5='C4'(SC×SC))这里(SC×SC)表示关系SC自身相乘的乘积操作,其中数字1,2,4,5都为它的结果关系中的属性序号。比较这一题与上一题的差别。(6)检索不学C2课的学生姓名与年龄。πSNAME,AGE(S)-πSNAME,AGE(σCNO='C2'(SSC))这个表达式用了差运算,差运算的左分量为全体学生的姓名和年龄,右分量为学了C2课的学生姓名与年龄。(7)检索学习全部课程的学生姓名。编写这个查询语句的关系代数过程如下:(a)学生选课情况可用πSNO,CNO(SC)表示;(b)全部课程可用πCNO(C)表示;(c)学了全部课程的学生学号可用除法操作表示。操作结果为学号SNO的集合,该集合中每个学生(对应SNO)与C中任一门课程号CNO配在一起都在πSCO,CNO(SC)中出现(即SC中出现),所以结果中每个学生都学了全部的课程(这是除法操作的含义):πSNO,CNO(SC)÷πCNO(C)(d)从SNO求学生姓名SNAME,可以用自然连结和投影操作组合而成:πSNAME(S(πSNO,CNO(SC)÷πCNO(C)))这就是最后得到的关系代数表达式。(8)检索所学课程包含S3所学课程的学生学号。注意:学生S3可能学多门课程,所以要用到除法操作来表达此查询语句。学生选课情况可用操作πSNO,CNO(SC)表示;所学课程包含学生S3所学课程的学生学号,可以用除法操作求得:πSNO,CNO(SC)÷πCNO(σSNO='S3'(SC))(9)将新课程元组('C10','PHYSICS','YU')插入到关系C中(C∪('C10','PHYSICS','YU'))(10)将学号S4选修课程号为C4的成绩改为85分。(SC-('S4','C4',?)∪('S4','C4',85))修改操作用代数表示分两步实现:先删去原元组,再插入新元组。题目中未给出原先的成绩,所以用?代替,检索时可忽略。关系代数表达式的优化:目的:为了系统在执行时既省时间又能提高效率。基本策略:先做选择,运用投影去除多余属性等等。优化算法:语法树(详见教材。尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值)对于一些简单的代数表达式,直接用“尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值”直接写出即可。比如,设有三个关系:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)关系代数表达式为:πS#,SNAME(σGRADE60(SSC))优化为:πS#,SNAME(πS#,SNAME(S)πS#(σGRADE60(SC)))语法树举例优化举例设有三个关系:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)关系代数表达式为:πCNAME,TEACHER(σSEX='女'(SSCC))优化为:πCNAME,TEACHER(CπC#(πS#,C#(SC)πS#(σSEX='女'(S))))基本思路:尽量提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值。以下为优化过程的语法树三、关系演算关系演算(把数理逻辑的谓词演算引入到关系运算中),该理论也应掌握。掌握的深度要求比关系代数略低一些。理解一些量词及符号的含义:、、=、∧、∨、┐元组演算表达式的一般形式为:{t|P(t)}理解一些量词及符号的含义,理解元组表达式的含义就简单多了(要多作习题):比如,设有三个关系:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER){t|(u)(C(u)∧C[3]='LIU'∧t[1]=u[1]∧t[2]=u[2])}可以这样理解:t是所求元组对于t,存在元组U,U是关系C的一个元组并且C的第三个分量是“LIU,t的第一个分量等于U的第一个分量,t的第二个分量等于U的第二个分量综上,题意:检索LIU老师所授课程的课程号(第一个分量)、课程名(第二个分量)。域关系演算域演算表达式的一般形式为:{t1...tk|P(t1...,tk)}其含义为:这是一个域集合,其中每个域变量的取值关系满足公式P所规定的条件。元组关系表达式转换成域表达式:(1)对于k元的元组变量t,引入k个域变量t1...tk,在公式中t用t1...tk替换,元组量t[i]用ti替换。(2)对于每个量词(u)或(u),若u是m元的元组变量,则引入m个新的域变量u1...um。在量词的辖域内,u用u1...um替换,u[i]用ui替换,(u)用(u1)...(um)替换,(u)用(u1)...(um)替换。比如,{t|(u)(C(u)∧C[3]='LIU'∧t[1]=u[1]∧t[2]=u[2])}转换为{t1t2|(u1)(u2)(C(u1u2u3)∧u2='LIU'∧t1=u1∧t2=u2)}表达式的转换不用强记,关键要从语义上理解。比如,{t1t2|(u1)(u2)(C(u1u2u3)∧u3='LIU'∧t1=u1∧t2=u2)}可以这样理解:所求结果有t1、t2两个域,存在u1,u2与它们分别相等(u1,u2为关系C中两个域,对应的U3为'LIU')。综上,题意:检索LIU老师所授课程的课程号(第一个域)、课程名(第二个域)。四、SQL语言结构化查询语句SQL是本教材的重点,应多做例题、习题加以领会。1.SQL数据库的体系结构要点。2.SQL语言的四个主要部分。3.数据定义命令。建立数据库(模式):CREATESCHEMA命令。撤消数据库:DROPSCHEMA命令CASCADE(连锁式)、RESTRICT(约束式)的区别建立表结构:CREATETABLE命令。要会使用数据类型说明属性的性质。对表结构进行修改的操作用ALTER命令(删除列用DROP,或增加新的列用ADD)。e.g.ALTERTABLESADDADDRESSVARCHAR(30)ALTERTABLESDROPAGECASCADEALTERTABLESDROPAGERESTRICTCASCADE为连锁删除,RESTRICT为约束删除,即没有对本列的任何引用时才能删除。建立视图的CREATEVIEW命令。撤消视图的DROPVIEW命令。4.索引的创建与撤消。建立索引的CREATEINDEX命令,学用UNIQUE建立唯一(性)索引。撤消索引的CREATEINDEX命令。5.数据查询,要求达到综合应用的层次。用SELECT命令实现选择与投影操作,选择对应于WHERE子句,投影对应于SELECT子句。对于条件表达式中要用到的所有运算符(关系、逻辑、特殊),都应使用。对输出的目标列进行排序的ORDERBY子句。消除重复的DISTINCT。SQL的数值函数(COUNT、MIN、MAX、AVG、SUM)和查询嵌套。按属性(列名)的值进行分组的GROUPBY子句。多表连接操作(联接查询、嵌套查询)用SELECT命令表达查询的较完整的语法格式是:SELECT目标表的列名或列表达式序列FROM表名序列[WHERE行条件表达式][GROUPBY列名[HAVING组条件表达式]][ORDERBY列名[DESC],…];其执行过程如下:(1)读取FROM子句中表或视图的数据,执行笛卡尔乘积操作。(2)选取满足WHERE子句中给出的条件表达式的元组。(3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。(4)按SELECT子句中给出的列名或列表达式求值输出。(5)按ORDER子句对输出的目标表进行排序,按附加说明DESC降序排列,默认为升序排列。6.SQL的数据更新插入(增加)一行或多行到表中的操作用INSERTINTO命令。从表中删除行(元组)的操作用DELETEFROM命令。修改列值用UPDATE命令事务提交用COMMIT命令,事务回滚用ROLLBACK命令。注意UPDATE命令ALTER命令、DELETE命令与DTOP命令含义的不同7.SQL中的完整性约束用PRIMARYKEY指明主键;用FOREIGNKEY…REFERENCES…指明外键和参照关系,即参照完整性规则。在属性值上的约束:非空值约束NOTNULL;CHECK子句全局约束:CHECK子句;断言ASSERTIONS举例:断言CHECK子句[例1]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系C(CNO,CNAME,TEACHER)用断言实现:规定每门课程最多有50名女学生选修CREATEASSERTIONASSE2CHECK(50=ALL(SELECTCOUNT(SC,SNO)FROMS,SCWHERES.SNO=SC.SNOANDSEX='女'GROUPBYCNO));[例2]设有职工基本表:EMP(ENO,ENAME,AGE,SEX,SALARY,DNO),其属性分别表示职工号、姓名、年龄、性别、工资,所在车间的编号。试写一个断言(断言名为ASSE4),要求每个车间女职工人数不少于20人。CREATASSERTIONASSE4CHECK(20=ALL(SELECTCOUNT(ENO)FROMEMPWHERESEX='女'GROUPBYDNO));[例]设教学数据库中有3个关系:学生关系S(SNO,SNAME,AGE,SEX)学习关系SC
本文标题:数据库原理复习资料
链接地址:https://www.777doc.com/doc-5210749 .html