无偿分享一些之前做的实验报告~喜欢点赞+关注(^_^)
这个报告只是数据库的设计,没有前后端的其他知识,有需要可以参考
- 实验目的
根据所学习的数据库设计理论和方法,设计电子商务网站数据库,包括概要设计、逻辑设计和物理设计。设计完成后,使用MySQL数据库管理系统创建数据库并插入数据。
- 设备与环境
硬件:多媒体计算机
软件:Windows,MySQL数据库管理系统
实验内容
1.系统概述
本次实验是要构建一个电子商务系统的数据库,该商务系统类似一个购物平台,可以进行购买(有产品的信息,可以衍射到厂家),有销售记录(订单消息以及订单状况),还有顾客的各种信息组成,具体如下:
- 商品管理部****:管理销售的各类商品。商品主要内容包括:商品名称、商品类别、商品价格、生产厂家、上一次购入时间、商品的详细信息、商品的缩略图。
具体细节:
商品类别包括图书、手机、数码影像和电脑等。商品的缩略图为jpg或png类型的图片。图书类型的商品,则生产厂家表示出版社。其他类型商品,生产厂家即为实际生产机构。
2、商品销售部****:销售各类商品并记录结果。
由三部分内容构成
1订单的基本信息、2订单的购买人信息3订单中购买的商品信息
具体细节:
订单的基本信息:订单号、订单的提交时间和订单的当前状态。订单号为17位数字,前8位为当前日期,后9位为按订单提交顺序生成的编码,该号能够唯一标识每一条销售记录;订单提交时间精确到秒;
订单状态包括:已提交、已发货、已完成等。
订单的购买商品信息:商品的名称、商品的类别、商品的缩略图、商品的购买数量。
- *订单*****的购买人信息:****购买人的姓名、购买人的性别、购买人的联系方式、购买人的电子邮箱。
具体细节:
购买人的联系方式存储了购买者的送货位置、邮政编码和收货人的手机号码。
2. 数据库概要设计
3.数据库逻辑设计
实体:
商品(商品号,商品名称,商品价格,详情信息,略缩图)
购买人(购买人号,购买人姓名,购买人性别,电子邮箱)
联系方式(联系单号,送货位置,邮政编码,收货人电话)
厂家(厂家号,厂家名称)
订单状态(状态号,状态名称)
类别(类别号,类别名称)
联系:
订购(商品号,购买人号,订单号,订单提交时间,购买数量)
生产(商品号,厂家号,上架时间)
属于(商品号,类别号)
操作(状态号,订单号)
联系(购买人号,联系单号)
4.数据库实现
(1) 数据库表结构,将所有关系模式的表结构列出,如下
- 表名:商品表
字段名
数据类型
是否主、外键
约束条件
含义
商品号
Char(10)
是主键
唯一约束
商品号
商品名称
VarChar(30)
否
非空约束
商品的名称
商品价格
decimal
否
非空约束
商品的价格
详情信息
Varchar(30)
否
否
商品的详情信息
略缩图
blob
否
否
商品的略缩图
- 表名:购买人表
字段名
数据类型
是否主、外键
约束条件
含义
购买人号
Char(10)
是主键
唯一约束
购买人号
购买人姓名
VarChar(30)
否
否
购买人姓名
购买人性别
Char(4)
否
Check约束
购买人性别
电子邮箱
VarChar(30)
否
否
电子邮箱
- 表名:厂家表
字段名
数据类型
是否主、外键
约束条件
含义
厂家号
Char(10)
是主键
唯一约束
厂家号
厂家名称
VarChar(30)
否
否
厂家名称
- 表名:类别表
字段名
数据类型
是否主、外键
约束条件
含义
类别号
Char(10)
是主键
唯一约束
类别号
类别名称
VarChar(30)
否
否
类别名称
- 表名:联系方式表
字段名
数据类型
是否主、外键
约束条件
含义
联系单号
Char(10)
是主键
唯一约束
联系单号
送货位置
VarChar(30)
否
非空约束
送货位置
邮政编码
Char(10)
否
否
邮政编码
收货人电话
VarChar(30)
否
否
收货人电话
- 表名:订单状态表
字段名
数据类型
是否主、外键
约束条件
含义
状态号
Char(10)
是主键
唯一约束
状态号
状态名称
VarChar(30)
否
否
状态名称
- 表名:订购表
字段名
数据类型
是否主、外键
约束条件
含义
商品号
Char(10)
是外键,主键之一
外键约束
唯一约束
商品号
购买人号
Char(10)
是外键,主键之一
外键约束
唯一约束
购买人号
订单号
Char(20)
否
否
订单号
订单提交时间
DATe
否
否
订单提交时间
购买数量
Int
否
默认约束
购买数量
- 表名:生产表
字段名
数据类型
是否主、外键
约束条件
含义
厂家号
Char(10)
是外键,主键之一
外键约束
唯一约束
厂家号
商品号
Char(10)
是外键,主键之一
外键约束
唯一约束
商品号
上架时间
date
否
否
上架时间
- 表名:属于表
字段名
数据类型
是否主、外键
约束条件
含义
商品号
Char(10)
是外键,是主键
外键约束
唯一约束
商品号
类别号
Char(10)
是外键
外键约束
类别号
- 表名:操作表
字段名
数据类型
是否主、外键
约束条件
含义
订单号
C har(20)
是外键,是主键
外键约束
唯一约束
订单号
状态号
Char(10)
是外键
外键约束
状态号
- 表名:联系表
字段名
数据类型
是否主、外键
约束条件
含义
购买人号
Char(10)
是外键,
外键约束
状态号
联系单号
Char(10)
是外键,是主键
外键约束
唯一约束
联系单号
(2) 在MySQL中创建数据表
写出所有表的建表语句
经过勘误,以下代码成功执行:
create table if not exists 商品表
(
商品号 char(10) primary key,
商品名称 VarChar(30) not null,
商品价格 decimal not null,
详情信息 Varchar(30),
略缩图 blob
);
create table if not exists 购买人表
(
购买人号 Char(10) primary key,
购买人姓名 VarChar(30),
购买人性别 Char(4) check(购买人性别 in('男','女')),
电子邮箱 VarChar(30)
);
create table if not exists 厂家表
(
厂家号 Char(10) primary key,
厂家名称 VarChar(30)
);
create table if not exists 类别表
(
类别号 Char(10) primary key,
类别名称 VarChar(30)
);
create table if not exists 联系方式表
(
联系单号 Char(10) primary key,
送货位置 VarChar(30) not null,
邮政编码 Char(10),
收货人电话 VarChar(30)
);
create table if not exists 订单状态表
(
状态号 Char(10) primary key,
状态名称 VarChar(30)
);
create table if not exists 订购表
(
商品号 Char(10) ,
购买人号 Char(10),
订单号 Char(20),
订单提交时间 date,
购买数量 Int default 0,
primary key(商品号,购买人号)
);
create table if not exists 生产表
(
厂家号 Char(10) references 厂家表(厂家号),
商品号 Char(10) references 商品表(商品号),
上架时间 date,
primary key(厂家号,商品号)
);
create table if not exists 属于表
(
商品号 Char(10) primary key references 商品表(商品号),
类别号 Char(10) references 类别表(类别号)
);
create table if not exists 操作表
(
状态号 Char(10) references 订单状态表(状态号),
订单号 Char(20) primary key references 订购表(订单号)
);
create table if not exists 联系表
(
购买人号 Char(10) references 购买人表(购买人号),
联系单号 Char(10) primary key references 联系方式表(联系单号)
);
(3) 插入数据
每张数据表插入至少5条数据,将插入后的各数据表截图粘贴
创建数据库对象(创建视图、索引、函数、存储过程、触发器等数据库对象,功能和创建的数量自选)
创建视图,显示商品的信息
具体语句:
create view 商品
as select 商品表.商品名称,商品表.商品价格,类别表.类别名称,厂家表.厂家名称,生产表.上架时间
from 商品表,厂家表,类别表,生产表,属于表
where 生产表.商品号=商品表.商品号 and 属于表.商品号=商品表.商品号 and 生产表.厂家号=厂家表.厂家号 and 属于表.类别号=类别表.类别号
效果如图:
- 创建索引,订单表中,创建一个购买数量降序索引
create index x on 订购表(购买数量 desc)
- 创建一个存储过程,输入订单,可以计算订单购买的物品总价格
代码如下:
delimiter $$
create procedure get1(in xh char(20))
begin
select 商品表.商品名称,商品表.商品价格,订购表.购买数量,商品表.商品价格*订购表.购买数量 as 总价格
from 订购表,商品表
where 商品表.商品号=订购表.商品号 and 订购表.订单号=xh ;
END$$
delimiter;
call get1('20230601000000001');
结果如下:
四、实验结果及分析
执行结果的分析****:
通过对电子商务系统从分析到绘制ER图,写关系模式,写关系表,建表,添加数据,创建各类数据对象来分析数据这一系列的实验活动,我发现每一个步骤都是必不可少的,让数据库的建立充满逻辑。
在这个过程中,我觉得最重要的是清晰的思路和细心的做法,在此过程中,我更加熟悉对于sql语句的书写和使用,熟练掌握了navicat软件的使用,包括连接数据库,创建数据表,通过查询完成各项数据库使用,以及运用navicat更快捷地修改数据表...
另外,我也学会了快速地通过错误分析找到我书写的sql语句中的漏洞,最终初具规模地完成了本次电子商务系统数据库的制作,并能够建立视图、索引以及存储过程来分析数据库中的数据,融会贯通了本学期学习的mysql数据库的各种相关知识,我觉得非常有成就感。
当然,这个实验还有很多地方值得完善,比如说略缩图的导入导出,还有各个实体以及联系有没有没被发现的漏洞,以及我们能否使用视图索引存储过程制作出更复杂更有用的数据分析表,这些都是值得我们去深入讨论和掌握的。
报错时对错误的分析****:
1.建表过程中报错
发现原因:中文字符
2报错
发现原因:又是中文字符,注意标点符号!此时检查了一遍全部代码。
- 输入数据时发现订单号过长
修改方法:用navicat改变了一下订单号的属性数据类型长度
- 在输入操作表时,发现主键设置错误
原因:在操作中一对N联系搞反了,修改相关设定
5.订单提交时间原先设置为date,没法精确到秒
修改方法:在设计表中修改了设定
- 写视图时发现错误
发现是条件过多产生了错误,修改。
6.视图显示出现过多重复数据,且数据有误差
修改:去重并且检查语句条件误差。
- 写存储过程出错如下
解决方法:发现是1.in打成int,2购买数量写成订购数量,3衔接不正确,修改。
版权归原作者 鹤早早 所有, 如有侵权,请联系我们删除。