2.1.1 逻辑数据库

SQL Server 2012数据库是存储数据的容器,是一个由存放数据的表和支持这些数据的存储、检索、安全性和完整性的逻辑成分所组成的集合,组成数据库的逻辑成分称为数据库对象。SQL Server 2012的数据库对象主要包括表、视图、索引、存储过程、触发器和约束等。

1. 数据库对象

数据库是一个容器,主要存放数据库对象。下面先简单介绍一下SQL Server 2012中所包含的常用数据库对象。

• 表:表是最主要的数据库对象。表由行和列组成,因此也称为二维表。表是存放数据及表示关系的主要形式。

例如,对于学生成绩管理系统,学生信息、课程信息和成绩信息分别存放在学生表、课程表和成绩表中。

• 视图:视图是从一个或多个基本表中引用表。由于视图本身并不存储实际数据,因此也可以称之为虚表。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。

例如,对于成绩表,我们不能直接看出学生姓名、课程名称等比较直观的信息,所以,我们可以定义一个学生课程成绩视图,将学生表、课程表与成绩表关联起来,生成一个包含学号、姓名、课程号、课程名和成绩的虚表,打开这个表就能看到这些字段在一起的一个表了。

同时,视图一经定义,就可以像基本表一样被查询、修改、删除和更新了。修改、删除和更新的内容会反映到基本表中。

• 索引:表中的记录通常按其输入的时间顺序存放,这种顺序称为记录的物理顺序。为了实现对表记录的快速查询,可以对表的记录按某个或某些字段或它们的组合(称为索引表达式)进行排序,这种顺序称为逻辑顺序。通过逻辑顺序搜索索引表达式的值,可以实现对该类数据记录的快速访问。

例如,在学生表中,对学号字段进行索引,这样按学号进行查找对应学生信息记录时很快就可进行定位。将学号字段指定为“主键”,在学生表中就不可能存放相同学号的学生记录。

• 约束:约束用于保障数据的一致性与完整性。具有代表性的约束就是主键和外键。主键约束当前表记录的主键字段值唯一性,外键约束当前表记录与其他表的关系。

例如,在成绩表中,学号作为外键与学生表中学号(主键)建立关联,以使成绩对应相应的学生。

• 存储过程:存储过程是一组为了完成特定功能的SQL语句集合。这个语句集合经过编译后存储在数据库中,存储过程具有接受(输入)参数、输出参数、返回单个或多个值的功能。存储过程独立于表存在。

例如,在学生数据库中,编写若干条T-SQL语句计算总学分作为存储过程,可以汇总成绩表相应学生的总学分,然后放到学生表相应的学生总学分字段中。学号作为输入参数时,计算指定学生的总学分;输入参数为空时,则计算所有学生的总学分。

• 触发器:触发器与表紧密关联。它可以实现更加复杂的数据操作,更加有效地保障数据库系统中数据的完整性和一致性。触发器基于一个表创建,但可以对多个表进行操作。

例如,在学生表中没有学生时,成绩表的成绩不能输入。

• 默认值:默认值是在用户没有给出具体数据时,系统所自动生成的数值。它是SQL Server 2012系统确保数据一致性和完整性的方法。

例如,在学生表中,学号默认值设置为初始学号,这样增加记录时系统预置了一个初始学号,用户只要修改后面两位,而不需要输入所有号。又例如,设置性别默认值为男,这样增加记录时只有女学生才需要修改性别字段内容。

• 用户和角色:用户是指对数据库有存取权限的使用者,角色是指一组数据库用户的集合。

• 规则:规则用来限制表字段的数据范围。例如,在学生表中,将出生时间字段设置为当前日期前的16~65年。

• 类型:用户可以根据需要在给定的系统类型之上定义自己的数据类型。

例如,可以定义系统的逻辑类型为性别类型,这样我们处理性别数据时可以采用性别类型。

• 函数:用户可以根据需要将系统若干个语句或者系统函数进行组合实现特定功能,定义成自己的函数。然后,在需要该功能处调用该函数。

2. 数据库对象的引用

用户通过数据库对象对其进行操作,数据库对象有两种对象名,即完全限定名和部分限定名。

(1)完全限定名。在SQL Server中,完全限定名是对象的全名,包括4个部分:

服务器名.数据库名.数据库架构名.对象名

在SQL Server中,每个对象都属于一个数据库架构。数据库架构是一个独立于数据库用户的非重复命名空间。一般可以将架构视为对象的容器。

(2)部分限定名。在使用T-SQL编程时,使用全名往往很繁琐且没有必要,所以常省略全名中的某些部分。对象全名的4个部分中的前3个部分均可以省略。当省略中间的部分时,圆点符“.”不可省略。SQL Server可以根据系统的当前工作环境确定对象名称中省略的部分。

3. 数据库中的架构

简单地说,架构的作用是将数据库中的所有对象分成不同的集合,每一个集合就称为一个架构。数据库中的每一个用户都会有自己的默认架构。这个默认架构可以在创建数据库用户时由创建者设定,若不设定则系统默认架构为dbo。数据库用户只能对属于自己架构中的数据库对象执行相应的数据操作。至于操作的权限则由数据库角色决定。