数据库应用技术课程设计之商城管理系统

Posted shangzh!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库应用技术课程设计之商城管理系统相关的知识,希望对你有一定的参考价值。

数据库应用技术课程设计之商城管理系统

前言

现如今社会,互联网技术快速发展,网上购物市场逐渐火爆,已经成为了一种生活消费趋势,但是很多商家不方便对消费市场的需求进行调查分析,并且对自己所卖的商品不能及时地了解销售相关信息。同时,当购物者需要买自己所需的商品时,需要浪费很多的财力和物力。在中国电商行业飞速发展的今天,通过互联网人们就可以快速获取、发布和传递信息。进行商城管理系统的开发可以为购物者与商家提供更多的便利,网上购物弥补了传统购物的一些局限性,开发商城购物系统对于商家来说,商家利用商城管理系统就能轻松地管理大量的商品,并且可以通过该系统查看各种商品的销售状况信息,通过查看比对各种数据能够及时地知道那种商品正在热卖以及那些商品正处于冷清的转态,从而可以在运营上进行调整。

一、数据库设计

1 需求分析

1.1需求分析的目标

(1)了解商城管理的基本内容。
(2)综合的理解商城各管理人员的需求。
(3)了解商城管理的基本业务流程。
(4)了解商城人工模式与信息系统的工作概况,以及它们之间的区别。
(5)通过调查和与商城的管理人员的交流,了解用户对商城管理系统的业务要求,安全性和完整性要求。

1.2需求分析的任务

1.2.1 处理要求

某电商平台需要开发一套商城管理系统。为了收集数据库需要的信息,设计人员与系统使用人员通过交谈、填写调查等方式进行了系统的需求调研,得出系统需要实现的功能有:用户可以通过该系统查看所有商品的相关信息,包括商品编号、商品名称、商品库存、商品所属店铺编号、商品价格,然后选择购买的商品(一个用户可以购买多个商品,一个商品可以由多个用户购买)。用户也可以通过该系统查看相关商品的所属的信息,包括类目编号、类目名称(一个商品只能属于一种属性,一种属性可以包含多个商品)。商家可以通过该系统查看购买商品的用户信息,包括用户编号、用户名、注册时间、用户等级。在下单后,商家可以通过通过该系统录入用户的购买记录信息,用户可以通过该系统查看自己的购买信息记录。

1.2.2 处理功能

商品信息管理
(1)可以对商品信息进行维护,进行增删改的操作。
(2)可以通过商品,查看销售信息等。
(3)可以查看所有商品信息
类目信息管理
(1)可以查看所有商品的类别以及该商城所有的类目信息。
(2)可以对类目信息进行维护,进行增删改的操作。
(3)可以查询不同类目下的商品信息
购买信息管理
(1)根据销售记录可以查看用户的信息与商品信息
(2)可以查看所有销售记录信息。
(3)可以对销售信息进行维护,进行增删改的操作。
用户信息管理
(1)可以查询用户的购买记录
(2)可以查看所有用户信息
(3)可以对用户信息进行维护,进行增删改的操作。

1.2.3处理对象

商城管理系统处理的对象是用户的信息管理、用户的购买信息管理、商品的信息管理
商城管理系统处理对象涉及以下几个方面信息:
用户的基本信息:用户编号,用户姓名,注册时间,用户等级。
商品的基本信息:商品编号,商品名称,商品类目编号,商品类目名称,商品库存,商品所属店铺编号,商品价格。
销售信息:用户编号,商品编号,下单时间,购买数量。

1.3 数据流图

1.4 数据字典

1.4.1 数据项

1.4.2 数据结构

1.4.3数据流

1.4.4 数据存储

1.4.5 处理过程

2 概念结构设计

2.1 概念设计的任务和目标

(1)选择底层数据流为切入点,通常选择实际系统的子系统。
(2)设计分E-R图,及各个子模块的E-R图。
(3)生成初步的E-R图,通过合并方法,做到各子系统实体、属性、联系统一。
(4)生成全局E-R图,通过消除冲突等方面。

2.2实体之间联系

通过分析,得到该系统中的实体以及实体之间的联系

2.3 实体的属性
通过分析,得到该系统中的实体以及实体的属性

2.4 E-R图
通过分析,得到该系统中的E-R图

3逻辑结构设计

3.1 E-R图向关系模型的转换

