文档库 最新最全的文档下载
当前位置:文档库 › 中文版ACCESS 2016宝典(第8版)

中文版ACCESS 2016宝典(第8版)

中文版ACCESS 2016宝典(第8版)
中文版ACCESS 2016宝典(第8版)

办公大师经典丛书

中文版Access 2016宝典

(第8版)

[美] Michael Alexander Dick Kusleika 著张洪波译

北京

Michael Alexander, Dick Kusleika

Access 2016 Bible

EISBN:978-1-119-08654-3

Copyright ? 2016 by Wiley & Sons, Inc., Indianapolis, Indiana

All Rights Reserved. This translation published under license.

Trademarks: Wiley and the Wiley logo are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries, and may not be used without written permission. Microsoft and Access are registered trademarks of Microsoft Corporation. All other trademarks are the property of their respective owners. John Wiley & Sons, Inc. is not associated with any product or vendor mentioned in this book.

本书中文简体字版由Wiley Publishing, Inc. 授权清华大学出版社出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。

北京市版权局著作权合同登记号图字:01-2016-5203

Copies of this book sold without a Wiley sticker on the cover are unauthorized and illegal.

本书封面贴有Wiley公司防伪标签,无标签者不得销售。

版权所有,侵权必究。侵权举报电话:010-******** 137********

图书在版编目(CIP)数据

中文版Access 2016宝典(第8版)/(美)迈克尔?亚历山大(Michael Alexander),(美)迪克?库斯莱卡(Dick Kusleika)著;张洪波译. —北京:清华大学出版社,2016

(办公大师经典丛书)

书名原文:Access 2016 Bible

ISBN 978-7-302-45049-8

Ⅰ. ①中…Ⅱ. ①迈…②迪…③张…Ⅲ. ①关系数据库系统Ⅳ. ①TP311.138

中国版本图书馆CIP数据核字(2016)第218538号

责任编辑:王 军 韩宏志

装帧设计:孔祥峰

责任校对:成凤进

责任印制:

出版发行:清华大学出版社

网址:https://www.wendangku.net/doc/cf17614267.html,,https://www.wendangku.net/doc/cf17614267.html,

地址:北京清华大学学研大厦A座邮编:100084

社总机:010-******** 邮购:010-********

投稿与读者服务:010-********,c-service@https://www.wendangku.net/doc/cf17614267.html,

质量反馈:010-********,zhiliang@https://www.wendangku.net/doc/cf17614267.html,

印刷者:

装订者:

经销:全国新华书店

开本:185mm×260mm 印张:52.25 字数:1438千字

版次:2016年10月第1版印次:2016年10月第1次印刷

印数:1~3000

定价:128.00元——————————————————————————————————————————————

产品编号:

第1章数据库开发简介

本章内容

●介绍数据库、表、记录、字段和值之间的差异

●探索在一个数据库中使用多个表的原因

●探索Access数据库对象

●设计数据库系统

数据库开发与其他绝大多数计算机使用方法都有所不同。在Microsoft Word或Excel中,处理应用程序的方法相对直观明了,与此不同的是,良好的数据库开发要求掌握一定的准备知识。你必须了解一些基本知识,其中包括数据库术语、基本数据库概念以及数据库最佳实践。

本章将介绍数据库开发的基本知识。

交叉参考:

如果你想立即了解Access的相关内容,可以跳转到第2章。

1.1 Access的数据库术语

Access沿用绝大多数(但不是全部)传统的数据库术语。术语“数据库”、“表”、“记录”、“字段”和“值”表示从最大到最小的层次结构。几乎在所有数据库系统中都使用这些术语。

1.1.1 数据库

通常情况下,数据库一词是一个计算机术语,表示有关某个特定主题或商业应用程序的信息的集合。数据库可帮助你通过一种逻辑方式组织相关信息,以便于访问和检索。

注意:

