数据库原理总复习Word文档下载推荐.docx
《数据库原理总复习Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库原理总复习Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。
是用户从数据库所看到的数据模型。
v用概念数据模型表示的数据必须转化为逻辑数据模型表示的数据,才能在DBMS中实现。
◆类型(四种)关系(数据)模型(最常用)SQLServer采用的是关系数据模型。
层次(数据)模型网状(数据)模型面向对象(数据)模型
✓关系数据模型的含义:
用二维表格结构表示实体以及实体之间的联系的数据模型。
✓具有如下性质的二维表格,又称为一个关系。
◆关系中每一个属性值都是不可分解的。
◆关系中不允许出现相同的行。
◆关系中不允许出现相同的列,即列名不能重复
◆行、列顺序无关紧要。
说明:
1个关系就是1张二维表,反过来则不一定。
四、ER图转化为关系模式/表
✓关系模式的表示方法
◆用关系名和包含的属性名的集合表示。
v例如:
Student(SID,Sname,Sex,Birthday,Specialty)
SC(SID,CID,Grade)
✓转化原则
✓每个实体转换为一个关系。
✓每个联系也转换成一个关系。
v对于1:
1的联系,每个实体的主码均是该关系的候选码。
n的联系,关系的主码是n端实体的主码。
v对于n:
m的联系,关系的主码是各个实体主码的组合。
✓有相同码的关系可以合并。
课堂练习:
将下面的ER图转化成关系模式,并指出主码与外码。
问题:
在参照完整性中,为什么外键属性的值可以为空?
什么情况下才为空?
答:
(1)外码属性的值可以为空,它表示该属性的值尚未确定。
(2)为空的前提条件是该外码属性不是其所在关系的主属性。
例如:
学生(学号,姓名,性别,专业号)专业(专业号,专业名)
v其中:
专业号是学生表中的一个外码,不是学生表的主属性,可以为空,其语义是该学生的专业尚未确定。
✓但若该外码属性是其所在关系的主属性,则不能为空。
◆选修(学号,课程号,成绩)课程(课程号,课程名,学分)
v在选修表中,课程号虽然也是一个外部码,但它又是选修表的主属性,所以不能为空,因为关系模型必须满足实体完整性。
五、关系的规范化
✓函数依赖:
是指关系中各属性或属性组之间的相互依赖关系。
✓函数依赖的类型
完全函数依赖部分函数依赖传递函数依赖
✓例如:
SCT(学号,课程号,成绩,教师名,教师地址)
“学号+课程号”→“成绩”,是完全函数依赖。
“教师名”与主码是部分函数依赖。
“课程号”→“教师名”→“教师地址”,则“教师地址”传递依赖于“课程号”。
✓关系规范化的含义:
为了区分关系模式的优劣,把关系模式分为各种不同等级的范式。
将低级范式转换为若干个高级范式过程。
✓范式的类型
◆1NF:
关系模式R的所有属性的值都不可再分解值。
◆2NF:
关系模式R为1NF,且R中每个非主属性完全函数依赖于R的主码(复合码)。
◆3NF:
关系模式R为2NF,且R中每个非主属性都不传递函数依赖于R的每个候选码。
✓将关系模式进行分解:
✓小结:
✓1NF中的每个属性值是不可再分的,它是关系模式的最低要求。
✓消除1NF中的部分函数依赖,可转换为2NF。
✓消除2NF中的传递函数依赖,可转换为3NF。
✓数据库系统不包含数据库管理系统。
✓关系运算中的选择是按照给定的条件选择记录组成一个新的表。
✓关系模式满足第二范式,则它一定满足第一范式
✓参照完整性与引用完整性是两个不同的概念。
✓实体完整性是指表中的每一行都必须能够唯一标识,且不存在重复的数据行。
✓在WindowsXP操作系统上能够安装SQLServer2000个人版的服务器。
第8章T-SQL编程与应用
掌握标识符的命名规则掌握常量与变量的使用掌握局部变量的声明、赋值、显示熟悉常用函数的功能
掌握流程控制语句掌握常用运算符的作用
一、标识符
✓命名规则
✓标识符的长度可以为1-128个字符
✓标识符的第一个字符必须为字母、下划线、@、#
v以@为首的标识符表示1个局部变量。
v以#为首的标识符表示1个临时数据库对象。
v对于表或存储过程,名称前包含一个#时表示局部临时对象,而两个#(“##”)则表示为全局临时对象。
◆标识符内不允许有空格,也不允许为SQL中的关键字
二、常量和变量
✓常量的书写格式取决于它所表示的值的数据类型。
字符型、日期型常量要用单引号括起来。
✓局部变量:
用户自己定义的变量,用于在语句之间传递数据。
局部变量名以@符号开头。
使用时,必须先声明。
✓全局变量:
是系统定义的变量,用于存储系统的特定信息.用户不能建立全局变量,也不能修改其值。
全局变量名以@@符号开头。
✓局部变量的声明declare@变量名数据类型[,…n]
注意:
局部变量未被赋值之前,其值为null。
✓局部变量的赋值set@变量=表达式select@变量=表达式[,…n]
✓局部变量的显示print表达式select表达式[,…n]
✓局部变量的作用域从声明它的地方开始,到声明它的批处理或存储过程的结尾。
例:
下列语句能否正确执行,为什么?
declare@msgvarchar(50)
set@msg=‘欢迎使用T-SQL语句编程’
go
print@msg
三、函数
✓字符串函数求字符串长len()、转换为大写/小写字母upper()/lower()
✓聚集函数sum()、avg()、max()、min()、count()
✓日期时间函数返回当前系统日期:
getdate()
返回日期的年、月、日:
year(日期)、month(日期)、day(日期)
✓数据类型转换函数转换为字符型数据:
convert()、cast()
四、流程控制语句
✓语句块:
begin…end
✓条件语句:
if…else、ifexists
✓循环语句:
while、break、continue
◆Break用于退出最内层的while循环。
◆Continue用于重新开始一次while循环。
✓等待语句:
waitforwaitfordelay‘时间’|time‘时间’
总复习2数据库和表的管理
第4、5章数据库和表的管理
数据库概述
✓掌握数据库的创建
✓掌握数据库的管理
✓掌握数据表和表约束的创建
✓掌握数据表的管理
✓掌握数据表的操作
✓数据库的设计步骤:
◆收集、分析数据
◆建立概念模型(ER图)
◆建立逻辑模型(关系模式)
◆关系规范化1NF→2NF→3NF
◆创建数据库
一、数据库概述
SQLServer数据库的含义是存放各种对象(表、视图、规则、默认值、存储过程、用户、角色等)的逻辑实体。
✓数据库的结构
◆数据库文件有三种类型:
◆主数据文件(有且只有只有1个,扩展名是.mdf)
◆次数据文件(0个或多个,扩展名是.ndf)
◆事务日志文件(1个或多个,扩展名是.ldf)
◆文件组的类型
v主文件组:
包括主数据文件,没有指明组的其它文件
v次文件组:
用户自定义文件组
✓系统数据库(6个)
◆master数据库:
记录了SQLServer实例的所有系统信息。
◆model数据库:
是系统所有数据库的模板。
v所有在系统中创建的新数据库的内容,在刚创建时都和model数据库完全一样。
◆msdb数据库:
用于SQLServer2005代理计划作业和报警。
◆tempdb数据库:
用于保存临时对象或中间结果集以供稍后的处理,SQLServer2005关闭后该数据库被清空。
◆pubs和northwind数据库:
是SQLServer2000中的两个示例数据库,它们可以作为SQLServer的学习工具。
例:
创建d1的数据库
createdatabased1
onprimary
(name=data1,filename=‘d:
\sql\d1_data1.mdf'
size=1,maxsize=10,filegrowth=20%),
(name=data2,filename=‘d:
\sql\d1_data2.ndf'
size=4,maxsize=10,filegrowth=1),
filegroupg1
(name=data3,filename=‘d:
\sql\d1_data3.ndf'
size=5,maxsize=unlimited,filegrowth=1)
logon
(name=log1,filename='
d:
\sql\d1_log1.ldf'
size=1,maxsize=unlimited,filegrowth=20%)
二、用户数据库的创建
命令格式
CREATEDATABSE数据库名
[ON[PRIMARY]
([NAME=逻辑文件名,]
FILENAME=‘磁盘文件名'
[,SIZE=初始大小]
[,MAXSIZE=最大容量|unlimited]
[,FILEGROWTH=增长量])[,…n]
[,[FILEGROUP组文件名](……)[,…n]]
[LOGON
FILENAME=‘磁盘文件名’
[,MAXSIZE=最大容量|unlimited]
[,FILEGROWTH=增长量])[,…n]
✓alterdatabased1
addfilegroupg2
modifyfilegroupg2name=g3
removefilegroupg3
addfile
(name=data4,filename=‘d:
\sql\d1_data4.mdf’,
size=1,maxsize=5,filegrowth=1),
(name=data5,filename=‘d:
\sql\d1_data5.ndf’,
size=1,maxsize=5,filegrowth=1)tofilegroupg1
addlogfile
(name=log2,filename=‘d:
\sql\d1_log2.ldf’,
size=1,maxsize=5,filegrowth=1)
三、数据库的管理
✓显示数据库[exec]sp_helpdb[数据库名]
✓修改数据库:
alterdatabase……
◆修改数据库名
◆增加文件组
◆重命名文件组
◆删除文件组
◆增加数据库中的次要数据文件和事务日志文件
◆修改文件属性文件的初始大小、最大容量、增长幅度
◆删除数据库中的次要数据文件和事务日志文件
modifyfile
(name=data2,size=10,maxsize=20,filegrowth=10%)
✓alterdatabased1removefiledata4
✓alterdatabased1modifyname=aa
✓dropdatabaseaa
当数据库处于下列情况不能被删除。
◆当有用户正在数据库使用时。
◆当数据库正在被恢复时。
◆当数据库正在参与复制时。
四、数据表和表约束的创建
✓建表时要涉及到的问题表的列数、列名每列的数据类型列上的约束:
防止出现非法数据,保证数据完整性。
✓建表的命令格式
◆createtable表名
(字段名类型[(长度)][列级完整性约束条件][,……n])
✓创建表约束的方法建表时:
在每列的定义后,或在所有列定义后创建约束表已存在:
只能通过修改表,添加约束
✓约束的类型
主键(PRIMARYKEY)约束惟一(UNIQUE)约束
外键(FOREIGNKEY)约束检查(CHECK)约束
默认值(DEFAULT)约束空值(NULL)约束
✓主键约束与惟一性约束的区别:
◆表中只能定义1个主键约束,但可定义多个惟一约束。
◆定义了惟一约束的列可以为空值,而定义了主键约束的列不能为空值。
创建一个test数据库,该数据库的主要文件逻辑名称为test,物理文件名称为test.mdf,物理文件路径为E:
\练习数据,初始大小为10MB,最大容量为无限大,增长幅度为10%;
数据库日志文件逻辑名称为test_log,物理文件名称为test_log.ldf,物理文件路径为F:
\练习日志,初始大小为1MB,最大容量为5MB,增长幅度为1MB。
CREATEDATABASEtest
实例:
在图书管理数据库(Library)中创建其相应的表及其约束。
◆ReaderType(TypeID,Typename,LimitNum,LimitDays)
◆Reader(RID,Rname,TypeID,Lendnum)
◆Book(BID,Bname,Author,PubComp,PubDate,Price)
◆Borrow(RID,BID,LendDate,ReturnDate)
ONPRIMARY
(NAME=test,
FILENAME=‘E:
\练习数据\test.mdf’,
SIZE=10,
MAXSIZE=unlimited,
FILEGROWTH=10%)
LOGON
(NAME=test_log,
FILENAME=‘F:
\练习日志\test_log.ldf’,
SIZE=1,
MAXSIZE=5,
FILEGROWTH=1)
数据表和表约束的创建2
✓USELibrary
✓GO
✓CREATETABLEReader
(
/******列级定义和约束******/
RIDchar(10)NOTNULLPRIMARYKEY,
Rnamechar(8)NULL,
TypeIDintNULL,
LendnumintNULL
/******表级定义和约束******/
FOREIGNKYE(TypeID)REFERENCESReaderType(TypeID)
ONDELETENOACTION
)
数据表和表约束的创建1
✓CREATETABLEReaderType
TypeIDintNOTNULLPRIMARYKEY,
Typenamechar(8)NULL,
LimitNumintNULL,
LimitDaysintNULL
数据表和表约束的创建3
✓CREATETABLEBook
BIDchar(9)PRIMARYKEY,
Bnamevarchar(42)NULL,
Authorvarchar(20)NULL,
PubCompvarchar(42)NULL,
PubDatedatetimeNULL,
Pricedecimal(7,2)NULLCHECK(Price>
0)
数据表和表约束的创建4
✓CREATETABLEBorrow
RIDchar(10)NOTNULL
FOREIGNKYEREFERENCESReader(RID)ONDELETECASCADE,
BIDchar(9)NOTNULL
FOREIGNKYEREFERENCESBook(BID)ONDELETENOACTION,
LendDatedatetimeNOTNULLDEFAULT(getdate()),
ReturnDatedatetimeNULL
PRIMARYKEY(RID,BID,LendDate)
五、数据表的管理
✓修改表结构:
altertable表名……
◆增加列:
add列定义……
◆修改列:
altercolumn列定义……
◆删除列:
dropcolumn列名
✓重命名数据表:
[exec]sp_rename表名,新表名
✓删除数据表:
droptable表名……
实例1:
为表“Book”添加“ISBN”列和一个标识列“BookID”
◆ISBN是国际标准书号,由5段13位数字组成,每段数字之间以“-”隔开。
◆如该书的ISBN号是:
978-7-115-19345-2
五、数据表的管理实例:
删除表“Book”中的“ISBN、BookID”列。
实例1:
为表“Reader”添加读者“张子建”的部分信息。
USELibrary
GO
INSERTReader(RID,Rname,TypeID,Email)
VALUES(‘200186010’,‘张子建’,1,‘zhangzi@’)
实例2:
将读者类型表“ReaderType”中学生的限借数量增加2本,限借天数增加5天。
UPDATEReaderType
SETLimitNum=LimitNum+2,LimitDays=LimitDays+5
WHERETypename=‘学生’
实例3:
删除表“StudentIM”中学号为“2005216118”的学生信息。
USEEDUC
GO
DELETEStudentIMWHERESID=‘2005216118’
六、数据表的操作
✓插入数据
insert[into]表名[(字段名列表)]
values(字段值列表)
✓修改数据
◆update表名
set{列名=表达式|null|default}[,…n])
[where逻辑表达式]
✓删除数据
◆delete表名[where逻辑表达式]
总复习3查询和视图
一、查询的类型
✓关系的运算:
投影、选择、连接
✓简单查询对一张表的原始数据进行查询
✓汇总查询对表中数据进行求总和、求平均、求最大值、求最小值的查询
✓连接查询从多个相关的表中查询数据
✓子查询是指一条select语句作为另一条select语句的一部分,外层的select语句被称为外部查询,内层的select语句被称为内部查询(或子查询)
二、简单查询
✓语句格式
◆select字段列表
from表名
where条件
三、数据汇总查询
✓使用的方法有二种:
◆使用聚合函数(sum、avg、count、max、min)
◆
例:
分析下列查询语句执行的功能和结果。
◆selecttop5BID,Bname,AuthorfromBook
◆selectBID,Bname,Author,PubComp,Price,Price*0.9
fromBook
◆selectBIDAS读者编号,BnameAS书名,AuthorAS作者,出版社=PubComp,
原价=Price,折价=Price*0.9
fromBook
◆selectTypeID,Typename,LimitNum,‘册’,LimitDays,‘天’fromReaderType
使用groupby子句
✓Select语句的格式
select列名表
from表名[,……n]
[where条件]
[groupby列名]
[having逻辑表达式]
[orderby列名]
✓聚合函数的语句格式:
◆select聚合函数([*|all|distinct]列名)from表名
✓说明:
◆当select子句中有聚合函数且没有groupby子句时,就不能再指定其它的列名。
◆All:
计算该列值非空的记录的个数,默认为all。