数据库基础知识

SQL Server 中的数据库由表的集合组成,这些表用于存储一组特定的结构化数据。表中包含行(也称为记录或元组)和列(也称为属性)的集合。表中的每一列都用于存储某种类型的信息,例如,日期、名称、金额和数字。

表上有几种类型的控制(例如约束、触发器、默认值和自定义用户数据类型),用于保证数据的有效性。可以向表上添加声明性引用完整性 (DRI) 约束,以确保不同表中的相关数据保持一致。表上可以有索引(与书中的索引相似),利用索引能够快速找到行。数据库还可以包含使用 Transact-SQL 或 .NET Framework 编程代码的过程对数据库中的数据执行操作。这些操作包括创建用于提供对表数据的自定义访问的视图,或创建用于对部分行执行复杂计算的用户定义函数。

例如,创建一个名为 MyCompanyDB 的数据库来管理公司数据。在 MyCompanyDB 数据库中,创建一个名为 Employees 的表来存储有关每位雇员的信息。该表还包含名为 EmpIdLastNameFirstNameDeptTitle 的列。为了确保不存在两个雇员使用同一个 EmpId 的情况,并确保 Dept 列仅包含公司中的有效部门编号,必须向该表添加一些约束。

由于需要根据雇员 ID 或姓氏快速查找雇员的相关数据,因此可定义一些索引。必须向 Employees 表中针对每位雇员添加一行数据,因此还必须创建一个名为 AddEmployee 的存储过程。此过程被自定义为接受新雇员的数据值,并执行向 Employees 表中添加行的操作。可能会需要雇员的部门摘要。在这种情况下,需要定义一个名为 DeptEmps 的视图,用于合并 DepartmentsEmployees 表中的数据并产生输出。下图显示了所创建的 MyCompanyDB 数据库的各个部分。

数据库中的对象

一个 SQL Server 实例可以支持多个数据库。每个数据库可以存储来自其他数据库的相关数据或不相关数据。例如,SQL Server 实例可以有一个数据库用于存储职员数据,另一个数据库用于存储与产品相关的数据。或者,一个数据库可以存储当前客户订单数据,而另一个相关数据库可以存储用于年度报告的历史客户订单。

重要说明重要提示

不能在 master 数据库中创建任何用户对象(例如表、视图、存储过程或触发器)。master 数据库包含 SQL Server 实例使用的系统级信息(例如登录信息和配置选项设置)。

OLTP 数据库

联机事务处理 (OLTP) 关系数据库最适合于管理变化的数据。通常会有多个用户同时执行将会更改实时数据的事务。尽管用户发出的各个数据请求一般只引用几行,但是这些请求有许多是同时发生的。

OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。OLTP 数据库通常具有以下特征:

  • 支持大量并发用户定期添加和修改数据。

  • 反映随时变化的单位状态,但不保存其历史记录。

  • 包含大量数据,其中包括用于验证事务的大量数据。

  • 具有复杂的结构。

  • 可以进行优化以对事务活动做出响应。

  • 提供用于支持单位日常运营的技术基础结构。

  • 个别事务能够很快地完成,并且只需访问相对较少的数据。OLTP 系统旨在处理同时输入的成百上千的事务。

OLTP 系统中的数据主要被组织为支持如下事务:

  • 记录来自销售点终端或通过网站输入的订单。

  • 当库存量降到指定级别时,订购更多的货物。

  • 在制造厂中将零部件组装为成品时对零部件进行跟踪。

  • 记录雇员数据。

数据仓库

OLTP 数据库的目的是捕获高比率的数据更改和添加,而数据仓库与此相反,其目的是组织大量的稳定数据以便于分析和检索。数据仓库经常用作商业智能应用程序的基础。

下面列出了数据仓库的功能:

  • 将来自异类数据源的数据组合为单个同类结构。

  • 采用简化的结构组织数据,以便提高分析查询的效率,而不是为了进行事务处理。

  • 包含已转换的数据,这些数据有效、一致并经过合并和格式化以进行分析。

  • 提供代表业务历史记录的稳定数据。

  • 定期进行更新,更新时只添加数据而不频繁触发事务。

  • 简化安全性要求。

数据库快照

数据库快照是数据库(源数据库)的只读、静态视图。每个数据库快照都与创建快照时存在的源数据库在事务上一致。有关详细信息,请参阅数据库快照