1、数据库销售订单管理系统课程设计目 录1引言11.1编写目的11.2参考资料12.需求规约22.1 业务描述22.2 需求分析23.数据库环境说明34.数据库的命名规则44.1 数据库对象命名规则44.2 数据项编码规则45.逻辑设计55.1 ER图55.2 关系模型56.物理设计66.1表汇总66.2 表1: Suppliers表(供应商表)66.3 表2:product表(产品表)76.4 表3:sp表(供应商产品供应表)76.5 表4: orders表(订单表)86.6 表5:po表(产品订购表)96.7 表6: employee表(雇员表)106.8 表7:customer表(客户表)1
2、16.9 视图的设计116.10 存储过程的设计126.11 触发器的设计296.12函数的设计307.安全性设计317.1防止用户直接操作数据库的方法317.2用户帐号密码的加密方法317.3角色与权限318.数据库管理与维护说明32总结33附录341引言1.1 编写目的本文档是销售订单数据库管理系统设计文档的组成部分,编写数据库设计文档的目的是:明确数据库的表名、字段名等数据信息,用来指导后期的数据库脚本的开发,本文档遵循。本文档的读者对象是需求人员、系统设计人员、开发人员、测试人员。设计该数据库的目的是为了能够模拟完成一次订单销售流程。1.2 参考资料表1 参考资料表资料名称作者文件编号
3、、版本王珊、萨师煊 5月第4版鲍威尔 3月第1版克罗恩科 6月第1版2.需求规约2.1 业务描述销售订单数据库管理系统的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的销售订单数据库管理系统,实现订单的下发,数据的查询删除和修改。2.2 需求分析本销售订单数据库管理系统的需求如下,首先在供应商表、供应表、产品表、订购表、订单表、客户表、雇员表的基本表上建立增、删、改、查的存储过程。以便以后再次用到的时候能够直接用存储过程而不用重复的写代码。第二在实验中间建立触发器,当订购产品的时候能够查询库
4、存,如果满足要求,那么就库存经过触发器实现库存的减少。第三在这次客场设计的基础上建立一些查询,比如说要求建立订单最多的客户信息的查询,平均工资的查询,库存最多的产品的查询。最后要求完成一次下订单的流程。另外,在一个完整的订单销售流程中,本数据库系统还提供查询某供应商供应的产品信息,查询某产品信息,查询某客户信息,查询某订单订购的产品的信息。对于客户而言,还提供了查询订单最多的客户的功能。例如当在订单的中只要知道订单的编号,就能够知道订单的产品的名字,产品的数量(产品的信息),雇员的信息,客户的信息。在订购的表中知道订单号就能够知道订单中产品的数量。能够修改数据库里面的数据,例如条件知道供应商编
5、号就能够对供应商的信息(编号,姓名,联系电话,地址等)进行修改,还能够对该供应商进行删除。知道客户的编号就能够对客户的数据 (编号,信息 姓名,联系电话等)进行修改,还能够对该用户进行删除。总的来说,本数据库系统能够达到模拟完成一次订单销售流程的要求。在本销售订单数据库管理系统中,有一些限制性条件,比如一个客户能够下多个订单,但一个订单只能由一个客户下,一个订单能够订购多种产品,每种产品可被不同订单订购等等,这些限制条件的加入能够使本数据库管理系统的功能更加完善,能够满足更高的要求。3.数据库环境说明表2 数据库环境说明表数据库实例数据库系统数据库部署环境数据库设计工具数据库存放位置说明销售订
6、单数据库管理系统Sql Server Windows 7Sql Server存放位置,绝对路径/相对路径用于订单销售管理4.数据库的命名规则4.1 数据库对象命名规则表3 数据库对象命名表数据库对象命名规则备注表S功能描述字符串例如:Suppliers供应商表视图view_功能描述字符串例如:view_Product产品视图触发器insert_功能描述字符串例如:insert_PO更改库存触发器存储过程Procedure_功能描述字符串例如:pro_sertSuppliers存储过程 4.2 数据项编码规则表4 数据项编码表数据项命名规则数据类型长度范围备注供应商编号两位整数序号(001000
7、)定长字符串32位无产品号两 位 整 数 序 号(001000)定长字符串32位无订单号两位整数序号(001000)定长字符串32位无雇员号两位整数序号(001000)定长字符串32位无客户号两位整数序号(001000)定长字符串32位无5.逻辑设计5.1 ER图图5.1E-R图5.2 关系模型供应商(供应商编号,名称,地址,联系电话)产品(产品编号,产品名称,产品类别,出厂价,价格,库存)供应(供应商编号,产品编号)订购(产品编号,订单编号,数量)客户(客户编号,姓名,地址,电话)订单(订单编号,日期,客户编号,雇员编号,产品种类)雇员(雇员编号,姓名,电话,工资)6.物理设计6.1表汇总表
8、5 汇总表表名功能说明表Suppliers供应商表,存储供应商的编号等信息表product产品表,存储产品的编号、数量等信息表Sp供应商产品供应表,存储供应商所供应的产品对应信息表orders订单表,存储订单的编号、日期等信息表po产品订购表,存储产品订购的对应信息表employee雇员表,存储雇员的编号等信息表customer客户表,存储客户的编号等信息6.2 表1: Suppliers表(供应商表)表名Suppliers(供应商表)数据库用户Sa主键S_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1S_numberc
9、har(32)NY高无主键/供应商编号2S_namechar(32)NN中无供应商名称3S_addresschar(32)NN中无供应商地址4S_telnumChar(32)NN高无供应商电话sql脚本-建立供应商表create table Suppliers-供应商表( S_number char(32) not null primary key, S_name char(32) not null, S_adress char(32) not null, S_telnub char(32) not null, );6.3 表2:product表(产品表)表名Product(产品表)数据库用户
10、sa主键P_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1P_numberchar(32)NY高无主键/产品编号2P_namechar(32)NY高无产品名称3P_priceintYN中无产品原价4P_expriceintYN中无产品出厂价5P_inventoryintYN中无产品库存量sql脚本-建立产品表create table product -产品表( p_number char(32) primary key not null, p_name char(32) not null, p_price int, -原
11、价 p_exprice int, -售价 p_inventory int ,-库存);6.4 表3:sp表(供应商产品供应表)表名sp(供应商产品供应表)数据库用户sa主键S_number,P_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1S_numberchar(32)NY高无主键/供应商号2P_numberchar(32)NY高无主键/产品编号sql脚本-建立供应商产品供应表create table sup-供应表( S_number char(32) not null, p_number char(32) not
12、null, primary key(S_number,p_number), foreign key(S_number)references Suppliers(S_number) on delete cascade on update cascade, foreign key(p_number)references product(p_number) on delete cascade on update cascade );6.5 表4: orders表(订单表)表名orders(订单表)数据库用户sa主键o_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N
13、唯一Y/N区别度默认值约束条件/说明1o_numberchar(32)NY高无主键/订单号2timesdateNN低无订单日期3e_numberchar(32)YN中无雇员号4c_numberchar(32)NN高无客户号5pnintYN中无产品种类数sql脚本-建立订单表create table orders -订单表( o_number char(32) not null primary key, empl_number char(32) not null, c_number char(32) not null, times date, pn int,-产品总数 foreign key(c
14、_number)references customer(c_number) on delete cascade on update cascade, foreign key(empl_number)references employee(empl_number) on delete cascade on update cascade );6.6 表5:po表(产品订购表)表名po(产品订购表)数据库用户sa主键p_number o_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1p_numberchar(32)NY高无主键
15、/产品号2o_numberchar(32)NY高无主键/订单号3quantintNN低无订购产品数量sql脚本-建立产品订购表create table po-订购表(p_number char(32),o_number char(32),quant int,primary key(p_number,o_number),foreign key(p_number)references product(p_number)on delete cascadeon update cascade,foreign key(o_number)references orders(o_number)on delet
16、e cascadeon update cascade, );6.7 表6: employee表(雇员表)表名employee(雇员表)数据库用户sa主键e_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1e_numberchar(32)NY高无主键/雇员号2e_namechar(32)YN中无雇员名称3e_telnumChar(32)YY高无雇员电话4e_realrealYN低无雇员薪资5e_addresChar(32)YN中无雇员的地址sql脚本-建立雇员表create table employee-雇员表( empl_
17、name char(32), empl_number char(32) primary key, empl_addres char(32), empl_telnumb char(32), empl_real int,);6.8 表7:customer表(客户表)表名customer(客户表)数据库用户sa主键c_number其它排序字段无索引字段无序号字段名称数据类型(精度范围)允许为空Y/N唯一Y/N区别度默认值约束条件/说明1c_numberchar(32)NY高无主键/客户表2c_namechar(32)YN中无客户名称3c_addresschar(32)YN中无客户地址4c_telnu
18、bchar(32)YY高无客户电话sql脚本-建立客户表create table customer-客户表( c_number char(32) primary key, c_name char(32), c_adress char(32), c_telnub char(32),);6.9 视图的设计1、建立一张客户信息的视图目的:屏蔽客户的地址信息。功能:能够向管理员提供简明,直接的客户信息展示。意义:有利于数据库安全的维护,防止任意修改数据库中的雇员信息。create view v_coustom(name,number)asselect c_name,c_numberfrom custo
19、mer;2、建立一张订单视图信息的视图目的:用来查询每个客户下的订单数和用来查找下订单数最多的客户。功能:能够向管理员提供简明,直接客户下订单的信息展示。意义:有利于数据的检索。create view view_ordersasselect c_number,count(o_number)总数from ordersgroup by c_number;6.10 存储过程的设计1、查询订单数量功能:查询订单的数量目的:存储查询订单数量的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_SearchOrdersNum -查询订单的存
20、储过程asselect COUNT(*) 订单总数-查询订单数量from Orders;图1 订单总数查询图2、查询订单信息功能:查询订单信息目的:存储查询订单信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_select_orders-查询订单信息o_number char(32)asif not exists ( select * from orders where o_number=o_number ) print该订单不存在 elseselect orders.o_number,times,pn,c_name,e
21、mpl_namefrom orders ,customer,employee wherecustomer.c_number=orders.c_numberandorders.empl_number=employee.empl_number and orders.o_number=o_number图2 订单查询图 3、查询订单最多的客户信息功能:查询订单最多的客户信息目的:存储查询订单最多的客户信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create view view_orderasselect c_number,count(o_number)总数from order
22、sgroup by c_number;drop view view_orders;create procedure procedure_select_max_oders -查询订单数最多的客户asselect *from customerwhere c_number in ( select c_number from view_orders where 总数 in( select MAX(总数 ) from view_orders ) ); 图3 最多订单客户效果图4、查询客户信息功能:查询客户信息目的:存储查询客户信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤crea
23、te procedure procedure_select_coustom -查询客户信息name char(32)asif not exists ( select * from customer where c_name=name ) print该客户不存在 elseselect *from customer where c_name=name;图4 查询客户信息图5、查询雇员信息功能:查询雇员信息目的:存储查询雇员信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_select_empl -查询雇员信息name cha
24、r(32)asif not exists ( select * from employee where empl_name=name ) print该客户不存在 elseselect *from employee where empl_name=name;图5 查询雇员信息图6更新客户信息功能:更新客户信息目的:存储更新客户信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure update_coustome-更新客户信息 number char(32), tell char(32), address char(32) as if not exi
25、sts(select * from customer where c_number=number ) print你输入的客户不存在 else update customer set c_adress=address,c_telnub=tell where c_number=number ;图6 更新客户信息图7、查询产品信息功能:查询产品信息目的:存储查询产品信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_selec_produt pnumber char(32)-产品的查询as select *from produc
26、twhere p_number=pnumber;图7 查询产品图8、插入供应商信息功能:插入供应商信息目的:存储插入供应商信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure inser_suply-增加供应商 Snumber char(32), Sname char(32), Sadress char(32), Stelnub char(32)asif exists(select * from Suppliers where S_number=Snumber)print 该供应商已经存在,无需加入。else insertinto Suppli
27、ersvalues( Snumber, Sname, Sadress , Stelnub );图8 插入供应商图9、插入订单信息功能:插入订单信息目的:存储插入订单信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_insert_orders-插入订单信息o_number char(32),empl_number char(32),c_number char(32),time date,pn intasif exists ( select * from orders where o_number=o_number ) pr
28、int该订单已经存在,不需重复下订单 elseinsertinto orders values(o_number ,empl_number,c_number,time ,pn) 图9 插入订单图10、插入产品订购信息功能:插入产品订购信息目的:存储插入产品订购信息的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_oeder_pro -插入订单产品pnumber char(32),onumber char(32),quany intasif not exists ( select * from product where p_
29、number=pnumber ) print仓库里没有该产品,不予订购 elseif not exists ( select * from orders where o_number=onumber ) print你输入的订单号不对 elseif exists ( select * from po where p_number=pnumber and o_number =onumber ) print该产品已经在订单中 else if exists ( select * from product where p_inventoryquany and p_number=pnumber ) pri
30、nt该产品库存不足不予以订购 elseinsert into povalues(pnumber ,onumber,quany ); 图10 插入订购产品图11、插入产品信息功能:插入产品信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_insert_pro-插入产品number char(32),name char(32),price int,exprice int,inventory intasif exists(select * from product where p_number=number)up
31、date productset p_inventory=p_inventory+inventoryelseinsert into product values( number, name, price, exprice, inventory )图 11 插入产品图12、更新供应商的信息功能:更新供应商的信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_update_suply-更新供应商信息 snumber char(32), stell char(32), saddress char(32) as if
32、not exists( select * from Suppliers where S_number=snumber ) print你输入的供应商不存在 else update Suppliers set S_adress=saddress,S_telnub=stell where S_number =snumber; exec procedure_update_suply 001,大连;图12 更新供应商信息图13、删除供应商功能:删除供应商的信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤 create procedure procedure_delet
33、_supply-删除供应商信息 number char(32) as if not exists(select * from Suppliers where S_number=number ) print你输入的供应商不存在 else delete from Suppliers where S_number =number ; exec procedure_delet_supply 111;图13 删除供应商图14、最多的库存产品查询功能:最多的库存产品查询目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤图14 库存量最大产品查询图15、供应商供应的产品查询功能
34、:供应商供应的产品查询目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_selet_pro -查询商供应的产品snumber char(32)asif not exists(select s_number from Suppliers where S_number=snumber )print该供应商不存在elseselect S_name,p_name from Suppliers,sup,productwhere Suppliers.S_number=sup.S_number and Suppliers.S
35、_number=snumber and sup.p_number=product.p_numberexec procedure_selet_pro 011;图16 查询供应商供应的产品图16、更新客户的信息功能:更新客户信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤 create procedure procedure_update_coustome-更新客户信息 number char(32), tell char(32), address char(32) as if not exists(select * from customer where c_
36、number=number ) print你输入的客户不存在 else update customer set c_adress=address,c_telnub=tell where c_number=number ; exec procedure_update_coustome 01,广州图16 更新客户信息图17、删除客户信息功能:删除客户信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_delet_coustome-删除客户信息 number char(32) as if not exists(se
37、lect * from customer where c_number=number ) print你输入的客户不存在 else delete from customer where c_number=number ; exec procedure_delet_coustome 05 图17 删除客户信息图18、更新雇员信息功能:更新雇员信息目的:存储产品的操作意义:下次重复同样的动作时,可直接执行存储过程,简化操作步骤create procedure procedure_update_emp-更新雇员信息 enumber char(32), etell char(32), eaddress char(32), e_real int as if not exists(select * from employee where empl_number=enumber ) print你输入的雇员不存在 else update employee set empl_addres=eaddress,empl_telnumb=etell,empl_real=e_real wher