某些旧版的数据库系统使用术语数据库描述各表;而现在,术语数据库适用于数据库系统的所有元素。

数据库不仅仅适用于计算机。还包括手动数据库,有时,将这些数据库称为手动档案系统或手动数据库系统。通常情况下,这些档案系统由人员、纸张、文件夹和档案柜组成,其中纸张是手动数据库系统的关键要素。在手动数据库系统中,通常具有收文篮和输出篮,以及特定类型的正式存档方法。可以通过打开文件柜、取出文件夹并找到正确的纸张来手动访问相应的信息。用户可以填

第I部分 Access构建块

4写纸张表单作为输入,可能使用键盘来输入将在表单上显示的信息。可通过以下方式查找信息:手动对纸张进行排序,或将多页纸张上的信息复制到另一张纸上(甚至可以复制到Excel电子表格中)。可以使用电子表格或计算器对数据进行分析,或者通过新的妙趣横生的方式来显示数据。

Access数据库只不过是纸张档案系统的存档和检索功能的自动化版本。Access数据库在精心定义的结构中存储信息。Access表可存储各种不同类型的数据,从简单的几行文本(例如姓名和地址)到诸如图片、音频或视频图像等复杂数据。通过以精确格式存储数据,使得诸如Access等数据库管理系统(Database Management System,DBMS)可将数据转换为有用信息。

在Access数据库中,表是主要的数据存储库。查询、窗体和报表提供对数据的访问,允许用户添加或提取数据,以及通过有用的方式呈现数据。绝大多数开发人员会向窗体和报表中添加宏或VBA(Visual Basic for Applications)代码,以使其Access应用程序更易于使用。

诸如Access等关系数据库管理系统(RDBMS)会在相关表中存储数据。例如,一个包含员工数据(姓名和地址)的表可能与一个包含工资信息(发放日期、工资金额和支票编号)的表相关。

通过查询,用户可以基于这些相关表提出一些复杂问题(例如“2012年为Jane Doe支付的所有薪水的总额是多少?”),并以屏幕上的窗体和打印出的报表形式显示答案。

实际上,关系数据库和手动档案系统之间的一个根本差别在于,在关系数据库系统中,单个人员或条目的数据可以存储在单独的表中。例如,在患者管理系统中,患者的姓名、地址以及其他联系信息可能存储在一个单独的表中,而与保存患者治疗信息的表区分开来。实际上,治疗信息表保存所有患者的所有治疗信息,并使用患者标识符(通常是一个编号)在治疗信息表中查找各个患者的治疗信息。

在Access中,数据库是数据以及相关对象的整体容器。它不仅是表的集合,而且包含很多类型的对象,例如查询、窗体、报表、宏以及代码模块。

当打开Access数据库时,数据库中的对象(表、查询等)会呈现出来,供你处理使用。可以根据需要同时打开多个Access副本,也可以同时处理多个数据库。

许多Access数据库包含几百甚至几千个表、窗体、查询、报表、宏和模块。除了少数几种例外情况外,Access 2016数据库中的所有对象都驻留在单个文件中,该文件的扩展名为ACCDB或ACCDE。Access数据库的扩展名也可能是MDB或MDE,使用这两个扩展名是为了与Access 2003及更早版本向后兼容。

1.1.2 表

表仅是原始信息(称为数据)的容器,类似于手动档案系统中的文件夹。Access数据库中的每个表都包含有关单个实体(例如人员或产品)的信息,并以行列的形式组织表中的数据。

交叉参考:

第3章和第4章将介绍一些非常重要的规则,用于管理关系表设计以及如何将这些规则纳入你的Access数据库。这些规则和指南可以确保你的应用程序正常执行,同时保护表中所包含数据的完整性。

在Access中,表就是一个实体。当你设计和构建Access数据库,甚至是在处理现有的Accessing 应用程序时,必须考虑表和其他数据库对象如何表示数据库管理的物理实体,以及实体如何与其他实体相关。

