订单销售数据库设计.docx
《订单销售数据库设计.docx》由会员分享,可在线阅读,更多相关《订单销售数据库设计.docx(34页珍藏版)》请在冰豆网上搜索。
订单销售数据库设计
五、逻辑设计
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,--
编号
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,PinventoryfromProduct,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),@Stelnumintas
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),@Pcategory
char(15),@Pprice
int,@Pex_price
real,@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=@O