1、数据库设计示例应用背景某销售公司的数据库需要如下的数据处理:每月造一张月报表,表中包括信息:顾客订单号、订货日期、交货日期、产品号、产品名、产品类型、订购数量、单价、金额、顾客号、顾客姓名、地址。矚慫润厲钐瘗睞枥庑赖賃軔。矚慫润厲钐瘗睞枥庑赖賃軔朧碍鳝绢。订货产品要组织货源,需要在终端上查询:输入:产品号输出:产品号、产品名、生产厂、出厂价、交货日期、交货数量经理要了解某段时间的业务情况:输入:交货日期范围输出:客户所订货物的总数量、总金额经理还要了解某段时间不同类型产品的订货情况:输入:订货日期范围输出:产品类型、订货数量、订货金额根据上述数据处理要求,设计并实现数据库系统。现假设有如下的原
2、始单据:订货单据编号: 厂家: 交货日期:产品名规格型号单位单价数量金额合 计 金 额备注销售单据定单号: 顾客姓名: 定货日期: 交货日期: 产品名规格型号单位单价数量金额合 计 金 额备注数据库系统设计一、需求分析1、通过调研并收集原始单据得到需求信息。2、进行需求分析,完成如下工作:(1)根据业务流程,绘制出数据流图(略)。(2)汇总各类数据,产生数据字典(其中根据需要对部分作了调整,有些项是添加的)。数据项说明如下,其余省略。聞創沟燴鐺險爱氇谴净祸測。聞創沟燴鐺險爱氇谴净祸測樅锯鳗鲮。数据项类型长度范围说明订单号字符6数字字符订货日期日期8交货日期日期8产品号字符6数字字符产品名字符2
3、0产品类型字符10订购数量整数4订购单价实数82金额实数102顾客编号字符6数字字符顾客姓名字符20地址字符20二、设计E-R图1、从需求信息中提取出实体根据需求信息,可提取如下5种实体,并补充部分属性:产品(产品号,产品名,产品类型,规格型号,单位,数量,单价,金额,备注)顾客(顾客号,顾客姓名,地址)厂家(厂家编号,厂家名称)销售单(编号,用户,订货日期,交货日期,合计金额,备注)订货单(编号,厂家名称,订货日期,交货日期,备注)2、确定实体之间的联系,绘制出E-R图(1)设计分E-R图通过分析,把实体及其之间的联系用两个分E-R图描述厂家、订货单、产品及其之间的联系每个订货单向一个厂家订
4、货,同一厂家可多次订货;每个订货单只订购一种产品,每种产品可多次订货。产品、销售单、顾客及其之间的联系每个销售单可订购多种产品;每种产品销售给多个顾客;同一用户可多次订货;(2)合并E-R图将上述E-R图合并:三、E-R图转换为关系模式按照E-R图到的转换规则,可将E-R图转化为关系模式(其中的属性作一些调整)。顾客(编号,姓名,地址,电话)厂家(厂家编号, )产品(产品编号,产品名称,产品类型,型号,单位,数量,单价,金额)订货单(编号,订货日期,交货日期,厂家编号,产品编号,交货数量,出厂价,金额,备注)销售单(编号,顾客编号,订货日期,交货日期,合计金额,备注)销售明细(编号,产品编号,
5、订货数量,单价,金额)用表格形式详细说明各关系模式在SQL Server中的逻辑结构四、设计物理结构数据库名称:XSXX1、文件的设置:数据文件data.mdf日志文件log.ldf2、索引的设置为提高数据查询性能,可设置如下得所引:对订货单表,按产品代码建立索引对订货单表,按交货日期建立索引对销售单表,按订货日期建立索引其它索引五、实现数据库系统1、建立数据库结构(1)创建数据库CREATE DATABASE XSXX ON PRIMARY ( NAME=data, FILENAME=e:xsxxdata.mdf, SIZE=500MB, MAXSIZE= UNLIMITED, FILEGR
6、OWTH=50MB ) LOG ON ( NAME=log, FILENAME=e:xsxxlog.ldf, SIZE=50MB, MAXSIZE=UNLIMITED, FILEGROWTH=10MB)(2)创建表CREATE TABLE 产品 (产品编号 char(6) PRIMARY KEY,产品名称 varchar(30) NOT NULL,产品类型 varchar(10),型号 varchar(20),单位 char(6),数量 int NOT NULL, 单价 numeric(8,2),金额 numeric(10,2),备注 varchar(50) )(3)建立索引(4)定义视图CR
7、EATE VIEW 订货情况ASSELECT c.产品编号,产品名称,产品类型,型号,厂家名称,出厂价,交货日期,交货数量,d.金额 FROM 订货单 d JOIN 产品 c ON d.产品编号 = c.产品编号 JOIN 厂家 f ON f.厂家编号 = d.厂家编号(5)定义触发器(实现数据完整性)订货单表增加操作时,应将数量和金额加到表产品中: CREATE TRIGGER 订货单_INSERT ON 订货单 AFTER INSERT AS SET NOCOUNT On DECLARE id char(6) DECLARE num int,sum numeric(10,2) SELECT
8、 id = 产品编号,num = 交货数量,sum = 金额FROM inserted UPDATE 产品SET 数量 = 数量 + num ,金额 = 金额 + sum WHERE 产品编号 = id (6)定义存储过程CREATE PROCEDURE QUERY_DH bh char(6)AS SELECT 产品编号,产品名称,厂家名称,出厂价,交货日期,交货数量 FROM 订货情况WHERE 产品编号 = bh2、编写应用程序(1)服务器端主要编写用于查询的相关存储过程。(2)客户端详见“应用程序开发”部分。3、调试对服务器端,需调试存储过程和触发器。例如:调试触发器:运行下列语句可测试
9、触发器的功能:INSERT INTO 订货单 VALUES(0003,020001,2005-07-15,2005-07-30,40, 200, 8000,)残骛楼諍锩瀨濟溆塹籟婭骒。残骛楼諍锩瀨濟溆塹籟婭骒東戇鳖納。调试存储过程:运行下列语句可测试存储过程QUERY_DH 0100014、试运行六、数据库系统的运行与维护客户应用程序开发一、创建工程1、新建工程新建一个标准EXE工程,命名为”Demo”,主窗体命名为”FrmMain”,并将标题设置位“某销售公司管理系统”:酽锕极額閉镇桧猪訣锥顧荭。酽锕极額閉镇桧猪訣锥顧荭钯詢鳕驄。2、添加类库打开“引用“对话框,选取Microsoft Act
10、iveX Data Object 2.x Library3、添加部件打开“部件“对话框,选取本工程所使用的部件:本工程使用的主要部件包括:MicroSoft ADO Data Control 6.0 (OLE DB)MicroSoft DataGrid Control 6.0 (OLE DB)MicroSoft Windows Common Control 6.0 (OLE DB)二、设计主窗体假设主窗体运行后为如下的布局:1、设计菜单在“工具”菜单下选择“菜单编辑器”,编辑主菜单:详细情况见下表:2、设计工具栏添加“MicroSoft Windows Common Control 6.0 (
11、OLE DB)”部件到工具箱中,放置一个ImageList控件和一个ToolBar控件到主窗体中。彈贸摄尔霁毙攬砖卤庑诒尔。彈贸摄尔霁毙攬砖卤庑诒尔肤亿鳔简。(1)编辑图标 在ImageList控件的“属性页”中进行如下的工作:在“通用”页中设置图标的大小在“图象”页中设计所使用的图标(2)设计工具栏在Tolbar控件的“属性页”中进行如下的工作:在“通用”页中设置图象列表等属性:在“按钮”页中设置按钮的属性:3、设计状态栏和背景放置一个StatusBar控件和一个Timer控件到主窗体中,设置Timer的Interval为100。謀荞抟箧飆鐸怼类蒋薔點鉍。謀荞抟箧飆鐸怼类蒋薔點鉍杂篓鳐驱。设置主窗口的picture属性为背景图片。4、添加相关代码Private Sub Timer1_Timer()StatusBar1.Panels(1).Text=Format(Date, LONG DATE) & & Time厦礴恳蹒骈時盡继價骚卺癩。厦礴恳蹒骈時盡继價骚卺癩龔长鳏檷。End Sub三、设计基本数据维护窗体客户表维护窗体厂家表维护窗体产品表维护窗体四、设计单据输入订货单销售单五、设计查询窗体1、查询订货情况2、查询销售情况3、统计订货情况4、统计销售情况5、报表打印10 / 10