3.3 SQL Server 2019的体系结构和文件
3.3.1 SQL Server 2019的体系结构
1.客户机/服务器体系结构
SQL Server 2019的客户机/服务器(C/S)体系结构主要体现在:由客户机负责与用户的交互和数据显示,服务器负责数据的存取、调用和管理,客户机向服务器发出各种操作请求(语句命令或界面菜单操作指令),服务器验证权限后根据用户请求处理数据,并将结果返回客户机,如图3-1所示。
2.数据库的三级模式结构
SQL Server 2019支持数据库共有的三级模式结构,其中外模式对应视图,模式对应基本表,内模式对应存储文件,如图3-2所示。
图3-1 SQL客户机/服务器结构
图3-2 SQL的三级模式结构
(1)基本表
基本表(Base Table)也称基表,是实际存储在数据库中的数据表,是独立存在的,并非由其他表导出的表。一个基本表对应一个实际存在的关系。关系模型中的数据(记录)为基本表的行,属性为列。
(2)视图
视图(View)是查看数据的一种方式,是从表或其他视图导出的数据并按需要做成的虚表(如网页中的图书,只是其局部信息),视图只在刚刚打开的一瞬间,通过定义从对应的基表中搜集并调用数据,展现给用户的是数据库外模式(可见的部分数据形式)。用户可以通过视图(如网页)调用数据库中对应基本表的数据。视图以一种逻辑定义形式保存在数据字典中。当基本表中的数据发生变化时,从视图中查询的数据也将相应改变。在第5章将对视图进行具体介绍。
视图和基本表的主要区别如下。
1)视图是已经编译好的SQL语句,而基本表不是。
2)视图没有实际的物理记录,而基本表有具体数据(记录)。
3)基本表是具体的数据结构及内容,视图是可见的窗口。
4)基本表占用物理(存储)空间而视图不占用,视图只以逻辑概念(定义)存在;基本表可以及时进行修改,视图只能用创建的语句修改。
5)基本表是内模式(存储在计算机中),视图是外模式。
6)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度来说,视图可以避免用户接触数据表,从而不知道表结构。
7)基本表属于全局模式中的表(结构及数据),是实表;视图属于局部模式的表(部分数据),是虚表。
8)视图的建立和删除只影响视图本身,不影响对应的基本表。
(3)存储文件
存储文件是数据库内模式(内部存储方式及逻辑结构)的基本单位,其逻辑结构构成了关系数据库的内模式。物理结构(如存取路径及索引)可由需要而定。存储文件的存储结构对用户很明确,各存储文件与外存设备上的物理文件对应。基本表和存储文件的关系如下。
1)每个基本表可以对应一个或几个存储文件(如索引文件)。
2)每个存储文件可以存放一个或几个基本表。
3)每个基本表可以有多个索引,索引存放在存储文件中。
(4)SQL用户
SQL用户主要是指利用终端对数据库系统及应用程序进行操作的操作者,包括终端用户、数据库管理员和数据库应用程序员。通常,各种用户可以利用SQL依其具体使用权限,通过网络应用系统的界面对视图和基本表进行业务数据的操作,如网上购物和网银操作等。
3.SQL Server 2019的体系结构
SQL Server具有大规模处理联机事务、数据仓库和商业智能等许多强大功能,这与其内部完善的体系结构是密切相关的。SQL Server 2019主要包括数据库引擎(Database Engine)、分析服务(Analysis Services)、集成服务(Integration Services)、报表服务(Reporting Services)以及主数据服务(Master Data Services)等组件,各组件的组成结构如图3-3所示。SQL Server2019主要组件之间的关系如图3-4所示。
图3-3 SQL Server的组成结构
图3-4 SQL Server各组件间的关系
用于操作、管理和控制的数据库引擎是整个系统的主要核心,其他所有组件都与其有着密不可分的联系。SQL Server数据库引擎有4大组件:协议(Protocol)、查询引擎(Query Compilation and Execution Engine)、存储引擎(Storage Engine)和SQLOS(User Mode Operating System)。各客户端提交的操作指令都与这4个组件交互。
(1)服务器组件
使用SQL Server 2019安装向导的“功能选择”页面,可以选择安装SQL Server服务器组件。表3-3列出了SQL Server 2019的主要服务器组件。
表3-3 SQL Server 2019服务器组件
(2)管理工具
在实际应用中,经常使用的SQL Server 2019的主要管理工具,如表3-4所示。
表3-4 SQL Server 2019主要管理工具
4.数据库存储结构及文件种类
(1)数据库的存储结构
数据库的存储结构包括两种:数据库的逻辑结构和物理结构。
1)数据库的逻辑结构。表示数据库中各数据之间的逻辑关系,数据库由多个用户界面可视对象构成,主要包括数据库对象,如数据表、视图、约束、规则、默认和索引等。
2)数据库的物理结构。数据库中数据的存储方式和方法(存储如路径及索引方式),主要描述数据存储的实际位置,对应一系列的物理文件,一个数据库及由一个或多个文件组成。
(2)数据库文件
常用的数据库文件主要有3种,包括主数据文件、次要数据文件和事务日志文件。
1)主数据文件。数据库的起点,指向数据库中文件的其他部分,记录数据库所拥有的文件指针。每个数据库有且只有一个主数据文件,默认扩展名为.mdf。
2)次要数据文件。也称为辅助数据文件,包含除主数据文件外的所有数据文件。有些数据库可能无次要数据文件,而有些数据库可能有多个,不是数据库必需的文件,默认扩展名是.ndf。
3)事务日志文件。简称日志文件,是包含用于恢复数据库所需的所有操作日志信息的文件。每个数据库必须至少有一个日志文件,默认扩展名是.ldf。
使用这些扩展名有助于标识文件的用途,但SQL Server不强制使用.mdf、.ndf和.ldf作为文件扩展名。一个数据库文件组织的案例如图3-5所示。
图3-5 数据库文件组织案例
(3)数据库文件组
为了便于管理和分配数据,SQL Server将多个数据库文件组成一个组。数据库文件组是数据文件的逻辑组合。主要包括以下3类。
1)主文件组。包含主数据文件和未指明组的其他文件。如在创建数据库时,未指定其他数据文件所属的文件组。数据库的所有系统表都被分配到(包含在)主文件组中。当主文件组的存储空间用完之后,将无法向系统表中添加新的目录信息,一个数据库有一个主文件组。
2)次文件组:也称用户自定义文件组,是用户首次创建或修改数据库时自定义的,其目的在于数据分配,以提高数据表的读写效率。
3)默认文件组。各数据库都有一个被指定的默认文件组。若在数据库中创建对象时没指定其所属的文件组,则将被分配给默认文件组。
数据库文件和文件组遵循的规则:一个文件或文件组只能被一个数据库使用;一个文件只能属于一个文件组;日志文件不能属于任何文件组。
注意:为了提高使用效率,使用数据文件和文件组时应注意以下几点。
1)在创建数据库时,需要考虑数据文件可能会出现自动增长的情况,应当设置上限,以免占满磁盘。
2)主文件组可以容纳各系统表。当容量不足时,后更新的数据可能无法添加到系统表中,数据库也可能无法进行追加或修改等操作。
3)建议将频繁查询或频繁修改的文件分放在不同的文件组中。
4)将索引、大型的文本文件、图像文件放到专门的文件组中。
3.3.2 SQL Server数据库的种类及文件
1.SQL Server数据库种类和特点
数据库对象是指数据库中的数据在逻辑上被组成一系列对象(数据库的组成部分),当一个用户连接到数据库后,所看到的是逻辑对象,而不是物理的数据库文件。如在“对象资源管理器”中可以查看的(数据)表、索引、视图等。
SQL Server 2019数据库对象的类型如图3-6所示。
图3-6 SQL Server 2019 数据库对象的类型
数据库是存放各种对象(表、视图、约束、规则、索引等)的逻辑实体。逻辑上表现(界面中看到的)为数据库对象,物理上表现为数据库文件(主数据文件、次要数据文件或事务日志文件)。
在SQL Server实例中,数据库被分为3大类:系统数据库、用户数据库和示例数据库。
(1)系统数据库
系统数据库是指随着安装程序一起安装,用于协助SQL Server 2019系统共同完成管理操作的数据库,它们是SQL Server 2019运行的基础。系统数据库存储有关SQL Server的系统信息,它们是SQL Server 2019管理数据库的依据。如果系统数据库遭到破坏,SQL Server 2019将不能正常启动。
SQL Server 2019在安装时将创建5个系统数据库:master数据库、model数据库、msdb数据库、resource数据库和tempdb数据库。这些数据库各司其职,各种数据库的作用如表3-5所示。
表3-5 SQL Server 2019的系统数据库
1)master数据库。记录SQL Server系统的所有系统级信息。这包括实例范围的元数据(如登录账户)、端点、链接服务器和系统配置设置。在SQL Server中,系统对象不再存储在master数据库中,而是存储在resource数据库中。此外,master数据库还记录了所有其他数据库的存在、数据库文件的位置以及SQL Server的初始化信息。因此,如果SQL Server master数据库不可用,则无法启动。
2)model数据库。用于在SQL Server实例上创建的所有数据库的模板。因为SQL Server每次启动时都会创建tempdb数据库;model数据库的全部内容(包括数据库选项)都会被复制到新的数据库中;启动期间,也可使用model数据库的某些设置创建新的tempdb;因此model数据库必须始终存在于SQL Server系统中。
3)msdb数据库。代理使用msdb数据库来计划警报和作业,SQL Server Management Studio、Service Broker和数据库邮件等其他功能也要使用该数据库。
例如,SQL Server在msdb中的表中自动保留一份完整的联机备份和还原历史记录。这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。SQL Server Management Studio使用这些信息来提出计划,还原数据库和应用任何事务日志备份。msdb数据库将会记录有关所有数据库的备份事件,即使它们是由自定义应用程序或第三方工具创建的。例如,如果使用调用SQL Server管理对象(SMO)的Microsoft Visual Basic应用程序执行备份操作,则事件将记录在msdb系统表、Microsoft Windows应用程序日志和SQL Server错误日志中。为了保护存储在msdb中的信息,建议将msdb事务日志放在容错存储区中。
4)resource数据库。resource数据库为只读数据库,它包含了SQL Server中的所有系统对象。SQL Server系统对象(如sys.objects)在物理上保留在resource数据库中,但在逻辑上却显示在每个数据库的sys架构中。resource数据库不包含用户数据或用户元数据。
resource数据库的物理文件名为mssqlsystemresource.mdf和mssqlsystemresource.ldf。这些文件位于<drive>:\Program Files\Microsoft SQL Server\MSSQL<version>.<instance_name>\MSSQL\Binn\,不应移动。每个SQL Server实例都具有一个(也是唯一的一个)关联的mssqlsystemre-source.mdf文件,并且实例间不共享此文件。
5)tempdb数据库。tempdb数据库是一个全局资源,可供连接到SQL Server实例或SQL数据库的所有用户使用。tempdb用于保留:①显式创建的临时用户对象。例如,全局或局部临时表及索引、临时存储过程、表变量、表值函数返回的表或游标。②由数据库引擎创建的内部对象。其中包括用于储存假脱机、游标、排序和临时大型对象(LOB)存储的中间结果的工作表;用于哈希连接或哈希聚合操作的工作文件;用于创建或重新生成索引等操作(如果指定了SORT_IN_TEMPDB)的中间排序结果,或者某些GROUP BY、ORDER BY或UNION查询的中间排序结果。③版本存储区,即数据页的集合,它包含支持使用行版本控制功能所需的数据行。
tempdb中的操作是最小日志记录操作,以便回滚事务。每次启动时都会重新创建tempdb数据库,从而在系统启动时总是具有一个干净的数据库副本。在断开连接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。因此tempdb中不会有什么内容从一个SQL Server会话保存到另一个会话。不允许对tempdb数据库进行备份和还原操作。
(2)用户数据库
用户数据库指由用户建立并使用的数据库,用于存储用户使用的数据信息。
用户数据库由用户建立,且由永久存储表和索引等数据库对象的磁盘空间构成,空间被分配在操作系统文件上。系统数据库与用户数据库结构如图3-7所示。用户数据库和系统数据库一样,也被划分成许多逻辑页,通过指定数据库ID、文件ID和页号,可引用任何一页。当扩大文件时,新空间被追加到文件末尾。
图3-7 系统数据库与用户数据库结构
(3)示例数据库
示例数据库是一种实用的学习数据库的范例,SQL Server 2019安装时,默认情况下不会自动安装,需要单独下载、安装和设置。
2.数据库逻辑组件
数据库(空间)的存储(安排),实际上是按物理方式在磁盘上以多个文件方式实现的。用户使用数据库时主要调用的是逻辑组件,如图3-8所示。
图3-8 用数据库时使用的逻辑组件
讨论思考:
1)请解释SQL Server 2019的体系结构?
2)SQL Server数据库文件的种类具体有哪些?
3)SQL Server系统数据库有哪些?其作用分别是什么?