商品实体与类目实体之间的联系是一对一,而商品实体与用户实体之间的联系是多对多,则需要转换为一个关系模式。
此为商品实体对应的关系模式。
••商品表(商品编号 ,商品名称,商品库存,店铺编号,商品价格,商品类目编号)
此为类目实体对应的关系模式。
•类目表(类目编号 ,类目名)
此为用户实体对应的关系模式。对应的关系模式。
•用户表(用户编号 ,用户名,注册时间,用户等级)
此为联系“购买”对应的关系模式。
•销售记录表(商品编号,用户编号 ,下单时间,数目)

3.2设计表结构

商品表、类目表、用户表、销售记录表对应的表结构如下图所示




4物理结构设计

4.1 关系模式存取方法的选择

存取方法是选择快速存取的数据库中数据的技术,数据管理系统一般提供多种存取方法,常用的存取方法为索引方法和聚簇方法。考虑到商城管理系统并不需要处理大量的数据,也不需要进行建立聚簇,并且聚簇存取方法开销相当大,同时根据实际应用要求确定对关系的某些属性建立索引,或者建立唯一索引和组合索引,所以,商城管理系统使用索引存取方法。

4.2确定数据库的存储结构

目前很多计算机有很多磁盘或者磁盘阵列,因此可以将表和索引放在不同的磁盘上,在查询时,由于磁盘驱动并行工作,可以提高物理I/O读写的效率。也可以将比较大的表分方在两个磁盘上,加快存取的速度,这在多用户环境下特别有效。还可以将日志文件与数据库对象(表、索引等)放不同的磁盘上,以改进系统的性能。根据实际应用要求,商城关系系统只需要进行基本的数据操作,所以,将数据库对象(表、索引等)放在同一个磁盘中即可。

4.3评价物理结构

数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案。评价物理数据库的方法完全可以依赖所选用的关系数据库管理系统,主要从各种方案的存储空间、存储时间和维护代价入手,选择最优的物理结构。通过需求分析的结果得知,商城管理系统由于各方面的功能需求较少以及数据库对象较少,一般普通的物理结构即可满足用户的需求。

5数据库实施

5.1 创建数据库

创建“商城管理系统”数据库“szh”,创建数据库时要求检测是否存在“szh”数据库,如果存在,则先删除再创建。

drop database if exists szh ;
create database szh;  

5.2 创建数据表

创建表时需要考虑各表之间的参照关系,先创建主表后创建从表,创建时需要检测数据库中是否存在同名的表,如果存在,则先删除再创建。

5.2.1创建商品表(goods)

drop table if exists goods;   
#如果goods表存在,则删除  
create table goods  
(   gid int(11), gname varchar(20), cid int(11),
price float,  
num int(11) default 0,     #num 默认值为0  
sid int(11) not null,      #sid 非空  
primary key(gid),      #gid为goods表的主键  
unique index u_gname(gname)   
    #在gname字段上建立唯一索引  
 );  

5.2.2 创建类目表(category)

drop table if exists category; 
#如果类目表(category)存在,则删除  
create table category  
( cid int(11) primary key,   #cid 为category的主键  
cname varchar(20)  
 );  

5.2.3 创建用户表(users)

drop table if exists users; 
#如果用户表(users)存在,则删除  
create table users  
( uid int(11) primary key,       #uid 为user表的主键  
  uname varchar(20) unique,      #uname 唯一  
  eg_time date default '2021-11-11',  
  #注册的默认时间为‘2021-11-11’  
  grade varchar(20)  );  

5.2.4 创建商品销售表(scales)

create table sales  
( gid int(11), uid int(11),  
  ord_id date,  
  num int(11) default 1,  #num默认值为1  
  primary key(gid, uid)  # gid, uid 为sales的复合主键  
);  

5.3 创建约束

该创建约束只针对与外键约束,其他约束在创建表的过程中已经添加了约束。
商品表(goods)中商品类目编号(cid)为外键
goods表中的cid字段参照了category表中的cid字段,goods表为从表,category表为主表

alter table goods add constraint fk_goods_category 
foreign key(cid) references category(cid);  

销售记录表(sales)中商品编号(gid),用户编号(uid)为均外键
sales表中的gid字段参照了goods表中的gid字段,sales表为从表,goods表为主表

