数据库是SQL Server 存放表和索引等数据库对象的逻辑实体。
数据库的存储结构分为物理存储结构和逻辑存储结构两种。
1. 物理存储结构
数据库的物理存储结构指的是保存数据库各种逻辑对象的物理文件如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,SQL Server将数据库映射为一组操作系统文件。
数据库中所有的数据和对象都存储在操作系统文件中。
1.1 数据库的文件类型
SQL Server的数据库具有如下三种类型的文件。
- 主数据文件。主数据文件是数据库的起点,指向数据库中的其他文件。每个数据库都有且只有一个主数据文件。主数据文件的扩展名是mdf。
- 辅助数据文件。除主数据文件以外的所有其他数据文件都是辅助数据文件。某些数据库可能不含有任何辅助数据文件,而有些数据库则含有多个辅助数据文件。辅助数据文件的扩展名是ndf。
- 事务日志文件。事务日志文件包含着用于恢复数据库的所有日志信息。每个数据库必需至少有一个事务日志文件,当然也可以有多个。SQL Server事务日志采用提前写入的方式,即对数据库的修改先写入事务日志中,然后再写入数据库。事务日志文件的推荐文件扩展名是ldf。
在SQL Server中,数据库中所有文件的位置都记录在该数据库的主数据文件和系统数据库master中。
1.2 文件组
为了方便用户对数据文件进行分配和管理,SQL Server将文件分成不同的文件组。
文件组有如下两种类型:
- 主要文件组。主要文件组(primary 文件组)包含主要数据文件和未放入其他文件组的所有次要数据文件。数据库的系统表都包含在主要文件组中,每个数据库有一个主要文件组。
- 用户定义文件组。用户定义文件组是在create database或 alter database 语句中,使用filegroup关键字指定的文件组。
文件组应用的规则如下:
- 一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用。
- 主要文件组中包含所有的系统表,当建立数据库时,主要文件组包括主数据库文件和未指定组的其他文件。
- 在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在默认文件组中,如果没有指定默认文件组,主要文件组就是默认文件组。
- 事务日志文件不能属于任何文件组。
2. 逻辑存储结构
数据库是存储数据的容器,即数据库是一个存放数据的表和支持这些数据的存储、检索、安全性和完整性等所组成的集合。
组成数据库的逻辑成分称为数据库对象,SQL Server中的逻辑对象主要包括数据表、视图、同义词、存储过程、函数、触发器、规则,以及用户、角色、架构等。
每个SQL Server 都包含两种类型的数据库:系统数据库和用户数据库。
系统数据库存放SQL Server系统的系统级信息。
通过系统信息来管理和控制整个数据库服务器系统。
用户数据库是用户创建的,存放用户数据和对象的数据库。
在安装了SQL Server以后,系统会自动创建5个系统数据库,分别是master、model、msdb、tempdb以及resource。
① master数据库
master数据库记录了SQL Server系统的所有系统级别的信息,包括系统中所有的登录账户、连接服务器、系统配置信息、SQL Server的初始化信息以及数据库错误信息等内容。
此外,该数据库还记录了所有其他数据库是否存在以及这些数据库文件的位置。
master数据库如果被破坏,SQL Server将无法启动。
② model数据库
model数据库是SQL Server创建用户数据库的模板。
当用户创建一个数据库时,model数据库的内容会自动复制到用户数据库中。
对model数据库进行的某些修改,如对数据库排序规则或恢复模式的修改,都将应用到以后创建的用户数据库中。
③ msdb数据库
msdb数据库用于存储报警、作业及操作员信息。
SQL Server Agent(SQL Server 代理)通过这些信息来调度作业,监视数据库系统的错误并触发报警,同时将作业或报警消息传递给操作员。
④ tempdb数据库
tempdb数据库为临时表和临时存储过程提供存储空间,所有与系统连接的用户的临时表和存储过程,以及SQL Server产生的其他临时性对象都存储于该数据库。
tempdb数据库是SQL Server中负担最重的数据库,几乎所有的查询都可能用到它。
tempdb数据库中的所有对象,在SQL Server关闭时都将被删除,而下次重新启动SQL Server时,又会被重新创建。
tempdb数据库可以按照需要自动增长。
⑤ resource数据库
resource数据库包含了SQL Server中的所有系统对象。
该数据库具有只读特性。
resource数据库的物理文件名为mssqlsystemresource.mdf,该文件不允许移动或重新命名,否则SQL Server不能启动。
resource数据库是隐藏的,因此,在默认目录下看不到。