罗斯文商贸数据库分析

罗斯文商贸数据库分析
罗斯文商贸数据库分析

罗斯文商贸数据库分析

第16章数据库实例分析

初学者面对一个应用课题,常不知如何着手。有的人将开发数据库视为编程,其结果常常事倍功半,数据库质量也难以保证。现实的数据库应用系统的开发是复杂的,必须按照一定的规范有步骤地进行。

本章将整合以前各章介绍的思想与方法,通过microsoft office自带的“罗斯文商贸数据库”来说明Access应用系统的整个开发过程,达到进一步学习Access的目的。

16.1罗斯文商贸数据库简介

罗斯文商贸数据库是微软公司为用户提供的一个实例,安装office 同时用户在“自定义”安装时选择。如果当初没有选择该项,任何时候都可以将OFFICE 2003光盘插入到光驱中,然后通过windows系统的“控制面板”?“添加或删除程序” ?“添加新程序”?选择从CD-ROM安装。

安装好的数据库文件存放在系统盘的“program file /Microsoft

office/office/sample”目录下。该数据库文件的英文名称为

“northwind.mdb”。打开Microsoft Office Access时,在已有数据库列表中选择“罗斯文商贸数据库”或者northwind.mdb即可。本光盘中复制了

northwind.mdb,读者可以直接将其复制到您的系统硬盘中,用鼠标双击该文件名,启动它运行。

本文中有时把该数据库名简称为“罗斯文”。

“罗斯文”示例数据库提供了用户可以试用的数据以及数据库对象(表、查询、窗体、报表、数据访问页、宏及模块),这些数据库对象展示了可以在用户自己的数据库中运用的 Microsoft Access 功能。通过使用“罗斯文”数据库,用户

能熟悉如何构造关系数据库,以及如何将数据库对象组合在一起来帮助输入、存储、处理、分发与打印数据。

数据库开发步骤:

16.1.1需求分析

系统需求包括数据分析和功能分析两个方面。数据分析的任务是归纳出系统所包含的数据,功能分析的任务在于为应用程序设计提供依据,以实现应用要求的功能。

数据需求分析:在一个商业过程中包括供货商,订单,产品,雇员,客户和运货商多个环节,对于每一个环节我们都需要掌握详细的信息,这些信息将成为本数据库重要的信息源。

功能需求分析:本数据库的功能需求可以概括为以下几个方面:

(1) 数据录入数据录入功能要求及时更新或修改各种数据信息,包括供货商信息,产品信息,订单信息,雇员信息以及客户信息。

(2) 查询能够查询订单信息,产品信息,雇员和客户信息,发货单信息。

(3) 汇总并显示各类销售额信息,包括年度汇总销售额,季度汇总销售额,金额汇总销售额等。

(4) 打印各种报表包括产品报表,雇员报表,各类销售额报表,发货单等。

16.1.2.数据库逻辑设计

确定数据表:

根据前面的分析,我们分别归纳出八个表:

