购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 SQL Server数据库

在SQL Server中,数据库是表、索引、存储过程和视图等数据库对象的集合,是数据库管理系统的核心内容。数据库的数据分别存储在不同的对象中,而这些对象有些是用户在操作时能够看得到的,如表、索引、存储过程和视图等,这就是数据库的逻辑存储结构。但至于这些对象是如何存放在磁盘中的,作为用户我们不需要关心,只有数据库管理员才能处理相应的物理实现,这些就是数据库的物理存储结构。

1.2.1 物理存储结构

1.数据库文件

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

主要数据文件:包括数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的扩展名是.mdf。

次要数据文件:是可选的,由用户定义并存储用户数据。次要数据文件通过将每个文件放在不同的磁盘驱动器上,从而将数据分散到多个磁盘上。另外,如果数据库超过了单个Windows文件大小限制,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议扩展名是.ndf。

事务日志文件:保存用于恢复数据库的日志信息,每个数据库必须至少有一个日志文件。事务日志文件的建议扩展名是.ldf。

默认情况下,数据文件和日志文件被放在同一个驱动器上的同一个路径下。这是处理单磁盘系统采用的方法。但是,在生产环境中,这可能不是最佳的方法,建议将数据文件和日志文件放在不同的磁盘上,从而保护数据库的安全。

2.文件组

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

例如,可以分别在3个磁盘驱动器上创建3个文件Data1.ndf、Data2.ndf和Data3.ndf,然后将它们分配给文件组filegroup1。然后,可以明确地在文件组filegroup1上创建一个表。对表中数据的查询将分散到3个磁盘上,从而提高了性能。通过使用在RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列)条带集上创建的单个文件也能获得同样的性能提高。但是,文件和文件组能够轻松地在新磁盘上添加新文件。

主要文件组:包括主要文件的文件组。所有系统表都被分配到主要文件组中。

自定义文件组:用户首次创建数据库或以后修改数据库时明确创建的任何文件组。

系统有一个默认文件组,如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的空间必须足够大,能够容纳未分配给其他文件组的所有新对象。在SQL Server中,PRIMARY文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改,否则系统对象和表仍然分配给PRIMARY文件组,而不是新的默认文件组。

1.2.2 逻辑存储结构

从数据库应用和管理角度看,SQL Server数据库分为系统数据库和用户数据库两类。用户数据库存放的是与用户业务有关的数据,其中的数据是由用户来维护的。安装SQL Server时会自动安装master、msdb、model、resource和tempdb。系统数据库是由SQL Server数据库管理系统自动维护,这些数据库用于存放维护系统正常运行的信息,通常不需要进行管理,只是了解就行。

master数据库:记录SQL Server实例的所有系统级信息。

msdb数据库:用于SQL Server代理计划警报和作业。

model数据库:用作SQL Server实例中创建的所有数据库的模板。对model数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。

tempdb数据库:一个工作空间,用于保存临时对象或中间结果集。

resource数据库:一个只读数据库,包括了SQL Server 2008中的系统对象。系统对象在物理上保留在resource数据库中,但在逻辑上显示在每个数据库的sys架构中。

系统数据库存储着整个SQL Server的系统级信息,对系统来说非常重要,也是攻击者获得数据库信息的直接来源。在后续章节中,还会给大家介绍一些非常重要的系统函数或方法来查询系统级信息。

1.2.3 数据表

数据表是SQL Server存储数据的基本单元,用来存储数据和操作的逻辑结构,包括行和列。行是组织数据的单位,每一行表示唯一的一条记录;列主要描述数据的属性,每一列表示记录的一个属性,而且同一个表中的列名必须唯一。

SQL Server数据表分为三类:系统表、用户自定义表(用户表)和临时表,其中视图也是一种特殊的表。

系统表(视图):由系统自动创建并维护。master数据库的数据表存储的是所有与SQL Server有关的信息,包括所有的登录账号、数据库的初始信息等。从SQL Server 2012开始,这些信息存储到resource数据库中了,并以系统视图的形式显示在每个数据库的sys架构中,而master数据库里只存储系统级信息,因此大家在master数据库中仅看到少数几个数据表。其次,msdb数据库的数据表存储的信息大多与备份、恢复以及作业调度等相关。model数据库中所有数据库的模板信息是以系统视图的形式存在的。

