




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库,第三章,数据库设计过程,E/R图到关系模式的转换,关系模式的规范化,需求分析,概念模式设计,逻辑模式设计,数据库实施,E/R图UML,RDBMS模式,存储模式,数据库运行和维护,概念模式设计ER图,实体联系模型(Entity-RelationshipModel,简称E-R模型),E-R模型的基本概念,实体(entity):客观存在,可以相互区别的事物称为实体。实体集(entityset):性质相同的同类实体的集合,称实体集。属性(attribute):实体有很多特性,每一个特性称为属性。每一个属性有一个值域,其类型可以是整数型、实数型、字符串型等。实体标识符(identifier):能惟一标识实体的属性或属性集,称为实体标识符。有时也称为关键码(key),或简称为键。联系(relationship)是实体之间的相互关系。数据模型:能表示实体类型及实体间联系的模型称为“数据模型”。,E-R图的基本组成部分,E/R图有四个主要部分:(1)实体集,用矩形表示。(2)属性,用椭圆形表示。(3)联系,用菱形表示。(4)直线,表示联系的类型及实体与实体之间的联系;,数据联系,联系(relationship)是实体之间的相互关系。二元联系有以下三种类型:一对一联系:实体集E1中每个实体至多和实体集E2中的一个实体有联系,反之亦然,那么实体集E1和E2的联系称为“一对一联系”,记为“1:1”。一对多联系:实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体间有联系,而E2中每个实体至多和E1中一个实体有联系,那么称E1对E2的联系是“一对多联系”,记为“1:N”。多对多联系:如果实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么称E1和E2的联系是“多对多联系”,记为“M:N”。,三种联系的E-R图,三种联系的E-R图,E-R图实例,例:设计一个学生选课数据库。要求包括学生(student)、课程(course)和教师(teacher)的信息。实体中存在如下联系:一个学生可以选修多门课,而每门课也能由多个学生选修;一位教师可以教多门课,每门课也可以由多个教师讲授;用E-R图来描述此数据库。,学生信息:学号(sNo)、学生姓名(sName)、年龄(age)、地址(sAddress),课程信息:课程号(cNo)、课程名(cName)、课程学分(credit),教师信息:工号(tNo)、姓名(tName)、教师的地址(tAddress),学生-课程-教师E-R图,注意:如果一个联系具有属性,则这些属性也与该联系连接起来。,TeachCourseNo,概念模式设计UML,从用例图分析出对象,概念模式设计UML,对象之间的关系,工作,概念模式设计UML,对象之间的关系分类,一元关系,概念模式设计UML,对象之间的关系分类,工作,二元关系,概念模式设计UML,关系的重数,1.n,1,重数1.n,重数1,概念模式设计UML,关联,2个对象关联产生属性,关系模型的结构-数据模型三要素之一,一个关系的逻辑结构是一张二维表,它由行和列组成。,关系,关系名,元组:表中的一行即为一个元组或记录;字段:表中的一列,列值称为字段值,列名称为字段名值域:字段值的取值范围,主键:能唯一标识一个元组的属性集合。外键:若属性组F不是关系R1的主键,但它是关系R2的主键,则F称是关系R1的外键。,关系的完整性,域完整性实体完整性参照完整性,1)第一范式(FirstNormalForm,1NF),定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则关系R属于第一范式。,p,2)第二范式(SecondNormalForm,2NF),定义:若关系模式R属于第一范式,且每个非主属性都完全函数依赖于主键,则R属于第二范式。,t,3)第三范式,定义:如果一个关系R是第二范式的,并且每个非主属性都不传递依赖于主键,则R属于第三范式。,4、E-R(UML)模型到关系模式的转换,1)实体(对象)到关系模式的转换2)联系(关系)到关系模式的转换,1)实体到关系模式的转换,规则:将实体的名称作为关系的名称,将实体的属性作为关系的属性,并用下划线标识出主属性。,student(sNo,sName,sex,age),表示student关系,其中sNo为主键。course(cNo,cName,credits),表示course关系,其中cNo为主键。,2)联系到关系模式的转换1:1,若实体间联系是1:1,可以在两个实体转换成的两个关系模式后,然后在其中任意一个关系模式的属性集中加入另一个关系模式的主键和联系自身的属性。也就是说1:1联系不单独转换为一个独立的关系。,2)联系到关系模式的转换1:N,若实体间联系是1:N,则在N端实体转换成的关系模式中加入1端实体的主键和联系的属性。同样1:N联系也不独立构成一个关系。,工作,二元关系,2)联系到关系模式的转换M:N,若实体间联系是M:N,则将联系转换成一个关系模式,其属性为两端实体的主键加上联系自身的属性,而联系关系的主键为一复合键,通常是两端实体主键的组合。,对于“学生选课”E/R图的课程和学生之间的多对多的联系,可转换成关系模式:take(sNo,cNo,grade)主键为复合键sNo,cNo。,例:,关系数据库的组织,表1表2表3,DB,ColumnorField,Record,SQL2000字段类型,CharvarcharintdateTime,字段的属性请与Insert,字段长度对于字符类型,例如char和varchar,定义字段的同时可以指定字段存放的字符的个数,例如定义姓名字段为namevarchar(20),表示该字段最多存放20个字符。数值型的字段,除了decimal由用户自己定义长度和小数位数外,其他的如int,float等,系统自定义其占用的字节数。小数位数用于decimal和货币类型的字段标识种子用于数据库表的记录号的自动增加,经常用于做表中记录的主键。用于整型数值.默认值当表中新增加一个记录时,又不想具体指定某个字段的值。可以给它一个默认的值。非空限制用于限制字段的值不能为空,例如学生的姓名字段,每一个记录都必须有值,因为学生不能没有名字。索引对字段进行索引,可以通过设定该字段为查询条件来加快数据的检索速度和统计、分组的速度。关键字关系模式中的主键,用于唯一标识数据库表中的记录。,简单的SQL查询语句Select,SELECT字段1,字段2,|*FROM表名WHERE条件表达式,结构化查询语言SQL,SQL语言是一种关系数据库语言,是结构化查询语言(StructuredQueryLanguage)的缩写,它包括查询定义操纵控制SQL的使用方法有两种用户交互的方式联机使用,称为交互式SQL;另一种是作为子语言嵌入到其他程序设计语言中使用,称为嵌入式SQL。,SQL表达式,SQL的表达式可分为两类:值表达式逻辑表达式。值表达式包括几种:数值表达式:实现数值型数据的算术运算;字串值表达式完成了字串的操作;日期时间值表达式处理日期时间数据。逻辑运算包括与(AND)、或(OR)、否(NOT)。SQL还提供了比较谓词(=、!=、=)、范围谓词(IN、LIKE、IS)和存在谓词(EXIST)。,函数,SQL内置函数有三类:统计函数:COUNT、SUM、AVG、MAX和MIN字串处理函数len,substring(studentName,1,2)大小写转换函数(Upper,Lower)时间日期处理函数。时间日期处理函数用于返回当前的日期与时间。常用的有三个:getDate(返回当前日期时间)。Year,Month,Day函数,数据检索语句select,语法格式为:SELECTALL|DISTINCT目标列FROM基本表(或视图)as表别名WHERE条件表达式GROUPBY列名HAVING条件表达式ORDERBY列名ASC/DESC说明DISTINCT为去掉查询结果中重复的行,默认为ALL,既列出所有的记录;目标列的格式可以写为:列名1as别名1,列名nas别名n,省略别名,返回的结果集中以列名标记,否则以别名标记,如果目标列用*表示,则返回表中的所有的列;From子句指明了从那些表或视图中得到数据,所有的列名都必须存在于From后的表中,或出现于leftjoin,innerjoin,fullouterjoin之后的表,如果列名存在于From后的多个表中,则必须标明该列来源于哪个表,格式为表名.列名;目标列可以是SQL中的库函数或常数表达式。如Sum、Count、Avg等函数。,Select语句,Where子句有双重作用,一是返回需要的记录,另一种是建立多表之间的内连接联合查询。GROUPBY用来对查询结果进行分组,把某一列值相同的记录分成一组,与统计函数如Sum、Count等联合使用;在有Group子句时,可以进一步使用HAVING子句对分组后的记过进行过滤显示,是分组提取条件;ORDERBY是查询结果的排序方式,后面跟ASC为升序,DESC为降序,默认为升序。,关系实例,学生表tblStudent课程表tblCourse学生修课表tblSelectCourse,SQL例,例1:查看学生表中的全部数据,即列出所有的学生Select*fromtblStudent这里*代表表中所有的列,上述的语句等价如下的语句:SelectstudentNo,studentName,birthday,sexFromtblStudent这时,表中有多少条记录,数据库系统就列出多少条记录。,Where子句子,例2:查询学生表tblStudent中的全部女生的学号、姓名和年龄SelectstudentNo,studentName,birthdayfromtblStudentwheresex=女例3:查询学生修课表中成绩大于80分的学生:Select*fromtblSelectCoursewherescore80在where条件中,可以使用逻辑运算符和比较关系符,包括:=、!=、=。也可以使用关键字,如:between、like、in等。注意,如果值是字符串或者字符、日期类型的,就要用单引号把它括起来,例如例2中的where条件。例4查询操作系统成绩在70到80之间的学生的学号selectstudentNofromtblSelectCoursewherescorebetween70and80andcourseNo=J003,日期型数据处理,罗列出每个同学的年龄现在有了生日,当前日期可以用getDate()函数获得,日期型字段的年份可以用Year函数获得Selectyear(getDate()-year(birthday)FromtblStudent,orderby子句,例5:查询02级学生的选课信息,按学号从小到大排列。由于学号的头两位代表学生的年级,所以可以这么完成SQL语句的编写:SelectstudentNo,courseNofromtblSelectCoursewherestudentNolike02%orderbystudentNo这里%代表任意个字符。,groupby和Having子句,例6:求每个学生的课程总分(大于260分的同学罗列)Selectsc.studentNo,studentName,sum(score)astotfromtblSelectCoursesc,tblStudentswheres.studentNo=sc.studentNogroupbysc.studentNo,studentNamehavingsum(score)260改为havingtot260对不对?例7:列出选修课程大于等于三门课程的学生,并按学号排序selects.studentName,sc.studentNo,count(*)ascoursesfromtblStudents,tblSelectCoursescwheresc.studentNo=s.studentNogroupbysc.studentNo,s.studentNamehavingcount(*)=3orderbysc.studentNo,内连接查询,例8查找软件开发课程成绩在80分以上的学生的姓名、学号、年龄以及具体成绩。分析:直接观察表tblSelectCourse和tblStudent,可以发现,通过tblSelectCourse可以得到学生的学号,但无法得到学生的名字和年龄,但缺少的信息可以通过表tblStudent得到,表tblStudent和tblSelectCourse的studentNo如果统一起来,就可以唯一得到所需要的信息Selects.studentNo,studentName,year(getDate()-year(birthday),scorefromtblStudents,tblSelectCoursescwheres.studentNo=sc.studentNoandcourseNo=J001andscore80,例8的另外的写法,Selects.studentNo,studentName,birthday,scorefromtblStudentsinnerjointblSelectCoursescons.studentNo=sc.studentNowherecourseNo=J001andscore80,嵌套查询,例9:找出成绩(不分课程)大于80分的学生的姓名SelectstudentNamefromtblStudentwherestudentNoin(selectstudentNofromtblSelectCoursewherescore80)这里,selectstudentNofromscwherescore80返回一个集合,第二个查询使用In关键字,判定表S中的studentNo是否在返回结果集中。,左连接查询,问题:班主任查询班级学生某门课的成绩表,如果一个学生没选该课程,用内连接查询能得到什么结果?,学生表tblStudent课程表tblCourse学生修课表tblSelectCourse,左连接查询Leftjoin,SelectstudentName,a.studentNo,b.courseNo,courseNameFromtblStudentaLeftjointblSelectCoursebon(a.studentNo=b.studentNoAndb.courseNo=F001)LeftjointblCourseconb.courseNo=c.courseNo,什么时候用左连接,左表在右表中对应的记录可能有,也可能没有的情况下,,SQL数据更新语句,语法数据更新语句UpdateSQL的数据更新语句Update修改表中原有的数据记录与Select语句不同,Update语句不存在多表联合操作,每个语句一次只能针对一个表。Update语法格式为:update表set字段名=表达式,字段名=表达式,.where条件,Update例子,例11:将所有学生的年龄加1岁updatetblStudentsetage=age+1例12:将学号为011101的学生的J01课程成绩加5分updatetblSelectCoursesetscore=score+5wherestudentNo=011101andcourseNo=J01,插入新记录语句Insert,语法inser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力发展不停步
- 新闻联播中的新质生产力解读
- 新质生产力与新的生产关系
- 情人节的活动策划方案(标准模版)
- 2025年呼吸内科慢性阻塞性肺疾病诊疗方案考核答案及解析
- 2025年心脏病学患者的护理综合测试卷答案及解析
- 2025年呼吸内科重症病例处理演练答案及解析
- 2025年小儿外科手术术前术后护理综合评估试题答案及解析
- 2025年精神科抑郁症患者心理干预策略测试答案及解析
- 新质生产力重点发展领域解析
- 总装工艺基础知识培训课件
- 2025年血透室透析液污染应急预案演练脚本
- 医院空气净化管理标准解析
- 风机噪声控制材料研究及使用方法
- 吴伯萧名篇阅读理解与教学设计
- 仓库基础知识培训教材课件
- 曲臂式高空作业车专项施工方案
- 各阶段样件管理办法
- 2025秋人教统编版二年级语文上册第一单元语文园地一【教案】
- SOP考试题及答案
- 2025年服务行业技能考试-电教员历年参考题库含答案解析(5套100道单选题合辑)
评论
0/150
提交评论