alter table sales add constraint fk_sales_goods 
foreign key(gid) references goods(gid); 

sales表中的uid字段参照了users表中的uid字段,sales表为从表,users表为主表

 alter table sales add constraint fk_sales_users 
foreign key(uid) references users(uid);  

5.4建立视图

该系统需要建立两个视图,分别为当用户或者商城管理人员想要查询店铺号为2号的商品数目以及商城管理人员想要查询订单时间早于‘2021-12-23’的所有订单的信息,两个视图分别命名为szh_shop 与 szh_sales。
创建szh_shop视图

create view szh_shop
 as
 select count(*) as 商品数目 from goods
 where sid = 2; 

创建szh_sales视图

create view szh_sales
as
select * from sales
where ord_id < '2021-12-23';

5.5建立存储过程

该系统需要建立两个存储过程,分别为实现根据类目编号、商品价格最小值与最大值查询价格位于最小值与最大值之间且属于此类目的产品信息,以及实现根据类目编号返回此类目商品的平均价格。分别命名为szh_p 与 szh_p1。
创建szh_p存储过程

delimiter //
create procedure szh_p(in in_cid int(11), 
in in_minPrice float, in in_maxPrice float)
begin
select * from goods
where cid = in_cid and price 
between in_minPrice and in_maxPrice;
end // 
delimiter ;

创建szh_p1存储过程

delimiter //
create procedure szh_p1(in in_cid int(11),
out out_avgPrice float)
begin
select avg(price) into out_avgPrice from goods
where cid = in_cid;
end //
delimiter ;

5.6建立触发器

该系统需要建立两个触发器,分别为实现当删除商品类目表中的某个商品类别时,将商品表中商品类目编号cid设置为NULL,以及当删除某个用户时,商品销售记录表自动删除该用户的销售信息。分别命名为szh_tri 与 szh_tri1。
创建szh_tri触发器

delimiter //
create trigger szh_tri before delete on category 
for each row
begin 
update goods
set cid = null;
end //
delimiter ;

创建szh_tri触发器

delimiter //
create trigger szh_tri1 before delete on users
for each row
begin 
delete from sales
where uid = old.uid;
end//
delimiter ;

5.7 数据表数据的插入

完成数据表中数据填充,商品表需插入二十一条信息、类目表需插入七条信息、用户需插入二十一条信息、商品销售记录表需插入二十一条。为了保证主外键的约束关系,建议先查入主表中的数据,再插入子表中的数据。

5.7.1 向category表中插入数据

 insert into category  
 values( 1, '蔬菜'),  
       ( 2, '水果'),  
       ( 3, '食品'),  
       ( 4, '饮料'),  
       ( 5, '电器'),  
       ( 6, '图书'),  
       ( 7, '服装');  

5.7.2 向goods表中插入数据

 insert into goods  
 values  
  (101, '青菜', 1, 3, 110, 1),(102, '白菜', 1, 4, 120, 1),(103, '花菜', 1, 5, 130, 1),  
     (104, '香蕉', 2, 3, 140, 2),(105, '苹果', 2, 4, 150, 2),(106, '西瓜', 2, 15, 160, 2),  
    (107, '面包', 3, 3, 170, 3),(108, '辣条', 3, 5, 180, 3),(109, '薯片', 3, 10, 190, 3),  
    (110, '可乐', 4, 4, 100, 4),(111, '芬达', 4, 4, 110, 4),(112, '雪碧', 4, 8, 120, 4),  
     (113, '手机', 5, 2000, 103, 5),(114, '电脑', 5, 5000, 104, 5),(115, '电视机', 5, 4000, 103, 5),  
    (116, '算法入门', 6, 40, 106, 6),(117, '星火英语', 6, 35, 106, 6),(118, '数据库技术', 6, 55, 106, 6),  
     (119, '连衣裙', 7, 180, 109, 7),(120, '帽子', 7, 20, 109, 7),(121, '毛衣', 7, 100, 109, 7) ;  

5.7.3 向users表中插入数据