1( 产品(产品ID,产品名称,供应商,类别,单位数量,单价,库存量,订购量,再订购量,

中止)

2( 订单(订单ID,客户,雇员,订购日期,到货日期,发货日期,运货商,运货费,货主名称,

货主地址,货主城市,货主地区,货主邮政编码,货主国家)

3( 订单细则(订单ID,产品,单价,数量,折扣)

4( 供应商(供应商ID,公司名称,联系人姓名,联系人头衔,地址,城市,地区,邮政编码,

国家,电话,传真,主页)

5( 雇员(雇员ID,姓氏,名字,头衔,尊称,出生年月,雇用日期,地址,城市,地区,邮政

编码,国家,家庭电话,分机,照片)

6( 客户(客户ID,公司名称,联系人姓名,联系人头衔,地址,城市,地区,邮政编码,国家,

电话,传真)

7( 类别(类别ID,类别名称,说明,图片)

8( 运货商(运货商ID,公司名称,电话)

表之间的关系设计:

在Access中为每个主题都设置了不同的表后,必须告诉 Access 如何再将这些信息合并在一起。第一个步骤是定义表间的关系,然后创建查询、窗体及报表来从多个表中立刻显示信息。

罗斯文数据库中包含六个一对多关系,其中“产品”表与“订单”表之间的多对多关系是通过“订单明细”表中两个一对多关系来创建。详见图16.1。

注意:在多对多关系中, A 表中的记录能与 B 表中的许多记录匹配,并且在B 表中的记录也能与 A 表中的许多记录匹配。此关系的类型仅能通过定义第三个表(称作联结表)来达成,它的主键包含二个字段,即来源于 A 和 B 两个表的外部

键。多对多关系实际上是使用第三个表的两个一对多关系。“订单”表和“产品”表有多对多的关系,它是通过“订单明细”表中两个一对多关系来创建,详见图16.2。

图16.1

我们用表16.1解释表间关系

需求一对多的关系主键外键

一个供应商可以提供多种“供应商”表和供应商.供产品.供应商商品“产品” 表应商ID ID

一种类别包含很多种产品“类别”表和“产类别.类别产品.类别ID

品”表 ID

“产品”表中的主键“产“产品”表和“订单产品.产品订单细则.产品ID”,可以在“订单细则”中细则”表 ID 品ID 找到多个一样的产品ID,构成一对多的关系

“产品细则”中存在多个“订单细则”表和订单细则.订单.订单ID 相同的订单ID,在“订单”表的“订单”表订单ID,产品

主键为订单ID,所以构成多对一

的关系

一个雇员可以拿到多份订“雇员”表和“订雇员.雇员订单.雇员ID 单单”表ID

一份顾客可能订了多个订“订单”表和“顾订单.订单顾客.订单ID 单客”表ID

表16.1

图16.2

16.1.3数据库物理设计

物理设计部分包括定义表的字段结构,建立表间关系。首先我们讲述如何为表定义字段。

(1) 表的字段结构

产品:

字段名数据类型字段属性主键说明产品ID 自动编号字段大小:长整型是自动赋予新产品的编号。产品名称文本字段大小:40

供应商ID 数字字段大小:长整型与供应商表中的项相同。

小数位数:自动

类别ID 类别ID 字段大小:长整型与类别表中的项相同

小数位数:自动

单位数量文本字段大小:20 (例如, 24 装箱、一公升瓶)。单价货币格式:货币

小数位数:自动

库存量数字字段大小:整型

格式:常规数字

小数位数:自动

订购量数字字段大小:整型

格式:常规数字

小数位数:自动

再订购量数字字段大小:整型为保持库存所需的最小单元数。

格式:常规数字

小数位数:自动

中止是/否格式:是/否 "是"表示条目不可用。

订单:

字段名数据类型字段属性主键说明

订单ID 自动编号字段大小:长整型是唯一订单编号。客户ID 文本字段大小:5 与客户表中的项相同。雇员ID 数字字段大小:长整型与雇员表中的项相同。

小数位数:自动

订购日期日期/时间格式:yyyy\-mm\-dd

到货日期日期/时间格式:yyyy\-mm\-dd

发货日期日期/时间格式:yyyy\-mm\-dd

运货商数字字段大小:长整型与运货商表中的运货商ID相同。

小数位数:自动

运货费货币格式:货币

小数位数:自动

货主名称文本字段大小:40 接收货物的公司或人的名称。货主地址文本字段大小:60 仅为街道地址 -- 不允许为邮政

信箱。货主城市文本字段大小:15

货主地区文本字段大小:15 州或省。

货主邮政编码文本字段大小:10

货主国家文本字段大小:15

订单细则:

字段名数据类型字段属性主键说明

订单ID 数字字段大小:长整型是与订单表中的订单ID相同。

小数位数:自动

产品ID 数字字段大小:长整型是与产品表中的产品ID相同。

小数位数:自动

单价货币格式:

,#,##0.00;($#,##0.00)

小数位数:自动

数量数字字段大小:整型

格式:常规数字

小数位数:自动

折扣数字字段大小:单精度型

格式:百分比

小数位数:0

供应商:

字段名数据类型字段属性主键说明供应商ID 自动编号字段大小:长整型自动赋予新供应商的编号。公司名称文本字段大小:40

联系人姓名文本字段大小:30

联系人头衔文本字段大小:30

地址文本字段大小:60

城市文本字段大小:15

地区文本字段大小:15

邮政编码文本字段大小:10

国家文本字段大小:15

电话文本字段大小:24 电话号码包括国家代号或区号。传真文本字段大小:24 电话号码包括国家代号或区号。主页超级链接供应商在 World Wide Web 上

的主页。

雇员:

字段名数据类型字段属性主键说明雇员ID 自动编号字段大小:长整型

是自动赋予新雇员的编号。姓氏文本字段大小:20 名字文本字段大小:10 头衔文本字段大小:30 雇员的头衔。尊称文本字段大小:25 礼貌的称呼。出生日期日期/时间格式:

yyyy-mm-dd

雇用日期日期/时间格式:

yyyy-mm-dd

地址文本字段大小:60 街道或邮政信箱。城市文本字段大小:15

地区文本字段大小:15 州或省。邮政编码文本字段大小:10

国家文本字段大小:15

家庭电话文本字段大小:24 电话号码包括国

家代号或区号。分机文本字段大小:4 内部电话分机号码。照片 OLE对象雇员照片。备注备注有关雇员背景的一般信

息。

上级数字字段大小:长整型雇员的上级。

小数位数:自动

客户:

字段名数据类型字段属性主键说明客户ID 文本字段大小:5 是基于客户名称的5 字符唯一代码。公司名称文本字段大小:40

联系人姓名文本字段大小:30

联系人头衔文本字段大小:30

地址文本字段大小:60 街道或邮政信箱。城市文本字段大小:15

地区文本字段大小:15 州或县

邮政编码文本字段大小:10

国家文本字段大小:15

电话文本字段大小:24 电话号码包括国家代号或区号。传真文本字段大小:24 电话号码包括国家代号或区号。

类别:

字段名数据类型字段属性主键说明

类别ID 自动编号字段大小:长整型是自动赋予新类别的编号。类别名称文本字段大小:15 食品类别名称。说明备注

图片 OLE对象描绘食品类别的图片。

运货商:

字段名数据类型字段属性主键说明

运货商ID 自动编号字段大小:长整型是自动赋予新运货商的编号。

公司名称文本字段大小:40 运货公司名称。

电话文本字段大小:24 电话号码包括国家代号或区号。.

(2) 表的建立:

第八章中介绍了三种建立表的方法:利用向导创建表,通过输入数据创建表,使用设计视图创建表,下面我们利用设计视图建立“产品”表。

1(在数据库窗口,选定对象条中的表对象,然后点击窗口右边“使用设计器创建表”,窗口上会出现表的设计视图。表的设计窗口包括各个字段的字段名称,数据类型,说明等信息。参见图16.3和图16.4。

图16.3

2.首先我们将产品(产品ID,产品名称,供应商,类别,单位数量,单价,库存量,订购量,再订购量,中止)中的各字段名称分别输入表设计视图中的字段名称列。

3.在数据类型列,单击下箭头选择各字段所对应的数据类型,其中包括文本,备注,数字,日期/时间,货币,自动编号,是/否,OLE对象,超级链接,阅读向导。

4. 当在数据类型中选择一种字段类型后,设计视图下面会出现所对应的字段属性设置框,在“常规”选项卡中设定字段的属性,其中“字段大小”设定该字段所占的字节数或数字的类型,“格式”设定该字段字符串的显示格式,“输入法模式”设定当焦点移到该字段时是否打开输入法,“输入掩码”设定该字段数据输人的模式,“默认值”表示当增加新记录时该字段所使用的预设值。这些字段属性都要根据具体字段而具体设定。

5(如果需要添加说明文字,可以在说明栏中添加。当以后在窗体中选择该字段时

说明文字会显示在状态栏中。

6(在Access中,每个表都要指定关键字,在表中定义主关键字除了可以保证每条记录都被惟一识别外,更重要的作用在于多个表间的连接。如果用户没有制定一个惟一的主关键字,Access会自动建立一个。用户也可以自己制定一个主关键字,方法是:选定一个或多个字段后单击工具栏中的“主键”按钮,则相应字段左侧会出现主关镶字标志。这里定义“学号”字段为主关键字。

7(保存“产品”表

通过上面步骤我们建立了“产品”表,我们要先保存表,然后在数据视图中输入记录,见图16.5,图16.6。

图16.4

图16.5

图16.6 (3) 表间关系的建立

要定义关系,首先在“关系”窗口中添加要定义关系的表(见图16.7),然后从表中拖动键字段,并将它拖动到其他表中的键字段上(见图16.8),这时会出现编辑关系对话框(见图16.9)。我们以“雇员”表和“订单” 表为例,字段雇员ID将两表连接在一起形成一对多的关系,在编辑关系对话框中我们选择实施参照完整性这一项,并点击联系类型按键,在联系属性中选择第一项只包含来自两个表的连接字段相等处的行(见图16.10)。这样“雇员”和“订单”两表之间一对多的关系就

建立起来了。整个数据库中六个一对多的关系都可以通过这种方式建立起来,最终形成完整的数据库关系(见图16.11)。

图16. 7

图16. 8

图16. 9

图16. 10

图16. 11

16.1.4应用程序设计

数据库设计完成后,接下来要进行应用程序的设计。首先我们要从整体上把握,作出系统层次图并设计出用户界面。

(1).系统层次图

系统的总体结构可以用层次图来表示,第一层是系统层,对应主程序;第二层是子系统层,一般起分类控制作用;第三层是功能层。本数据库有两个子系统:查看产品和订单信息子系统和打印销售额报表子系统。查看产品和订单信息子系统又可以分为按类别查看,按供应商查看,按产品查看和按订单查看四种。打印销售报表子系统可以分为各国雇员销售额,按金额销售额分和各类销售额,如图16.12。

(2).用户界面设计

根据系统层次图我们可以设计出主切换面板。这样不但可以使设计者思路清晰,而且也可以令用户对数据库的功能一目了然。本数据库主切换面板如图

16.13。为了使功能更完善,主切换面板上还添加了退出Access和显示数据窗口两个按键。

图16. 12

图16. 13

(3).建立查询

所谓查询就是根据给定的条件从数据库的表中选出符合条件的记录,构成一个数据的集合。当建立了一个查询后,就可以把它看作是一个简化的数据表,它可以作为窗体或报表的数据来源,也可以以它为基础建立其他查询。在罗斯文商贸数据库中需要建立按不同条件进行的销售额查询,产品信息查询,订单信息和发货单信息。对于这四大类查询又有多种查询方法,比如选择查询,参数查询和交叉表查询。

选择查询

选择查询是最常见的查询类型,它从一个或多个表中检索数据,并且在可以更新记录(有一些限制条件)的数据表中显示结果。也可以使用选择查询来对记录进行分组,并且对记录作总计、计数、平均值以及其他类型的总和计算。下面我们以各类产品为例具体讲解如何建立和使用选择查询。

1. 在“数据库”窗口中,单击“对象”下的“查询”,再单击“数据库”窗口工具栏上的“新建”。

2. 在“新建查询”对话框中,单击“设计视图”,然后单击“确定”。见图16.14

3. 在“显示表”对话框中,单击列出了所需的表或查询数据的选项卡。见图16.15

4. 双击要添加到查询的“产品”和“类别”表,然后单击“关闭”。

5. 在设计网格中将字段添加到“字段”行,指定条件与排序次序,添加到设计网格中的字段、排序次序和条件决定了可以在查询结果中看到的内容。见图1

6.16

6. 若要查看查询结果,请单击工具栏上的“视图”。

图16. 14

图16. 15

16. 16

交叉表查询

使用交叉表查询计算和重构数据,可以简化数据分析。交叉表查询不仅能进行“总计”计算,还能重构数据和分析数据。这种查询以表或查询为数据源,分别按行和列对数据分组,并且既可按行进行“总计”,又可按行与列“总计”,结果产生

一个数据表。“罗斯文”示例数据库中的“各种产品的季度订单”查询,就是一个交叉表查询的示例。本查询要实现的功能是将各类产品在1997年各季度的订购额进行统计,用到的表包括“产品”,“订单”和“订单细则”,需要的字段名包括产品名称,客户ID,订购年份,季度和订购额。其中,产品名称,客户ID可以分别从“产品”表和“订单”表直接调用,而订购年份,季度和订购额则不能从这几个表中直接找到,我们需要使用函数来完成。下面我们来具体讲解设计步骤:

1. 在“数据库”窗口中,单击“对象”下的“查询”,再单击“数据库”窗口工具栏上的“新建”。

2. 在“新建查询”对话框中,单击“设计视图”,然后单击“确定”。

3. 在“显示表”对话框中,单击列出了所需的表或查询数据的选项卡。

4. 双击要添加到查询的“订单”,“订单细则”和“产品”表,然后单击“关闭”。

5. 将字段产品名称,客户ID添加到“字段”行,在“表”行指定各字段的来源,由于这两个字段均作为行标题,故在“交叉表”行指定为行标题。

6. 定义“季度”字段,调用datepart函数根据订购日期返回季度值,在字段行键入:季度:"第" & DatePart("q",[订购日期],1,0) & "季度" In ("第1季度","第2季度","第3季度","第4季度")。在“交叉表”行指定为列标题。注意,列标题只能有一个。

7. 定义“订购年份”字段,调用Year函数根据订购日期返回订购年份值,在字段行键入:订购年份: Year([订购日期])。在“交叉表”行指定为行标题。

8. 定义“产品金额”字段,调用调用sum和ccur函数,在字段行键入:产品金额: Sum(CCur([订单明细].[单价]*[数量]*(1-[折扣])/100)*100)。“总计”行选择表达式,“交叉表”行选择为值

9. 由于本查询是在1997年基础上进行的季度统计,所以要指定查询条件,故将“订单”表中的“订购日期”字段键入字段行,在“总计”行中选择“条件”,并在“条件”行中写入查询条件,即Between #1997-1-1# And #1997-12-31#。见图16.17

10. 若要查看查询结果,请单击工具栏上的“视图”。见图16.18

注意:以上操作中,凡“总计”行单元格未进行行选择的均要保持默认的“分组”。

图16. 17

图16. 18

参数查询:

参数查询是这样一种查询,它在执行时显示自己的对话框以提示用户输入信息,例如条件,检索要插入到字段中的记录或值。可以设计此类查询来提示更多的

相关主题
相关文档
最新文档