1、1.1 数据库系统的概念http:/ 2007-04-07 12:11 史创明、王俊伟 清华大学出版社 我要评论(0) 摘要:在数据库系统中,数据库的使用既可以在程序中实现,也可以在独立的数据操作界面中实现,比如在 SQL Server 数据库系统中,我们既可以使用 T-SQL 语言操作数据库,也可以使用SQL Server 企业管理器实现对数据库的操作和管理。 标签:SQL SQL2000 微软 数据库 限时报名参加 “甲骨文全球大会2010北京”及“JavaOne 和甲骨文开发者大会 2010”计算机从诞生开始,就面临着处理大量数据的任务。使用计算机以后,数据处理的速度和规模无论相对于手工
2、方式还是机械方式都是无可比拟的。随着数据处理量的增长,产生了数据管理技术。数据管理技术经历了人工管理、文件系统和数据库系统三个阶段。人工管理方式固然效率低下,就是对于文件系统而言,也存在着数据冗余、数据不一致性和数据联系薄弱等缺点。而数据库系统克服了文件系统的缺点,提供了对数据更高级、更有效的管理手段。数据库系统阶段的数据管理技术有以下特点:“ 采用数据模型表示复杂的数据结构。“ 有较高的数据独立性。“ 数据库系统为用户提供了方便的用户接口。在数据库系统中,数据库的使用既可以在程序中实现,也可以在独立的数据操作界面中实现,比如在 SQL Server 数据库系统中,我们既可以使用 T-SQL
3、语言操作数据库,也可以使用 SQL Server 企业管理器实现对数据库的操作和管理。“ 增加了系统灵活性“ 数据库系统提供了四方面的数据控制功能 数据库的并发控制、数据库的恢复、数据完整性和数据安全性。数据库技术是在操作系统的文件系统基础上发展起来的,而且数据库管理系统本身要在操作系统支持下才能工作。数据库与数据结构之间的联系也很密切。数据库管理系统(DataBase Management System,简称 DBMS)是指数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分,我们对数据库系统的一切操作,包括定义、查询、更新以及各种控制,都是通过数据库管理系统进行的。DBMS
4、由两大部分组成:查询处理器和存储管理器。查询处理器有四个组成部分:DDL 编译器、DML 编译器、嵌入式 DML 的预编译器以及查询运行核心程序;存储管理器有四个主要组成部分:权限和完整性管理器、事务管理器、文件管理器以及缓冲区管理器。DBMS 的工作示意图如图 1-1 所示。 图 1-1 DBMS 的工作模式DBMS 总是基于某种数据模型,根据 DBMS 的不同,DBMS 可以分成层次型、网状型、关系型、面向对象型等。DBMS 的工作模式如下:“ 接受应用程序的数据请求和处理请求。“ 将用户的数据请求(高级指令)转换成复杂的机器代码(低层指令)。“ 实现对数据库的操作。“ 从对数据库的操作中
5、接受查询结果。“ 对查询结果进行处理(格式转换)。“ 处理结果返回给用户。DBMS 的主要功能有以下五个方面:“ 数据库的定义功能 在 DBMS 中应该包括数据定义语言(DDL)的编译程序。“ 数据库的操作功能 DBMS 提供数据操作语言(DML)实现对数据的操作。其基本的数据操作有两类:检索(查询)和更新(包括插入、删除、更新)。因此,在 DBMS中应包括 DML 的编译程序或解释程序。通常查询语言是指数据操作语言中的检索语句部分。“ 数据库的保护功能 包括数据库的恢复、数据库的并发控制、数据完整性控制和数据安全性控制。“ 数据库的维护功能 包括数据库的数据导入、转换、存储,数据库性能监控等
6、功能。“ 数据字典 数据库系统中存放三级结构定义的数据库称为数据字典。对数据库的操作都要通过数据字典才能实现。数据字典中还存放数据库运行时的统计信息,例如记录个数、访问次数等。如图 1-2 所示是数据库管理系统的结构图。数据库管理系统提供了许多不同的结构以满足在不同用途下的应用。例如,对于一般用途的普通用户,可以通过数据库管理系统的应用界面对数据库进行简单操作;而对于经验丰富的数据库管理员,则可以使用DBMS 提供的数据定义语言(DDL)来执行高级管理操作。图 1-2 DBMS 结构图1.2 关系数据模型http:/ 2007-04-07 13:31 史创明、王俊伟 清华大学出版社 我要评论(
7、0) 摘要:在本章中,我们将系统地学习数据库系统的概念及数据库管理系统的详细内容,还将详细学习关系型数据库的相关知识,以及关系数据库的实体内容,建立数据库系统离不开数据模型。模型是对现实世界的抽象,在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象。能表示实体类型及实体间联系的模型称为“ 数据模型 ”。 标签:SQL SQL2000 微软 数据库 限时报名参加 “甲骨文全球大会2010北京”及“JavaOne 和甲骨文开发者大会 2010”建立数据库系统离不开数据模型。模型是对现实世界的抽象,在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象。能
8、表示实体类型及实体间联系的模型称为“数据模型”。数据模型的种类很多,目前被广泛使用的可分为两种类型。一种是独立于计算机系统的数据模型,完全不涉及信息在计算机中的表示,只是用来描述某个特定组织所关心的信息结构,这种模型称为“概念数据模型”。概念模型是按用户的观点对数据建模,强调其语义表达能力,概念应该简单、清晰、易于用户理解,它是对现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。其典型代表就是著名的“实体-关系模型 ”,我们将在 1.4 节详细介绍实体-关系模型的知识。另一种数据模型是直接面向数据库的逻辑结构,它是对现实世界的第二层抽象。这种模型直接与数据库管理系统有关,称为“逻
9、辑数据模型 ”,包括层次模型、网状模型、关系模型和面向对象模型。逻辑数据模型应该包含数据结构、数据操作和数据完整性约束三个部分,通常有一组严格定义的无二义性语法和语义的数据库语言,人们可以用这种语言来定义、操作数据库中的数据。在逻辑数据模型的四种模型中,层次模型和网状模型已经很少应用,而面向对象模型比较复杂,尚未达到关系模型数据库的普及程度。目前理论成熟、使用普及的模型就是关系模型。关系模型是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上是一张二维表格。关系模型用键导航数据,其表格简单,用户只需用简单的查询语句就可以对数据库进行操作,并不涉及存储结构、访问技术等细节。SQL
10、 语言是关系数据库的代表性语言,已经得到了广泛的应用。典型的关系数据库产品有 DB2、Oracle 、Sybase、SQL Server 等。1.2.1 关系数据模型基本概念在关系数据模型中,关系可以看成由行和列交叉组成的二维表格,表中一行称为一个元组,可以用来标识实体集中的一个实体。表中的列称为属性,给每一列起一个名称即为属性名,表中的属性名不能相同。列的取值范围称为域,同列具有相同的域,不同的列也可以有相同的域。表中任意两行(元组)不能相同。能唯一标识表中不同行的属性或属性组称为主键。尽管关系与传统的二维表格数据文件具有类似之处,但是它们又有区别,严格地说,关系是一种规范化的二维表格,具有
11、如下性质:属性值具有原子性,不可分解。没有重复的元组。理论上没有行序,但是有时使用时可以有行序。在关系数据库中,关键码(简称键)是关系模型的一个重要概念,是用来标识行(元组)的一个或几个列(属性)。如果键是唯一的属性,则称为唯一键;反之由多个属性组成,则称为复合键。键的主要类型如下: 超键 在一个关系中,能唯一标识元组的属性或属性集称为关系的超键。 候选键 如果一个属性集能唯一标识元组,且又不含有多余的属性,那么这个属性集称为关系的候选键。 主键 如果一个关系中有多个候选键,则选择其中的一个键为关系的主键。用主键可以实现关系定义中“表中任意两行(元组)不能相同 ”的约束。例如,在本书的示例数据
12、库图书管理系统中,我们以图书明细表为例。在该表中,我们假设图书编号列是唯一的,因为图书馆管理员是通过该编号对图书进行操作的。因此,把图书编号作为主键是最佳的选择,而如果使用图书名称列作为主键则会存在问题。为此,最好创建一个单独的键将其明确地指定为主键,这种唯一标识符在现实生话中很普遍,例如,身份证号、牌照号、订单号、学生标识号和航班号等。外键 如果一个关系 R 中包含另一个关系 S 的主键所对应的属性组 F,则称此属性组 F 为关系 R 的外键,并称关系 S 为参照关系,关系 R 是依赖关系。为了表示关联,可以将一个关系的主键作为属性放入另外一个关系中,第二个关系中的那些属性就称为外键。例如,
13、同样是在图书管理系统数据库,有一个出版社表用来描述出版社的各种信息,像电话、地址和网址等,在该表中使用“出版社编号”作为主键。为了表示图书与出版社之间的联系,我们可以将出版社表中的主键“出版社编号 ”作为新列添加到图书明细表中。在这种情况下,图书明细表中的“出版社编号”就被称为外键,因为“出版社编号” 是其所在表以外(出版社表)的一个主键。当出现外键时,主键与外键的列名称可以是不同的。但必须要求它们的值集相同,即图书明细表中出现的“出版社编号”一定要和出版社表中的值匹配。1.2.2 关系模型数据操作语言关系模型提供一组完备的高级关系运算,以支持对数据库的各种操作。关系数据库的数据操作语言(DM
14、L)的语句分为查询语句和更新语句两大类。查询语句用于描述用户的各类检索要求;更新语句用于描述用户的插入、修改和删除等操作。关系数据操作语言建立在关系代数基础上,具有以下特点: 以关系为单位进行数据操作,操作的结果也是关系。非过程性强。很多操作只需指出做什么,而勿需步步引导怎么去做。以关系代数为基础,借助于传统的集合运算和专门的关系运算,使关系数据语言具有很强的数据操作能力。下面我们介绍在数据操作语言中对数据库进行查询和更新等操作的语句: SELECT 语句 指定的条件在一个数据库中查询的结果,返回的结果被看作记录的集合。 SELECT.INTO 语句 用于创建一个查询表。 INSERT INT
15、O 语句 用于向一个表添加一个或多个记录。 UPDATE 语句 用于创建一个更新查询,根据指定的条件更改指定表中的字段值。UPDATE 语句不生成结果集,而且当使用更新查询更新记录之后,不能取消这次操作。DELETE 语句 用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用 DELETE 删除多个记录。 INNER JOIN 操作 用于组合两个表中的记录,只要在公共字段之中有相符的值。可以在任何 FROM 子句中使用 INNER JOIN 运算。这是最普通的连接类型。只要在这两个表的公共字段之中有相符的值,内部连接将组合
16、两个表中的记录。LEFT JOIN 操作 用于在任何 FROM 子句中组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部连接。左边外部连接将包含从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。 RIGHT JOIN 操作 用于在任何 FROM 子句中组合来源表的记录。使用 RIGHT JOIN 运算创建一个右边外部连接。右边外部连接将包含从第二个(右边)表开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。 PARAMETERS 声明 用于声明在参数查询中的每一个参数的名称及数据类型。PARAMETERS 声明是可选的,但
17、是当使用时,需置于任何其他语句之前,包括 SELECT 语句。 UNION 操作 用于创建一个联合查询,它组合了两个或更多的独立查询或表的结果。所有在一个联合运算中的查询,都须请求相同数目的字段,但是,字段不必大小相同或数据类型相同。1.2.3 Codd 准则和完整性规则根据关系数据理论和 Codd 准则的定义,一种语言必须能处理与数据库的所有通信问题,这种语言有时也称为“综合数据专用语言”。该语言在关系型数据库管理系统中就是SQL。SQL 的使用主要通过数据操作、数据定义和数据管理三种操作实现。其中 Codd提出了 RDBMS 的 12 项准则。信息准则 关系数据库中的所有信息都应在逻辑一级
18、上用一种方法,即表中的值,显示的表示。 保证访问准则 依靠于表名、主键和列名,保证能以逻辑的方式访问数据库中的每个数据项。 空值的系统化处理 RDBMS 支持空值(不同于空的字符串或空白字符串,并且不为0)系统化地表示缺少的信息,且与数据类型无关。 基于关系模型的联机目录 数据库的描述在逻辑上应该和普通数据采用同样的方式,使得授权用户可以使用查询一般数据所用的关系语言来查询数据库的描述信息。 统一的数据字语言准则 一个关系系统可以具有多种语言和多种终端使用方式(如表格填空方式、命令行方式等)。但是,必须有一种语言,它的语句可以表示为具有严格语法规定的字符串,并能全面地支持以下功能:数据定义、视
19、图定义、数据操作(交互式或程序式)、完整约束、授权、事务控制(事务开始、提交、撤销)。视图更新准则 所有理论上可更新的视图也应该允许由系统更新。 高阶的插入,更新和删除 把一个基本关系或导出关系作为一个操作对象进行数据的检索以及插入、更新和删除。 数据的物理独立性 无论数据库的数据在存储表示上或存取方法上做任何变化,应用程序和终端活动要都保持逻辑上的不变性。 数据的逻辑独立性 当基本表中进行理论上信息不受损害的任何变化时,应用程序和终端活动都要保持逻辑上的不变性。 数据完整性的独立性 关系数据库的完整性约束必须是用数据子语言定义并存储在目录中的,而不是在应用程序中加以定义的。至少要支持以下两种
20、约束:实体完整性,即主键中的属性不允许为 NULL。参照完整性,即对于关系数据库中每个不同的非空的外码值,必须存在一个取自同一个域匹配的主键值。分布的独立性 一个 RDBMS 应该具有分布独立性。分布独立性是指用户不必了解数据库是否是分布式的。无破坏准则 如果 RDBMS 有一个低级语言(一次处理一个记录 ),这一低级语 言不能违背或绕过完整性准则以及高级关系语言(一次处理若干记录)表达的 约束。数据库管理系统是对数据进行管理的大型系统软件,它是数据库系统的核心组成部分,用户在数据库系统中的一切操作,包括数据定义、查询、更新及各种控制,都是通过DBMS 进行的。关系模型的完整性规则是对数据的约
21、束。关系模型提供了三类完整性规则:实体完整性规则、参照完整性规则和用户定义的完整性规则。其中实体完整性规则和参照完整性规则是关系模型必须满足的完整性的约束条件,称为关系完整性规则。实体完整性 指关系的主属性(主键的组成部分) 不能是空值。空值(null) 就是指不知道或是不能使用的值,它与数值 0 和空字符串的意义都不一样。 参照完整性 如果关系的外键 R1 与关系 R2 中的主键相符,那么外键的每个值必须在关系 R2 中主键的值中找到或者是空值。用户定义完整性 是针对某一具体的实际数据库的约束条件。它由应用环境所决定,反映某一具体应用所涉及的数据必须满足的要求。关系模型提供定义和检验这类完整
22、性的机制,以便用统一的、系统的方法处理,而不必由应用程序承担这一功能。1.3 关系规范化http:/ 2007-04-07 13:31 史创明、王俊伟 清华大学出版社 我要评论(0) 摘要:在数据库中,数据之间存在着密切的联系。关系数据库由相互联系的一组关系所组成,每个关系包括关系模式和关系值两个方面。关系模式是对关系的抽象定义,给出关系的具体结构;关系的值是关系的具体内容,反映关系在某一时刻的状态。 标签:SQL SQL2000 微软 数据库 限时报名参加 “甲骨文全球大会2010北京”及“JavaOne 和甲骨文开发者大会 2010”在数据库中,数据之间存在着密切的联系。关系数据库由相互联
23、系的一组关系所组成,每个关系包括关系模式和关系值两个方面。关系模式是对关系的抽象定义,给出关系的具体结构;关系的值是关系的具体内容,反映关系在某一时刻的状态。一个关系包含许多元组,每个元组都是符合关系模式结构的一个具体值,并且都分属于相应的属性。在关系数据库中的每个关系都需要进行规范化,使之达到一定的规范化程度,从而提高数据的结构化、共享性、一致性和可操作性。关系模型原理的核心内容就是规范化概念,规范化是把数据库组织成在保持存储数据完整性的同时最小化冗余数据的结构的过程。规范化的数据库必须符合关系模型的范式规则。范式可以防止在使用数据库时出现不一致的数据,并防止数据丢失。关系模型的范式有第一范
24、式、第二范式、第三范式和 BCNF 范式等多种。在这些定义中,高级范式根据定义属于所有低级的范式。第三范式中的关系属于第二范式,第二范式中的关系属于第一范式。下面我们介绍规范化的过程。1第一范式第一范式是第二和第三范式的基础,是最基本的范式。第一范式包括下列指导原则: 数据组的每个属性只可以包含一个值关系中的每个数组必须包含相同数量的值 关系中的每个数组一定不能相同如果关系模式 R 中的所有属性值都是不可再分解的原子值,那么就称此关系 R 是第一范式(First Normal Form,简称 1NF)的关系模式。在关系型数据库管理系统中,涉及到的研究对象都是满足 1NF 的规范化关系,不是 1
25、NF 的关系称为非规范化的关系。 原始数据例如,在本书示例数据库经销商中的关系,如图 1-3 所示。其中的第四和第五行的2、3 数组违反了第一范式,因为“商品编号”和“ 商品名称” 属性每个都包含两 个值。如果要将这些数据规范化,就必须创建允许分离数据的附加表,这样才能使每个属性只包含一个值,每个数组包含相同数量的值,并且每个数组各不相同,如图 1-4 所示。这时的数据才符合第一范式。 符合 1NF 的数据2第二范式第二范式(2NF)规定关系必须在第一范式中,并且关系中的所有属性依赖于整个候选键。候选键是一个或多个唯一标识每个数据组的属性集合。设置候选键后的数据例如,在图 1-5 所示的关系中
26、,可以将“商品名称”和“供应商 ”名称指定为候选键。这些值共同唯一标识每个数组。在该图中,“库存编号”属性只依赖于“商品名称” ,而不依赖于“供应商名称” 属性。3第三范式第三范式(3NF)同 2NF 一样依赖于关系的候选键。为了遵循 3NF 的指导原则,关系必须在 2NF 中,非键属性相互之间必须无关,并且必须依赖于键。 理想的 3NF 数据例如,在图 1-6 所示的关系中,候选键“供应商代号”是属性。“商品名称” 和“供应商名称”的属性都依赖于主键“ 库存编号” ,并且相互之间进行关联。“ 供应商代号”属性依赖于“商品编号”,而不依赖于主键“ 库存编号”。对于关系设计,理想的设计目标是按照
27、规范化规则存储数据。但是,在数据库实现的现实世界中,将数据解规范化却是通用的惯例,也就是要专门违反规范化规则,尤其是违反第二范式和第三范式。当过于规范化的结构使实现方式复杂化时,解规范化主要用于提高性能或减少复杂性。尽管如此,规范化的目标仍然是确保数据的完整性,在解规范化时应该注意。1.4 实体-关系模型http:/ 2007-04-07 13:31 史创明、王俊伟 清华大学出版社 我要评论(0) 摘要:在 1.2 节中我们学习到,数据库的数据模型有概念模型,其典型代表就是著名的“实体-关系模型” (E-R 模型),是用户和数据库设计人员之间进行交流的工具,在设计数据库系统之前,我们需要使用
28、E-R 图将现实世界中的实体和实体之间的联系转换为概念模型。 标签:SQL SQL2000 微软 数据库 限时报名参加 “甲骨文全球大会2010北京”及“JavaOne 和甲骨文开发者大会 2010”在 1.2 节中我们学习到,数据库的数据模型有概念模型,其典型代表就是著名的“实体-关系模型”(E-R 模型),是用户和数据库设计人员之间进行交流的工具,在设计数据库系统之前,我们需要使用 E-R 图将现实世界中的实体和实体之间的联系转换为概念模型。E-R 模型的基本元素是:实体、属性和联系。下面我们就分别介绍这些知识。1.4.1 实体实体(entity )是一个数据对象,指可以区别客观存在的事物
29、,如人、部门、表格、项目等。同一类实体的所有实例就构成该对象的实体集(entity classes)。也就是说,实体集是实体的集合,由该集合中实体的结构形式表示,而实例则是实体集中的某一个特例,例如,销售订单 6380 号是销售实体集的一个实例,通过其属性值表示。在 E-R 模型中,实体用方框表示,方框内注明实体的命名。实体名常用以大写字母开头的有具体意义的英文名词表示,联系名和属性名也采用这种方式。通常实体集中有多个实体实例。例如,数据库中存储的每笔订单都是销售实体集的实例。图 1-7 所示为一个实体集和它的两个实例。 图 1-7 Sales 实体及其两个实例1.4.2 属性属性用来描述实体
30、的特征。在图书管理系统数据库中属性的例子包括:图书名称、出版社、出版日期、价格和图书作者等。E-R 模型中假定实体集的所有实例具有相同的属性。同时,依据系统的需求,每个属性都有它的数据类型及特性。特性包括指定该属性在某些情况下是否必需、属性是否有默认值、属性的取值范围、是否为主键或候选键等。如图 1-8 所示描述了实体、实例和属性的关系,其中使用黑体表示属性为主键,斜体表示属性为外键。 图 1-8 实体、实例和属性5.1 数据库表的创建、修改和删除http:/ 2007-04-07 13:53 史创明、王俊伟 清华大学出版社 我要评论(0) 摘要:一个数据库中包含一个或多个的表。表是数据的集合
31、,按行和列排列。每个表都有一个特定的主题,例如,“图书管理系统 ”数据库中包含有“作者表”、“ 图书明细表”以及“出版社表” 等。本章介绍表的管理。 标签:SQL SQL2000 微软 数据库 限时报名参加 “甲骨文全球大会2010北京”及“JavaOne 和甲骨文开发者大会 2010”建立完数据库后,就可以创建数据库表。表属于数据库对象中的一种,是数据存储的基本单位,它包含了所有的数据内容。在 SQL Server 中,一个数据库中可以创建多个表,而且每一个表内可以包含多达 1 024 个列。列的数目及表的总大小仅受限于可用的硬盘存储容量。另外,每一个列最多可以有 8 092 字节(不包括
32、image、text 或者ntext 数据)。下面我们开始创建表。5.1.1 表表是 SQL Server 中最主要的数据库对象,它是用来存储和操作数据的一种逻辑结构。表由行和列组成,因此也称之为二维表。1表结构表是我们在工作和生活中经常使用的一种表示数据及其关系的形式,如表 5-1 所示。 示意图每个表都有一个名字,以标识该表。例如,表 5-1 的名称为“ 作者表”,该表共有六列,每一列都有一个列名来描述该列的特性。每个表由若干行组成,表的第一行为各列标题,即“栏目信息”,其余各行都是数据。例如,表 5-1 中有四行数据,分别描述了四位作者的基本情况。用户可以根据日常工作经验,结合集合理论,
33、创建关系数据库使用表(即关系)来表示实体及其联系。“ 表结构 每个数据库包含了若干个表。每个表具有一定的结构,称之为“ 表型”。所谓表型是指组成表的各列的名称及数据类型,也就是日常表格的“栏目信息” 。“ 记录 每个表包含了若干行数据,它们是表的 “值” 。表中的一行称为一条记录(record),因此,表是记录的有限集合。“ 字段(列) 每条记录由若干个数据项构成,将构成记录的每个数据项称为字段(field)或者列。例如在 “作者表 ”中,表结构为(作者编号、作者姓名、性别、电话、家庭住址、籍贯),该表有四条记录,每条记录包括六个字段。“ 关键字 在“作者表” 中,若不加以限制,每个记录的“
34、作者姓名”、“性别” 、“电话”、“家庭住址”和“ 籍贯”字段的值有可能相同。但是“作者编号”字段的值对表中所有记录来说一定不同,“作者编号” 字段可将表中的不同记录区分开来,也就是我们所说的侯选关键字(candidate key)。2设计表在为一个数据库设计表之前,应考虑该数据库中要存放的数据以及数据如何划分到表中。例如,“图书管理系统”数据库需要存储图书信息、工作人员信息、学生信息等,而在“图书信息表” 中将存储图书的详细信息(即“ 图书明细表” )、借出信息(即“借出信息表”)、图书类型信息(即“图书类别表” )、出版社信息(即“ 出版社信息表”)、作者信息(即“作者表” )。具体对于某
35、一个表,在创建之前,最好先在纸上画出其轮廓。此时要考虑每个表中的内容有: “ 表中要存储的数据类型“ 表中需要的列以及每一列的类型“ 列是否可以为空“ 列的长度“ 是否需要在列上使用约束、默认值和规则“ 需要使用什么样的索引“ 哪些列作为主键5.1.2 创建表在纸上设计好表以后就可以开始创建表了。用户可以使用 T-SQL 中的 CREATE TABLE 语句或者使用企业管理器来创建表。默认状态下,只有系统管理员和数据库拥有者(DBO)可以创建新表,但系统管理员和数据库拥有者可以授权其他人来完成这一任务。在开始创建表之前,我们先来了解一下字段的属性。1字段的属性表的字段名字在同一个表中具有唯一性
36、,同一字段的数据属于同一种数据类型。除了用字段名和数据类型来指定字段的属性外,还可以定义其他属性,如 NULL 或 NOT NULL 属性和 IDENTITY 属性。“ NULL 或 NOT NULL 属性NULL 即空值,通常表示未知、不可用或将在以后添加的数据。如果表的某一字段被指定具有 NULL 属性,那么就允许在输入数据时省略该字段的值。反之,如果表的某一字段被指定具有 NOT NULL 属性,那么输入时必须给出具体值。“ IDENTITY 属性IDTENTITY 即字段的标识属性。对任何表都可创建包含系统自动生成序号值的一个标识字段,该序号值唯一标识表中的一行。每个表只能有一个字段设
37、置为标识属性,且该字段只能是 decimal、int、numeric ,bigint 或 tinyint 数据类型。指定了 IDENTITY 属性的字段称为 IDENTITY 字段。当用 IDENTITY 属性定义一个字段时,可以指定一个初始值和一个增量,输入数据到含有 IDENTITY 字段的表时,初始值在输入第一行数据时使用,以后就由 SQL Server 根据上一次使用的 IDENTITY 值加上增量得到新的IDENTITY 值。如果不指定初始值和增量值,则其默认值均为 1。 示意图2使用企业管理器创建表在“图书管理系统”数据库中创建一个数据表,其表名为 “图书明细表” ,表结构如表 5
38、-2所示。 示意图操作步骤:启动 SQL Server 企业管理器,依次打开树型目录选项,并在 【图书管理系统】目录中右击【表】项,选择【新建表】命令,如图 5-1 所示。弹出【“图书管理系统” 中的新表】(即表设计器)对话框。在该对话框中,用户可以将自己所设计的表结构输入到【列名】文本框中,并设置该列的【数据类型】、【长度】以及【允许空】等信息,如图 5-2 所示。 示意图加 示意图在【表设计器】对话框中,选择【列名】中的第一个文本框,并输入“图书编号” 文字,将鼠标指针右移到【数据类型】列中,将显示出【数据类型】为 char,【长度】为10,【允许空】为允许,如图 5-3 所示。单击【数据
39、类型】列的下拉列表,选择 int 项。此时,【长度】将改为 4。单击【允许空】中的“”符号,将其改为不允许为空,如图 5-4 所示。 示意图选择【列名】中的第二行文本框,在该文本框中输入列名为“类别编号” 。设置【数据类型】为 smallint,【长度】为 2,并且允许为空,如图 5-5 所示。用户可以根据表结构图,将其余字段填写完整,并设置其字段的类型,如图 5-6 所示。示意图右击图书名称的行选择器,选择【设置主键】命令,如图 5-7 所示。此时,将在行选择器中显示出主键标识 ,如图 5-8 所示。单击工具栏上的【保存】按钮,在弹出的【选择名称】对话框的【输入表名】文本框中,输入表名称为“
40、 图书明细表” ,单击【确定】按钮将其保存。 示意图3使用 T-SQL 语句创建表在创建数据库时,已经运用 T-SQL 语句创建过数据库,同样也可以运用 T-SQL 语句创建表。在使用 T-SQL 创建表之前,先了解一下 T-SQL 语句的语法结构。通过 T-SQL语句来创建表,其核心语句是 CREATE TABLE,该语句的语法格式如下所示: CREATE TABLE database_name.owner.owner.table_name /*指定表名*/(column_definition /*字段的定义*/column_name AS computed_column_expressio
41、n /*定义计算字段*/table_constrain /*指定表的约束*/)ONfilegroupDEFAULT /*指定存储表的文件组*/TEXTIMAGE_ONfilegroupDEFAULT /*指定存储 text,ntext 和 image 类型数据的文件组*/下面说明主要参数与子句的含义。“ database_name 用来创建表所在的数据库的名称。当然,此数据库必须存在,不能将一个不存在的数据库名称作为指定的数据库名称,否则会发生错误提示。“ owner 用来指定所创建的新表的所有者名。“ table_name 用来指定添加表的名称。表名必须遵循 T-SQL 标识符命名规则。“
42、column_name 用来指定在新表中的字段名称。“ computed_column_expression 用来定义计算字段值的表达式。表达式可以是字段名、常量、变量、函数等或它们的组合。所谓计算字段是一个虚拟的字段,它的值并不实际存储在表中,而是通过对同一个表中其他字段进行某种计算而得到的结果。“ ONfilegroupDEFAULT 用来指定存储此新表的文件组名称。当指定 filegroup 时,此新表将存储在所指定的文件组中,并且此文件组必须存在于数据库中。如果是指定DEFAULT 或没有指定时,则此新表将会存储在默认的文件组中。“ TEXTIMAGE_ON 用来指定 text、nte
43、xt 和 image 字段的数据存储的文件组。如果无此子句或指定了 DEFAULT,这些类型的数据就和表一起存储在相同的文件组中。接下来我们通过使用 CREATE TABLE 语句来创建“图书管理系统”数据库中的“ 图书明细表”。在“图书明细表”中,各字段类型分别为:【图书编号】类型为 int;【类别编号】类型为 smallint;【图书名称】类型为 nvarchar(50);【 作者编号】类型为 char;【出版社编号】类型为 char;【 出版日期 】类型为 smalldatetime;【定价】类型为money;【是否借出】类型为 bit;【封面】类型为 image,其应用方法如下: US
44、E 图书管理系统CREATE TABLE 图书明细表( 图书编号 int not null,类别编号 smallint null,图书名称 nvarchar(50) null,作者编号 char(10) null,出版社编号 char null,出版日期 smalldatetime null,定价 money null是否借出 bit not null,封面 image null,)5.1.3 修改表的结构用户在创建好表后,可能在使用一段时间后,需要对所创建的表结构、约束或其他列的属性进行修改,以符合目前使用的实际状况。在 SQL Server 2000 中,创建表与修改表同样简单。一般我们可
45、以使用 SQL Server 2000企业管理器和 T-SQL 语言两种方法来修改表。对一个已存在的表可以进行的修改操作包括:更改表名、增加列、删除列、修改已有列的属性(列名、数据类型、是否为空值)。1使用企业管理器修改表(1)更改表名SQL Server 中允许改变一个表的名字,但当表名改变后,与此相关的某些对象,以及通过表名与表相关的存储过程将无效。因此,一般不要更改一个已有的表名,特别是该表已定义了视图或建立了表关系。下面将前面所创建的“图书明细表” 的表名改为“图书详情表”。操作步骤:在 SQL Server 企业管理器中,展开所要更改表名的数据库,右击所要修改的表,选择【重命名】命令
46、。例如,重命名“图书明细表”表,如图 5-9 所示。此时,“图书明细表” 变成可更改状态,用户可以输入新的表名。例如,输入“图书详情表”,如图 5-10 所示,然后按回车键。系统将弹出一个【重命名】对话框,在该对话框中,提示用户如果更改了表名,将引起该表的存储过程、视图或触发器无效,要求用户对该操作予以确认。单击【是】按钮确认此操作。操作完成后,系统将提示“已成功重命名该对象”信息框,单击【确定】按钮,完成对表名的修改操作。 示意图加 示意图(2)增加列在日常工作中,我们经常需要添加或者删除某一项目,这样我们需要为当前所使用的表增加列。例如,以向“ 图书明细表 ”中添加一个“ 作者” 列为例,
47、来说明在企业管理器中向表中添加新列的操作过程,“作者”列为 Unicode 字符型,允许为空。 示意图操作步骤:在 SQL Server 企业管理器中展开需进行操作的“图书明细表”,右击“ 图书明细表”,选择【设计表】命令,如图 5-11 所示。在弹出的【表设计器】对话框中,单击第一个空白行,输入新添加的列名“作者” ,并选择数据类型为 nvarchar,长度为 20,该列允许空,如图 5-12 所示。当要向表中添加的列均输入完毕后,单击工具栏上的【保存】按钮对新添加的列进行保存。(3)删除列在 SQL Server 中,被删除的列是不可恢复的,所以在删除列之前需要慎重考虑。并且,在删除一个列
48、之前,必须保证基于该列的所有索引和约束都已被删除。例如,我们将所创建的“作者”列删除,其具体操作步骤如下:在 SQL Server 企业管理器中展开需要删除列的表,右击该表,选择【设计表】命令,例如删除“图书明细表” 中的列。在【表设计器】对话框中,右击要删除的列,选择【删除列】命令,例如删除“图书明细表”中名为“作者” 的列,如图 5-13 所示,该列即被删除。单击工具栏上的 【保存】按钮,对修改的表进行保存。 示意图(4)修改已有列的属性在表中尚未有记录时,可以修改表结构,如更改列名、列的数据类型、列的长度和是否允许空值等属性。但当表中有了记录时,建议不要轻易改变表结构,特别不要改变数据类
49、型,以免产生错误造成数据丢失。用户不能对以下特性的列进行修改: 具有 text、 ntext、image 或 timestamp 数据类型的列 计算列 全局标识符列 复制列 用于索引的列 (但若用于索引的列为 varchar、nvarchar 或varbinary 数据类型时,可以增加列的长度) 用于由 CREATE STATISTICS 生成统计的列,若需修改这样的列,必须先用 DROP STATISTICS 语句删除统计 用于主键或外键约束的列 用于 check 或 unique 约束的列 关联有默认值的列但改变列的数据类型时,有下列要求: 原数据类型必须能够转换为新数据类型 新类型不能为 timestamp 类型 如果被修改的是 identity 列,则新数据类型必须是有效的identity 数据类型。现在来看如何修