insert into users  
values  
     (1001,'张1','2021-11-11','一星'),(1002,'张2','2020-11-11','二星'),(1003,'张3','2019-11-11','三星'),  
     (1004,'李1','2021-11-11','一星'),(1005,'李2','2020-11-11','二星'),(1006,'李3','2019-11-11','三星'),  
     (1007,'王1','2021-11-11','一星'),(1008,'王2','2018-11-11','一钻'),(1009,'王3','2016-11-11','三钻'),  
     (1010,'尚1','2018-11-11','一钻'),(1012,'尚2','2017-11-11','二钻'),(1013,'尚3','2016-11-11','三钻'),  
     (1014,'方1','2021-11-11','一星'),(1015,'方2','2020-11-11','二星'),(1016,'方3','2019-11-11','三星'),  
     (1017,'熊1','2020-11-11','二星'),(1018,'熊2','2020-11-11','二星'),(1019,'熊3','2019-11-11','三星'),  
     (1011,'贺11','2021-11-11','一星'),(1020,'程20','2017-11-11','二钻'),(1021,'杨21','2019-11-11','三星');  

5.7.4 向sales表中插入数据

  insert into sales  
   values  
    (101,1002,'2021-12-01',10),(101,1001,'2021-12-11',20),(102,1001,'2021-12-21',30),  
     (103,1012,'2021-12-16',10),(104,1011,'2021-12-15',23),(107,1013,'2021-12-11',30),  
     (108,1021,'2021-12-13',60),(109,1021,'2021-12-11',20),(109,1020,'2021-12-22',10),  
     (111,1018,'2021-12-12',20),(111,1019,'2021-12-07',12),(113,1015,'2021-12-06',10),  
    (114,1017,'2021-12-09',10),(116,1011,'2021-12-11',20),(118,1004,'2021-12-21',30),  
     (119,1002,'2021-12-01',10),(104,1021,'2021-12-13',20),(120,1018,'2021-12-23',30),  
     (121,1012,'2021-12-07',10),(121,1003,'2021-12-21',20),(112,1013,'2021-12-13',30); 

二、实验操作

1 数据的增加操作

1.1新增一条类目信息

#在category表中增加一条 cid = 8, cname 为 '玩具’ 的信息
insert into category values(8,'玩具');

2 数据的删除操作

2.1删除指定编号的某款产品

#删除商品编号为101的商品信息
#存在外键约束,先打开约束,进行删除,后关闭约束。
#或者先删除sales表中 gid 为101 的 销售记录
delete from goods where gid = 101;

2.2 删除名称包含某些字的产品

#删除包含“香”字的商品信息
#存在外键约束,先打开约束,进行删除,后关闭约束。
#或者先删除sales表中 gname含有“香”的 销售记录
delete from goods where gname like '%香%';

2.3 删除等级为一星的用户

#在users表中删除grade为'一星'的用户信息
#存在外键约束,先打开约束,进行删除,后关闭约束。
#或者先删除sales表中用户等级为一星的销售记录delete from users where grade='一星';

3 数据修改操作

3.1将产品标题中包含某字的产品的库存增加100

#将goods表中商品名称包含‘菜’字的信息库存增加100
update goods set num = num + 100 
where gname like '%菜%';

3.2修改用户名中包含某字的用户等级为一钻

#修改用户表中用户名中包含‘张’的用户等级为一钻
update users set grade='一钻' 
where uname like '%张%';

3.3 修改商品表中某个编号商品的库存和价格

#修改商品表中商品编号为102商品的库存和价格,将库存改为100,价格改为10
update goods set num = 100 , price = 10 
where gid = 102;

4 数据的查询操作

4.1查询类目表中的所有数据

#查询类目表中的所有数据
select *from category;

4.2查询用户表中不同的用户等级

#查询用户表中不同的用户等级
select distinct grade from users;

4.3查询商品表中的商品名称,库存和价格

#查询商品表中的商品名称,库存和价格
select gname,num,price from goods;

4.4查询订单时间早于某个时间的所有订单

#查询订单时间早于'2021-12-11'的所有订单信息
select * from sales where ord_id < '2021-12-11';

4.5查询库存在某个范围之间的所有商品

#查询库存在100 到 200 之间的所有商品
select gname from goods 
where num >= 100 and num <= 200;

4.6查询价格大于某个值并且标题中包含某个字的所有商品

#查询价格大于 1000 并且商品名称中包含‘电’的所有商品
select gname from goods 
where price > 1000 and gname like '%电%';

4.7查询用户等级为一星,两星和一钻的所有用户

#查询用户等级为一星,两星和一钻的所有用户
select uname  from users
where grade in('一星','两星','一钻');

