第3章 关系数据库的创建与维护 数据库管理系统概述 SQL Server数据库基础 数据库的创建和维护 数据表的创建和维护 1 2 SQL Server数据库基础 数据库的创建和维护 3 数据表的创建和维护 4 数据表约束和数据完整性 5 索引的创建与维护 6
3.1 SQL Server数据库管理系统概述
DBMS是创建和使用数据库必不可少的软件! 3.1SQL Server 2005概述 1. 数据库管理系统 数据库管理系统(DataBase Management System, DBMS)是位于应用程序与操作系统之间的一层数据管理软件。 数据库应用程序提出数据操作要求,通过DBMS,才能访问数据库。 数据库管理员也是通过DBMS对数据库实施管理。 DBMS是创建和使用数据库必不可少的软件!
3.1SQL Server 2005概述 2. 数据库管理系统 的主要功能 数据定义 数据操纵 数据库运行管理 数据库维护 支持数据库语言 建立数据库,定义数据库的模式结构、数据库的完整性约束规则和安全性控制方式 数据定义 数据操纵 实现对数据库中数据的检索以及更新(包括插入、删除和修改) 数据库运行管理 包括并发控制、安全性检查、完整性约束条件的检查和执行、数据库的内部管理和维护 数据库维护 数据库的备份和恢复、导入和导出功能,数据库的重组功能和性能监视、分析功能等 支持数据库语言 支持使用数据库语言来使用和管理数据库,关系型DBMS支持SQL语言
3.1SQL Server 2005概述 3. Microsoft SQL Server 2005 SQL Server是Microsoft公司在Windows平台上开发的一个高性能关系数据库管理系统。它支持构建基于网络的信息系统。 图形化的操作环境,易学易用 支持高性能应用 可伸缩性和高度可用性 与Internet应用的集成 支持数据仓库分析
3.1SQL Server 2005概述 4. SQL Server主要管理工具 SQL Server提供了一整套数据库系统管理工具和实用程序,打开“开始/程序/Microsoft SQL Server2005 ”菜单即可看到如下程序组 :
3.1SQL Server 2005概述 SQL Server Management Studio SQL Server Management Studio 是一个管理平台,集成了多个图形工具和丰富的脚本支持。用于建立、访问、配置、控制、管理和开发数据库。
启动SQL Server Management Studio 选择“开始/程序/Microsoft SQL Server2005/ SQL Server Management Studio”菜单出现“连接到服务器”窗口。 服务器类型:指明要连接的服务。如果是管理和访问数据库服务器,选择“数据库引擎”。 身份验证:指明验证方式。注意SQL Server身份验证需用户名和密码,默认用户为“sa” 。 服务器名称:选择或输入该服务器的计算机名称或IP地址,也可输入“.”或“(local)”,表示本机服务器。
SQL Server Management Studio窗口 方便对脚本的集中编辑、保存和管理。可建立一个项目对多个脚本进行管理,多个项目又可作为一个解决方案。 所有数据库对象的树型视图。可以浏览、管理、维护所有数据库对象。当选择某一数据库对象后,中间的“摘要”窗口自动显示该对象所包含的下一级对象或该对象的详细内容。
SQL Server Management Studio窗口
SQL Server Configuration Manager 管理与SQL Server相关联的服务。启动: “开始/程序/Microsoft SQL Server2005/配置工具/SQL Server Configuration Manager” 。 点击左边的“SQL Server 2005服务”,右边窗格显示所有SQL Server服务,包括已注册的不同数据库服务器实例的服务。这些服务是SQL Server提供各项管理和服务功能的基础,如果服务停止,相关功能就无法使用。服务有3种状态:停止(红色)、启动(绿色)、暂停(蓝色)。 SQL Server的核心服务组件,是实际的数据库服务器,该服务启动后,客户端才可以连接到服务器。一般的数据库功能都由它提供。 作业调度和管理,支持数据库定时、自动备份、维护,监视数据库、异常告警等功能,必需和SQL Server服务一起使用。 対数据仓库、商务智能和line-of-business解决方案提供分析支持 侦听对SQL Server 资源的传入请求,提供计算机上安装的 SQL Server 实例的有关信息 支持基于全文索引的数据库表的全文搜索服务 可用于数据质量管理和数据清洗。通过数据分析和数据挖掘,实现数据提取、转换和加载。
3.1SQL Server 2005概述 SQL Server2005网络配置,支持完成本计算机上的 SQL Server服务器的网络协议管理,如Shared Memory、TCP/IP、Named Pipes等,主要任务包括:启动或停止某个网络协议,配置网络协议,例如修改协议所用端口、加密方法等。 SQL Native Client 配置,支持配置本服务器上运行的客户机程序的网络协议。其他客户机上需要安装并配置SQL Native Client来支持客户机程序与SQL Server连接。主要功能:指定连接到 SQL Server 时的协议顺序,配置客户端连接协议,创建 SQL Server 的别名,使客户端能用自定义连接字符串进行连接。
3.2 SQL Server数据库基础
SQL Server管理的主要对象是数据库。 数据库不仅存储数据,所有与数据结构、数据完整性约束、数据处理操作有关的信息也都存储其中。 因此,数据库并不是简单的数据集合!
SQL Server中数据库对象有两类:系统数据库和用户自定义数据库。 主要作用 master 从整体上控制SQL Server系统和用户数据库的运行。保存登录标识、系统配置、用户数据库基本信息等。该库非常重要,应设置权限禁止一般用户访问,另外要及时备份 model 是新建数据库的模板,包含了每个用户数据库都需要的一些系统表,SQL Server以它为基础创建新的数据库 msdb 支持SQL Server Agent服务,它记录有关作业、警报、操作员等信息 tempdb 是一个临时数据库,它为SQL Server的查询、存储过程等的执行提供临时存储
3.2SQL Server 数据库基础 用户自定义数据库:用户根据数据管理的需要建立的数据库,由用户创建和维护。 例如,为了管理教务信息,可建立教务系统数据库,为了实现网上书店,建立图书销售数据库等。 SQL Server自带了3个样本数据库,供用户学习使用: AdventureWorks是个OLTP数据库示例 AdventureWorksDW是个OLAP数据库仓库示例 AdventureWorksAS是个分析服务数据库示例
视图:通过查询从一个或多个数据表获得的虚拟表,可简化用户数据显示、增强数据库安全性 可编程性:包括存储过程、触发器、规则、函数、默认值等 2. SQL Server数据库的存储结构 数据库的逻辑存储结构 SQL Server中,一组存储、管理和使用数据的对象构成了数据库的逻辑存储结构。观察master数据库包含的主要对象: 表:存储数据的二维关系表 视图:通过查询从一个或多个数据表获得的虚拟表,可简化用户数据显示、增强数据库安全性 可编程性:包括存储过程、触发器、规则、函数、默认值等 安全性:包括用户、角色、密钥、证书等
数据库以文件方式存储在磁盘上。所有数据库对象都存储在这些文件中: 3.2SQL Server 数据库基础 数据库的物理存储结构 数据库以文件方式存储在磁盘上。所有数据库对象都存储在这些文件中: 主数据文件:用来存储数据库的系统表和所有对象启动信息,并且存储数据库的数据。每个数据库都有且只有1个主数据文件。主数据文件使用.MDF为扩展名。 次数据文件:用来存储不能置于主数据文件中的其他数据。每个数据库可以包含0个或多个次数据文件。扩展名为.NDF。 事务日志文件:记录SQL Server执行的所有事务以及由这些事务操作引起的数据库的变化,可用于恢复数据库。 每个数据库至少包含1个事务日志文件,扩展名为.LDF。 每个数据库至少包含2个文件: 主数据文件和事务日志文件。
3.2SQL Server 数据库基础 为了更好地对数据文件进行管理和实现分布存储,SQL Server可对数据库文件(不包括事务日志文件)进行分组管理。 合理使用文件组对数据进行分布存储,可以提高表中数据的操作性能。 主文件组(Primary):包含主数据文件和若干次数据文件。所有系统表都包含在主文件组中 用户自定义文件组(User_defined):指用户创建的任何文件组,存储其他次数据文件,可以多个。
3.2SQL Server 数据库基础 合理使用文件组对数据进行分布存储,可以提高表中数据的操作性能。 例如:将两个不同物理磁盘上的数据库文件组成一个文件组,在该组上建立的数据表中的数据会存储在不同的物理设备上,查询操作可并行。 注意: 若不指定用户定义文件组,则所有数据文件都包含在主文件组中。 一个文件只能是一个文件组的成员 一个文件或文件组只能被一个数据库使用!
3.3 数据库的创建与维护
3.3数据库的创建与维护 1. 数据库创建 数据库创建有多种方式。下面通过实例介绍使用Management Studio创建数据库的步骤和方法 。 【例3.2】在C:\DBExample文件夹下创建数据库School,它包含主数据文件SchoolDB.MDF,初始大小为5MB,事务日志文件SchoolDB_log.LDF,其他按照默认设置不变。 ① 在桌面上选择“我的电脑”,在C:\下新建文件夹,命名为“DBExample”。 ② 在对象资源管理器窗口右击“数据库”,从快捷菜单中选择“新建数据库”命令,将弹出 “新建数据库”对话框。
3.3数据库的创建与维护 提示:SQL Server以model数据库为模板创建一个新的数据库,其数据文件的默认值为:初始大小3MB,以1MB自动增长,不限制增长;事务日志文件的默认值为:初始大小1MB,按10%的比例自动增长,不限制增长。
3.3数据库的创建与维护 ③ “选择页”默认为“常规”,在“数据库名称”文本框中输入“School”。 ④ 将数据文件的逻辑名称修改为“SchoolDB”,在路径下的文本框输入或点击其后“…”按钮选择修改数据库文件的位置为“C:\DBExample”。在初始大小后的文本框中把3改为5。 ⑤ 将日志文件的逻辑名称修改为“SchoolDB_log”,“路径”设置为“C:\DBExample”。 ⑥ 单击“确定”按钮,数据库创建完成。
建好的School数据库在对象资源管理器展开的“数据库”下可以看到,并且系统在School下自动创建了其包含的相关对象。 使用“我的电脑”查看“C:\DBExample”文件夹,可以看到文件SchoolDB和SchoolDB_log。
3.3数据库的创建与维护 2. 数据库维护 对已存在的数据库可以进行如下的修改: 增加或删除数据文件 改变数据文件的大小和增长方式 改变日志文件的大小和增长方式 增加或删除日志文件 增加或删除文件组 重命名数据库名、数据文件和日志文件逻辑名。 注意:数据库创建后,磁盘上的数据文件和日志文件名就不能改变了。
3.3数据库的创建与维护 修改数据库 右单击需修改的数据库,在快捷菜单中选择“属性”命令,弹出“数据库属性”窗口。其中包含8个选项,每个选项下可对数据库的相关属性进行修改。
3.3数据库的创建与维护 删除数据库 ① 右击要删除的数据库,在弹出的快捷菜单中选择“删除”命令。 ② 在弹出的“删除对象”对话框中单击“确定”按钮,即可删除要删除的数据库。 提示:注意数据库一旦被删除,数据库文件及其数据都被从服务器上的磁盘中删除,该数据库中所有的对象均被删除,即永久性删除,不能恢复,所以删除操作要慎重!
3.4 数据表的创建与维护
新建一个数据库只是建立了数据库框架和相关的系统对象, 接下来的任务是在库中创建各个对象,最基本的是数据表 。 3.4数据表的创建与维护 新建一个数据库只是建立了数据库框架和相关的系统对象, 接下来的任务是在库中创建各个对象,最基本的是数据表 。 例如:建立如下教务系统的数据库,要建立6个数据表,并建立表之间的关系。具体定义见教材P37页。
2)建立表之间的关系:依次建立各个表,再建立关系。 3)表创建后,可输入一些记录数据来检验表结构。 3.4数据表的创建与维护 创建数据表的一般过程: 1)设计表结构,包括: 定义字段 (1)创建列名、数据类型 (2)设置列属性也称列约束。包括: PRIMARY KEY:主关键字约束 UNIQUE:唯一性约束 CHECK:检查约束 DEFAULT:默认值约束 NOT NULL:非空约束 IDENTITY:标识规范 保存表 2)建立表之间的关系:依次建立各个表,再建立关系。 3)表创建后,可输入一些记录数据来检验表结构。
数据表中每一列都需要定义明确的数据类型,数据类型决定了该字段的数据取值类型、范围和存储格式。 3.4数据表的创建与维护 1.SQL Server数据类型 数据表中每一列都需要定义明确的数据类型,数据类型决定了该字段的数据取值类型、范围和存储格式。 SQL Server的系统数据类型 数据类型 主要类型符号标识 整型 bigint、int、smallint 、tinyint 浮点型 float、real、decimal、numeric 字符型 char、varchar、nchar、nvarchar 日期时间型 datetime、smalldatetime 文本型 text、ntext 图像型 image 货币型 money、smallmoney 位型 bit 二进制型 binary、varbinary 其他 uniqueidentifier
整型用于存储整数,有4种整型分别用于存储不同范围的整数。 3.4数据表的创建与维护 (1)整型 整型用于存储整数,有4种整型分别用于存储不同范围的整数。 数据类型 数据范围 占用存储空间 bigint -263 ~ 263-1 8 个字节 int -231 ~ 231-1 4 个字节 smallint -215 ~ 215-1 2 个字节 tinyint 0 ~ 255 1 个字节
float和real是近似数值型,以科学计数法表示数据; 3.4数据表的创建与维护 (2)浮点型 浮点型用于存储含小数的十进制数。 数据类型 数据范围 精确度 占用存储空间 float -1.79E+308~1.79E+308 可精确到第15位小数 8 个字节 real -3.40E+38~3.40E+38 可精确到第7位小数 4 个字节 decimal -1038+1~1038-1 完整精度 2~17 个字节 numeric float和real是近似数值型,以科学计数法表示数据; decimal和numeric是精确数值类型,以明确、完整的精度(固定精度和小数位数)存储数据。
3.4数据表的创建与维护 decimal和numeric格式如下: decimal |numeric(p[,s]) 其中:p为精度,s为小数位数,s的默认值为0。 例如:指定某字段为精确数值型,精度为5,小数位数为2,即decimal(5,2)或numeric(5,2) , 可表示数据范围为:-999.99~999.99。 decimal 和numeric的区别在于decimal不能应用于带有Identity的列。
用于存储由字母、符号和数字组成的字符串。字符串常量要用单引号作为起止界限 。例如:’No1’。 3.4数据表的创建与维护 (3)字符型和文本型 用于存储由字母、符号和数字组成的字符串。字符串常量要用单引号作为起止界限 。例如:’No1’。 SQL Server 字符数据类型和文本数据类型 数据类型 定义格式 占用存储空间 char char(n),存储ANSI字符,n表示字符串的长度,1=<n <=8000 定长,最大8KB varchar varchar (n) ,存储ANSI字符,n表示字符串可达到的最大长度1=<n <=8000 变长,最大8KB nchar nchar(n),存储Unicode字符,n表示字符串的长度,1=<n <=4000 nvarchar nvarchar (n) ,存储Unicode字符,n表示字符串可达到的最大长度1=<n <=4000 text text, 存储ANSI字符 变长,大于8KB
3.4数据表的创建与维护 定长和变长的区别 char(n)、nchar(n)是定长字符类型,字符串长度超出n的部分被截去;如不足n时,则在串的尾部添加空格以达到长度n。如char(5),当输入'Tom'字符串时,其存储长度为5个字节,实际字符串值为'Tom ' varchar(n)、 nvarchar(n)是变长字符类型,长度为字符串的实际字符个数。如varchar(5),当输入‘Tom’字符串时,其存储长度为3个字节,实际字符串值为'Tom' 。 Text是文本数据类型,用来存储可变长度的大量字符数据,其存储长度最多可达20亿个ASCII字符。 通常,当某一字段的字符串长度固定时使用char类型;当字符串长度明显不一致时使用varchar类型。
char(n)和varchar(n)存储ANSI字符,用1个字节(8bits)表示一个字符,每个汉字占2个字节。 3.4数据表的创建与维护 ANSI和Unicode的区别 ANSI(American National Standard Institite:美国国家标准协会)和Unicode(Universal Multiple-Octet Coded Character Set:通用字符集)是两种不同的编码标准。 char(n)和varchar(n)存储ANSI字符,用1个字节(8bits)表示一个字符,每个汉字占2个字节。 nchar(n)和nvarchar(n)存储Unicode字符集,用2个字节(16 bits)表示一个字符。 例如:char(5)可存储5个英文字符,但只能存储2个汉字,而nchar(5)可存储5个英文或汉字构成的字符串。 通常,char(n)和varchar(n)适合存储英文字符串。 nchar(n)和nvarchar(n)适合存储中文或中英文混合字符串。
用来存储日期和时间数据,默认数据格式为:“YYYY-MM-DD HH:MM:SS”。 例如:“2012-12-08 12:35:29” 3.4数据表的创建与维护 (4)日期时间型 用来存储日期和时间数据,默认数据格式为:“YYYY-MM-DD HH:MM:SS”。 例如:“2012-12-08 12:35:29” 数据类型 数据范围 占用存储空间 datetime 1753年1 月1日~9999年12月31日之间的日期时间 8个字节 smalldatetime 1900年1月1日~2079年6月6日之间的日期时间 4个字节 使用时也可只存储日期或时间。
3.4数据表的创建与维护 (5)图像数据类型 用于存储照片、图片等,实际存储的是可变长度的二进制数据,其长度最大可达231-1个字节。 注意:SQL Server不能显示image类型的数据,必须由应用程序来存取和显示。 在实际应用中,通常将图像以文件的形式存储在磁盘上,而只将图像文件的路径和文件名以字符串类型记录在数据库中。 应用程序读取数据库获得存取路径,然后访问磁盘文件。 其他多媒体类型数据处理方法类似。
货币型实际上是一种小数,但小数点后只有4位,且自动四舍五入。 3.4数据表的创建与维护 (6)货币型 用十进制数表示货币值。 数据类型 数据范围 占用存储空间 money -922,337,203,685,477.5808 ~ +922,337,203,685,477.5807精度为4位小数 8个字节 smallmoney -214,748.3648 ~214,748.3647,精度为4位小数 4个字节 货币型实际上是一种小数,但小数点后只有4位,且自动四舍五入。
3.4数据表的创建与维护 (7)位类型 bit用来作为逻辑变量使用,其数值有两种取值: 1和0 ,可分别代表TRUE和FALSE或YES和No等。 例如:在Student表中,字段LiveInDorm存储“是否住校”信息使用bit。 (8) uniqueidentifier 唯一标识符类型 。数据库管理系统会随着记录的加入自动为字段产生唯一标识符。它是一个16字节长的二进制数。
3.4数据表的创建与维护 教务系统数据库中有关字段类型的选取举例 学生表Student 字段名称 字段说明 类型定义 StudentCode 学号 char(4) StudentName 学生姓名 nvarchar (20) ClassCode 班号 char (2) Sex 性别 nchar (1) Birthday 出生日期 smalldatetime LiveInDorm 是否住校 bit Telephone 联系电话 nvarchar (40) Photo 照片(存放路径和文件名) nvarchar(50) Description 个人介绍 nvarchar(100) PassWord 密码 nvarchar(16)
3.4数据表的创建与维护 课程表Course 字段名称 字段说明 类型定义 CourseCode 课程号 char(3) CourseName 课程名称 nvarchar(16) Credit 学分 numeric(3,1) Academy 开课学院 nvarchar(5) ClassTime 上课时间 nvarchar(20) ClassPlace 上课地点 ClassHour 上课学时 tinyint LabHour 实验学时 TotalSeats 最大学生数 smallint LeftSeats 剩余名额 TeacherCode 任课教师 char(4) Description 课程简介 text GradeAnalysis 成绩分析评价 nvarchar(100)
3.4数据表的创建与维护 成绩表Grade 字段名称 字段说明 类型定义 StudentCode 学号 char(4) CourseCode 课程号 char(3) Grade 成绩 numeric(4,1) WriteStamp 录入时间 datetime
【例3.3】在数据库School中建立学生表Student,完成各字段的定义。 3.4数据表的创建与维护 2.数据表创建 【例3.3】在数据库School中建立学生表Student,完成各字段的定义。 ① 在对象资源管理器中,选择“数据库/School/表”,右击后从快捷菜单中选择“新建表”命令,弹出“表设计”窗口。 ② 在表设计窗口,根据表的设计结构依次完成每个字段的名称和数据类型设置。 ③ 在完成所有字段设计后,可在 “属性”窗格的“(名称)”处输入表名“Student”,单击工具栏上的“ ”按钮或“文件/保存”菜单或关闭表设计窗口,数据表创建完成。 ④ 在对象资源管理器展开“数据库/School/表”可以看到创建好的数据表dbo.Student。
属性设置区:字段描述、默认值、小数精度及位数等 设计表中字段 保存按钮 数据表名称设置 属性设置区:字段描述、默认值、小数精度及位数等
3.4数据表的创建与维护 3. 数据表维护 修改表结构 增加字段、删除字段、修改字段属性等。 ① 在对象资源管理器中右击要修改的“表”,在弹出菜单中选择“修改”命令,出现“表设计”窗口。 ② 在“表设计”窗口,选中需要修改的一行,右击后弹出快捷菜单可以对表设置主键、插入列、删除列等。也可通过拖动行来调整字段的顺序。 ③ 对表的结构修改完毕后,保存对表结构修改。
3.4数据表的创建与维护 更改表名 ① 在对象资源管理器中选择要改名的表右击,在快捷菜单上选择“重命名”命令。 ② 在表名位置输入新的表名即可。 删除数据表 ① 在对象资源管理器中,右击要删除的表,在快捷菜单中选择“删除”命令。 ② 在弹出的“删除对象”对话框中,选择“确定”按钮,即可删除该表。
3.4数据表的创建与维护 4. 数据表记录插入 在实际运行的信息系统中,数据表必须在完全创建好后(字段建好、各项数据完整性约束设置完成),才添加记录。而且最好是通过应用程序添加。 在系统开发过程中,可以通过手工添加一些记录来检查数据表定义是否合理,调试程序功能是否可用等。
手工将记录添加在数据表的尾部,可以向表中插入多条记录。例如:向Student表添加记录。 3.4数据表的创建与维护 手工将记录添加在数据表的尾部,可以向表中插入多条记录。例如:向Student表添加记录。 操作方法: ①在对象资源管理器中,右击数据表dbo.Student, ②选“打开表”,出现数据窗口“表-dbo.Student”。 ③在该数据窗口中,可插入记录、修改记录和删除记录。 右击数据表dbo.Student
插入记录: ① 将光标定位在表尾的下一行,逐字段输入值,按方向键“->”或“<Tab>” 键可以移向下一个字段。 ② 当一条记录最后一个字段输入完按“回车”键,光标自动转到下一行第一个字段,可插入下一条记录。 ③ 输入完数据,单击“ ”按钮或“文件/保存”菜单。或单击“表-dbo.Student”窗口的“关闭”按钮,添加的记录就保存到数据表中。 注意:“不允许为空”字段必须输入值。
3.4数据表的创建与维护 5. 数据表记录维护 修改记录 定位将要修改的记录字段,对该字段值进行编辑修改。 删除记录 ① 定位将要删除的记录,右击后在弹出的快捷菜单中选择“删除”命令。 ② 弹出删除确认对话框,单击“是”按钮即删除选择的记录。
3.5 数据表约束和数据完整性控制
3.5数据表约束和数据完整性控制 数据的完整性控制:指保护数据库中的数据的正确性、有效性和相容性,防止数据库中存在不符合语义的数据,防止错误信息进入数据库,并且使数据符合所描述的业务规则。 SQL Server使提供了定义约束、检查和保持数据符合约束的完整性控制机制。通过限制表的字段、记录以及表之间的数据一致来保证数据完整性。
3.5数据表约束和数据完整性控制 SQL Server常用完整性约束机制 完整性 约束 作用 实体 主关键字约束(Primary Key) 保证表中记录行的唯一性 唯一性约束(Unique) 保证在非关键字字段不出现重复值 域 默认值约束(Default) 对没有插入值的列自动添加表定义时对该列设置的默认值 非空值约束(Not Null) 限定某一列必须有值,即不允许空值 检查约束(Check) 限定某一列中可接受的值或数据格式 参照 外关键字(Foreign Key) 通过表间关系约束字段值的有效性
【例3.4】在数据库School中定义学生表T_Student的主键为“StudentCode”。 1. 实体完整性主要体现在表中记录的唯一性。 实体完整性 主关键字约束(Primary Key) 唯一性约束(Unique) 唯一性约束可保证非主键列不输入重复值。 对非主键字段或字段的组合强制唯一性。 对允许空值的字段强制唯一性。 主关键字是能保证表中记录唯一性的一个或多个字段的组合。 主键的值不能重复,且不能为空。一个表只能有一个主键。 【例3.4】在数据库School中定义学生表T_Student的主键为“StudentCode”。 【例3.5】在数据库School的学生表Student中不允许出现姓名且生日相同的记录,并按姓名升序和生日降序排列,即对“StudentName”和“Birthday”字段组合定义唯一性约束。
3.5数据表约束和数据完整性控制 【例3.4】在数据库School中定义学生表T_Student的主键为“StudentCode”。
【例3.5】在数据库School的学生表Student中不允许出现姓名且生日相同的记录,并按姓名升序和生日降序排列,即对“StudentName”和“Birthday”字段组合定义唯一性约束。 ② 选择“添加”命令,将名称修改为“IX_StudentNameBirth”。点击“列”后“…”按钮,打开索引列窗口,分别在两行中选择“StudentName”、“Birthday”,并选择排序顺序,点击“确定”返回“索引/键”页。在 “是唯一的”其后下拉列表框中选择“是”。
2. 域完整性主要体现在表中字段值的有效性。 默认值约束(Default) 域完整性 非空值约束(Not Null) 检查约束(Check) 默认值约束使用户能够定义一个值,每当用户没有在某一列中输入值时,则系统将所定义的值提供给这一列 非空值约束要求记录中的每一列必须有值 检查约束限制某一列中可接受的值或格式 【例3.6】在数据库School的学生表T_Student中,设置性别Sex字段的默认值为“男”。 【例3.7】在数据库School的学生表T_Student中,设置StudentCode、StudentName、ClassCode、Sex字段为非空值,其他字段允许为空。 【例3.8】在数据库School的学生表T_Student中,设置Sex列的值只允许是“男”或“女”。
3.5数据表约束和数据完整性控制 【例3.6】在数据库School的学生表T_Student中,设置性别Sex字段的默认值为“男”。 ①打开Student表的“表设计”页面,选择“Sex”字段 ②在 “列属性”窗格中的“默认值或绑定”处填写‘男’。注意因为Sex字段是字符类型,‘男’采用西文单引号扩起来。 ③当保存表时,该约束设置即保存在数据库中。
3.5数据表约束和数据完整性控制 【例3.7】在数据库School的学生表T_Student中,设置StudentCode、StudentName、ClassCode、Sex字段为非空值,其他字段允许为空。 ①打开Student表的“表设计”窗口,一个字段在新建立时默认允许空(√),如果要设置为非空,只需要点击该字段在允许空位置的单元格将“√”去掉即可,再次点击又可以设置允许空“√”。 ②当保存表时,该约束设置即保存在数据库中。
【例3.8】在数据库School的学生表T_Student中,设置Sex列的值只允许是“男”或“女”。 3.5数据表约束和数据完整性控制 【例3.8】在数据库School的学生表T_Student中,设置Sex列的值只允许是“男”或“女”。 ①打开Student表的“表设计”窗口,右击任一字段行,从快捷菜单中选择“CHECK约束”命令,进入“CHECK约束” ② 选择“添加”命令,将名称修改为 “CK_Student_Sex”。 ③ 点击“表达式”后的按钮出现 “CHECK约束表达式”对话框,输入:Sex = ’男’ or Sex = ’女’ ④ 将“表设计器”列表中的“强制用于INSERT 和 UPDATE”、“强制用于复制”、“在创建或重新启用时检查现存数据” 都改为“是”。
3.5数据表约束和数据完整性控制 3. 参照完整性通过表间关系约束字段的值的有效性。 参照完整性 : 外关键字(Foreign Key) 两个建立关系的表中,在主表中相关字段定义了主键或唯一性约束,在从表中将相关字段定义为外键。这样,外键的取值必须是主键中存在的值或空值。 【例3.9】在数据库School的学生表Student和Class表间建立关系,实施参照完整性约束。在该关系中,将Class的ClassCode字段设置为主键,将Student 的ClassCode设置为外键,并实施参照完整性。
【例3.9】在数据库School的学生表Student和Class表间建立关系,实施参照完整性约束。 3.5数据表约束和数据完整性控制 【例3.9】在数据库School的学生表Student和Class表间建立关系,实施参照完整性约束。 ① 打开外表Student表的“表设计”窗口,右击并选择“关系”命令,出现 “外键关系”对话框。 ② 单击“添加”按钮,点击“表和列规范”后的按钮,出现“表和列”对话框,将主键表改为“Class”,关系的主键字段为ClassCode,在“外键表”Student下选择外键字段ClassCode。 ③ 关系名自动变为“FK_Student_Class,该名可修改。 ④ 在“外键关系”窗口的 “表和列规范”、“INSERT 和 UPDATE 规范”进行设置,实施参照完整性。 ⑤ 选择“关闭”按钮完成关系创建。
3.6 索引的创建和维护
3.6索引的创建与维护 1. 什么是索引 索引与字典检字索引的原理是一样的,可实现快速找到内容。一个字典可有多个索引,如拼音、部首、五角号码等。 索引是由表中的一列或者若干列的值与其对应的记录在数据表中地址所组成。数据库中一个表的存储由两部分组成:数据页面和索引页面。 索引可加快依据索引字段对表中数据行的检索、强制保持表的数据唯一性等。 例如:按姓名建索引可提高按姓名的查找速度,但注意不能提高按其他字段的查找速度。
3.6索引的创建与维护 索引虽然能改善查询性能,但也耗费了磁盘空间,并且当对数据表进行数据增加、修改或删除时,系统需要花费一些时间来维护索引,所以通常不在一个表上建立太多索引,也不建立不常使用的索引。 一般来说,需要在下面这些地方建立索引: 在主键和外键上创建索引。 在检索频繁的字段上建立索引。 在经常需要排序的字段上建立索引。
可为表创建一个或多个索引。索引有以下特性: 3.6索引的创建与维护 2. 索引的特性 可为表创建一个或多个索引。索引有以下特性: 唯一索引:不允许表中任何两行具有相同索引值。 主键索引:因为被定义为主键的字段唯一标识表中的每一行,所以系统自动创建主键索引。 聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 提示: 聚集索引可加快 UPDATE 和 DELETE 操作的速度,因为这些操作需要读取大量的数据。但创建或修改聚集索引可能会非常耗时,因为需要在磁盘上重新组织表中的数据行的存储顺序。 如果在一个表中既要创建聚集索引,又要创建非聚集索引,应先创建聚集索引,然后再创建非聚集索引,因为聚集索引会改变数据行的物理存储顺序。
【例3.12】为School数据库的Student表建立索引,按学号(StudentCode)建立主键索引;按班号(ClassCode)建立升序非唯一索引,索引的组织方式为聚集索引。 ② 右击任一字段行,从快捷菜单选择“索引/键”命令,进入“索引/键”窗口。选择“添加”命令,单击“列”右侧下拉列表框后的按钮“…”,出现“索引列”对话框。 ③ 在“索引列”对话框中选择要创建索引的字段“ClassCode”,在排序顺序下拉列表中选择“升序”,点击“确定”按钮,返回“索引/键”窗口。 ④ 在“索引/键”窗口,选择“是唯一的”值为“否”;选择“创建为聚集的”值为“是”;修改索引名为“IX_ClassCode”;关闭该窗口,索引即创建好了。
3.6索引的创建与维护 3. 索引的管理 索引管理包括索引的查看、修改和删除。索引管理的方法如下: ① 在表设计窗口右击任一字段行,选择“索引/键”命令,进 “索引/键”窗口。 ② 在左侧索引列表中选择要查看或修改的索引,在右侧就可修改该索引的各项属性。 ③ 若要删除索引,则在左侧索引列表中选择要删除的索引,点击“删除”按钮即可。
课内实验 1. 快速浏览实验指导书中第一章实验案例说明,了解BookStore数据库设计。 2. P15 实验一 SQL Server基本操作1-7题。 注意:因时间紧张, 1)可在课堂建立数据表Book、Publisher、Customer3个表,课后再建立其他的表。 2)一定要先建立表、设置各种约束及表间关系,最后再输入数据! 3)主表的数据要先输入,外表后输入! 4)每个表只输入3条即可,但要注意约束的限制,自己选择输入哪3条! 完成后分离数据库,用自己的学号_姓名压缩数据文件和日志文件提交。
课外实验 快速浏览实验指导书中第一章实验案例说明,了解BookStore数据库设计。 2. P15 实验一 SQL Server基本操作。 在课堂已完成的数据库基础上,完成其他表的创建(包括数据完整性约束的设置)及表间关系定义。每个表只需输入3条记录。 完成后分离数据库,用自己的学号_姓名压缩数据文件和日志文件提交。
谢谢!