第3章 创建数据类型和表
第3章创建数据类型和表
本章概述
在前面了解了SQL Server数据库的组成以及SQL Server数据库中的对象后,我们在本章中学习数据库中的数据类型和表的创建方法。通过本章的学习,我们已经能够利用SQL Server数据库为简单资料设计和实现最基本的存储方案了。
教学目标
●了解SQL Server支持的数据类型
●掌握创建和删除用户定义数据类型的方法
●掌握创建和删除用户表的方法
●掌握生成列值的方法
●掌握生成脚本的方法
教学重点
●SQL Server支持的类型,何时选用何种类型描述数据。用户定义类型的相关处理。
●用户表的增删以及相关操作,包括生成脚本和数据列的定义。
教学难点
●本章同样会设计到数据的底层存储结构,比如B树,为什么要这样设计,需要讲
清楚。
●企业项目流程同课程内容的结合。比如设计表结构属于项目什么阶段的任务,该
任务的实际进行方式是如何的(结合案例)。又比如生成SQL脚本对项目的作用。
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
教学资源
先修知识
在正式开始学习本章内容以前,学生须具备下列知识基础。
2
第3章创建数据类型和表
建议学时
课堂教学(3课时)+实验教学(3课时)
教学过程
3.1创建数据类型
教学提示:
本节主要达到三个目的。
●掌握SQL Server支持的数据类型。(精讲)
●掌握用户自定义类型的创建。(精讲+演示)
●掌握选择数据类型的原则,这点在企业数据库应用中非常重要,因为正确的选择数据
列的类型将使数据库性能达到最优。(略讲)
3
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
4
第3章创建数据类型和表
3.2创建表
教学提示:
本节主要达到两个目的。
●掌握SQL Server数据库表的存储结构。(精讲)
●掌握SQL Server数据库表的创建和相关操作。(精讲+演示)
5
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
3.3生成列值
教学提示:
本节主要达到一个目的。
●掌握自动生成列值的方法,这在需要自动产生每列的唯一标识时非常重要。(精讲+演
示)
6
第3章创建数据类型和表
3.4生成脚本
教学提示:
本节主要达到一个目的。
●掌握将数据库对象的定义保存到脚本的方法,该技巧能够使开发组在环境出现问题时
重新创建数据库,并且能够在大型团队开发中精确的复制测试或者开发环境。(精讲+演示)
7
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
3.5推荐操作
教学提示:
本节主要达到一个目的。
●让学生了解有经验的数据库程序员的一些通常的作法,这些作法在实际工作中证明是
高效的。(略讲)
总结
经过本章的学习,我们了解了下列的知识和内容。
●数据库程序员的首要任务就是设计数据库表结构,选择每列的数据类型就是基本工作。
数据类型及其长度的选取将极大地影响到数据库的性能。
●数据库表的创建、更改和删除等基本操作。
●生成列值的操作,这些操作保证每行数据拥有一个唯一的标号。
●生成SQL脚本,这些脚本保证SQL Server数据库中的对象结构能够被精确复制到其
他位置,从而确保项目的顺利进行。
在第四章中,我们学习如何通过诸如约束等手段保护数据完整性。
8
第3章创建数据类型和表
随堂练习
1.下图所示是一个大学的管理数据库中的三张数据表的数据字典结构:
如果想要提高数据查询的速度和加少数据冗余,应当如何做?
A.添加表Instructors,包含ID列、InstructorName列和OfficePhone列,将ID列
加入到Courses表中
B.将Classroom表与Course表的内容合并,删除Classroom表
C.将Courses表中的主键约束设在CourseID和CourseTitle上
D.删除ClassroomID列,将主键约束设在ClassNumber和ClassTime列上
正确答案:(A)
分析:
规范化的数据库是最有效率的。这个数据库没有规范化。Courses数据表中包含导师(Instructor)信息。当一位导师有多门课程时,InstructorName和OfficePhone在每门课程记录中都会出现。
我们可使用下面的步骤规范化数据库
●创建表Instructors
●创建数据库列ID作为主键
9
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
10●在Instructors表上添加InstructorName和OfficePhone ●在Course表上去除InstructorName和OfficePhone
●将ID列加入到Courses表中
2.在某个数据库中,为了产生一些查询信息,需要连接四五张数据表。假设该数据库在设计时做到了高度的规范化。在这种情况下应当如何提高数据查询的响应速度?
A.在这四五张数据表上创建视图并在视图上创建索引
B.降低数据库设计的规范化程度
C.提高规范化程度
D.在连接列上创建索引
正确答案:(B)
分析:
如果数据库过度规范化,数据库就会由数量众多,数据列很少且相互关联的数据表构成,那么数据库的性能会下降。这是因为当数据库处理分散在数量众多,数据列很少且相互关联的数据表中的数据时,数据库必须将多张表连接,而这将导致数据库的负载增加。在这种情况下,少许降低数据库的规范化程度将能够提到性能。
3.在为仓储公司开发的SQL Server 2000数据库中,需要创建一张数据表存放了订单数据。
其中OrderID必须是数据库自动生成的具备唯一性的数据列,CustomerID和CargoID 分别是在另外的数据表Customers和Cargos中已有的数据中选取,OrderDate不能为空,下面四个选项中的SQL语句能实现创建功能?
A.CREATE TABLE Orders
{
OrderID int identity(1,1) PRIMARY KEY NOT NULL,
OrderDate datetime NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES
Customers(CustomerID),
CargoID int NOT NULL FOREIGN KEY REFERENCES Cargos(CargoID) ,
ShipDate datetime NULL
}
B.CREATE TABLE Orders
{
第3章创建数据类型和表OrderID int identity(1,1) PRIMARY KEY NOT NULL,
OrderDate datetime NOT NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES
Customers(CustomerID),
CargoID int NOT NULL FOREIGN KEY REFERENCES Cargos(CargoID),
ShipDate datetime NULL
}
C.CREATE TABLE Orders
{
OrderID int identity(1,1) PRIMARY KEY NOT NULL,
OrderDate datetime NOT NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES
Customers(CustomerID),
CargoID int NOT NULL,
ShipDate datetime NULL
}
D.CREATE TABLE Orders
{
OrderID int PRIMARY KEY NOT NULL,
OrderDate datetime NOT NULL,
CustomerID char(5) NOT NULL FOREIGN KEY REFERENCES
Customers(CustomerID),
CargoID int NOT NULL FOREIGN KEY REFERENCES Cargos(CargoID),
ShipDate datetime NULL
}
正确答案:(B)
4.在一个客户端/服务器结构的系统中,用户在客户端输入数据。每次输入后就产生一个唯一的纪录编号,平均每天有10000条记录输入到数据库中,应当如何设计数据库实现该需求?
11
数据库程序设计—SQL Server 2000 数据库程序设计教师参考手册
12A.将数据记录的一列设为唯一表示符
B.将数据记录的一列设置IDENTITY属性
C.使用函数操作数据,保证唯一性
D.使用存储过程保证数据的唯一性
正确答案:(B)
5.在公司人事管理数据库中使用数据表Employees来记录员工信息。为了保证该数据表中的HomePhone和BusinessPhone两个列中至少有一列不为空,请问应当在下列选项中选择哪一个?
A.创建规则绑定到这两列上,不允许两列为空
B.创建规则绑定到这两列上,不允许输入为空
C.在这两列上添加CHECK约束防止空值输入
D.在这两列上添加CHECK约束验证输入的两列中至少有一列不为空
正确答案:(D)
布置作业
1.完成书后习题1-8
2.预习书中所有实验,并填写操作步骤。在实验课上准备操作
案例教学
本章介绍了数据库表的设计和创建过程。学生已经可以根据案例说明创建数据库中的数据类型和表,但是其它对象,比如约束,需要通过下一章的学习才能掌握。