数据库原理复习资料.docx
《数据库原理复习资料.docx》由会员分享,可在线阅读,更多相关《数据库原理复习资料.docx(24页珍藏版)》请在冰豆网上搜索。
![数据库原理复习资料.docx](https://file1.bdocx.com/fileroot1/2023-2/2/bfbd04f1-930d-4ef9-a5f7-da7a75dc0f11/bfbd04f1-930d-4ef9-a5f7-da7a75dc0f111.gif)
数据库原理复习资料
数据库原理复习资料(仅供参考)
第1章数据库系统概述
1.信息就是客观世界的现实反映。
2.信息的特征:
信息的普遍性和客观性、信息是有用的、信息的依附性、信息的共享性、信息的可传输性、信息的可识别性、信息的可压缩性、信息的可转换性
3.数据的定义:
数据是信息的最佳表现形式之一。
4.数据的特征:
数据的“型”和“值”、数据受数据类型和取值范围的约束、数据有定性表示和定量表示
5.数据库(Database,DB)的定义:
是一个按一定数据结构来组织、存储和管理的数据的集合。
6.数据库的特点:
数据的结构化、数据独立性、实现数据共享、数据的冗余度小、避免了数据的不一致性、有利于数据的安全性、有利于保证数据的完整性、可以发现故障和恢复正常状态
7.数据库管理系统(DatabaseManagementSystem,DBMS)是对数据库进行管理的软件系统,它负责数据库中的数据组织、数据操纵、数据维护、数据控制及保护和数据服务等。
8.数据库管理系统的功能:
数据定义、数据操纵、数据控制、数据组织与存取、数据库建立与维护、运行管理
9.数据库系统(DatabaseSystem,DBS)是一个带有数据库的计算机应用系统,由硬件、软件和人员组成。
10.数据库系统的人员:
开发人员、用户和运行维护人员。
相应的角色有系统分析员、程序员、用户、数据库管理员(DatabaseAdministrator,DBA):
全面负责数据库系统的运行管理和控制。
11.数据库的三级模式:
外模式、模式、内模式
12.模式:
也称逻辑模式,它是由数据库设计者综合所有的数据需求,从全局的角度对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图即全局视图。
一个数据库只有一个模式。
13.外模式:
也称子模式或用户模式,是程序员和最终用户能看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
通常是模式的子集。
14.内模式:
也称存储模式或物理模式,它是数据物理结构和存储方式的底层描述。
一个数据库只有一个内模式。
15.数据库的二级映像技术:
外模式/模式映像、模式/内模式映像
16.数据管理经历了人工管理、文件系统和数据库系统三个发展阶段
17.瀑布模型把数据库应用系统生存期划分为规划、需求分析、设计、实现、测试、运行与维护6个阶段。
特点:
自顶向下、逐层分解。
第2章数据库需求分析
2.1.3数据库需求分析的原则
1.制定数据库需求分析计划2.选择适当的数据库需求分析方法3.选择合适的数据库需求分析工具软件4.调查现存系统5.充分与用户沟通6.理解用户的数据管理内容及目标7.分析并确认数据库需求8.需求变更要立即联系9.提出数据库实施建议和解决方案10.认真撰写数据库需求规格说明书11.使用软件复用技术12.认真评审数据库需求规格说明书13.修改、完善数据库需求规格说明书
注:
数据库需求分析的最终目的是获得共同批准的数据库需求规格说明书。
2.数据流程图(DataFlowDiagram,DFD)是数据库系统最重要的需求分析工具之一,它通过图形符号描述数据的输入(来源)、输出(去向)和移动变换过程。
它的基本图形元素有4个:
外部实体、数据流、处理、数据存储。
3.数据库系统需求分析方法:
结构化分析方法、原型化分析方法、面向对象分析方法。
4.结构化分析(StructuredAnalysis,SA)方法是最著名需求分析方法之一,它通过与DFD结合,遵循自顶向下、逐层分解和结构化、模式化的原则从DFD的顶层开始,逐层、逐幅画出数据库系统的全部DFD。
5.数据库需求调查的原则:
自顶向下全面展开、分析现存系统数据管理存在的问题,研究改进的可能性、采用工程化的工作方法、全面铺开与重点调查相结合
6.数据字典(DataDictionary,DD)(是各类数据描述的集合)是数据收集和分析后所获得的成果,通常包括数据项、数据结构、外部实体、数据流、数据存储和处理逻辑6个部分。
7.信息分类的原则:
科学性原则、系统性原则、可扩展性原则、兼容性原则、综合实用性原则
8.信息分类的方法:
线分类法与面分类法
9.信息编码的原则:
唯一性原则、正确性原则、可扩展性原则、规范性原则、稳定性原则
10.信息编码的方法:
顺序编码、区间编码、字母编码、组合编码
11.关键字是能够唯一标识一个实体的一个或一个以上的无冗余数据项(或数据结构)。
也称主码或主键。
12.E-R图:
实体-联系方法(Entity-RelationshipApproach)
第3章数据库设计
1.数据库系统的设计包括数据库的结构特性设计(静态)和行为特性设计(动态)。
2.数据库设计的原则:
1)不依赖性原则2)开放性原则3)可扩展性原则4)检索和管理的高效性原则
3.数据库设计的歩骤:
1)逻辑结构设计2)物理结构设计3)验证设计
4.数据库模型:
是现实世界数据特征的模拟和抽象。
应满足三方面要求:
①能比较真实地模拟现实世界;
②容易为人所理解;
③便于在计算机上实现(真实、方便、易懂)
数据模型三要素(重点):
①数据结构;②数据操纵;③数据的约束条件
5.关系模型的完整性约束:
实体完整性、参照完整性和用户定义的完整性
6.关系的基本术语(名词解释):
●元组(Tuple):
关系表中每一个横行称作一个元组,组成元组的元素称为分量。
数据库中的一个实体或实体间的一个联系均使用一个元组表示。
●属性(Attribute):
关系中的每一列即为一个属性,都有一个属性名。
●候选码(CandidateKey)和主码(PrimaryKey):
若关系中的某一属性组(或单个属性)的值能唯一地标识一个元组,则称该属性组(或属性)为候选码。
当一个关系有多个候选码时,选定其中的一个候选码为主码。
若关系中只有一个候选码,则这个唯一的候选码就是主码。
●主属性(PrimeAttribute)和非主属性(Non-PrimeAttribute):
候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。
●外码:
建立在子表上去引用主表的某些字段。
7.关系的类型:
关系分为基本表、视图表和查询表。
8.关系的基本性质(重点):
1)列是同质的
2)不同列可来自同一个域
3)列的位置具有顺序无关性,列的次序可以任意交换
4)任意两个元组不能完全相同
5)元组的位置具有顺序无关性,元组的次序可以任意交换
6)分量必须取原子值,即每个分量都必须是不可分的数据项
9.完整性约束:
1)实体完整性(主键)
2)参照完整性(外键)
3)用户定义的完整性(除主键和外键之外的)
10.完整性设计中应注意的问题:
1)修改关系中主码的问题
2)外码能否接受空值问题
3)在被参照关系中删除元组的问题(3种情况)(重点)
①级联删除(CASCADES)将参照关系中外码值,与被参照关系中将要删除元组的主码值相同的所有元组一起删除。
如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会进行级联下去。
②受限删除(RESTRICTED)仅当参照关系中没有任何元组的外码值与被参照关系要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作;
③置空值删除(NULLIFIES)删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。
4)在参照关系中插入元组时的问题。
11.触发器:
是一类特殊的存储过程。
特点:
是定义在触发器表上的,不能由用户调用执行,而是在对触发器进行操作时自动触发执行的,但存储过程可以通过存储过程名字而被直接调用。
缺点:
触发器的性能比较低。
12.索引:
是一个单独的、物理的数据库结构,它是某个关系中,一列或若干列值的集合和相应的指向关系中物理标识这些值的数据页的逻辑指针清单。
(存数据,用空间来换取时间)按存储结构的不同,分为聚簇索引(主键默认)和非聚簇索引。
13.索引的作用:
1)加快数据查询的速度2)保证数据的唯一性3)加快连接速度。
14.事务:
是恢复和并发控制的基本单位。
是用户定义的一组数据库操作序列的集合。
15.事务4个特性(解答题):
1)原子性(Atomicity)一个事务是不可分割的数据库的逻辑工作单位
2)一致性(Consistency)事务的执行结果必须是使数据库从一个一致性状态到另一个一致性状态
3)隔离性(Isolation)一个事务的执行不能被其他事务干扰
4)持续性(Durability)一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的
16.并发控制(以事务为单位)条件:
(1)一个对象;
(2)多个事务;(3)同一时刻
17.并发操作:
数据库中的数据是共享的,即多个用户可以同时使用数据库中的数据
18.并发操作带来的4个问题:
1)丢失或覆盖更新2)不可重复读3)脏读数据4)幻像读
19.基本的封锁类型:
1)排他锁(X锁)2)共享锁(S锁)
20.死锁:
如当两个事务分别锁定了两个单独的对象,这时每一个事务都要求在另外一个事务锁定的对象上获得一个锁,因此每一个事务都必须等待另外一个事务释放占有的锁,这时,就发生了死锁。
21.预防死锁发生常用的方法有:
1)一次封锁法(要求每个事务必须一次将所有要使用的数据全部加锁,否则不能继续执行)
2)顺序封锁法(预先对数据对象规定一个封锁顺序,所有事务都按此顺序执行)
22.死锁的诊断与解除:
1)超时法:
指如果一个事务的等待时间超过了规定的时限,就认为发生了死锁
2)等待图法:
事务等待图动态反映所有事务的等待情况。
23.将E-R图转换为关系模型实际上就是要将实体、实体的属性和实体之间的联系转化为关系模式。
实体集向关系模式转换的原则:
一个实体型转换为一个关系模式。
实体的属性就是关系的属性,实体的主码就是关系的主码。
24.联系集向关系模式的三种转换:
1)1:
1(可转为一个独立的关系模式,也可与任意一端对应的关系模式合并)
2)1:
n(可转为一个独立的关系模式,也可与任意n端对应的关系模式合并)
3)m:
n(可转为单独存在的关系模式,与该联系相连的各实体的主码以及联系本身的属性均转为该关系模式的属性。
而关系模式的主码为各实体主码的组合)
第4章数据库标准语言SQL
4.2.1数据库
1.定义数据库
Createdatabase学生选课库
Onprimary(name=学生选课库,
Filename=’C:
\sqlserver\data\学生选课.mdf’,
Size=4mb,
Maxsize=6mb,
Filegrowth=20%)
2.选择数据库
use<数据库名>
3.删除数据库
Dropdatabase<数据库名>
4.2.2基本表
1.定义基本表
Createtablestudent
(snochar(5)notnullorprimarykey,
Snamevarchar(20)unique,
Sexchar
(1),
Sdeptvarchar(15),
Smonchar(5),
Sbirthdaysmalldatetime)
2修改基本表
a.add方式:
向student表增加“入学时间”列,其数据类型为日期型。
Altertablestudentaddscomedatetime
B.drop方式:
删除sc表中的score_chk约束。
Altertablescdropscore_chk
C.alter方式:
把student表中的sname列加宽到28位字符宽度。
Altertablestudentaltercolumnsnamevarchar(28)
3.删除基本表
Droptablestudent
4.2.3索引
1.定义索引
为student,course,sc三个表建立索引。
其中student表按学号升序建唯一索引,course表按课程号升序建唯一索引,sc表按学号升序和课程号降序建唯一索引。
Createuniqueindexs_snoonstudent(sno)
Createuniqueindexc_cnooncourse(cno)
Createuniqueindexscnoonsc(snoasc,cnodesc)
2.删除索引
dropindex数据表名.索引名
4.3数据查询
4.3.1概述:
数据查询是数据库中最常见的操作。
SQL语言提供SELECT语句,通过查询操作可得到所需的信息,其语法格式为:
Select[all|distinct]<目标列表达式>[,<目标列表达式>]…
From<表名或视图名>[,<表名或视图名>]…
[where<条件表达式>]
[groupby<分组列名表>[having<条件表达式>]]
[orderby<排序列名表>]
4.3.2简单查询
1.无条件查询
a.查询学生的全部信息
Select*fromstudent等价于selectsno,sname,sex,sdept,smon,sbirthdayfromstudent
b.查询全体学生的姓名、学号和出生日期。
Selectsname姓名,sno学号,sbirthdayas出生日期fromstudent
闯.查询全体学生的姓名年龄。
Selectsname,year(getdate())-year(sbirthday)fromstudent
2.条件查询
a.比较大小的条件查询:
查询成绩高于85分的学生的学号、课程号和成绩。
Selectsno,cno,scorefromscwherescore>85
b.多重条件查询:
查询选修c1或c2且分数大于等于85分学生的学号、课程号和成绩。
Selectsno,cno,scorefromscwhere(cno=’c1’orcno=’c2’)andscore>=85
C.确定范围:
查询成绩在90-100之间的学生的学号以及课程号。
Selectsno,cnofromscwherescorebetween90and100
d.查询选修c1或c2的学生的学号、课程号和成绩。
Selectsno,cno,scorefromscwherecnoin(‘c01’,’c02’)等价于
Selectsno,con,scorefromscwherecno=’c01’orcno=’c02’
e.部分匹配查询:
查询所有姓刘学生的姓名、学号和性别。
Selectsname,sno,sexfromstudentwheresnamelike‘刘%’
查询以“DB_”开头的课程的课程号,课程名和学分。
Selectcno,cname,creditsfromcoursewherecnamelike‘DB\_%’escape‘\’
其中escape‘\’短语表示“\”为换码字符,这样匹配串中紧跟在“\”后面的字符“_”不再具有通配符的含义,转义为普通的“\”字符。
F.涉及空值的查询:
空值查询使用isnull关键字。
查询没有成绩的学生的学号和相应的课程号。
Selectsno,cnofromscwherescoreisnull
查询选修c2、c3、c4或c5课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。
Selectsno,cno,scorefromscwherecnoin(‘c02’,’c03’,’c04’,’c05’)orderbysno,scoredesc
4.3.4使用SQL函数查询
分组函数:
avg、sum、max、min、count
a.求学号为s1学生的总分和平均分。
Selectsum(score)adtotalscore,avg(score)asavescorefromscwhere(sno=’s01’)
b.求选修c1号课程的最高分、最低分及之间相差的分数。
Selectmax(score)asmaxscore,min(score)adminscore,max(score)-min(score)asdifffromscwhere(cno=’c01’)
c.求参加选修课程的学生总数。
Selectcount(distinctsno)fromsc
4.3.5分组查询
1.groupby子句
a.查询每位学生的学号以及该学生选修课程的门数。
Selectsno,count(*)asc_numfromscgroupbysno
2.having子句
查询至少选择修2门课的学生的学号及平均成绩。
Selectsno,avg(score)fromscgroupbysnohavingcount(*)>2
4.4数据更新
4.4.1插入数据
a.插入单个元组
在student表中插入记录:
(Sno:
S07。
Sname:
郑冬。
Sex:
女。
Sdept:
计算机)。
Insertintostudent(sno,sname,sex,sdept)values(‘s07’,’郑冬’,’女’,’计算机’)
b.插入子查询结果集
Insertinto<表名>[(<列名1>[,<列名2>…])]子查询
求出各位同学的学号、平均成绩,及总分,并把结果存放在新表avgscore中。
先建表:
createtableavgscore(
Snovarchar(10),
Avggrddecimal(4,2),
Sumgrddecimal(5,1))
然后利用子查询:
insertintoavgscore
Selectsno,avg(score),sum(score)fromscgroupbysno
4.4.2修改数据
1.修改基本表数据
a.把学号为“s02”的学生的专业改为计算机系。
Updatestudentsetsdept=’计算机’wheresno=’s02’
2.用子查询提供要修改的值
把所有教师的工资提高到平均工资的1.2倍。
Updateteachersetsalary=(select1.2*avg(salary)fromteacher)
3.用子查询选择要修改的行
将计算机系所有学生的成绩置零。
Updatescsetscore=0
Wheresnoin(selectsnofromstudentwheresdept=’计算机’)
4.4.3删除数据
1.删除基本表数据
删除选课表中学号为“s04”选修“c03”课程的选课记录。
DeletefromscWheresno=’s04’andcno=’c03’
2.利用子查询选择要删除的行。
删除刘华的选课记录。
Deletefromsc
Wheresnoin(selectsnofromstudentwheresname=’刘华’
4.5视图
4.5.1定义视图
创建一个计算机系学生情况的视图sub_s。
Createviewsub_sas
Selectsno,sname,sbirthdayfromstudentwheresdept=’计算机’
4.5.2删除视图
删除计算机系学生情况的视图sub_s。
Dropviewsub_s
4.5.3查询视图
查询视图sub_s中年龄小于20岁的学生姓名(sname)和出生日期(sbirthday)。
Selectsname,sbirthdayfromsub_s
Where(year(getdate())-year(sbirthday))<20
4.5.4更新视图
1.数据插入
向视图sub_s中插入一条记录(sno:
s07。
Sname:
李丹,sbirthday:
1982年12月1日)。
Insertintosub_svalues(‘s07’,’李丹’,’1982-12-1’)
2.数据修改
将视图sub_s中李丹的性别改为女。
Updatesub_ssetsex=’女’wheresname=’李丹’
3.删除
删除视图sub_s中李丹的记录。
Deletefromsub_swheresname=’李丹’
4.6数据控制
4.6.1授权
把对student表和course表的全部操作权限授予zhao,并允许zhao将该权限授予他人。
Grantallprivilegesonstudent,coursetozhaowithgrantoption
4.6.2收权
把用户zhao修改成绩的权限收回。
Revokeupdate(score)onscfromzhao
4.8存储过程的创建与维护
a.编写一个存储过程,实现删除一个学生的记录。
由于一个学生可能已经选课,所以在删除一个学生的数据前,必须首先删除该学生选课数据,然后再删除学生数据。
Grantprocedureusp_deleteastudent
@snochar(5),@snamevarchar(8)output
As
--删除学生选课表中学生的记录
Ifexists(select*fromscwheresno=@sno)
Deletefromscwheresno=@sno
--得到指定学号的学生姓名
Select@sname=snamefromstudentwheresno=@sno
--删除指定学号的记录
Deletefromstudentwheresno=@sno
Go
b.执行a.定义的存储过程,并删除学号为“95010”的相关信息。
--测试和运行存储过程
Declare@snamevarchar(8)
--调用存储过程
Executeusp_deleteastudent‘95010’,@snameoutput
--显示返回变量值
Select@sname
4.9触发器的创建与维护
4.9.1定义触发器
利用触发器来保证学生-课程库中sc表的参照完整性,以维护其外码与参照表中的主码一致。
Granttriggersc_insertedon选课
Forinsert
As
If(selectcount(*)fromstudent,inserted,course)
Wherestudent.sno=inserted.snoando=o)=0
Rollbacktransaction
4.9.2修改触发器
语法:
altertriggertrigger_name
On[owner.]{table|view}
For{[insert][,][update][,][delete]}as
Sql_statement
4.9.3删除触发器
语法:
droptriggertrigger_name
第6章数据库测试
6.1概述