第1章数据库开发简介

创建表后,可采用类似电子表格的形式(称为数据表)查看该表,数据表由行和列(分别称为记录和字段,请参阅1.1.3节)组成。尽管数据表和电子表格表面上非常相似,但实际上数据表是完全不同的一种对象类型。

交叉参考:

第5章将讨论Access数据表的内容以及数据表与电子表格之间的差别。可在第3章中找到有关字段和字段属性的更多信息。

1.1.3 记录和字段

数据表划分为多个行(称为记录)和列(称为字段),其中,第一行(每一列顶部的标题)包含数据库中各个字段的名称。

每一行都是一条单独的记录,其中包含与该记录相关的字段。在手动系统中,行是单独的表单(纸张),字段相当于输出表单中供你填充的空白区域。

每一列都是一个字段,其中包含很多属性,用于指定字段中包含的数据的类型,以及Access 应如何处理字段的数据。这些属性包括字段的名称(Company)以及字段中数据的类型(Text)。字段也可能包含其他属性。例如,Address字段的Size属性向Access指出允许在地址中包含的最大字符数。

注意:

使用Access时,术语字段用于指代存储在记录中的特性。在包括Microsoft SQL Server在内的其他许多数据库系统中,更常用的表达形式是列,而不是字段。字段和列具有相同的含义。具体使用哪种术语表示形式取决于包含记录的表背后的数据库系统。

1.1.4 值

记录和字段的交叉点是值,也就是实际数据元素。例如,如果你有一个称为Company的字段,那么输入到该字段中的公司名称将表示一个数据值。一些特定的规则控制如何在Access表中包含数据。

交叉参考:

有关这些规则的更多信息,请参阅第3章和第4章。

1.2 关系数据库

Access是一种关系数据库管理系统。Access数据存储在相关表中,一个表中的数据(如客户)与另一个表中的数据(如订单)相关。Access维护相关表之间的关系,以便于提取一个客户以及该客户的所有订单,而不会丢失任何数据或者提取出不是该客户所有的订单记录。

当使用多个表时,可通过减少冗余数据的输入来简化数据输入和报告。例如,通过为一个使用客户信息的应用程序定义两个表,就不需要在客户每次购买商品时都存储该客户的姓名和地址。

创建表后,需要将它们彼此关联。例如,如果你有一个Customers表和一个Sales表,你可以使用二者共有的一个字段关联这两个表。在这种情况下,Customer Number是两个表中都包含的一个

5

第I部分 Access构建块

6备选字段。通过这种关联,可以在Sales表中看到Customer Number与Customers表匹配的客户的销售额。

这种模型的优势在于,你不必在每次向Sales表中添加新记录时都重复有关客户的键特性(如客户姓名、地址、城市、省/自治区、邮政编码)。你只需要客户编号。例如,当某个客户更改地址时,地址仅在Customers表的一条记录中更改。

为什么要创建多个表

创建多个表的可能性几乎总会吓退初级数据库用户。绝大多数情况下,初学者希望创建一个庞大的表,其中包含自己所需的全部信息,例如,一个Customer表,其中包含客户完成的所有销售信息、客户的姓名、地址以及其他信息。毕竟,如果你之前曾使用过Excel来存储数据,在Access中构建表时采用同样的方法看起来可能是非常合理的。

如果在一个大表中包含所有客户信息,那么它很快就会变得难以维护。你必须针对客户进行的每次销售来输入客户信息(在每一行重复姓名和地址信息)。如果客户在一次购买活动中购买了多种商品,那么对于每次销售中购买的商品也存在重复输入问题。这会导致系统效率大大降低,并且会增加出现数据输入错误的可能性。表中的信息存储效率会大大降低,某些字段可能并不是每条销售记录都需要的,结果导致表中存在很多空字段。

