数据库实现校本教材.docx
《数据库实现校本教材.docx》由会员分享,可在线阅读,更多相关《数据库实现校本教材.docx(14页珍藏版)》请在冰豆网上搜索。
数据库实现校本教材
学习情境4办公自动化数据库的实现
学习情境描述:
数据库实现的工作任务要求工作人员能根据数据库的关系模型,在SQLServer数据库管理系统之中创建数据库和数据库表。
因此通过本学习情境的学习,是学生能够看明白一个数据库的关系模型;能在SQLServer数据库管理系统中创建数据库;能正确的选择数据类型并创建数据表;能保证数据库的数据完整性。
一.任务提出:
设计项目:
办公自动化数据库的实现
要求:
1.在SQLServer2005数据库管理系统中创建办公自动化数据库。
2.创建办公自动化系统的数据表。
3.保证办公自动化数据库的数据完整性。
二.任务目标:
知识目标:
1.熟悉数据库的存储结构(逻辑文件和物理文件)
2.掌握创建数据库的方法
3.熟悉表的结构和数据类型
4.掌握创建表的方法
5.掌握各类约束的作用和创建方法
技能目标:
1.能够根据办公自动化系统的需要创建和管理办公自动化数据库。
2.能根据办公自动化的关系模型创建和管理各个数据表。
3.能通过各类约束保证办公自动化数据库的数据完整性。
素质目标:
1.具有良好的协调和沟通能力。
2.具有独立思考,解决问题的能力。
3.具有与他人团结协作的素养。
4.具有信息搜集和分析的能力。
5.具有自我学习提高的能力。
三.任务分析:
该项目完成主要包括以下几个任务:
1.理解SQLServer数据库的文件组成,创建办公自动化管理数据库。
2.理解表的结构,创建办公自动化管理数据库的各个数据表。
3.创建约束保证数据完整性。
四.相关知识
(一)数据库的组成
每个SQLServer2005数据库(无论是系统数据库还是用户数据库)在物理上都由至少一个数据文件和至少一个日志文件组成。
出于分配和管理目的,可以将数据库文件分成不同的文件组。
数据文件:
分为主要数据文件和次要数据文件两种形式。
每个数据库都有且只有一个主要数据文件。
主要数据文件的默认文件扩展名是.mdf。
它将数据存储在表和索引中,包含数据库的启动信息,还包含一些系统表,这些表记载数据库对象及其他文件的位置信息。
次要数据文件包含除主要数据文件外的所有数据文件。
有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。
次要数据文件的默认文件扩展名是.ndf。
日志文件:
SQLServer具有事务功能,以保证数据库操作的一致性和完整性。
所谓事务就是一个单元的工作,该单元的工作要么全部完成,要么全部不完成。
日志文件用来记录数据库中已发生的所有修改和执行每次修改的事务。
SQLServer是遵守先写日志再执行数据库修改的数据库系统,因此如果出现数据库系统崩溃,数据库管理员(DBA)可以通过日志文件完成数据库的修复与重建。
每个数据库必须至少有一个日志文件,但可以不止一个。
日志文件的默认文件扩展名是.ldf。
建立数据库时,SQLServer会自动建立数据库的日志文件。
文件组:
一些系统可以通过控制在特定磁盘驱动器上放置的数据和索引来提高自身的性能。
文件组可以对此进程提供帮助。
系统管理员可以为每个磁盘驱动器创建文件组,然后将特定的表、索引、或表中的text、ntext或image数据指派给特定的文件组。
SQI.Server有两种类型的文件组:
主文件组和用户定义文件组。
主文件组包含主要数据文件和任何没有明确指派给其他文件组的文件,系统表的所有页均分配在主文件组中;用户定义文件组是在CRE_ATEDATA_BASE或AI,TERDATA.BASE语句中,使用FII,EGROUP关键字指定的文件组。
SQt.Server2000在没有文件组时也能有效地工作,因此许多系统不需要指定用户定义文件组。
在这种情况下,所有文件都包含在主文件组中,而且SQI。
Server2000可以在数据库内的任何位置分配数据。
每个数据库中都有一个文件组作为默认文件组运行。
当SQI。
Server给创建时没有为其指定文件组的表或索引分配页时,将从默认文件组中进行分配。
一次只能有一个文件组作为默认文件组。
如果没有指定默认的文件组,主文件组则成为默认的文件组。
(二)创建数据库和事务日志
可以使用2种方法创建数据库:
方法一:
使用ManagementStudio创建数据库
1.在“对象资源管理器”中,连接到SQLServer数据库引擎实例,然后展开该实例。
2.右键单击“数据库”,然后单击“新建数据库”。
3.在“新建数据库”中,输入数据库名称。
4.若要通过接受所有默认值创建数据库,请单击“确定”;否则,请继续后面的可选步骤。
5.更改主数据文件和事务日志文件的默认值,在“数据库文件”网格中单击相应的单元并输入新值。
6.若要创建数据库,请单击“确定”。
方法二:
使用SQL语句创建数据库
createdatabasedbnameon//此处定义数据库名
(name=逻辑文件名,
filename='物理路径',
size=初始值大小,
maxsize=最大值,
filegrowth=增长方式)//在此处一定注意没有逗号)
logon
(name=逻辑文件名,
filename='物理路径',
size=初始值大小,
maxsize=最大值,
filegrowth=增长方式)//在此处一定注意没有逗号)
案例:
创建一个名为xuanke的选课数据库,将物理文件保存在D:
\下,主数据文件名为xuanke.mdf,将事务日志文件保存在D:
\下,事务日志文件名为xuanke_log.ldf。
createdatabasexuanke//此处定义数据库名
(name=xuanke,
filename='D:
\xuanke.mdf',
size=3MB,
maxsize=10MB,
filegrowth=2MB)//在此处一定注意没有逗号)
logon
(name=xuanke_log,
filename='D:
\xuanke_log.ldf',
size=3MB,
maxsize=10MB,
filegrowth=1MB)//在此处一定注意没有逗号)
(三)表的概念和数据类型
数据表(或称表)是数据库最重要的组成部分之一。
数据库只是一个框架,数据表才是其实质内容。
根据信息的分类情况,一个数据库中可能包含若干个数据表。
如“选课管理系统”中,“选课”数据库包含分别围绕特定主题的5个数据表:
“系部”表“班级”表、“学生”表、“选课”表和“课程”表,用来管理选课过程中学生、选课、课程等信息。
这些各自独立的数据表通过建立关系被联接起来,成为可以交叉查阅、一目了然的数据库。
(四)创建和管理表
主要有两种方法:
方法一:
使用ManagementStudio创建表
1.在“资源管理器”中展开数据库。
2.右键单击要在其中数据库表的出现。
选择“新表”。
3.
在表的左侧输入列名。
中间选择数据类型,右侧选择是否为空值。
4.点击“保存”在SQLServerManagementStudio的工具栏按钮。
弹出一个窗口,为表名称要求。
输入到文本框,并按下“确定”按钮。
该表是在数据库中创建并保存。
方法二:
使用SQL语句创建表
createtable[表名]
(
[自动编号字段]数据类型IDENTITY(1,1)PRIMARYKEY,
[字段1]数据类型null,
[字段2]数据类型null,
[字段3]数据类型null,
[字段4]数据类型null,
[字段5]数据类型null,
[字段6]数据类型null,
[字段7]数据类型null,
)
案例:
创建选课数据库的学生表。
分析:
选课数据库的学生表的定义如下:
学生表(student)
列名
数据类型
长度
小数位数
是否允许为空
说明
Stuno
Nchar
8
否
学号
Stuname
Nchar
50
否
姓名
Classno
Nchar
8
否
班号
PWD
Nchar
8
否
密码
创建学生表的语句:
CreateTablestudent
(Stunonchar(8)notnull,
Stunamenchar(50)notnull,
Classnonchar(8)notnull,
PWDnchar(8)notnull
)
对表的管理:
1.删除表:
Droptable[表名]
2.新增字段:
ALTERTABLE[表名]ADD[字段名]NVARCHAR(50)NULL
3.删除字段:
ALTERTABLE[表名]DROPCOLUMN[字段名]
4.修改字段:
ALTERTABLE[表名]ALTERCOLUMN[字段名]NVARCHAR(50)NULL
5.重命名表:
sp_rename\'表名\',\'新表名\',\'OBJECT\'
新建约束:
ALTERTABLE[表名]ADDCONSTRAINT约束名CHECK([约束字段]<=\'2000-1-1\')
删除约束:
ALTERTABLE[表名]DROPCONSTRAINT约束名
新建默认值
ALTERTABLE[表名]ADDCONSTRAINT默认值名DEFAULT\'51WINDOWS.NET\'FOR[字段名]
删除默认值
ALTERTABLE[表名]DROPCONSTRAINT默认值名
删除SqlServer中的日志,减小数据库文件大小
dumptransaction数据库名withno_log
backuplog数据库名withno_log
dbccshrinkdatabase(数据库名)
execsp_dboption\'数据库名\',\'autoshrink\',\'true\'
(五)数据完整性
数据完整性是确保数据库中数据一致、正确性以及符合企业规则的一种思想。
假如在任何时刻,一个数据库的数据满足显式指定的验证规则集合,就说该数据库是满足完整性约束。
1.满足数据完整性的数据要具有以下的特点:
●数据的值必须正确无误:
数据的数据类型必须正确,数据的值必须在正确范围内。
必须保证同一表格数据间的不相冲突。
在不同表格间的数据也必须相互一致。
●从实施来分类,SQLServer支持两类数据完整性。
一种是声明引用完整性,它在模式描述时候定义检查条件,并在数据插入、修改和删除的时候自动实施数据完整性。
另一种是过程数据完整性,可以通过触发器和其他工具来维护数据完整性。
●数据完整性的分类为域完整性、实体完整性、参照完整性和用户自定义完整性。
例如:
在选课数据库中有两个表,学生表和选课表。
学生表记录了学生信息,选课表记录了学生的选课信息。
如果某个由选课记录,那么他不能从学生表中删除,这就是数据参照完整性约束。
2.约束的表示:
约束是强制数据完整性的首选方法。
SQLServer提供的实施数据完整性的途径主要是约束、规则、触发器、索引、数据类型和存储过程。
其中约束总是在对象级上实现数据完整性,即数据完整性约束总是和表一起定义的。
约束的用途是限制输入到表中的值的范围。
SQLServer根据不同的用途提供了多种约束,分别是:
(1).DEFAULT(默认值)约束
(2).CHECK(核查)约束
(3).PRIMARYKEY(主键)约束
(4).UNIQUE(唯一性)约束
(5).FOREIGNKEY(外键)约束
SQLServer产生的各种约束对象包括:
缺省对象约束,规则对象约束
4.定义约束的语句格式
CREATETABLEtable_name
(column_namedata_type
[[CONSTRAINTconstraint_name]
{PRIMARYKEY[CLUSTERED|NONCLUSTERED]
|UNIQUE[CLUSTERED|NONCLUSTERED]
|[FOREIGNKEY]REFERENCESref_table[(ref_column)]
|DEFAULTconstant_expression
|CHECK(logical_expression)
}
][,…,n]
:
:
=
[CONSTRAINTconstraint_name]
{PRIMARYKEY|UNIQUE[CLUSTERED|NONCLUSTERED][(column[,…,n])]
|[FOREIGNKEY][(column[,…,n])]
REFERENCESref_table[(ref_column[,…,n])]
|CHECK(search_condition)
}[,…,n]
)
参数说明:
CONSTRAINT:
是可选关键字,表示PRIMARYKEY、NOTNULL、UNIQUE、FOREIGNKEY或CHECK约束定义的开始。
Constraint_name:
约束的名字,约束名在数据库内必须是唯一的。
PRIMARYKEY:
是通过唯一索引对给定的一列或多列强制实体完整性的约束。
对于每个表只能创建一个PRIMARYKEY约束。
UNIQUE:
是通过唯一索引为给定的一列或多列提供实体完整性的约束。
一个表可以有多个UNIQUE约束
CLUSTERED|NONCLUSTERED:
是表示为PRIMARYKEY或UNIQUE约束创建聚集或非聚集索引的关键字。
PRIMARYKEY约束默认为CLUSTERED,UNIQUE约束默认为NONCLUSTERED。
在CREATETABLE语句中只能为一个约束指定CLUSTERED。
如果在为UNIQUE约束指定CLUSTERED的同时又指定了PRIMARYKEY约束,则PRIMARYKEY将默认为NONCLUSTERED。
FOREIGNKEY...REFERENCES:
是为列中的数据提供引用完整性的约束。
FOREIGNKEY约束要求列中的每个值在被引用表中对应的被引用列中都存在。
FOREIGNKEY约束只能引用被引用表中为PRIMARYKEY或UNIQUE约束的列或被引用表中在UNIQUEINDEX内引用的列。
ref_table:
是FOREIGNKEY约束所引用的表名。
(ref_column[,...n]):
是FOREIGNKEY约束所引用的表中的一列或多列。
案例:
为student表中的密码列设置缺省值'00000000':
CreateTablestudent
(Stunonchar(8)notnull,
Stunamenchar(50)notnull,
Classnonchar(8)notnull,
PWDnchar(8)notnullDEFAULT(‘00000000’)
)
5.SQLServer中的规则对象
规则对象的作用与CHECK约束相同,它检查用户为其所关联列或所绑定的用户定义数据类型列的输入可接受值的有效性。
●一个规则定义可以出现在WHERE子句的表达式中;
●每个列或每个用户定义数据类型只能绑定一个规则;
●一个规则可以关联到一列或几列。
规则对象和CHECK约束有些类似,但两者存在一些区别,CHECK约束是在用CREATETABLE或ALTERTABLE语句定义表结构时定义,它与表定义存储在一起,所以,在删除表时,CHECK约束被自动删除。
而规则对象则需要使用CREATERULE语句定义,它作为一种数据库对象单独存储,所以它可以被多次应用于不同列或用户定义的数据类型。
在删除表时不能删除规则对象,而需要使用DROPRULE语句删除。
◆创建规则对象
◆应用规则对象
◆解除和删除规则对象
(1)创建规则对象
在T_SQL中,创建规则对象的语句格式:
CREATERULE[owner.]rule_name
AScondition_expression
其中:
rule_name:
规则名称。
condition_expression:
规则定义的条件。
condition_expression表达式可以与所有有效的WHERE子句所指定的条件相同。
它用一个局部变量代表INSERT语句或UPDATE语句所输入的数值。
AS子句的变量名必须以@开头,而且要与所关联的列名或用户定义数据类型相同。
案例:
下面语句所创建的规则限制用户输入的学生年龄在指定的范围为大于等于14岁而小于等于35岁。
如下定义:
CREATERULES_age_rule
AS>=14@sage<=35
(2)绑定和应用规则对象
创建规则对象后,必须使用系统存储过程sp_bindrule把规则对象绑定到一个列或用户定义的数据类型才能起作用。
语句格式:
sp_bindrulerulename,objname[,futureonly]
rulename:
是规则名称
objname:
是规则所关联的表的列名或用户定义的数据类型名称.如果Objname的格式为'表名.列名'说明是列名,否则视为用户定义的数据类型名。
futureonly:
只用于用户定义数据类型。
且只对未来的值起作用,不影响已经存在的值。
例如,以正确的课程集合值绑定学生课程列。
sp_bindruleS_course_rule'C.course'
(3)解除和删除规则对象
要删除规则对象时,必须先解除规则对象与指定列或用户定义数据类型之间的关联。
当一个规则对象与多个列或多个用户定义的数据类型相关联时,要逐一用sp_unbindrule解除。
解除规则与相应对象关联的格式:
sp_unbindruleobjname[,futureonly]
futureonly:
只用于用解除与户定义数据类型相关联的规则。
且只对未来的值起作用,不影响已存在的数据类型列与规则之间的关联值。
Objname:
相关联的列名或用户定义的数据类型名。
例如,解除学生课程C.course列与课程规则S_course_rule的关联。
sp_unbindrule'C.course'
●删除规则对象的语句格式:
DROPRULE[owner.]rule_name
一个DROP语句可以同时删除多个规则对象。
例如,删除课程规则S_course_rule的语句如下:
DROPRULES_course_rule
数据完整性方法的比较如图
数据完整性方法
功能
开支
事务之前或者之后
约束
中
低
之前
触发器
高
高
之后/之后
缺省和规则对象
低
中
之前
图:
数据完整性方法的比较
五.任务完成
任务完成需要经历:
数据库的创建——表的定义——表的创建——数据完整性的分析——数据完整性的实现。