AnIntroductiontoDatabaseSystems复习第一部分数据库理论数据库及其特征数据模型数据模型的三要素:数据结构、数据操作、数据的完整性约束概念模型和数据模型,E-R模型数据库的体系结构数据库系统三级模式结构:模式、内模式、外模式数据库系统两级映像系统结构物理独立性和逻辑独立性关系数据库基本原理关系及关系模式关系数据结构:采用二维表描述实体和实体间的联系关系模式是对关系的描述,表示为:关系名(属性1,属性2,…,属性n)关系操作:选择(σ)投影(∏)∏Sno,Sname,Age(σAge=20(Student))SELECTSno,Sname,AgeFROMStudentWHEREAge=20关系数据库基本原理关系模型的完整性约束实体完整性参照完整性用户定义的完整性外部关键字(外键)如果关系中某个属性或属性组合不是关键字,但却是另一个关系的主关键字,则称此属性或属性组合为本关系的外部关键字或外键(ForeignKey)。表示两个表间的联系。导师编号姓名性别职称110李男教授111王女讲师112刘男教授学生编号姓名性别导师编号101张男102田女110103赵男112关键字关键字外键RFS•主键:能够唯一的确定关系中的一个元组的属性或属性集关系模式规范化的基本步骤1NF↓消除非主属性对码的部分函数依赖2NF↓消除非主属性对码的传递函数依赖3NF关系规范化的目的,是解决关系模式中存在的数据冗余、插入和删除异常、更新繁琐等问题。关系模式的规范化理论1NF2NF3NF数据库设计步骤需求分析概念结构设计逻辑结构设计物理结构设计数据库实施数据库运行与维护系课程学生教师管理选修讲授注册11mnnmmn教师号系名系号专业出生日期性别姓名学号姓名性别职称年龄专业系主任电话照片评价分数课程号类别课程名学时系(系号,系名,系主任,电话)学生(学号,姓名,性别,出生日期,专业,照片)课程(课程号,课程名,学时,类别)教师(教师号,姓名,专业,职称,性别,年龄)选修(学号,课程号,分数)课程评价(教师号,课程号,评价)管理(教师号,系号)注册(学号,系号)合并教师(教师号,姓名,专业,职称,性别,年龄,系号)合并学生(学号,姓名,性别,出生日期,专业,照片,系号)设计实例期刊采编的主要任务是由编辑部的编辑人员对稿件进行编辑,决定稿件收录的期刊的刊次和栏目;排版部的设计人员,负责期刊的设计排版工作。期刊采编系统需求分析期刊采编系统包括:人员管理稿件生产管理期刊设计排版管理等功能模块需求分析——人员管理模块人员管理需要记录职工编号、职工姓名、职务、年龄、性别等。一个职工工作于一个部门,一个部门有若干职工。对于部门应记录各部门的编号、部门名称、负责人、电话等信息。需求分析——稿件生产管理模块稿件生产管理模块管理若干编辑部的若干人员和进行稿件的生产;对于各编辑部需记录各编辑部编号、负责人、电话;而编辑部的人员同样记录人员编号、姓名、职务、年龄、性别、负责的具体工作等;对于稿件需要记录稿件的编号、标题、作者、字数、正文等;每一个编辑部编辑多篇稿件,而一篇稿件只有一个编辑部编辑,要记录编辑的姓名和编辑完成的时间。需求分析——期刊设计排版模块期刊设计排版模块管理设计排版部的若干人员和若干期刊。对于期刊需要记录期刊的名称、刊出年月等;同样对于稿件需要记录稿件的编号、标题、作者、字数、正文等;对于设计排版部需记录单位编号、负责人、电话;设计排版部的人员同样记录职工编号、姓名、职务、年龄、性别、负责的具体工作等。每一本期刊由多篇稿件编排而成,要记录编排者的姓名和设计完成的时间。概念结构设计——局部E-R模型人员管理E-R模型人员部门职工编号编号部门名称性别职工姓名属于m1电话年龄职务负责人权限概念结构设计——局部E-R模型人员编辑部编号编号性别姓名编辑1电话年龄职务负责人包含m稿件编号字数作者标题权限编辑者1n正文完成日期稿件生产管理的E-R图概念结构设计——局部E-R模型人员设计排版部编号编号性别姓名组成11电话年龄职务负责人包含nm稿件编号标题作者编排期刊名称出版日期编号1n字数所属栏目权限设计者完成日期正文期刊设计排版的E-R图合成全局E-R图人员部门职工编号部门编号性别姓名组成11电话年龄职务负责人包含nm稿件稿件编号标题字数编排期刊期刊名称出版日期期刊编号1n正文所属栏目部门名称编辑1m编辑者编辑日期权限完成日期设计者作者逻辑结构设计由E-R图转换为关系模式设计数据完整性数据模型的规范化关系模式部门(部门编号,部门名称,负责人,电话)人员(职工编号,姓名,性别,年龄,职务,权限,部门编号)期刊(期刊编号,期刊名称,出版日期,部门编号,设计者,完成日期)稿件(稿件编号,标题,作者,字数,正文,部门编号,编辑者,编辑日期,期刊编号,所属栏目)数据完整性设计实体完整性通过确定主键已完成参照完整性模式“人员”中的属性“部门编号”来源于模式“部门”中的属性“部门编号”模式“期刊”中的属性“部门编号”来源于模式“部门”中的属性“部门编号”模式“稿件”中的属性“部门编号”来源于模式“部门”中的属性“部门编号”模式“稿件”中的属性“期刊编号”来源于模式“期刊”中的属性“期刊编号”数据完整性设计用户定义完整性包括:模式“人员”中的属性“性别”的值只能为男或女;模式“人员”中的属性“年龄”的值只能为1-100间;模式“部门”中的属性“职务”的默认值为编辑;模式“期刊”中的属性“完成日期”的值应早于(小于)属性“出版日期”的值;模式“期刊”中的属性“期刊编号”固定为9位,前三位由字母,后六位由数字构成。第二部分SQL数据库的创建表的创建和管理索引的类型与创建数据的插入、删除、修改数据查询视图存储过程、触发器、自定义函数SQLServer简介SQLServer2000的有关组件通信组件服务器端组件客户端组件SQL数据库概述Master记录所有系统级别信息和所有其他数据库的结构和定义Model模板数据库新建DB时,model数据库的所有对象都被复制。Tempdb存放临时表和临时存储过程Msdb供SQLServer企业管理器使用示例数据库Pubs——图书出版发行管理Northwind——客户订单管理系统数据库SQL数据库概述-数据库对象对象作用表数据库中数据的实际存放地方。视图定制复杂或常用的查询,以便用户使用;限定用户只能查看表中的特定行或列;索引加快从表或视图中检索数据的效率。存储过程提高性能;封装数据库的部分或全部细节;帮助在不同的数据库应用程序之间实现一致的逻辑。约束、规则、默认值和触发器确保数据库的数据完整性;强制执行业务规则。登录、用户、角色和组保障数据安全的基础。数据库文件数据文件(保存数据库中各种对象)日志文件(.ldf)1—多个记录对数据库的操作信息(增、删、改)主数据文件(.mdf)次数据文件(.ndf)——一个——0--多个数据库文件:存放数据和数据库对象的文件文件组:对文件进行分组,以便于管理。所有系统表都分配在主文件组PRIMARY中,用户可以定义文件组。SQL数据库概述—数据库文件1.数据库的创建CREATEDATABASE数据库名[ONPrimary(NAME=…,FILENAME=…,SIZE=…,MAXSIZE=…,FILEGROWTH=…)…LOGON(NAME=…,FILENAME=…,SIZE=…,MAXSIZE=…,FILEGROWTH=…)…FILEGROUP文件组名]2创建数据库表CREATETABLE表名(列名1数据类型{identity|NOTNULL|NULL}[列级完整性约束],列名2AScomputed_column_expression……,[表级完整性约束])涉及表的某一列涉及表的一个或多个列完整性约束名称作用实现的完整性Primarykey定义主键,保证主键列无重复值实体完整性Unique保证该列无重复值实体完整性Foreignkey定义外键,保证数据表间数据的一致性参照完整性Check定义表中某些列的数据范围自定义完整性Default为列的数据提供默认值自定义完整性完整性约束--PRIMARYKEY定义列级主键约束的语法格式如下:列名1数据类型[CONSTRAINT约束名]PRIMARYKEY定义表级主键约束的基本格式为:[Constraint约束名]primarykey(列名1[,列名2,…])完整性约束--FOREIGNKEY定义列级外键约束的语法格式如下:列名1数据类型[CONSTRAINT约束名]REFERENCESref_table(列名)定义表级外键的命令基本格式[Constraint约束名]foreignkey(列名1[,列名2,…])references表名(列名1[,列名2,…])(注意:定义外键时要保证被定义为外健的属性在参照表中已经被定义为主健)例:建立基本表:学生表,课程表,选课表,加入主键,外键约束,并要求学生姓名和课程名不为空。createtablestudent(Snochar(6)primarykey,S_Namechar(8)notnull,S_Ageint,S_Sexchar(2),S_Deptchar(20),constraintc1check(S_Sexin('男','女')))createtablecourse(Cnochar(4)primarykey,C_Namechar(20)notnull,C_Typechar(10))createtablesc(Snochar(6),Cnochar(4),Gradesmallint,Constraintc2Primarykey(sno,cno),Constraintc3Foreignkey(sno)referencesstudent(sno),Constraintc4Foreignkey(cno)referencescourse(cno))创建数据库表例题:聚集索引(clustered)是一种物理存储方式,数据表中的数据按照索引的顺序保存在磁盘空间中。一个数据表只能建立一个聚集索引非聚集索引(nonclustered)是一种逻辑存储方式索引的次序并不影响数据的物理存储顺序一个数据表最多可以建立249个非聚集索引3.创建索引索引是对数据库表中一个或多个字段的值进行排序而创建的一种分散存储结构。包括如下两类:建立索引Create[unique][clustered|nonclustered]index索引名on表名(列名1[次序],列名2[次序],…)缺省情况下,创建的索引是非唯一的非聚集索引。用次序指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC必须先建立聚集索引,后建立非聚集索引SELECT[ALL|DISTINCT]列名[,列名…]FROM表名[,表名…]4.数据查询[WHERE条件表达式][GROUPBY列名[,列名…][HAVING条件表达式]][ORDERBY列名[ASC|DESC][,列名[ASC|DESC]…]从表中(From子句),选择满足记录选择条件(Where子句)的记录,并对他们进行分组(Group子句,Having子句表达组选择条件)统计(统计函数)和排序(Orderby子句),并投影(Select子句),形成查询结果集统计函数:Sum(),avg(),min(),max(),count(*),count()查询【例】查询所有男性读者的读者编号、读者姓名和年龄,并按照出生日期的降序排列。SELECTReaderNo读者编号,ReaderName读者姓名,year(getdate())-year(ReaderBirth)AS年龄,ReaderBirthAS出生日期FROMReaderWHEREReaderS