对于创建的表,其中要保存尽可能少的信息,同时使系统仍然易于使用并且具有足够的灵活性,以满足增长的需求。为实现这一目标,你需要考虑创建多个表,每个表包含仅与该表的主题相关的字段。在创建表后,可使用其他Access数据库对象将它们链接起来,并创建有意义的视图和报表。下一节将深入讨论此主题。

将数据划分到一个数据库内的多个表中可以使系统更易于维护,因为某种给定类型的所有记录都位于同一个表中。通过花费一定的时间将数据合理划分到多个表中,可以大大缩短设计和工作时间。该过程被称为规范化。

交叉参考:

第4章将介绍更多有关规范化的详细信息。

1.3 Access数据库对象

如果你是初次接触数据库(或者即使你是一位拥有丰富使用经验的数据库用户),那么在开始构建Access数据库之前,需要先了解一些主要概念。Access数据库包含6种顶级对象,而这些对象由数据以及使用Access所需的工具组成,如下所述。

●表:保存实际数据。

●查询:搜索、排序和检索特定数据。

●窗体:允许以自定义格式输入和显示数据。

●报表:显示和输出格式化数据。

●宏:自动执行任务,而不必编程。

●模块:包含使用VBA编程语言编写的编程语句。

第1章数据库开发简介

1.3.1 表

本章前面已经提到,表是Access数据库中的主要数据存储库。通过一种特殊类型的对象(数据表),可以与表进行交互。尽管不是一种持久数据库对象,但数据表按照类似于Excel工作表的行列格式显示表的内容。数据表以原始形式显示表的信息,不进行任何转换或筛选。数据表视图是用于显示所有记录的所有字段的默认模式。

可使用键盘上的方向键来滚动浏览数据表。在处于某个数据表中时,也可以显示其他表中的相关记录。此外,还可以对显示的数据进行更改。

1.3.2 查询

查询可以从数据库中提取信息。查询会选择并定义一组满足特定条件的记录。对于绝大多数窗体和报表,在显示之前都会通过查询来组合、筛选数据或对数据进行排序。查询通常通过宏或VBA 过程来调用,以更改、添加或删除数据库记录。

下面是查询示例:销售办公室的人员向数据库提出请求,“通过姓名以字母顺序为我显示位于马萨诸塞州并在过去6个月购买过商品的所有客户”或者“为我显示在过去6个月内购买过雪佛兰汽车模型的所有客户,并先按客户姓名再按销售日期进行排序。”

用户在提出问题时并不是使用日常的英语,而是使用QBE(Query By Example,示例查询)方法。当在“查询设计器”窗口中输入指令并运行查询时,查询会将指令转换为SQL(Structured Query Language,结构化查询语言),并检索所需的数据。

交叉参考:

第8章将讨论“查询设计器”窗口的相关内容以及如何构建查询。

1.3.3 数据输入和显示窗体

数据输入窗体帮助用户快速、轻松、准确地将信息输入到数据库表中。相对于数据表,数据输入和显示窗体提供的结构化数据视图的结构化程度要更高。通过这种结构化视图,可以查看、添加、更改或删除数据库记录。通过数据输入窗体输入数据是将数据输入数据库表时最常用的方式。

数据输入窗体限制只能访问表中的特定字段。也可以通过数据验证规则或VBA代码来增强窗体,以便在将数据添加到数据库表中之前检查其有效性。

绝大多数用户都倾向于将信息输入数据输入窗体,而不是输入表的数据表视图。通常情况下,窗体类似于我们熟悉的纸质文档,可帮助用户处理数据输入任务。通过引导用户浏览要更新的表的各个字段,窗体可以使数据输入非常便于理解。

只读窗体通常用于查询目的。这些窗体显示某个表中的特定字段。显示某些字段而不显示其他字段意味着,可以限制某个用户对敏感数据的访问,而允许其访问同一个表中的其他字段。

1.3.4 报表

