订单销售数据库设计.docx

上传人:b****1 文档编号:12713770 上传时间:2023-04-21 格式:DOCX 页数:17 大小:53.09KB
下载 相关 举报
订单销售数据库设计.docx_第1页
第1页 / 共17页
订单销售数据库设计.docx_第2页
第2页 / 共17页
订单销售数据库设计.docx_第3页
第3页 / 共17页
订单销售数据库设计.docx_第4页
第4页 / 共17页
订单销售数据库设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

订单销售数据库设计.docx

《订单销售数据库设计.docx》由会员分享,可在线阅读,更多相关《订单销售数据库设计.docx(17页珍藏版)》请在冰豆网上搜索。

订单销售数据库设计.docx

订单销售数据库设计

五、逻辑设计

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

whereCnamelikeCnameandCustomer.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

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

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;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1