4.8查询所有商品信息并按照库存倒序排列

#查询所有商品信息并按照库存倒序排列
select * from goods order by num desc;

4.9查询产品标题中包含某个字所有商品信息并按照产品价格升序排列

#查询商品名称中包含‘电’的所有商品信息并按照商品价格升序排列
select * from goods 
where gname like '%电%' order by price asc;

4.10查询商品表中商品总数

#查询商品表中商品总数
select count(*) as 商品总数  from goods;

4.11查询用户表中用户等级为某个级别的用户的数目

#查询用户表中用户等级为'二星'的用户的数目
select count(*) from users where grade = '二星';

4.12查询下单时间在某个时间之前的所有订单商品数量

#查询下单时间在某‘2021-12-11’之前的所有订单商品数量
select sum(num) as 商品数量 from sales where ord_id < '2021-12-11';

4.13查询商品表中各个分类下商品的数目字段别名分别为商品类目商品数量

#查询商品表中各个分类下商品的数目,字段别名分别为商品类目与商品数量
#使用group by根据cid分组
select cid as 商品类目,count(gid) as 商品数量 
from goods group by cid;

4.14查询用户表中各个等级下用户的数量字段别名分别为用户等级用户数量

#查询用户表中各个等级下用户的数量,字段别名分别为用户等级、用户数量
#根据grade分组,使用count函数统计用户数量
select grade as 用户等级,count(uid) as 用户数量
from users
group by grade;

4.15查询库存最多的商品数量

#查询库存最多的商品数量,使用max函数
select max(num) as 商品数量最大值 from goods ;

4.16查询注册时间最早的用户

#查询注册时间最早的用户
select uname as 注册最早的用户 from users
where eg_time in (select min(eg_time) from users);

4.17查询所有商品的平均价格

#查询所有商品的平均价格
select avg(price) as 平均价格 from goods;

4.18查询某个店铺中的商品数目

#查询店铺1中的商品数目
select count(*) as 商品数目 from goods where sid = 1;

4.19查找商品表中比魔方价格高的商品

#查找商品表中比辣条价格高的商品。
select gname as 商品 from goods
where price > (select price from goods
where gname = '辣条');

4.20查找今年7月份消费金额大于1000元并且至少购买了两种商品的用户

#先通过三表连接,后对uid进行分组,查询里面购买商品数目大于等于且消费金额大于1000
select uname
from users join sales on users.uid=sales.uid join goods
on sales.gid=goods.gid
where year(ord_id)=2021 and month(ord_id)=7
group by users.uid
having count(distinct cid)>=2 
and sum(sales.num * price)>1000;

创建视图

5.1查询某个店铺中的商品数目

#根据查询店铺2中的商品数目要求,创建视图命名为szh_shop
 create view szh_shop
 as
 select count(*) as 商品数目 from goods
 where sid = 2; 

5.2 查询订单时间早于某个时间的所有订单

#根据查询订单时间早于‘2021-12-23’的所有订单的信息的要求,创建视图命名为szh_sales
create view szh_sales
as
select * from sales
where ord_id < '2021-12-23';

6 存储过程操作

6.1 创建一个存储过程,实现根据类目编号、商品价格最小值与最大值查询价格位于最小值与最大值之间且属于此类目的产品信息

#创建一个存储过程,实现根据类目编号、商品价格最小值与最大值查询价格位于最小值与最大值之间且属于此类目的产品信息。
delimiter //
create procedure szh_p(in in_cid int(11), 
in in_minPrice float, in in_maxPrice float)
begin
select * from goods
where cid = in_cid and price 
between in_minPrice and in_maxPrice;
end // 
delimiter ;

6.2创建一个存储过程,实现根据类目编号返回此类目商品的平均价格

#实现根据类目编号返回此类目商品的平均价格,创建一个存储过程命名为szh_p1
delimiter //
create procedure szh_p1(in in_cid int(11),
out out_avgPrice float)
begin
select avg(price以上是关于数据库应用技术课程设计之商城管理系统的主要内容,如果未能解决你的问题,请参考以下文章

商城系统中商品模块数据库设计的一些思考

计算机毕业设计之java+springcloud分布式架构网上商城网站

C语言课程设计

Python毕业设计推荐

django3 商城项目 从0到1 设计与配置

如何用c#语言+web+mysql编制一个购物商城