用户自定义表:也称为用户表,是用户根据自己的业务需要在SQL Server中建立的表,用户可以根据权限创建、修改、删除用户表。

临时表:临时表存储在tempdb数据库中,而不是存储在用户数据库中。临时表的创建和使用与用户表一样,只不过命名上临时表以“#”开始。例如,创建一个临时表:Create Table #Zhuan Ye(Zhuan Yeld int,Zhuan Ye Ming Cheng varchar(20));或清除一个临时表:Drop Table#Zhuan Ye。临时表一般用于数据处理,处理完数据后临时表失去意义,删除即可。

1.2.4 数据完整性

数据完整性是保证数据的正确性和相容性,防止不合语义或不正确的数据进入数据库,是否具备完整性关系到数据库能否真实地反映现实世界。数据库安全首先是保证数据的安全,如果被非法者写入冗余数据,会造成操作数据混乱,就会对正确的数据造成干扰。因此,在建立数据库的数据表时,首先要建立一定的规则,保证数据库的完整性。例如:学生的性别必须是男或女,不能为其他的任何值。课程成绩的范围是0~100分,学生学号是固定长度的一系列数字等,其实每个字段都有特殊的意义,也就有了特殊的取值范围。

数据库的完整性有4类,分别是实体完整性、域完整性、参照完整性和用户定义完整性。

实体完整性:表中有一个主键,其值不能为空或重复,且能唯一地标识对应的记录。实体完整性又称为行完整性,通过PRIMARY KEY约束、UNIQUE约束、索引或IDENTITY属性等可以实现数据的实体完整性。例如,学生基本信息表中,学号为主键,每一个学号列能唯一地标识该学生对应的行记录信息,通过学号列建立主键约束实现学生基本信息表的实体完整性。

域完整性:列数据输入的有效性,又称为列完整性,通过CHECK约束、DEFAULT约束、NOT NULL约束、数据类型和规则等实现域完整性。CHECK约束通过显示输入到列中的值来实现域完整性。例如,学生信息表中的性别列,取值只能是男或女,不能为其他值;在成绩表中,课程成绩的范围是0~100分,低于0分或高于100均为非法数值。

参照完整性:保证主表中的数据与从表中的数据一致,又称为引用完整性,在SQL Server中,通过定义主键与外键之间的对应关系实现参照完整性,参照完整性确保键值在所有表中一致。

主键:主表中能唯一标识每个数据行的一个或多个列。

外键:主表中的主键是从表中的一个字段,也就是说从表中的一个或多个列的组合是主表的主键。

在学生信息表中,学号是主键,在成绩表中学号和课程号的组合是主键,这时候,成绩表中的学号就是学生信息表的外键。

参照完整性就是要保证成绩表中的学号必须能够在学生信息表中存在。

用户自定义完整性:不属于其他任何完整性类别的特定业务规则,所有完整性类别都支持用户自定义完整性,包括CREATE TABLE中所有的列级约束和表级约束、存储过程和触发器。

1.2.5 数据约束

数据库的约束主要是保证数据库的完整性,常用的约束有UNIQUE约束、CHECK约束、PRIMARY KEY约束、FOREIGN KEY约束、NOT NULL约束。

PRIMARY KEY约束:主键约束,主键列的值必须是非空且不重复的。

UNIQUE约束:用在非主键列,保证非主键列的值是唯一、不重复的。但允许有一个空值NULL。

FOREIGN KEY约束:从表中的一个或多个列的组合是主表的主键,要保证从表中的字段必须能够在主表中存在。

NOT NULL约束:不允许为空值,也就是说必须输入字符,包括空格字符。

注意

这里所说的空值指的是NULL值,而不是空格字符。 E+XiTTrseGOAjKK/78zAuoeFgt9QbtA2AdVj6QSJivvbE1N5ww/CGIwWkvyf+hHa

点击中间区域
呼出菜单
上一章
目录
下一章
×