报表以类似于PDF的格式显示数据。Access在创建报表时提供了额外的灵活性。例如,可以配置报表以便列出给定表(如Customers表)中的所有记录,也可以使报表仅包含满足特定条件的记录(如居住在亚利桑那州的所有客户)。为此,可以基于查询创建报表,该查询仅选择报表所需的记录。

报表通常会组合多个表来显示不同数据集中的各种复杂关系。打印发票就是一个示例。

7

第I部分 Access构建块

8Customers表提供了客户的姓名和地址(以及其他相关数据),以及Sales表中的相关记录,以便针对订购的每种产品打印各个行条目(line-item)信息。报表还会计算销售总额,并以特定格式打印。此外,还可可以让Access将记录输出到发票报表中,所谓发票报表,就是一个用于汇总发票的打印文档。

1.3.5 宏和VBA

Excel中有宏和VBA编程功能,Microsoft Access中也有对应的功能。Microsoft Access数据分析的真正强大的功能和灵活性也正在于此。无论是以自定义函数、批处理分析还是自动化的方式来使用它们,宏和VBA模块都能添加一种自定义的灵活性,这是使用其他任何方法都难以实现的。例如,可使用宏和VBA自动执行冗余分析和需要重复执行的分析过程,从而让自己有时间完成其他任务。另外,宏和VBA还可以降低人工出错的风险,并确保每次都以相同的方式来进行分析。从第22章开始将探索宏和VBA的优点,并学习如何使用它们来计划和运行批处理分析。

提示:

当设计数据库表时,请记住想要打印的所有信息类型。这样可以确保能够从数据库表中获取各个报表中所需的信息。

1.3.6 数据库对象

要创建数据库对象,如表、窗体和报表,首先需要完成一系列设计任务。设计做得越好,生成的应用程序就会越出色。在设计时考虑得越多,完成任何系统的速度越快,成功的可能性也越大。设计过程并不是必不可少的,其意图也并不是生成大量的文档资料。设计对象的唯一目的是生成一条清晰的途径,并在实现该对象时遵循该途径。

1.4 5步设计法

本节介绍的5个设计步骤为创建数据库应用程序提供了坚实基础,这些应用包括表、查询、窗体、报表、宏以及简单的VBA模块。

在每个步骤中花费的时间完全取决于所构建的数据库的具体情况。例如,有时用户会为你提供想要从其Access数据库输出的报表的示例,而且报表上数据的来源显而易见,设计这种报表只需要几分钟的时间。其他情况下,特别是当用户的要求非常复杂或者应用程序支持的业务流程需要大量的调查工作时,可能需要在步骤1上花费很多天的时间。

在阅读设计过程的每个步骤时,请始终关注设计的输出和输入。

1.4.1 步骤1:总体设计——从概念到实际

所有软件开发人员都会面临类似的问题,首先是确定如何满足最终用户的需求。在集中精力解决详细问题之前,必须了解用户的总体要求,这一点非常重要。

例如,用户可能要求提供一个支持以下任务的数据库:

●输入和维护客户信息(姓名、地址以及财务历史数据)。

●输入和维护销售信息(销售日期、付款方式、总金额、客户身份以及其他字段)。

●输入和维护销售行条目信息(购买的商品的详细信息)。

●从所有表(Sales、Customers、Sales Line Items和Payments)中查看信息。

第1章数据库开发简介

●针对数据库中的信息提出所有类型的问题。

●生成月度发票报表。

●生成客户销售历史记录。

●生成邮件标签和邮件合并报表。

在查看上述8项任务时,你可能需要考虑用户未提及的其他外围任务。在进入设计阶段前,先坐下来认真了解现有的流程是如何工作的。为此,必须针对现有的系统以及如何对其实现自动操作进行全面的需求分析。

准备一系列问题,用于探究客户的业务模式以及客户如何使用其数据。例如,在考虑自动完成任何类型的业务时,你可能会提出以下问题:

●当前使用哪些报表和窗体?

●当前如何存储销售、客户以及其他记录?

●如何处理计费过程?

在提出上述问题以及其他一些问题时,客户可能会想起你应该了解的其他业务事项。

预排现有的流程对于感受业务活动也大有帮助。你可能需要多次返回以观察现有的流程以及员工的工作方式。

在准备完成其余步骤时,请将客户考虑在内,让用户了解你所执行的操作并针对所有实现的操作要求提供输入,确保这些内容都在用户需求的范围内。

1.4.2 步骤2:报表设计

尽管首先从报表开始感觉似乎有点奇怪,但很多情况下,相对于应用程序的其他任何方面,用户对数据库内容的打印输出更感兴趣。报表通常包括应用程序管理的数据的每一部分。由于报表趋向于提供综合性的内容,因此通常情况下,它们是收集有关数据库要求的重要信息的最佳方式。

当你看到将在本节中创建的报表时,可能会问:“首先生成哪一部分,先有鸡还是先有蛋?”首先设计报表布局,还是首先确定构成报表的数据项和文本?实际上,这些条目是同时予以考虑的。

其实,如何在报表中安排数据的布局并不重要。不过,在这一阶段花费的时间越多,稍后构建报表时就会越轻松。部分用户甚至会在报表上绘制一些网格线,用于精确标识每一部分数据的显示位置。

1.4.3 步骤3:数据设计

设计阶段的下一步是盘点报表所需的所有信息。最佳方法之一是列出每个报表中的数据项。在执行该操作的过程中,请认真记下在多个报表中均包含的条目。对于包含在多个报表中的数据项,请确保对应的名称保持一致,因为它们实际上是同一个数据项。

例如,可以首先处理每个报表需要的所有客户数据,如表1.1所示。

表1.1 报表中找到的与客户相关的数据项

客户报表发票报表

Customer Name Customer Name

Street Street City City State State

9

第I部分 Access构建块

10

(续表) 客户报表发票报表ZIP Code ZIP Code

Phone Numbers Phone Numbers

E-Mail Address

Web Address

Discount Rate

Customer Since

Last Sales Date

Sales Tax Rate

Credit Information (四个字段)

通过比较每个报表所需的客户信息类型,你可以发现,存在很多通用的字段。绝大多数客户数据字段在两个报表中均可以找到。表1.1仅显示了每个报表中使用的一部分字段,即那些与客户信息相关的字段。由于相关行和字段的名称相同,因此可以轻松地确保拥有所有数据项。尽管对于这种小型数据库,轻松地查找条目并不是非常重要,但当需要处理包含许多字段的大型表时,这一点就会变得非常重要。

在提取客户数据后,你可以继续处理销售数据。这种情况下,只须分析发票报表中特定于销售的数据项。表1.2列出了包含销售相关信息的报表中的字段。

表1.2 报表中找到的销售数据项

发票报表行条目数据Invoice Number Product Purchased

Sales Date Quantity Purchased

Invoice Date Description of Item Purchased

Payment Method Price of Item

Salesperson Discount for Each Item

Discount (销售总体折扣)

Tax Location

Tax Rate

Product Purchased (多行)

Quantity Purchased (多行)

Description of Item Purchased (多行)

Price of Item (多行)

Discount for each item (多行)

Payment Type (多行)

Payment Date (多行)

Payment Amount (多行)

Credit Card Number (多行)

Expiration Date (多行)

第1章 数据库开发简介

11

在检查报表所需的销售信息类型时,可以看到,一些条目(字段)是重复的(如Product Purchased 、Quantity Purchased 以及Price of Item 字段)。每个发票可能具有多个条目,其中的每个条目需要相同类型的信息,如排序编号和每个商品的价格。许多销售信息具有多个购买的商品。此外,每个发票可能包含部分付款,并且该付款信息可能具有多行付款信息,因此可将这些重复的条目放入各自的分组中。

