1.5 关系数据库

1.5 关系数据库

关系数据库基于关系模型,使用一系列来表达数据以及这些数据之间的联系。关系数据库也包括DMLDDL。在第2章中,我们简单介绍关系模型的基本概念。多数的商用关系数据库系统使用SQL语言,该语言将在第3章、第4章和第5章中详细介绍。第6章我们将讨论其他有影响的语言。

1.5.1 表

每个表有多个列,每个列有唯一的名字。

关系模型是基于记录的模型的一个实例。基于记录的模型,之所以有此称谓,是因为数据库的结构是几种固定格式的记录。每个表包含一种特定类型的记录。每种记录类型定义固定数目的字段或属性。表的对应记录类型的属性

表可以存储在文件中。例如,一个特殊的字符(比如逗号)可以用来分隔记录的不同属性,另一特殊的字符(比如换行符)可以用来分隔记录。对于数据库的开发者和用户,关系模型屏蔽了这些低层实现细节。

在关系模型中,有可能创建一些有问题的模式,比如出现不必要的冗余信息。在第8章我们将研究如何区分好的和不好的模式设计。

1.5.2 数据操纵语言

SQL查询语言是非过程化的。它以几个表作为输人(也可能只有一个),总是仅返回一个表查询可以涉及来自不止一个表的信息

1.5.3 数据定义语言

SQL提供了一个丰富的DDL语言,通过它,我们可以定义表完整性约束断言,等等。

1.5.4 来自应用程序的数据库访问

有一些计算可以用通用的程序设计语言来表达,但无法通过SQL来表达。SQL还不支持诸如从用户那儿输入、输出到显示器,或者通过网络通信这样的动作。这样的计算和动作必须用一种宿主语言来写,比如C、C++或Java,在宿主语言中使用嵌入式的SQL查询来访问数据库中的数据。

通过宿主语言来执行DML语句

为了访问数据库,DML语句需要由宿主语言来执行。有两种途径可以做到这一点

  • 一种是通过提供应用程序接口来将DMLDDL的语句发送给数据库,再取回结果。例如:
    • C语言的开放数据库连接ODBC
    • Java数据库连接JDBC
  • 另一种是通过扩展宿主语言的语法,在宿主语言的程序中嵌人DML调用。通常用一个特殊字符作为DML调用的开始,然后通过DML预编译器来将DML语句转变成宿主语言中的过程调用。