项目3.1 认识SQL Server数据库结构
一台计算机可以安装一个或多个SQL Server实例。每个SQL Server实例又可以包含一个或多个数据库。在数据库中,有一个或多个对象所有权组(称为架构),在每个架构中,都存在数据库对象,如表、视图和存储过程。
数据库是用来存储数据和数据库对象的逻辑实体,是数据库管理系统的核心内容。要更好地理解数据库的含义,应该首先了解系统数据库、数据库文件和文件组、数据库对象、数据库状态、文件状态等相关含义。
任务3.1.1 认识系统数据库
在SQL Server系统中,数据库可分为“系统数据库”和“用户数据库”两大类。用户数据库是用户自行创建的数据库,系统数据库则是SQL Server内置的,它们主要是用于系统管理。SQL Server 2019中包括以下的系统数据库。
1.Master数据库
Master数据库用来追踪与记录SQL Server的相关系统级信息。这些信息包括:SQL Server的初始化信息、所有的登录账户信息、所有的系统配置设置、其他数据库的相关信息、数据库文件的位置等。
由此可见,Master数据库在系统中非常重要,如果Master数据库不可用,则SQL Server也将无法启动。因此,在使用Master数据库时,比如进行了数据库的创建、修改或删除操作、更改了服务器或数据库的配置值、修改或添加了登录账户等操作时,应随时对Master数据库进行更新备份。
2.Model数据库
Model数据库是所有新建数据库的模板,即新建的数据库中的所有内容都是从模板数据库中复制过来的。如果Model数据库被修改了,那么以后创建的所有数据库都将继承这些修改。
模型数据库数据和日志文件的默认初始大小为8MB,主数据文件以64MB的速度自动增长到磁盘充满为止,日志文件以64MB的速度自动增长到最大2TB。
3.Msdb数据库
Msdb数据库用于SQL Server代理计划警报和作业。SQL Server在Msdb的表中自动保留一份完整的联机备份和还原历史记录(包括由自定义应用程序或第三方工具创建的),这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。SSMS使用这些信息来提出计划,还原数据库和应用任何事务日志备份。SSMS、Service Broker和数据库邮件等功能也使用该数据库。
4.Tempdb数据库
Tempdb数据库用于为所有临时对象或中间结果提供存储空间,也为所有其他临时存储要求提供空间。Tempdb是一个全局资源,所有连接到SQL Server实例的用户都可以使用。
每次启动SQL Server时,系统都要重新创建Tempdb,以保证该数据库为空。当SQL Server停止运行时,Tempdb中的临时数据会自动删除。
5.Resource数据库
Resource数据库用来存储SQL Server所有的系统对象(如:以sp_开头的存储过程),是只读数据库。SQL Server系统对象在物理上保留在Resource数据库中,但在逻辑上显示在每个数据库的sys架构中。
Resource数据库与Master数据库的区别在于:Resource数据库存储的是系统对象,而Master数据库存储的是系统级的信息。
Resource数据库的物理文件名为mssqlsystemresource.mdf和mssqlsystemresource.ldf,它们默认存储在安装目录中,如:C:\Program Files\Microsoft SQL Server\MSSQL<version>.<instance_name>\MSSQL\Binn\中,不能随便移动。
任务3.1.2 认识数据库对象
SQL Server数据库中的数据在逻辑上被组织成一系列对象,当一个用户连接到数据库后,所看到的是逻辑对象,而不是物理的数据库文件。数据库对象就是存储、管理和使用数据的不同结构形式,包括数据表、视图、存储过程、触发器、类型、规则、默认值、索引等。
在图3-1所示的窗口中,可看到SQL Server将服务器的数据库组织成一个逻辑结构,在该结构中有若干的节点,每个节点又包括很多子节点,它们代表与该特定数据库有关的不同类型的对象。
图3-1 查看SQL Server的数据库对象
任务3.1.3 认识数据库标识符
1.了解标识符的含义
标识符指数据库对象的名称。在SQL Server中的所有内容都有标识标,包括服务器、数据库和数据库对象(如表、视图、列、索引、触发器、过程、约束及规则等)。表3-1中列出的是已经命名的部分数据库对象。
表3-1 部分命名对象
2.掌握标识符的命名规则
SQL Server的标识符有两类:常规标识符和分隔标识符。分隔标识符是用双引号或方括号括起来的标识符。
在SQL Server 2019中,常规标识符的命名规则如下。
标识符长度不能超过128个字符,本地临时表的名称不能超过116个字符。
标识符的第一个字符必须是字母、下画线、中文、@、#等符号;后续字符除前面这些外,还可以包括数字、$。
标识符中不允许嵌入空格或特殊字符。
标识符不能是Transact-SQL保留字。
说明:在SQL Server中,以“@”开头的变量表示局部变量;以“@@”开头的变量表示全局变量;以“#”开头的表示局部临时对象;以“##”开头的表示全局临时对象;所以,用户在命名数据库时不要以这些字符开头,以免引起混乱。
任务3.1.4 认识数据库文件
在SQL Server 2019系统中,一个数据库在磁盘上可以保存为一个或多个文件,这些文件称为数据库文件。数据库文件分成三类:主数据文件、次数据文件、日志文件。一个数据库至少有两个文件:一个数据文件和一个日志文件。当然,一个数据库也可以有多个数据文件和多个日志文件。
1.了解数据库文件的类型
(1)主数据文件。
每个数据库有且仅有一个主数据文件。它用于存放数据和数据库的启动信息等,它的默认扩展名为.mdf。
(2)次数据文件。
如果数据库中的数据量很大,除了将数据存储在主数据文件中以外,还可以将一部分数据存储在次数据文件中,这样,有了次数据文件就可以将数据存储在不同的磁盘中,便于操作管理。次数据文件是可选的,一个数据库可以没有次数据文件,也可以有多个次数据文件,它的默认扩展名为.ndf。
(3)日志文件。
SQL Server 2019系统具有事务功能,可以保证数据库操作的一致性和完整性,它使用事务日志文件来记录所有事务及每个事务对数据库所做的操作。如果数据库被损坏了,数据库管理人员可以利用事务日志文件恢复数据库。一个数据库至少有一个事务日志文件,它的默认扩展名为.ldf。
说明:在SQL Server 2019中,默认的主数据文件的扩展名为.mdf、次数据文件的扩展名为.ndf、日志文件的扩展名为.ldf,但并不对扩展名强制要求。
2.理解逻辑和物理文件名
数据库文件在操作系统中存储的文件名称为物理文件名。每个物理文件名都具有明确的存储位置,其文件名称会比较长,由于在SQL Server系统内部要访问它们非常不方便,因此,每个数据库又有逻辑文件名,每一个物理文件名都对应一个逻辑文件名,逻辑文件名简单,引用起来非常方便。
任务3.1.5 认识数据库文件组
为了便于分配和管理,可以将多个数据文件集合起来,组织成为一组,称为文件组。每个文件组对应一个组名。可以将文件组中的文件存放在不同磁盘,以便提高数据库的访问性能。例如:在某个数据库中,创建了三个次数据文件,分别存储在三个不同的磁盘上,并将它们指定为同一个文件组f1,当在文件组f1上创建了一个表,并对表中数据进行访问时,系统可以在不同的磁盘上实现并行访问,这样就能大大提高了系统的性能。在SQL Server 2019中,文件组有以下两种类型。
1.主文件组
主数据文件所在的组称为主文件组。在创建数据库时,如果用户没有定义文件组,系统会自动建立主文件组。当数据文件没有指定文件组时,默认都在主文件组中。
2.次文件组
用户定义的文件组称为次文件组。如果次文件组中的文件被填满,那么只有该文件组中的用户表会受到影响。
在创建表时,不能指定将表放在某个文件中,只能指定将表放在某个文件组中。因此,如果希望将某个表放在特定的文件中,必须通过创建文件组来实现。
数据库文件和文件组必须遵循以下的规则。
1)一个文件或文件组只能被一个数据库使用。
2)一个数据文件只能属于一个文件组。
3)事务日志文件不能属于文件组。
5 创建数据库