可获取前一节中在销售信息组内找到的所有条目,并将其提取到自己的组中以供发票报表使用。表1.2显示了与每个行条目相关的信息。

1.4.4 步骤4:表设计

接下来处理较困难的部分:必须确定构成报表的表需要哪些字段。当检查构成许多文档的众多

字段和计算时,你开始注意到哪些字段属于数据库中的各个表(通过将字段安排到各个逻辑组中,你已经完成了大部分准备工作)。现在,需要包含提取的每个字段。由于各种原因,稍后你还需要添加其他字段,不过,其中某些字段不会出现在任何表中。

不需要将数据的每个微小细节都添加到数据库的表中,了解这一点非常重要。例如,用户可能

希望将假期和其他非工作日添加到数据库中,以便能轻松了解在某一天哪些员工可以上班。但是,如果在初始开发阶段加入过多的想法,很容易为应用程序的初始设计带来巨大的压力。由于Access 表可在以后非常轻松地进行修改,因此最好在初始设计完成之后再考虑一些不太关键的条目。一般来说,在数据库开发项目开始以后调整用户请求并不是非常困难的事。

在使用每个报表显示所有数据后,需要按照用途合并数据(例如,分成不同的逻辑组),然后针

对这些功能比较数据。为了完成这一操作步骤,首先需要查看客户信息,并合并所有不同字段以创建一个数据项集合。然后,针对销售信息和行条目信息执行相同的操作。表1.3对上述三组信息中的数据项进行了比较。

表1.3 比较数据项 客户数据

发票数据 行条目 付款信息 Customer Company Name Invoice Number Product Purchased Payment Type

Street Sales Date Quantity Purchased Payment Date

City Invoice Date Description of Item Purchased Payment Amount

State Discount (销售总体折扣) Price of Item Credit Card Number

ZIP Code Tax Rate Discount for Each Item Expiration Date

Phone Numbers(两个字段) Taxable?

E-Mail Address

Web Address

Discount Rate

Customer Since

Last Sales Date

Sales Tax Rate

Credit Information(四个字段)

开始创建单个表时,合并和比较数据是一种非常好的方法,不过,除此之外,还需要执行很多操作。

第I部分 Access构建块

12

在了解有关如何执行数据设计的更多信息的过程中,你也了解到客户数据必须拆分为两个组。

其中某些条目仅对每个客户使用一次,而其他条目可能具有多个条目。Sales列就是这样的一个示例,

在该列中,付款信息可以具有多行信息。

需要将这些信息类型进一步拆分为各自的列,从而将所有相关条目类型分散到各自的列中,这

是设计流程的规范化部分的一个示例。例如,一个客户可以与公司之间具有多个联系人,或者针对

单笔销售进行多次付款。当然,我们已经将数据分为以下三个类别:客户数据、发票数据以及行

条目。

请记住,一个客户可能具有多张发票,每种发票上可能具有多个行条目。发票数据类别包含有

关各个销售的信息,而行条目类别包含有关每张发票的信息。请注意,这三列彼此相关,例如,一

个客户可能具有多张发票,而每张发票可能需要多个行条目。

表之间的关系可能各不相同。例如,每个销售发票有且仅有一个客户,而每个客户可能具有多

个销售。销售发票和发票的行条目之间也存在类似的关系。

数据库表关系要求关系涉及的两个表中存在一个唯一的字段。每个表中的唯一标识符可帮助数

据库引擎适当地联接和提取相关数据。

只有Sales表具有唯一标识符(Invoice Number),这意味着需要向其他每个表中至少添加一个字

段以作为指向其他表的链接。例如,向Customer表中添加一个Customer ID字段,向Invoice表中添

加同样的字段,并通过每个表中的Customer ID字段在这两个表之间建立关系。数据库引擎使用客户

与发票之间的关系将客户与其发票联系在一起。表之间的关系是通过键字段建立的。

