版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据库技术第五章第五章1数据库设计过程E/R图到关系模式的转换关系模式的规范化需求分析概念模式设计逻辑模式设计数据库实施E/R图UMLRDBMS模式存储模式数据库运行和维护数据库设计过程E/R图到关系模式的转换关系模式的规范化需求分2什么是概念数据建模对系统中数据的描述描述类间的各种关系什么是概念数据建模对系统中数据的描述3概念数据建模过程概念数据建模过程4概念数据建模方法UMLER概念数据建模方法UML5概念数据建模---UML类被表示为由3个部分组成的矩形上面部分给出了类的名称,类名用粗体,背景颜色较深。中间部分给出了该类对象的属性。下面部分给出了对象的约束条件以及可以应用到这些对象的操作。其中第二和第三个部分之间,用一条线间隔开来。概念数据建模---UML类被表示为由3个部分组成的矩形6UML例子UML例子7UML关系表达关系是一个或多个类的对象之间的语义连接一个关系可以是因为实体之间的自然联系而造成的结果,例如,一个教师属于某一个院系;也可能是由于发生了某一个事件,例如一个学生选了某门课。UML关系表达关系是一个或多个类的对象之间的语义连接8关系的度(或元数)参与一个关系的类的数目关系的度(或元数)参与一个关系的类的数目9一元关系一元关系10二元关系二元关系11关系的重数一个类的对象与另一个类的对象存在的数目上的关系0..1:表示最小值是0,最大值是1。*(或0..*):表示范围从0到无穷大。0..n:最小为0,最大为n。单个1:代表1..1,表示关系中参与的对象数目恰好是1关系的重数一个类的对象与另一个类的对象存在的数目上的关系12关系的重数举例关系的重数举例13关联关联是一种关系关联的2个类间产生属性关联关联是一种关系14概念模式设计—ER图实体联系模型(Entity-RelationshipModel,简称E-R模型)P.P.Chen于1976年在“TheEntity-RelationshipModel:TowardaUnifiedViewofData”,ACMTransactionsonDatabaseSystems,Vol1,Num1(1976).论文中提出的。模型直接从现实世界中抽象出实体类型及实体联系.用实体联系图即E-R表示数据模型。其核心就是设计E-R图(Entity-RelationshipDiagram)。概念模式设计—ER图实体联系模型(Entity-Relati15E-R模型的基本概念
实体(entity):客观存在,可以相互区别的事物称为实体。实体集(entityset):性质相同的同类实体的集合,称实体集。
属性(attribute):实体有很多特性,每一个特性称为属性。每一个属性有一个值域,其类型可以是整数型、实数型、字符串型等。
实体标识符(identifier):能惟一标识实体的属性或属性集,称为实体标识符。有时也称为关键码(key),或简称为键。
联系(relationship)是实体之间的相互关系。
数据模型:能表示实体类型及实体间联系的模型称为“数据模型”。
E-R模型的基本概念实体(entity):客观存在,可以相16实体表达实体表达17E-R图的基本组成部分
E/R图有四个主要部分:(1)实体集,用矩形表示。(2)属性,用椭圆形表示。(3)联系,用菱形表示。(4)直线,表示联系的类型及实体与实体之间的联系;E-R图的基本组成部分E/R图有四个主要部分:18数据联系
联系(relationship)是实体之间的相互关系。二元联系有以下三种类型:一对一联系:实体集E1中每个实体至多和实体集E2中的一个实体有联系,反之亦然,那么实体集E1和E2的联系称为“一对一联系”,记为“1:1”。一对多联系:实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体间有联系,而E2中每个实体至多和E1中一个实体有联系,那么称E1对E2的联系是“一对多联系”,记为“1:N”。多对多联系:如果实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么称E1和E2的联系是“多对多联系”,记为“M:N”。数据联系联系(relationship)是实体之间的相互关19三种联系的E-R图实体1实体2联系实体1实体2联系实体1实体2联系
1﹕1联系1﹕n联系m﹕n联系三种联系的E-R图实体1实体2联系实体1实体2联系实体1实体20三种联系的E-R图实例客人飞机座位号联系院系教师联系课程学生联系
1﹕1联系1﹕n联系m﹕n联系三种联系的E-R图实例客人飞机座位号联系院系教师联系课程学生21E-R图实例例:设计一个学生选课数据库。要求包括学生(student)、课程(course)和教师(teacher)的信息。
实体中存在如下联系:一个学生可以选修多门课,而每门课也能由多个学生选修;一位教师可以教多门课,每门课也可以由多个教师讲授;用E-R图来描述此数据库。
学生信息:学号(no)、学生姓名(name)、年龄(age)、地址(dddress)课程信息:课程号(no)、课程名(name)、课程学分(credits)教师信息:工号(no)、姓名(name)、教师的地址(address)E-R图实例例:设计一个学生选课数据库。要求包括学生(stu22学生-课程-教师E-R图studentcourseteachertaketeach注意:如果一个联系具有属性,则这些属性也与该联系连接起来。TeachCourseNo学生-课程-教师E-R图studentcourseteach23条码白酒容量度数编号销售商联系人地址电话名称销售数量单价E-R图实例白酒销售条码白酒容量度数编号销售商联系人地址电话名称销售数量单价E-24
IBM研究员E.F.Codd(EdgarFrankCodd,1924-2003)于1970发表了业界第一篇关于关系数据库理论的论文“ARelationalModelofDataforLargeSharedDataBanks”,首次提出了关系模型的概念。这篇论文是计算机科学史上最重要的论文之一,也奠定了Codd博士“关系数据库之父”的地位。E.F.Codd因此获得ACM图灵奖(1981年)。关系数据模型IBM研究员E.F.Codd(EdgarFra25关系描述关系名(关键属性,属性1,属性2,……,属性N)Student(studentNo,studentName,birthday,sex)关系描述关系名(关键属性,属性1,属性2,……,属性N)26关系基本概念关系:对应通常所说的二维表。元组:表中的一行即为一个元组属性:表中的一列即为一个属性,例如下表有4列,就有4个属性(studentNo,studentName,birthday,sex)。主键:表中的某个属性组(可以多属性组合成主键),它可以唯一确定一个元组,例如,studentNo可以唯一确定一个学生,也就成为学生关系的主键;域:属性的取值范围,例如,大学生性别域是(男,女);分量:元组中的一个属性个数。例如,学生关系分量为4。关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,……,属性N)。关系基本概念关系:对应通常所说的二维表。27关系模型实例关系关系名关系模型实例关系关系名28元组:表中的一行即为一个元组或记录;字段:表中的一列,列值称为字段值,列名称为字段名值域:字段值的取值范围元组(记录)属性(字段)元组:表中的一行即为一个元组或记录;元组(记录)属性(字29主键:能唯一标识一个元组的属性集合。外键:若属性组F不是关系R1的主键,但它是关系R2的主 键,则F称是关系R1的外键。主键主键外键主键:能唯一标识一个元组的属性集合。主键主键外键30关系模型查询的实现通过关联表的方式实现关系模型查询的实现通过关联表的方式实现31良构关系良构关系包含最小的数据冗余,允许操作者插入、删除、修改表中的行而不会引起错误或数据的不一致良构关系良构关系包含最小的数据冗余,32良构关系--关系的规范化1、问题学生选课表SNoSNameSDeptMnameCNamegrade991230贺小华计算机周至光数据库96991239金谦计算机周至光操作系统90991239金谦计算机周至光编译原理92993851陈刚建筑王勇建筑原理89992076吕宋自动化李霞自动化设计85992076吕宋自动化李霞电路原理82数据冗余修改异常插入异常删除异常良构关系--关系的规范化1、问题学生选课表SNoSName33学号课程学分
100人工智能3125文化学2150市场营销学2175人工智能3190文化学2更新异常:删除学号为150的学生的选课记录,丢掉了学生150 选修“市场营销学”的事实,还失去了“市场营销学” 的学分是2的事实。插入异常:若有一门“法律”课,学分为3,但无学生选修时, 不能输入。学号课程学分更新异常:34消除异常的方法:模式分解若将以上的学生关系分解成学生-选课、课程-学分关系,更新异常、插入异常就都可消除了,对关系进行分解的过程就是规范化过程。学号课程100人工智能125文化学150市场营销175人工智能190文化学课程学分人工智能3文化学2市场营销2学生选课关系课程学分关系消除异常的方法:模式分解若将以上的学生关系分解成学生35属性间有三种联系
1)函数依赖:给定一个属性的值,可以获得另一个属性的值。例如,若已知“课程名”的值,便可知道“授课学时”。“授课学时”依赖于“课程名”,或“课程名”决定“授课学时”。记作“课程名→授课学时”。 436面向对象X002354数值分析X001672编译原理Z006572操作系统Z004254C程序设计J003672数据库J001授课学期授课学时课程名课程号属性间有三种联系
1)函数依赖:给定一个属性的值,可以获得362)部分依赖:下表的主键是属性集合{学号,课程号}。主键{学号,课程号}决定了“学分”的值。但“学分”只由“课程号”决定,与“学号”无关,也就是“学分”属性只由主键{学号,课程号}的一部分而不是全部来决定,把这种依赖称为部分依赖。记作“学分→{学号,课程号}”。学号姓名课程号课程名学分0100101李灿J01数据库40100101李灿J04操作系统40100101李灿L02数值算法30100201张简J01数据库40100101李灿J04操作系统40200301张名F09德语60100201张简F09德语62)部分依赖:下表的主键是属性集合{学号,课程号}。主键{373)传递依赖:下表的主键是“学号”,学生住宿的楼号依赖于学号。但是,学生应交的住宿费是由楼号决定的,也就是说,“收费”依赖于“楼号”,这是一种新的依赖关系:“楼号”依赖于“学号”,而“收费”又依赖于“楼号”。一般把这种依赖关系称为“传递依赖”。记作“学号→收费”。80081506004120500213050021002楼号500
180收费学号3)传递依赖:下表的主键是“学号”,学生住宿的楼号依赖于学381)第一范式(FirstNormalForm,1NF)
定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则关系R属于第一范式。注意:集合、数组和结构都不能为第一范式关系中属性的类型。符合第一范式的关系可能有插入、删除异常。例如:在关系“选课”中,存在着部分依赖:学分→{学号,课程号}
将导致插入、删除异常。p1)第一范式(FirstNormalForm,1NF)
392)第二范式(
SecondNormalForm,2NF
)
定义:若关系模式R属于第一范式,且每个非主属性都完全函数依赖于主键,则R属于第二范式。注意:单个属性作为主键的关系自动就是第二范式。第二范式中的关系存在更新异常.
例如:(学号、楼号、收费),虽然学号是单属性主键,属于第二范式,而楼号、收费都由学号决定,存在传递依赖关系:“学号→收费”将导致更新异常。t2)第二范式(SecondNormalForm,2NF403)第三范式定义:如果一个关系R是第二范式的,并且每个非主属性都不传递依赖于主键,则R属于第三范式。例如:学生住宿关系可以分解为两个关系:学生-楼号关系(学号,楼号)和楼号-收费关系(楼号,收费)。这两个关系属于第三范式。
学号楼号10021204130215081802楼号收费250046002500880025003)第三范式定义:如果一个关系R是第二范式的,并且每个非主属41UML到关系模型的转换—类转换系模式名就是类名,关系模式的属性由原类中的各属性组成,关系模式的主键就是原类的主键Student(studentNo,studentName,sex,birthday)UML到关系模型的转换—类转换系模式名就是类名,关系模式的属42UML到关系模型的转换—关系转换1:1关联
(二元关系重数=1:1)两个类转换成两个关系模式在其中任意一个关系模式的属性集中加入另一个关系模式的主键1:N关联
(二元关系重数=1:N)两个类转换成两个关系模式在N端的类转换成的关系模式中加入1端关系模式的主键UML到关系模型的转换—关系转换1:1关联(二元关系重数431:N关联转换实例
Teacher(TeacherId,teacherName,sex)Deaprtment(DeptId,deptName,location)Teacher(TeacherId,teacherName,sex,deptId)1:N关联转换实例
Teacher(TeacherId,44UML到关系模型的转换—关联类关联两端的对象各转换成一个关系模式关联本身也产生一个关系模式,其主键用关联两端对象的主键形成复合键UML到关系模型的转换—关联类关联两端的对象各转换成一个关系45关联类转换实例Student(studentNo,…..)Course(courseNo,……)selectCourse(studentNo,courseNo,grade)关联类转换实例Student(studentNo,…..)464、E-R模型到关系模式的转换1)实体(对象)到关系模式的转换2)联系(关系)到关系模式的转换4、E-R模型到关系模式的转换1)实体(对象)到关系模式的转471)实体到关系模式的转换
规则:将实体的名称作为关系的名称,将实体的属性作为关系的属性,并用下划线标识出主属性。
studentcoursetakesNosnamesaddressage
cNo
cnamecreditsgradestudent(sNo,sName,sex,age),表示student关系,其中sNo为主键。course(cNo,cName,credits),表示course关系,其中cNo为主键。1)实体到关系模式的转换规则:studentcourse482)联系到关系模式的转换1:1若实体间联系是1:1,可以在两个实体转换成的两个关系模式后,然后在其中任意一个关系模式的属性集中加入另一个关系模式的主键和联系自身的属性。也就是说1:1联系不单独转换为一个独立的关系。2)联系到关系模式的转换1:1若实体间联系是1:1,可492)联系到关系模式的转换1:N若实体间联系是1:N,则在N端实体转换成的关系模式中加入1端实体的主键和联系的属性。同样1:N联系也不独立构成一个关系。Teacher<<PK>>teacherIdteacherNamesexDepartment<<PK>>DepartmentIddeptNamelocation工作二元关系2)联系到关系模式的转换1:N若实体间联系是1:N,则502)联系到关系模式的转换M:N若实体间联系是M:N,则将联系转换成一个关系模式,其属性为两端实体的主键加上联系自身的属性,而联系关系的主键为一复合键,通常是两端实体主键的组合。
2)联系到关系模式的转换M:N若实体间联系是M:N,则将51对于“学生选课”E/R图的课程和学生之间的多对多的联系,可转换成关系模式:
take(sNo,cNo,grade)主键为复合键{sNo,cNo}。
studentcoursetakesNosnamesaddressage
cNo
cnamecreditsgrade例:对于“学生选课”E/R图的课程和学生之间的多对多的联系,可转52关系的完整性域完整性
实体完整性
参照完整性
关系的完整性域完整性53关系数据库的组织表1表2表3DBColumnorFieldRecord关系数据库的组织表1DBColumnorFieldRec54
SQL2000数据库的组成关系图表视图存储过程用户角色
SQL2000数据库的组成关系图55SQL2000创建数据库执行“开始”“程序”“MicrosoftSQLServer”“企业管理器”后,进入SQLServer管理
在窗口的左边展开数据库,右击数据库项目列表的空白处,在弹出的菜单中选择“新建数据库”,出现“数据库属性”窗口,在该窗口的“常规”选项卡上,输入数据库的名字,例如:ScoreManager。
作业创建数据库ScoreManagerSQL2000创建数据库执行“开始”“程序”“Micr56SQL2000字段类型数据类型描述binarybinary用来存储固定格式长度的二进制数据,最多存储8k字节varbinaryvarbinary用来存储可变长度的二进制数据,最多存储8k字节imageImage用来存储超过8k的可变长度的二进制数据,如word、bmp,程序中定义的类对象。char存储固定长度的字符类型的数据,(<=8k),实际定义varcharvarchar存储可变长度的字符数据,(<=8k)textText用来存储大于8k的ASCII字符。DatatimeDatetime是日期类型,存储从1753年1月1日-9999年12月31日的日期smalldatetime存储1900-1-1到2079-6-6的日期。bigint8字节长整型int4字节整型,表达范围是-2147483648-2147483647。smallint2字节整型tinyint一字节整型Float浮点数,在计算机里面的表达是一个近似植,例如1.683可能表达为1.682999999999decimal浮点数,但表达是一个精确的值money货币类型,8字节smallmoney货币类型,4个字节bit占用一个二进制的位,经常作为布尔类型使用smalldatetimeSQL2000字段类型数据类型描述binarybinary57二战四巨头富兰克林·德拉诺·罗斯福约瑟夫·维萨里昂诺维奇·斯大林温斯顿·伦纳德·斯宾塞·丘吉尔蒋介石二战四巨头58字段的属性字段长度对于字符类型,例如char和varchar,定义字段的同时可以指定字段存放的字符的个数,例如定义姓名字段为namevarchar(20),表示该字段最多存放20个字符。数值型的字段,除了decimal由用户自己定义长度和小数位数外,其他的如int,float等,系统自定义其占用的字节数。小数位数用于decimal和货币类型的字段标识种子用于数据库表的记录号的自动增加,经常用于做表中记录的主键。用于整型数值.默认值当表中新增加一个记录时,又不想具体指定某个字段的值。可以给它一个默认的值。非空限制用于限制字段的值不能为空,例如学生的姓名字段,每一个记录都必须有值,因为学生不能没有名字。索引对字段进行索引,可以通过设定该字段为查询条件来加快数据的检索速度和统计、分组的速度。关键字关系模式中的主键,用于唯一标识数据库表中的记录。字段的属性字段长度对于字符类型,例如char和var59进入企业管理器展开数据库,展开表右键,选择创建表输入字段名,确定每个字段的类型保存,为表起名作业:在scoreManager中创建上表字段的属性和约束该如何定义?studentNostudentNamecourseNocourseNamegrade010101李灿J01数据库99010101李灿J04操作系统89010101李灿L02数值算法78010201张简J01数据库78010101李灿J04操作系统91020301张名F09德语98010201张简F09德语100Tablet_studentVsCourse创建表作业进入企业管理器studentNostudentNamecou60展开数据库,然后用鼠标右击ScoreManager数据库选择所有任务生成SQL脚本。出现图导出SQL脚本对话框在”常规”卡上,用鼠标点击”全部显示”按钮,然后选中”编写全部对象”复选框。在“设置格式”卡中,一般选择”为每个对象生成Create命令”和”为每个对象生成Drop命令”两项就可以。在“选项”卡上,根据需要,把“表脚本选项”下的选择项都选中最后选择“确定”按钮,输入脚本的名字作业:上交你创建的数据库scoreManager的SQL脚本.创建三个符合设计规范的表。并输入数据内容,自己保存数据库的备份,待以后使用获得数据库的SQL脚本***展开数据库,然后用鼠标右击ScoreManager数据库获得61用脚本迅速恢复数据库***先创建数据库进入查询分析器把脚本调入到查询分析器执行,恢复数据库用脚本迅速恢复数据库***先创建数据库62简单的SQL查询语句Select
SELECT字段1,字段2,…|*FROM表名WHERE条件表达式简单的SQL查询语句SelectSELECT63在查询分析器中执行SQL语句从开始菜单进入查询分析器选择数据库输入Select语句执行在查询分析器中执行SQL语句从开始菜单进入查询分析器64学生课程成绩表??有何缺陷Tablet_studentVsCoursestudentNostudentNamecourseNocourseNamegrade010101李灿J01数据库81010101李灿J04操作系统62020301张简F09德语92学生课程成绩表??有何缺陷Tablet_studen65建立符合范式的表(作业内容)studentNonamebirthdaysexcourseNocourseNamestudentNocourseNoscore030318古待1986-1-2女S01高数一020301F0998020301张名1989-1-1男L02数值算法010101L0278010201张简1981-2-2女J04操作系统010101J0489030501许昌1987-9-8男F09德语010201J0179030502刘放1988-1-9男F01日语010101J0491010101李灿1981-9-2男J01数据库010101J0199010503顾争1988-2-7男020002郭洁1988-1-5女学生表tblStudent课程表tblCourse学生修课表tblSelectCourse建立符合范式的表(作业内容)studentNonamebir66结构化查询语言——SQLSQL语言是一种关系数据库语言,是结构化查询语言(StructuredQueryLanguage)的缩写,它包括查询定义操纵控制SQL的使用方法有两种用户交互的方式联机使用,称为交互式SQL;另一种是作为子语言嵌入到其他程序设计语言中使用,称为嵌入式SQL。结构化查询语言——SQLSQL语言是一种关系数据库语言,是结67SQL表达式SQL的表达式可分为两类:值表达式值表达式包括几种:数值表达式:实现数值型数据的算术运算;字串值表达式完成了字串的操作;日期时间值表达式处理日期时间数据。2.逻辑表达式。逻辑运算包括与(AND)、或(OR)、否(NOT)。比较谓词(=、〈、〉、!=、<=、>=)、范围谓词(IN、LIKE、IS)和存在谓词(EXIST)。SQL表达式SQL的表达式可分为两类:68函数SQL内置函数有三类:统计函数:COUNT、SUM、AVG、MAX和MIN字串处理函数len,substring(studentName,1,2)大小写转换函数(Upper,Lower)时间日期处理函数。getDate(返回当前日期时间)。Year(dateTime类型字段)Month(dateTime类型字段)Day(dateTime类型字段)函数SQL内置函数有三类:69数据检索语句—select语法格式为:
SELECT[ALL|DISTINCT]目标列FROM表1[,表2,表n](或视图)[as表别名][inner|Left|right|fullouterjoin表on关系表达式][WHERE条件表达式][GROUPBY列名[HAVING条件表达式]][ORDERBY列名[ASC/DESC]]说明
DISTINCT为去掉查询结果中重复的行,默认为ALL,既列出所有的记录;目标列的格式可以写为:列名1[as别名1],列名n[as别名n],省略别名,返回的结果集中以列名标记,否则以别名标记,如果目标列用*表示,则返回表中的所有的列;From子句指明了从那些表或视图中得到数据,所有的列名都必须存在于From后的表中,或出现于leftjoin,innerjoin,fullouterjoin之后的表,如果列名存在于From后的多个表中,则必须标明该列来源于哪个表,格式为表名.列名;目标列可以是SQL中的库函数或常数表达式。如Sum、Count、Avg等函数。数据检索语句—select语法格式为:70Select语句Where子句有双重作用,一是返回需要的记录,另一种是建立多表之间的内连接联合查询。
GROUPBY用来对查询结果进行分组,把某一列值相同的记录分成一组,与统计函数如Sum、Count等联合使用;在有Group子句时,可以进一步使用HAVING子句对分组后的记过进行过滤显示,是分组提取条件;ORDERBY是查询结果的排序方式,后面跟ASC为升序,DESC为降序,默认为升序。Select语句Where子句有双重作用,一是返回需要71关系实例studentNonamebirthdaysexcourseNocourseNamestudentNocourseNoscore030318古待1986-1-2女S01高数一020301F0998020301张名1989-1-1男L02数值算法010101L0278010201张简1981-2-2女J04操作系统010101J0489030501许昌1987-9-8男F09德语010201J0179030502刘放1988-1-9男F01日语010101J0491010101李灿1981-9-2男J01数据库010101J0199010503顾争1988-2-7男020002郭洁1988-1-5女学生表tblStudent课程表tblCourse学生修课表tblSelectCourse关系实例studentNonamebirthdaysexco72SQL例例1:查看学生表中的全部数据,即列出所有的学生Select*fromtblStudent这里*代表表中所有的列,上述的语句等价如下的语句:SelectstudentNo,studentName,birthday,sexFromtblStudent这时,表中有多少条记录,数据库系统就列出多少条记录。SQL例例1:查看学生表中的全部数据,即列出所有的学生73Where子句子例2:查询学生表tblStudent中的全部女生的学号、姓名和年龄SelectstudentNo,studentName,birthdayfromtblStudentwheresex='女'
例3:查询学生修课表中成绩大于80分的学生:Select*fromtblSelectCoursewherescore>80在where条件中,可以使用逻辑运算符和比较关系符,包括:=、!=、<、<=、>、>=。也可以使用关键字,如:between、like、in等。注意,如果值是字符串或者字符、日期类型的,就要用单引号把它括起来,例如例2中的where条件。
例4
查询操作系统成绩在70到80之间的学生的学号selectstudentNofromtblSelectCoursewherescorebetween70and80andcourseNo='J003'Where子句子例2:查询学生表tblStudent中的全部74日期型数据处理罗列出每个同学的年龄现在有了生日,当前日期可以用getDate()函数获得,日期型字段的年份可以用Year函数获得Selectyear(getDate())-year(birthday)FromtblStudent日期型数据处理罗列出每个同学的年龄75orderby子句
例5:查询02级学生的选课信息,按学号从小到大排列。由于学号的头两位代表学生的年级,所以可以这么完成SQL语句的编写:SelectstudentNo,courseNofromtblSelectCoursewherestudentNolike'02%'orderbystudentNo这里%代表任意个字符。orderby子句例5:查询02级学生的选课信息,按学76分组groupby例6:求每个学生的课程总分Selectsc.studentNo,studentName,sum(score)astotfromtblSelectCoursesc,tblStudentswheres.studentNo=sc.studentNogroupbysc.studentNo,studentName问题:统计男女生人数怎么求?分组groupby例6:求每个学生的课程总分77groupby和Having子句
例6:求每个学生的课程总分(大于260分的同学罗列)Selectsc.studentNo,studentName,sum(score)astotfromtblSelectCoursesc,tblStudentswheres.studentNo=sc.studentNogroupbysc.studentNo,studentNamehavingsum(score)>260改为havingtot>260对不对?请你去测试一下!例7:列出选修课程大于等于三门课程的学生,并按学号排序selects.studentName,sc.studentNo,count(*)ascoursesfromtblStudents,tblSelectCoursescwheresc.studentNo=s.studentNogroupbysc.studentNo,s.studentNamehavingcount(*)>=3orderbysc.studentNogroupby和Having子句例6:求每个学生的课程78内连接查询
例8
查找高数一成绩在80分以上的学生的姓名、学号、年龄以及具体成绩。分析:分析tblSelectCourse和tblStudent,通过tblSelectCourse可以得到学生的学号,但无法得到学生的名字和年龄,但缺少的信息可以通过表tblStudent得到,表tblStudent和tblSelectCourse的studentNo如果统一起来,就可以唯一得到所需要的信息
Selects.studentNo,studentName,year(getDate()-year(birthday)),scorefromtblStudents,tblSelectCoursescwheres.studentNo=sc.studentNoandcourseNo='S01'andscore>80内连接查询例8查找高数一成绩在80分以上的学生的姓名、学79例8的另外的写法Selects.studentNo,studentName,birthday,scorefromtblStudentsinnerjointblSelectCoursescons.studentNo=sc.studentNowherecourseNo='S01'andscore>80例8的另外的写法Selects.studentNo,st80嵌套查询
例9:找出成绩(不分课程)大于80分的学生的姓名SelectstudentNamefromtblStudentwherestudentNoin(selectstudentNofromtblSelectCoursewherescore>80)这里,selectstudentNofromscwherescore>80返回一个集合,第二个查询使用In关键字,判定表S中的studentNo是否在返回结果集中。嵌套查询例9:找出成绩(不分课程)大于80分的学生的姓名81关于分页查询Selecttop5studentNo,studentNameFromtblStudentwherestudentNonotin(selecttop5studentNofromtblstudent)这样的语句就能翻到下一页关于分页查询Selecttop5studentNo,s82左连接查询问题:班主任查询班级学生某门课的成绩表,如果一个学生没选该课程,用内连接查询能得到什么结果?studentNonamebirthdaysexcourseNocourseNamestudentNocourseNoscore030318古待1986-1-2女S01高数一020301F0998020301张名1989-1-1男L02数值算法010101L0278010201张简1981-2-2女J04操作系统010101J0489030501许昌1987-9-8男F09德语010201J0179030502刘放1988-1-9男F01日语010101J0491010101李灿1981-9-2男J01数据库010101J0199010503顾争1988-2-7男020002郭洁1988-1-5女学生表tblStudent课程表tblCourse学生修课表tblSelectCourse左连接查询问题:班主任查询班级学生某门课的成绩表,如果一个学83左连接查询LeftjoinSelectstudentName,a.studentNo,b.courseNo,courseNameFromtblStudentaLeftjointblSelectCoursebon(a.studentNo=b.studentNoAndb.courseNo='F001')LeftjointblCourseconb.courseNo=c.courseNo左连接查询LeftjoinSelectstudent84什么时候用左连接左表在右表中对应的记录可能有,也可能没有的情况下,什么时候用左连接左表在右表中对应的记录可能有,也可能没有的情85SQL数据更新语句
语法数据更新语句UpdateSQL的数据更新语句Update修改表中原有的数据记录与Select语句不同,Update语句不存在多表联合操作,每个语句一次只能针对一个表。Update语法格式为:update表set字段名=表达式[,字段名=表达式,….][where条件]SQL数据更新语句语法86Update例子例
11:将所有学生的年龄加1岁updatetblStudentsetage=age+1
例12:将学号为011101的学生的J01课程成绩加5分updatetblSelectCoursesetscore=score+5wherestudentNo='011101'andcourseNo='J01'Update例子例11:将所有学生的年龄加1岁87插入新记录语句
Insert语法insertinto
表名[(字段名,字段名2…)]values(值1[,值2,…值n])注:1、不允许为空的字段,并且没有字段默认值的字段,必须出现在字段列表中.2、如果不写字段名列表,则必须按表结构定义的字段顺序,在values后定义值的序列.3、标识种子字段不用管插入新记录语句Insert语法88Insert举例例13
向学生表中插入一个新同学,数据为0300101,张三,男,21岁
insertintotblStudentvalues('030101','张三',21,'男')比较下例
insertintotblStudent(studentName,studentNo)values('汪于人','980145')放弃了性别和年龄的输入,如果表tblStudent的age和sex字段允许为空,则上面的语句向数据库中插入的记录中,这两个字段的值是Null。如果age和sex有默认值,则取默认值.
例14
向修课表中插入一个新的选课记录,成绩暂时不定
insertintotblSelectCourse(studentNo,courseNo)values('030101','J04')Insert举例例13向学生表中插入一个新同学,数据为89删除记录
delete语法
deletefrom表名[where条件]删除记录delete语法90Delete举例例15
删除表tblSelectCourse中011101的德语选课记录deletefromtblSelectCoursewherestudentNo='010101'andcourseNo='F09'Delete举例例15删除表tblSelectCours91Sql作业写SQL语句将数据库恢复(自己的准备工作)罗列出所有可选的课程的课程号,课程名。罗列出所有学生的姓名、学号,年龄(库里是生日)。罗列出学号、姓名,所选课程的总分,按总分从大到小次序排列。罗列出学号、姓名、课程号、课程名、成绩,按学号从小到大排列Sql作业写SQL语句将数据库恢复(自己的准备工作)92数据库技术第五章第五章93数据库设计过程E/R图到关系模式的转换关系模式的规范化需求分析概念模式设计逻辑模式设计数据库实施E/R图UMLRDBMS模式存储模式数据库运行和维护数据库设计过程E/R图到关系模式的转换关系模式的规范化需求分94什么是概念数据建模对系统中数据的描述描述类间的各种关系什么是概念数据建模对系统中数据的描述95概念数据建模过程概念数据建模过程96概念数据建模方法UMLER概念数据建模方法UML97概念数据建模---UML类被表示为由3个部分组成的矩形上面部分给出了类的名称,类名用粗体,背景颜色较深。中间部分给出了该类对象的属性。下面部分给出了对象的约束条件以及可以应用到这些对象的操作。其中第二和第三个部分之间,用一条线间隔开来。概念数据建模---UML类被表示为由3个部分组成的矩形98UML例子UML例子99UML关系表达关系是一个或多个类的对象之间的语义连接一个关系可以是因为实体之间的自然联系而造成的结果,例如,一个教师属于某一个院系;也可能是由于发生了某一个事件,例如一个学生选了某门课。UML关系表达关系是一个或多个类的对象之间的语义连接100关系的度(或元数)参与一个关系的类的数目关系的度(或元数)参与一个关系的类的数目101一元关系一元关系102二元关系二元关系103关系的重数一个类的对象与另一个类的对象存在的数目上的关系0..1:表示最小值是0,最大值是1。*(或0..*):表示范围从0到无穷大。0..n:最小为0,最大为n。单个1:代表1..1,表示关系中参与的对象数目恰好是1关系的重数一个类的对象与另一个类的对象存在的数目上的关系104关系的重数举例关系的重数举例105关联关联是一种关系关联的2个类间产生属性关联关联是一种关系106概念模式设计—ER图实体联系模型(Entity-RelationshipModel,简称E-R模型)P.P.Chen于1976年在“TheEntity-RelationshipModel:TowardaUnifiedViewofData”,ACMTransactionsonDatabaseSystems,Vol1,Num1(1976).论文中提出的。模型直接从现实世界中抽象出实体类型及实体联系.用实体联系图即E-R表示数据模型。其核心就是设计E-R图(Entity-RelationshipDiagram)。概念模式设计—ER图实体联系模型(Entity-Relati107E-R模型的基本概念
实体(entity):客观存在,可以相互区别的事物称为实体。实体集(entityset):性质相同的同类实体的集合,称实体集。
属性(attribute):实体有很多特性,每一个特性称为属性。每一个属性有一个值域,其类型可以是整数型、实数型、字符串型等。
实体标识符(identifier):能惟一标识实体的属性或属性集,称为实体标识符。有时也称为关键码(key),或简称为键。
联系(relationship)是实体之间的相互关系。
数据模型:能表示实体类型及实体间联系的模型称为“数据模型”。
E-R模型的基本概念实体(entity):客观存在,可以相108实体表达实体表达109E-R图的基本组成部分
E/R图有四个主要部分:(1)实体集,用矩形表示。(2)属性,用椭圆形表示。(3)联系,用菱形表示。(4)直线,表示联系的类型及实体与实体之间的联系;E-R图的基本组成部分E/R图有四个主要部分:110数据联系
联系(relationship)是实体之间的相互关系。二元联系有以下三种类型:一对一联系:实体集E1中每个实体至多和实体集E2中的一个实体有联系,反之亦然,那么实体集E1和E2的联系称为“一对一联系”,记为“1:1”。一对多联系:实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体间有联系,而E2中每个实体至多和E1中一个实体有联系,那么称E1对E2的联系是“一对多联系”,记为“1:N”。多对多联系:如果实体集E1中每个实体可以与实体集E2中任意个(零个或多个)实体有联系,反之亦然,那么称E1和E2的联系是“多对多联系”,记为“M:N”。数据联系联系(relationship)是实体之间的相互关111三种联系的E-R图实体1实体2联系实体1实体2联系实体1实体2联系
1﹕1联系1﹕n联系m﹕n联系三种联系的E-R图实体1实体2联系实体1实体2联系实体1实体112三种联系的E-R图实例客人飞机座位号联系院系教师联系课程学生联系
1﹕1联系1﹕n联系m﹕n联系三种联系的E-R图实例客人飞机座位号联系院系教师联系课程学生113E-R图实例例:设计一个学生选课数据库。要求包括学生(student)、课程(course)和教师(teacher)的信息。
实体中存在如下联系:一个学生可以选修多门课,而每门课也能由多个学生选修;一位教师可以教多门课,每门课也可以由多个教师讲授;用E-R图来描述此数据库。
学生信息:学号(no)、学生姓名(name)、年龄(age)、地址(dddress)课程信息:课程号(no)、课程名(name)、课程学分(credits)教师信息:工号(no)、姓名(name)、教师的地址(address)E-R图实例例:设计一个学生选课数据库。要求包括学生(stu114学生-课程-教师E-R图studentcourseteachertaketeach注意:如果一个联系具有属性,则这些属性也与该联系连接起来。TeachCourseNo学生-课程-教师E-R图studentcourseteach115条码白酒容量度数编号销售商联系人地址电话名称销售数量单价E-R图实例白酒销售条码白酒容量度数编号销售商联系人地址电话名称销售数量单价E-116
IBM研究员E.F.Codd(EdgarFrankCodd,1924-2003)于1970发表了业界第一篇关于关系数据库理论的论文“ARelationalModelofDataforLargeSharedDataBanks”,首次提出了关系模型的概念。这篇论文是计算机科学史上最重要的论文之一,也奠定了Codd博士“关系数据库之父”的地位。E.F.Codd因此获得ACM图灵奖(1981年)。关系数据模型IBM研究员E.F.Codd(EdgarFra117关系描述关系名(关键属性,属性1,属性2,……,属性N)Student(studentNo,studentName,birthday,sex)关系描述关系名(关键属性,属性1,属性2,……,属性N)118关系基本概念关系:对应通常所说的二维表。元组:表中的一行即为一个元组属性:表中的一列即为一个属性,例如下表有4列,就有4个属性(studentNo,studentName,birthday,sex)。主键:表中的某个属性组(可以多属性组合成主键),它可以唯一确定一个元组,例如,studentNo可以唯一确定一个学生,也就成为学生关系的主键;域:属性的取值范围,例如,大学生性别域是(男,女);分量:元组中的一个属性个数。例如,学生关系分量为4。关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,……,属性N)。关系基本概念关系:对应通常所说的二维表。119关系模型实例关系关系名关系模型实例关系关系名120元组:表中的一行即为一个元组或记录;字段:表中的一列,列值称为字段值,列名称为字段名值域:字段值的取值范围元组(记录)属性(字段)元组:表中的一行即为一个元组或记录;元组(记录)属性(字121主键:能唯一标识一个元组的属性集合。外键:若属性组F不是关系R1的主键,但它是关系R2的主 键,则F称是关系R1的外键。主键主键外键主键:能唯一标识一个元组的属性集合。主键主键外键122关系模型查询的实现通过关联表的方式实现关系模型查询的实现通过关联表的方式实现123良构关系良构关系包含最小的数据冗余,允许操作者插入、删除、修改表中的行而不会引起错误或数据的不一致良构关系良构关系包含最小的数据冗余,124良构关系--关系的规范化1、问题学生选课表SNoSNameSDeptMnameCNamegrade991230贺小华计算机周至光数据库96991239金谦计算机周至光操作系统90991239金谦计算机周至光编译原理92993851陈刚建筑王勇建筑原理89992076吕宋自动化李霞自动化设计85992076吕宋自动化李霞电路原理82数据冗余修改异常插入异常删除异常良构关系--关系的规范化1、问题学生选课表SNoSName125学号课程学分
100人工智能3125文化学2150市场营销学2175人工智能3190文化学2更新异常:删除学号为150的学生的选课记录,丢掉了学生150 选修“市场营销学”的事实,还失去了“市场营销学” 的学分是2的事实。插入异常:若有一门“法律”课,学分为3,但无学生选修时, 不能输入。学号课程学分更新异常:126消除异常的方法:模式分解若将以上的学生关系分解成学生-选课、课程-学分关系,更新异常、插入异常就都可消除了,对关系进行分解的过程就是规范化过程。学号课程100人工智能125文化学150市场营销175人工智能190文化学课程学分人工智能3文化学2市场营销2学生选课关系课程学分关系消除异常的方法:模式分解若将以上的学生关系分解成学生127属性间有三种联系
1)函数依赖:给定一个属性的值,可以获得另一个属性的值。例如,若已知“课程名”的值,便可知道“授课学时”。“授课学时”依赖于“课程名”,或“课程名”决定“授课学时”。记作“课程名→授课学时”。 436面向对象X002354数值分析X001672编译原理Z006572操作系统Z004254C程序设计J003672数据库J001授课学期授课学时课程名课程号属性间有三种联系
1)函数依赖:给定一个属性的值,可以获得1282)部分依赖:下表的主键是属性集合{学号,课程号}。主键{学号,课程号}决定了“学分”的值。但“学分”只由“课程号”决定,与“学号”无关,也就是“学分”属性只由主键{学号,课程号}的一部分而不是全部来决定,把这种依赖称为部分依赖。记作“学分→{学号,课程号}”。学号姓名课程号课程名学分0100101李灿J01数据库40100101李灿J04操作系统40100101李灿L02数值算法30100201张简J01数据库40100101李灿J04操作系统40200301张名F09德语60100201张简F09德语62)部分依赖:下表的主键是属性集合{学号,课程号}。主键{1293)传递依赖:下表的主键是“学号”,学生住宿的楼号依赖于学号。但是,学生应交的住宿费是由楼号决定的,也就是说,“收费”依赖于“楼号”,这是一种新的依赖关系:“楼号”依赖于“学号”,而“收费”又依赖于“楼号”。一般把这种依赖关系称为“传递依赖”。记作“学号→收费”。80081506004120500213050021002楼号500
180收费学号3)传递依赖:下表的主键是“学号”,学生住宿的楼号依赖于学1301)第一范式(FirstNormalForm,1NF)
定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则关系R属于第一范式。注意:集合、数组和结构都不能为第一范式关系中属性的类型。符合第一范式的关系可能有插入、删除异常。例如:在关系“选课”中,存在着部分依赖:学分→{学号,课程号}
将导致插入、删除异常。p1)第一范式(FirstNormalForm,1NF)
1312)第二范式(
SecondNormalForm,2NF
)
定义:若关系模式R属于第一范式,且每个非主属性都完全函数依赖于主键,则R属于第二范式。注意:单个属性作为主键的关系自动就是第二范式。第二范式中的关系存在更新异常.
例如:(学号、楼号、收费),虽然学号是单属性主键,属于第二范式,而楼号、收费都由学号决定,存在传递依赖关系:“学号→收费”将导致更新异常。t2)第二范式(SecondNormalForm,2NF1323)第三范式定义:如果一个关系R是第二范式的,并且每个非主属性都不传递依赖于主键,则R属于第三范式。例如:学生住宿关系可以分解为两个关系:学生-楼号关系(学号,楼号)和楼号-收费关系(楼号,收费)。这两个关系属于第三范式。
学号楼号10021204130215081802楼号收费250046002500880025003)第三范式定义:如果一个关系R是第二范式的,并且每个非主属133UML到关系模型的转换—类转换系模式名就是类名,关系模式的属性由原类中的各属性组成,关系模式的主键就是原类的主键Student(studentNo,studentName,sex,birthday)UML到关系模型的转换—类转换系模式名就是类名,关系模式的属134UML到关系模型的转换—关系转换1:1关联
(二元关系重数=1:1)两个类转换成两个关系模式在其中任意一个关系模式的属性集中加入另一个关系模式的主键1:N关联
(二元关系重数=1:N)两个类转换成两个关系模式在N端的类转换成的关系模式中加入1端关系模式的主键UML到关系模型的转换—关系转换1:1关联(二元关系重数1351:N关联转换实例
Teacher(TeacherId,teacherName,sex)Deaprtment(DeptId,deptName,location)Teacher(TeacherId,teacherName,sex,deptId)1:N关联转换实例
Teacher(TeacherId,136UML到关系模型的转换—关联类关联两端的对象各转换成一个关系模式关联本身也产生一个关系模式,其主键用关联两端对象的主键形成复合键UML到关系模型的转换—关联类关联两端的对象各转换成一个关系137关联类转换实例Student(studentNo,…..)Course(courseNo,……)selectCourse(studentNo,courseNo,grade)关联类转换实例Student(studentNo,…..)1384、E-R模型到关系模式的转换1)实体(对象)到关系模式的转换2)联系(关系)到关系模式的转换4、E-R模型到关系模式的转换1)实体(对象)到关系模式的转1391)实体到关系模式的转换
规则:将实体的名称作为关系的名称,将实体的属性作为关系的属性,并用下划线标识出主属性。
studentcoursetakesNosnamesaddressage
cNo
cnamecreditsgradestudent(sNo,sName,sex,age),表示student关系,其中sNo为主键。course(cNo,cName,credits),表示course关系,其中cNo为主键。1)实体到关系模式的转换规则:studentcourse1402)联系到关系模式的转换1:1若实体间联系是1:1,可以在两个实体转换成的两个关系模式后,然后在其中任意一个关系模式的属性集中加入另一个关系模式的主键和联系自身的属性。也就是说1:1联系不单独转换为一个独立的关系。2)联系到关系模式的转换1:1若实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共设施紧急维修协议范例
- 股票配资风险提示合同模板
- 写字楼租赁终止协议模板
- 症瘕(子宫肌瘤)中医护理方案
- 2025人教高中物理同步讲义练习选择性必修三第二章《气体、固体和液体》综合练习(含答案)
- 智慧城管系统建设项目解决方案
- 网站内容合同模板
- 产品生命周期质量管理合同
- 企业全面风险管理合同
- “书香机关”创建实施方案
- 中国书法简史
- 血透病人心力衰竭护理查房PPT
- 《数据图表与分析》教学设计及反思
- 磷石膏综合利用调查报告
- 银行业务模拟
- 《观沧海》说课(课堂PPT)
- SF305无卤阻燃型聚酰亚胺薄膜挠性覆铜板-PCBGlobal
- PET瓶片再生纺制涤纶长丝工艺和设备的研究
- 政府采购会议领导讲话稿
- 聘书模板可编辑
- 新建国际学校项目商业计划书
评论
0/150
提交评论