visual basic作为应用程序的开发“利器”也表现在数据库应用程序的开发上,它良好的界面和强大的控件功能使数据库编程变得简单多了。但即便如此,数据库应用程序的开发仍然算得上是vb编程中的难点,这是因为你不仅要熟悉vb中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。所以我们先介绍一下数据库的基本知识,算是学习数据库编程前的热身运动吧!
一、热身运动
首先需要声明是,我们这里介绍的数据库知识都是指的关系数据库。所谓关系数据库就是将数据表示为表的集合,通过建立简单表之间的关系来定义结构的一种数据库。
不管表在数据库文件中的物理存储方式如何,它都可以看作一组行和列,与电子表格的行和列类似。在关系数据库中,行被称为记录,而列则被称为字段。下面是一个客户表的例子。
表1 客户表
| 客户号 | 姓名 | 地址 | 城市 | 街道 | 邮编 |
| 1723 | doe john | 1234 ffth avenue | new york | ny | 1004 |
| 3391 | smith mary | 9876 myrtle lavee | bosten | ma | 6078 |
| 3765 | blasel mortimer | 2296j river road | peoria | il | 7011 |
此表中每一行是一个记录,它包含了特定客户的所有信息,而每个记录则包含了相同类型和数量的字段:客户号、姓名等等。
表 是一种按行与列排列的相关信息的逻辑组,类似于工作单表。
字段 数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,须为每个字段分配一个数据类型、最大长度和其它属性。字段可包含各种字符、数字甚至图形。
记录 各个客户有关的信息存放在表的行,被称为记录。一般来说,数据库表创建时任意两个记录都不能相同。
键 键就是表中的某个字段(或多个字段),它(们)为快速检索而被索引。键可以是唯一的,也可以是非唯一的,取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。例如,在前面的例子中,客户标识号 (客户号) 是表的主键,因为客户号唯一地标识了一个客户。
关系 数据库可以由多个表组成,表与表之间可以以不同的方式相互关联。例如,客户数据库还可以有一个包含某个客户的所有定单的表。它只用“客户号”字段来引用该定单的客户,而不在定单表中的每项重复所有客户信息,如下表所示:
表2 定货表
| 定货 | 客户号 | 日期 | 内容 | 数量 |
| 14764 | 3391 | 2/23/94 | 27 | $22.95 |
| 14932 | 3391 | 3/17/94 | 46 | $9.57 |
| 15108 | 8765 | 2/15/96 | 27 | $22.95 |
在这个表中,客户号字段引用了客户表中的 客户号字段,从而把定单和客户联系起来了。可以看到,客户 3391 (mary smith) 在 94 年 2 月 23 日订购了 27 项,在 94 年 3 月 17 日订购了 46 项。用来建立关系的键叫做外部键,因为它与“外部”表(客户表)的主键关联。
一对多和多对多关系 上表中的关系类型叫做一对多关系,因为一个客户可以发出多个定单,而某个特定的定单只能是一个客户所发。也可以建立多对多的关系。例如,列出所有可以销售的项(存货)的盘存表:
表3 盘存表
| 内容 | 描述 | 供应商 | 费用 | 盘存 |
| 27 | straw hat | garden supply co. | $14.00 | 50 |
| 46 | garden gloves | garden supply co. | $4.50 | 75 |
| 102 | hanging | floral industries | $6.00 | 137 |
从盘存表中,可以看到在客户和存货项之间存在多对多的关系。也就是说,一个客户可以订购多个存货项,而一个存货项又能够被多个客户订购。多对多关系是通过两个独立的一对多关系来定义的,公共的“多”表包含了两个其它表的外部键。在该例中,定货s 表与 盘存 表(通过 “内容”)与 customer 表(通过 客户号)都相关联。通过这三个表,我们可以看到,mary smith (客户号 3391) 订购了 straw hat (“内容” 27) 和garden gloves (“内容” 46),而 mary smith (客户号 3391) 和 mortimer blaselflatz (客户号 8765) 都订购了straw hat (“内容” 27)。如果把客户表和盘存表的相关字段与 定货表的“定货”字段联结起来,建立一个“关联”表,那么这个关系就更清楚了。
表4 关联表:按客户号和内容排序
| 定货号 | 客户号 | 姓名 | 内容 | 描述 |
| 14764 | 33391 | smith mary | 27 | straw hat |
| 14932 | 33391 | smith mary | 46 | garden gloves |
| 15168 | 8765 | blaselfatz mortimer | 27 | straw hat |
规范化 数据库设计者的任务就是组织数据,而组织数据的方法,应能消除不必要的重复,并为所有必要信息提供快速查找路径。为了达到这种目标而把信息分离到各种独立的表中去的过程,叫作规范化。
规范化是用许多指定的规则和不同级别的范式来进行规范的复杂过程。该过程的研讨已超出了本文的范围。但是,大多数简单数据库的规范化可以用下面简单的经验规则来完成:包含重复信息的表必须分成独立的几个表来消除重复。
例如,使学生和课程对应的学生数据库,包含了下表所示的信息。
表5
| 学生 | 课程 | 描述 | 教授 |
| 1 | 4 | introduction to physiology | dawson |
| 2 | 3 | applied basketweaing | carruth |
| 3 | 1 | physics for short-定货 cooks | adms |
| 4 | 2 | introduction to physiology | dawsons |
如果有选学了十二门课程的 1000 个学生,每门课程的说明和教师将显示100多次─ 对选了那门课程的每个学生都要重复一次。要避免这种低效率,应当把表分成两个独立的表来规范化,一个用来表示学生,另一个用来表示课程,如表6,表7所示。
|
| ||||||||||||||||||||||||||
|
表6 |
表7 |