交叉参考:

第4章介绍有关创建和了解关系以及规范化流程的内容。

了解将一组字段链接到另一组字段的需求后,可向每个组中添加必需的键字段。表1.4显示了

两个新组以及为每组字段创建的链接字段。这些链接字段称为主键和外键,用于将这些表链接在

一起。

表1.4 包含键的表

客户数据发票数据行条目数据销售付款数据Customer ID Invoice ID Invoice ID Invoice ID

Customer Name Customer ID Line Number Payment Type

Street Invoice

Number

Product Purchased Payment Date City Sales

Date

Quantity

Purchased Payment

Amount State Invoice

Date

Description of Item Purchased Credit Card Number ZIP Code Payment Method Price of Item Expiration Date

Phone Numbers (两个字段) Salesperson Discount for Each Item

E-Mail Address Tax Rate

Web Address

Discount Rate

Customer Since

Last Sales Date

Sales Tax Rate

第1章数据库开发简介

唯一标识表中每一行的字段称为主键。相关表中对应的字段称为外键。在该示例中,Customers 表中的Customer ID是主键,而Invoices表中的Customer ID是外键。

假定Customers表中的某条记录对应的Customer ID字段的值为12。Invoices表中Customer ID 为12的任何记录都为客户12“所有”。

通过添加到每个表中的键字段,现在可以在每个表中找到一个链接到数据库中其他表的字段。例如,表1.4显示Customers表和Invoice表中均包含Customer ID,其中Customer ID在前者中为主键,在后者中为外键。

正如表1.4中的前三列所反映的,你已经对系统标识了三个核心表。这只是完成最终表设计过程中一般的初步设计。同时,你已经创建了一个附加的事实表,用于保存销售付款数据。通常情况下,付款详细信息(如信用卡号)不属于销售发票的一部分。

事实证明,在开发面向数据库的应用程序时,花费一些时间合理设计数据库以及其中包含的表是最重要的操作步骤。通过高效地设计数据库,可以维护对数据的控制,消除成本高昂的数据输入错误,并限制仅对那些必要的字段执行数据输入。

尽管撰写本书的初衷不是讲授数据库理论及其所有细微差别,但我们可以借此机会简要介绍一下数据库的规范化技术。第4章将介绍规范化的详细信息,但与此同时,你应该了解规范化是将数据拆分为构成表的过程。在本章前面的内容中,你已经了解到很多Access开发人员会将各种不同的信息(如客户、发票数据以及发票行条目)添加到一个大表中。包含大量不同数据的大表很快就会变得难于处理,并且很难保持更新。由于客户的电话号码显示在包含该客户数据的每一行中,因此在电话号码发生更改时,必须进行多次更新。

1.4.5 步骤5:窗体设计

在创建数据并建立表关系后,需要开始设计窗体。窗体由可以在“编辑”模式中输入或查看的字段构成。一般来讲,Access屏幕应该与手动系统中使用的表单非常相似。

在设计窗体时,需要在屏幕上放置三种类型的对象,如下所述。

●标签和文本框数据输入字段:Access窗体和报表上的字段称为控件。

●特殊控件(命令按钮、多行文本框、选项按钮、列表框、复选框、业务图以及图片)。

●用于增强窗体的图形对象(颜色、线条、矩形以及三维效果)。

理想情况下,如果基于现有的打印表单开发窗体,那么Access数据输入窗体应该类似于打印表单。各个字段在屏幕上的相对位置应该与其在打印表单中的位置相同。

标签显示消息、标题或题注。文本框提供可以用于输入或显示数据库中包含的文本或数字的区域。复选框表示一种情况:要么处于未选中状态,要么处于选中状态。Access中可以使用的其他类型的控件包括命令按钮、列表框、组合框、选项按钮、切换按钮以及选项组。

交叉参考:

从第V部分开始,将详细介绍有关创建窗体的主题。

13

相关文档