订单销售数据库设计.docx
《订单销售数据库设计.docx》由会员分享,可在线阅读,更多相关《订单销售数据库设计.docx(15页珍藏版)》请在冰豆网上搜索。
![订单销售数据库设计.docx](https://file1.bdocx.com/fileroot1/2023-1/8/a758bd0d-c605-4c63-898d-9bd971020a01/a758bd0d-c605-4c63-898d-9bd971020a011.gif)
订单销售数据库设计
五、逻辑设计
5.1ER图
5。
2关系模型
供应商(供应商编号,名称,地址,联系电话)
产品(产品编号,产品名称,产品类别,售价,出厂价,存货量)
供应(供应商编号,产品编号)
订购(产品编号,订单编号,数量)
客户(客户编号,姓名,通信地址,电话)
订单(订单编号,日期,客户编号,雇员编号)
雇员(雇员编号,姓名,联系电话,工资)
注:
有下划线的表示该属性为主码.
六、物理设计
6.1表汇总
表名
功能说明
表Suppliers
供应商表,存储供应商的编号等信息
表Product
产品表,存储产品的编号、数量等信息
表SP
供应商产品供应表,存储供应商所供应的产品对应信息
表Orders
订单表,存储订单的编号、日期等信息
表PO
产品订购表,存储产品订购的对应信息
表Employee
雇员表,存储雇员的编号等信息
表Customer
客户表,存储客户的编号等信息
6。
2表[1]:
[Suppliers表](供应商表)
表名
Suppliers(供应商表)
数据库用户
Sa
主键
Snumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Snumber
char(12)
N
Y
高
无
主键/供应商号
2
Sname
char(30)
N
N
中
无
供应商名称
3
Saddress
char(30)
Y
N
中
无
供应商地址
4
Stelnum
int
Y
N
高
无
供应商电话
sql脚本
--建立供应商表
createtableSuppliers—-供应商表
(Snumberchar(12)primarykey,—-供应商编号,主码
Snamechar(30)notnull,-—姓名
Saddresschar(30),——地址
Stelnumint--电话
);
6。
3表[2]:
[Product表](产品表)
表名
Product(产品表)
数据库用户
sa
主键
Pnumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Pnumber
char(12)
N
Y
高
无
主键/产品编号
2
Pname
char(30)
N
Y
高
无
产品名称
3
Pcategory
char(15)
Y
N
低
无
产品类别
4
Pprice
int
Y
N
中
无
产品售价
5
Pex_price
real
Y
N
中
无
产品出厂价
6
Pinventory
real
Y
N
中
无
产品库存量
sql脚本
--建立产品表
createtableProduct——产品表
(Pnumberchar(12)primarykey,——产品编号,主码
Pnamechar(30)notnull,--产品名称
Pcategorychar(15),—-产品类别—-
Ppriceint,--售价-—
Pex_pricereal,-—出厂价——
Pinventoryreal——存货量——
);
6.4表[3]:
[SP表](供应商产品供应表)
表名
SP(供应商产品供应表)
数据库用户
sa
主键
Snumber,Pnumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Snumber
char(12)
N
Y
高
无
主键/供应商号
2
Pnumber
char(12)
N
Y
高
无
主键/产品编号
sql脚本
-—建立供应商产品供应表
createtableSP--供应商供应产品表-—
(Snumberchar(12),——供应商编号,外码
Pnumberchar(12),-—产品编号,外码
primarykey(Snumber,Pnumber),—-联合主码
foreignkey(Pnumber)referencesProduct(Pnumber)
ondeletecascade
onupdatecascade,
foreignkey(Snumber)referencesSuppliers(Snumber)
ondeletecascade
onupdatecascade
);
6。
5表[4]:
[Orders表](订单表)
表名
Orders(订单表)
数据库用户
sa
主键
Onumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Onumber
char(12)
N
Y
高
无
主键/订单号
2
Odate
date
N
N
低
无
订单日期
3
Enumber
char(12)
Y
N
中
无
雇员号
4
Cnumber
char(12)
N
N
高
无
客户号
sql脚本
--建立订单表
createtableOrders--订单表
(Onumberchar(12)primarykey,--编号,主码
Odatedate,--日期
Enumberchar(12),-—设置雇员号,外码
Cnumberchar(12),——设置客户号,外码
foreignkey(Cnumber)referencesCustomer(Cnumber)
ondeletecascade
onupdatecascade,
foreignkey(Enumber)referencesEmployee(Enumber)
ondeletecascade
onupdatecascade
);
6。
6表[5]:
[PO表](产品订购表)
表名
PO(产品订购表)
数据库用户
sa
主键
Pnumber,Onumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Pnumber
char(12)
N
Y
高
无
主键/产品号
2
Onumber
char(12)
N
Y
高
无
主键/订单号
3
Quantity
int
N
N
低
无
订购产品数量
sql脚本
—-建立产品订购表
createtablePO—-产品订购表
(Pnumberchar(12),-—产品编号
Onumberchar(12),--订单编号
Quantityint,——产品数量
primarykey(Pnumber,Onumber),—-联合主码
foreignkey(Pnumber)referencesProduct(Pnumber)——外码
ondeletecascade
onupdatecascade,
foreignkey(Onumber)referencesOrders(Onumber)—-外码
ondeletecascade
onupdatecascade
);
6.7表[6]:
[Employee表](雇员表)
表名
Employee(雇员表)
数据库用户
sa
主键
Enumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Enumber
char(12)
N
Y
高
无
主键/雇员号
2
Ename
char(10)
N
N
中
无
雇员名称
3
Etelnum
int
N
Y
高
无
雇员电话
4
Ewages
real
N
N
低
无
雇员薪资
sql脚本
--建立雇员表
createtableEmployee-—雇员表
(Enumberchar(12)primarykey,—-编号
Enamechar(10),——名字
Etelnumint,-—电话
Ewagesreal——工资
);
6。
8表[7]:
[Customer表](客户表)
表名
Customer(客户表)
数据库用户
sa
主键
Cnumber
其他排序字段
无
索引字段
无
序号
字段名称
数据类型(精度范围)
允许为空Y/N
唯一Y/N
区别度
默认值
约束条件/说明
1
Cnumber
char(12)
N
Y
高
无
主键/客户表
2
Cname
char(10)
N
N
中
无
客户名称
3
Caddress
char(30)
Y
N
中
无
客户地址
4
Ctelnum
int
Y
Y
高
无
客户电话
sql脚本
—-建立客户表
createtableCustomer-—客户表
(Cnumberchar(12)primarykey,—-编号
Cnamechar(10),—-姓名
Caddresschar(30),--地址
Ctelnumint——电话
);
6。
9视图的设计
1、建立一张雇员信息的视图
目的:
屏蔽雇员的工资信息。
功能:
能够向管理员提供简明,直接的雇员信息展示。
意义:
有利于数据库安全的维护,防止任意修改数据库中的雇员信息.
createviewview_Employee--建立Employee视图,屏蔽工资属性
as
selectEnumber,Ename,Etelnum
fromEmployee
withcheckoption;
2、建立一张产品信息的视图
目的:
屏蔽产品的出厂价信息.
功能:
能够向管理员提供简明,直接的产品信息展示。
意义:
有利于数据库安全的维护,防止任意修改数据库中的产品信息.
createviewview_Producte--建立Product视图,屏蔽出厂价属性
as
selectPnumber,Pname,Pcategory,Pprice,Pinventory
fromview_Producte
withcheckoption;
6。
10存储过程的设计
1、查询订单数量
功能:
查询订单的数量目的:
存储查询订单数量的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchOrdersNum-—查询订单的存储过程
AsselectCOUNT(*)’订单总数'-—查询订单数量fromOrders;
2、查询客户的订单信息
功能:
查询客户的订单信息目的:
存储查询客户的订单信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_CustomerOrders——查询某个客户订单信息
@Cnamechar(10)asselectOnumber,Odate,Enumber
fromOrders,Customer
whereCnamelike@CnameandCustomer.CnumberlikeOrders。
Cnumber;
3、查询订单最多的客户信息
功能:
查询订单最多的客户信息目的:
存储查询订单最多的客户信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchMaxOrders——查询订单最多的客户信息
as
selectCnumber,Cname,Caddress,Ctelnum
fromOrders,Customer
whereOrders。
Cnunmer=Customer.Cnunmer
groupbyCnumberhavingMAX(Cnumber);
4、查询客户信息
功能:
查询客户信息目的:
存储查询客户信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchCustomer-—查询某客户信息
@Cnamechar(10)
as
select*
fromCustomer
whereCname=@Cname;
5、查询雇员信息
功能:
查询雇员信息目的:
存储查询雇员信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchEmployee——查询某雇员信息
@Enamechar(10)
as
select*
fromEmployee
whereEname=@Ename;
6、查询某订单对应的产品信息
功能:
查询某订单对应的产品信息目的:
存储查询某订单对应的产品信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchPO-—查询某订单的产品信息
@Onumberchar(12)
as
selectOnumber,Product。
Pnumber,Pname,Pcategory,Pprice,Pex_price,Pinventory
fromProduct,PO
whereOnumber=@OnumberandPO。
Pnumber=Product。
Pnumber;
7、查询产品信息
功能:
查询产品信息目的:
存储查询产品信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_SearchProduct—-查询某产品信息
@Pnumberchar(12)
as
selectPnumber,Pname,Pcategory,Pprice,Pex_price,Pinventory,Snumber
fromProduct,SP
wherePnumber=@PnumberandSP。
Pnumber=@Pnumber;
8、插入供应商信息
功能:
插入供应商信息目的:
存储插入供应商信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_InsertSuppliers—-插入供应商信息
@Snumberchar(12),@Snamechar(30),@Saddresschar(30),@Stelnumint
as
IFEXISTS(SELECT*FROMSuppliersWHERESnumber=@Snumber)
print’该供应商记录已经存在’
ELSE
insertintoSuppliers(Snumber,Sname,Saddress,Stelnum)
values(@Snumber,@Sname,@Saddress,@Stelnum);
9、插入订单信息
功能:
插入订单信息目的:
存储插入订单信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_InsertOrders——插入订单表
@Onumberchar(12),@Odatedate,,@Enumberchar(12),@Cnumberchar(12)
as
IFEXISTS(SELECT*FROMOrdersWHEREOnumber=@Onumber)
print’该订单记录已经存在'
ELSE
insertintoOrders(Onumber,Odate,Enumber,Cnumber)
values(@Onumber,@Odate,@Enumber,@Cnumber);
10、插入产品订购信息
功能:
插入产品订购信息目的:
存储插入产品订购信息的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_InsertPO-—插入产品订购表
@Pnumberchar(12),@Onumberchar(12),@Quantityint
as
IFEXISTS(SELECT*FROMPOWHEREPnumber=@PnumberandOnumber=@Onumber)—-当该订单已经订购改产品时不予重复订购
print’该产品订购订单记录已经存在'
IFEXISTS(SELECT*FROMProductWHEREPinventory〈@Quantity)-—当库存量不足时不予订购
print'该产品库存不足,无法订购'
ELSE
insertintoPO(Onumber,Pnumber,Quantity)
values(@Onumber,@Pnumber,@Quantity);
11、插入产品信息
功能:
插入产品信息目的:
存储产品的操作
意义:
下次重复同样的动作时,可直接执行存储过程,简化操作步骤
createprocedureprocedure_InsertProduct-—插入产品信息
@Pnumberchar(12),@Pnamechar(30),@Pcategorychar(15),@Ppriceint,@Pex_pricereal,@Pinventoryreal
as
IFEXISTS(SELECT*FROMProductWHEREPnumber=@Pnumber)——若有相同产品,只更新库存量
updateProduct
setPinventory=Pinventory+@Pinventory
ELSE
insertintoProduct(Pnumber,Pname,Pcategory,Pprice,Pex_price,Pinventory)
values(@Pnumber,@Pname,@Pcategory,@Pprice,@Pex_price,@Pinventory);
12、完整的订单销售流程
功能:
插入订单信息和订购信息以及修改产品库存等信息
目的:
存储从客户下单到订单订购产品的流程的操作
意义:
直观展示订单销售流程,使用户能够更简明的执行完整的订单销售流程
createprocedureprocedure_Order--完整的订单销售流程
@Onumberchar(12),@Odatedate,,@Enumberchar(12),@Cnumberchar(12)
@Pnumberchar(12),@Onumberchar(12),@Quantityint
as
IFEXISTS(SELECT*FROMOrdersWHEREOnumber=@Onumber)-—若有重复订单,则不予下单
print'该订单记录已存在,不能重复下订单'
ELSE
insertintoOrders(Onumber,Odate,Enumber,Cnumber)
values(@Onumber,@Odate,@Enumber,@Cnumber);
IFEXISTS(SELECT*FROMPOWHEREPnumber=@PnumberandOnumber=@Onumber)--若有重复订购单,则不予订购
print'该产品订购记录已存在,不能重复订购’
ELSE
IFEXISTS(SELECT*FROMProductWHEREPinventory〈@Quantity)-—若产品库存量不足,则不予订购
print'产品库存量不足,不能订购'
ELSE
insertintoPO(Onumber,Pnumber,Quantity)
values(@Onumber,@Pnumber,@Quantity);
6。
11触发器的设计
1、建立触发器insert_PO:
当插入了一条新的产品订购信息后,则激活该触发器,新的产品库存量等于旧库存量减去产品订购的数量。
功能:
能够根据数据库中数据的变化来自动进行数据更新操作。
目的:
将必备的操作自动化。
意义:
为数据库用户提供一种简便操作,省去了逐项更改数据的麻烦。
createtriggerinsert_PO——AFTER触发器,当订购产品后,自动减少库存量
onpoafterinsert
foreachrow
asbegin
updateProductsetnew。
Pinventory=old。
Pinventory-new.Quantity;
end;