3.2 数据库的逻辑组织
一个数据库服务器上可以有多个数据库,这些数据库可以按功能进行划分,最终存储管理相应的数据。每个数据库又有各种不同的逻辑组件。
3.2.1 数据库构架
SQL Server 2005数据存储在数据库中。在数据库中,数据被组织到用户可以看见的逻辑组件中。数据库存储按物理方式在磁盘上作为两个或更多的文件实现。文件的物理实现在很大程度上是透明的。一般只有数据库管理员需要处理物理实现。两者的关系如图3-6所示。
图3-6 数据库物理实现和用户视图的关系
用户使用数据库时,使用的主要是逻辑组件,如表、视图、过程和用户。
每个SQL Server实例有4个系统数据库(master、model、tempdb和msdb),以及1个或多个用户数据库。有些单位只使用1个用户数据库来存储其所有数据;有些单位则为本单位的每一个组都设立不同的数据库,而且有时一个数据库只能由一个应用程序使用。例如,一个单位可以有销售数据库、工资单数据库、雇员数据库等。应用程序有时只使用一个数据库,而有时则可以访问几个数据库,其结构如图3-7所示。
图3-7 SQL Server数据库构架
当连接到SQL Server实例时,用户的连接会与服务器上的某个具体数据库相关联,这个数据库就称为当前数据库。一般情况下,系统管理员通常会将用户的连接与默认数据库相连。但用户可以使用数据库API内的连接选项来指定另一个数据库。可以使用Transact-SQL USE database_name语句,或使用可更改当前数据库上下文的API函数,由一个数据库切换到另一个数据库。
3.2.2 系统数据库
表3-3 系统数据库对照表
在SQL Server 2005中,除了用户自己定义的数据库之外,还有4个系统数据库,如表2-3所示。注意不要在master数据库中创建任何用户对象。表中列出了其数据和日志文件的初始配置值。对于 SQL Server 2005 的不同版本,这些文件的大小可能略有不同。
(1)master数据库
master数据库由系统表组成,记录了安装及随后创建的所有数据库的信息,包括数据库所用磁盘空间、文件分配、空间使用率、系统级的配置设置、登录账户密码、存储位置等。
master数据库是系统的关键,不允许任何人对它进行修改。必须经常保留一份它当前的备份。
(2)tempdb数据库
tempdb数据库记录了用户创建的所有临时表、临时数据和临时的存储过程。该数据库是一个全局资源,允许所有可以连接上的SQL服务器访问。
注意,每次SQL Server重新启动,该数据库被重新创建而不是恢复,所以以前用户创建的任何临时对象(表、数据、存储过程等)都将丢失。也就是说,每次SQL Server重启,tempdb数据库都是空的。
(3)model数据库
model数据库是建立新数据库的模板。每当创建一个新的数据库时(比如用对象资源管理器去创建,或用CREATE DATABASE创建),SQL Server就会根据model数据库的内容来形成新数据库结构的基础,把后面初始化为空,以准备放数据,同时将系统表复制到刚创建的数据库中去。
严格禁止删除model数据库,否则SQL Server系统将无法使用。
(4)msdb数据库
msdb数据库是由SQL Server Agent服务使用的数据库。由于SQL Server Agent主要执行一些事先安排好的任务,所以该数据库多用于进行复制、作业调度以及管理报警等活动。
如果不使用代理服务功能,我们可以忽略这个数据库。
3.2.3 用户数据库
在SQL Server中,一个用户数据库由用户定义的用来永久存储像表和索引这样的数据库对象的磁盘空间构成,这些空间被分配在一个或多个操作系统文件上。
用户数据库和系统数据库一样,也被划分成许多逻辑页(每个逻辑页的大小是8 KB),在每个数据库文件中,页从0到X连续编号,上限值X是由文件的大小决定的。
通过指定数据库ID、文件ID和页号,可以引用任何一页。
当扩大文件时,新空间被追加到文件的末尾。
使用CREATE DATABASE语句创建一个新的用户数据库,该数据库就被赋予了一个唯一的数据库ID,或者说dbid,同时在master数据库中的sysdatabases表中就会插入一个新行,如图3-8所示。(注意,sysdatabases表只在master数据库中。)
图3-8 用户数据库在sysdatabases表中的记录