3.1 数据库概述

3.1.1 系统数据库

SQL Server数据库分成系统数据库、示例数据库和用户数据库三类。其中,系统数据库和示例数据库都是SQL Server安装成功后默认建立的,系统数据库是记录数据库必需的信息,用户不能直接更新其中的系统对象(如系统表、系统存储过程和目录视图)中的信息。示例数据库是为了让用户学习SQL Server而设计的,如ReportServer数据库,用户可以在该数据库上进行任意操作。用户数据库是用户根据实际需求创建的数据库。

SQL Server 2012主要有4个系统数据库:master数据库、model数据库、msdb数据库和tempdb数据库。

1.master数据库

master数据库是SQL Server中最重要的数据库,是整个数据库服务器的核心。master数据库记录了SQL Server系统的所有系统级信息,这既包括实例范围的元数据(如登录账户)、端点、连接服务器和系统配置设置,又包括所有其他数据库的存在、数据库文件的位置以及SQL Server的初始化信息。因此,如果master数据库不可用,则SQL Server无法启动。

在使用master数据库时,应定期备份该数据库,当有任何问题出现时,可以随时进行恢复。

2.model数据库

model数据库是SQL Server中创建数据库的模板。当创建新用户数据库时,model数据库的全部内容(包括数据库选项)都会被复制到新的数据库。如果修改model数据库,之后创建的所有数据库都将继承这些修改。例如,可以设置权限或数据库选项或者添加对象,例如,表、函数或存储过程。

3.msdb数据库

msdb数据库提供运行SQL Server Agent工作的信息。SQL Server Agent是SQL Server中的一个Windows服务,该服务用来运行任何已经创建的计划作业。

4.tempdb数据库

tempdb数据库是SQL Server中的一个临时数据库,用于存放临时对象或者中间结果。SQL Server关闭后,该数据库中的内容会被清空。每次重新启动服务器之后,tempdb数据库将被重建。

除了上述的4个系统数据库外,SQL Server还有一个只读的系统数据库Resource,它包含了SQL Server中的所有系统对象。SQL Server系统对象(如sys.objects)在物理上保留在Resource数据库中,但在逻辑上显示在每个数据库的sys架构中。Resource数据库不包含用户数据或用户元数据。

3.1.2 数据库对象

数据库对象是存储、管理和使用数据库的不同结构形式,在SQL Server 2012的数据库中,主要的数据库对象包括表、视图、索引、存储过程、触发器、用户自定义函数、用户和角色等,如图3.1所示。

1.常用数据库对象

表是包含数据库中所有数据的数据库对象。表由行和列组成,每一行代表一条唯一的记录,每一列代表记录中的一个字段。

视图是从一张或者多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方式。

索引是某个表中一个列或多列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针。

存储过程是一组为了完成特定功能的Transact-SQL语句集合,经编译后以名称的形式存在SQL Server服务器端的数据库中,由用户通过指定存储过程的名称来执行。

触发器是一种特殊的存储过程,与表格或某些操作相关联,当用户对数据进行插入、修改、删除等动作时被激活,并自动执行。

图3.1 SQL Server 2012的数据库对象

2.对象命名规则

SQL Server为了完善数据库的管理机制,设计了严格的命名规则,用户在创建数据库以及数据库对象时必须严格遵守SQL Server的命名规则。

1)标识符

数据库对象的名称即为其标识符,SQL Server中的所有内容都可以有标识符。对象标识符是在定义对象时创建的,标识符随后用于引用该对象。

标识符的命名规则有以下几点:

(1)第一个字符必须是下列字符之一:

● Unicode中定义的字母,包括拉丁字符a~z和A~Z,以及来自其他语言的字母字符。

● 下画线(_)、at符号(@)或数字符号(#)。

(2)后续字符可以包括:

● Unicode中定义的字母。

● 基本拉丁字符或其他国家/地区字符中的十进制数字。

● at符号、美元符号($)、数字符号或下画线。

(3)标识符不能是Transact-SQL保留字。

(4)不允许嵌入空格或特殊字符。

(5)不允许使用增补字符。

2)数据库对象命名规则

SQL Server 2012数据库对象的名字由1~128个字符组成,默认情况下不区分大小写,必须符合标识符规则。

数据库对象的完整名称应该由服务器名、数据库名、架构名和对象名4部分组成,其格式如下:

[[server.][database].[schema].]object_name

如果数据库对象没有限定架构,则会分配默认的架构dbo。

3.1.3 数据库文件和文件组

每个SQL Server数据库至少具有两个操作系统文件:一个数据文件和一个日志文件。数据文件包含数据和对象,例如表、索引、存储过程和视图。日志文件包含恢复数据库中的所有事务所需的信息。为了便于分配和管理,可以将数据文件集合起来放到文件组中。

1.数据库文件

SQL Server数据库具有三种类型的文件:主要数据库文件、次要数据库文件和事务日志文件,如表3.1所示。

表3.1 数据库文件

默认情况下,数据和事务日志被放在同一个驱动器上的同一个路径下。这是为处理单磁盘系统而采用的方法。但是,在实际项目环境中,建议将数据和日志文件放在不同的磁盘上。

2.数据库文件组

每个数据库有一个主要文件组。此文件组包含主要数据文件和未放入其他文件组的所有次要文件。可以创建用户定义的文件组,用于将数据文件集合起来,以便于管理、数据分配和放置,如表3.2所示。

表3.2 数据库文件组