2009年2月5日星期四

Berkeley DB: C 语言访问从0开始中文版 Chap1-1

Chap1-1 Berkeley DB Concepts 概念

在进一步深入之前,将向你描述一些你创建基于DB的应用程序的时候所会遇到的宏观性的概念。

抽象的说,DB数据库中包含着 记录 。 逻辑上,每一条记录标示一个数据库中的独立条目。每一个这样的记录包含两个部分的信息:键 和 数据. 本手册将偶尔使用 一条记录的键 或者 一条记录的数据,这样的名词在 处理一个或者多个数据库记录的语境中。

因为 DB数据库中使用了 key /Data 这样的对子,它们有时被认为是一个有两个子段的关系型数据库表。然而,data (有时是key, 依赖于DB所定义的存取方式) 能够保有非常复杂的数据。常见的伎俩是C语言的结构和其他的构造被存入记录中。这样有效的把一个 只有两个字段的表变为了一个n字段的表,其中n-1个字段是对应着数据结构的成员。

注意,DB数据库非常象一个关系型数据库中的一个表。许多DB应用程序因此需要使用多个DB数据库(就象关系型数据库里面有许多表一样)。

和关系型数据库系统不同的是,一个DB数据库仅仅包含有一个根据给定的存取方式(BTree, Queue, Hash )组织起来的记录集合。在关系型数据库系统中, 底层的存取方式往往被隐藏起来。

一般咸认,基于DB的应用程序应设计为,一个数据库存储一种特定类型的数据(就象在一个关系型数据库中, 一个单独的数据表保存了某种特定方面的数据)因为许多应用程序需要管理许多种数据,故而基于DB的应用程序经常使用到了多个DB数据库。

例如,一个会计应用程序。这种应用程序的数据管理涉及银行账户,记账账户,股票,借贷等等,同时还有客户,银行机构,客户账户等等。在传统的关系型数据库总,所有这些不同种类的信息将被用一系列复杂的数据表进行存储和管理。在基于DB的应用程序中,所有这些信息将被分割并用多个数据库进行存储和管理。

基于DB的应用程序能够通过一个可选的方法,数据库应用环境来更方便的使用多个数据库。更多信息请参考本手册的附录部分的 [[数据库应用环境]]。

利用大部分的DB的API时候,需要使用包含函数指针的特殊结构。这些回调函数称之为方法,因为它们看上去就想一个C++类中的方法,用于访问这些方法的变量,被称为句柄。就象使用一个数据库之前,需要先获得这个数据库的句柄。


从数据库获取数据有时被称为获取记录, 因为用于获取记录的方法叫做 get(). 同样,存入数据库记录被称为写入记录,因为你要调用put().

在使用数据库句柄向DB数据库存入记录的时候,记录将根据该DB数据库定义的排序方式存入。排序大部分都是根据key来进行的, 但是有时也考虑data . 如果存入一条记录,而该记录的key相同的记录已经存在于数据库中, 则新记录将替换老记录。然而,如果该数据库支持重复记录(具有相同的key 但是不同的数据),则新的记录将作为新记录作为重复记录登入数据库,且既存记录不会被覆盖。

如果一个DB数据库支持重复记录,那么你可以通过数据库句柄来仅仅获取重复记录集合中的第一条记录。

在使用数据库句柄时,可以通过一个特殊机制:游标来读写数据。游标是铁杆的迭代器,可以用来遍历数据库中的记录。翻来覆去,前前后后。也可以用游标来定位一条记录。在数据库支持重复记录的时候,游标是唯一的能够存取重复记录集合的方法。

最后,DB提供了一种特殊的数据库,称为第2梯队。
第2梯队为通常的数据库(称为第1梯队以区别于第2梯队)提供索引。第2梯队的数据库非常有趣,因为它们能够保存复杂的数据类型,但是查询到指定记录的话,仅仅需要该记录的key. 如果你希望能够通过某些惨不忍睹的零碎信息查询到一个记录,而且还不是key的话,你就需要用到第2梯队的数据库。

-----

专有名词翻译
secondary database 第2梯队
key 键盘

没有评论: