[TOC]
## 步骤 1 : 用户表t_user
登录页面采集用户的账号和密码
![](https://box.kancloud.cn/f495bafce1ddc3ba56bd10f24233019a_424x493.png)
![](https://box.kancloud.cn/429ffa17c81fbc556eb5a60c5169fa0e_1019x646.png)
## 步骤 2 : 分类表t_category
![](https://box.kancloud.cn/0ea695a51feeddf252122d56df6f740f_328x689.png)
![](https://box.kancloud.cn/779cf31924f68fcf634ad18d4c8d5697_989x537.png)
## 步骤 3 : 属性表t_property
在产品页的商品详情标签下,显示本产品对应分类所设置的所有属性。
![](https://box.kancloud.cn/acee2f3211179e3c096e222c4aa0210b_996x417.png)
![](https://box.kancloud.cn/71b00c3c384901648338029336a79e73_858x537.png)
> 比如衣服分类下的所有产品,都有共同的一系列属性,像:产地,质地,尺寸等等。 那么“有哪些属性” 这个信息,就维护在属性表里,而且是和分类关联起来的。
另一种分类,比如马桶,那么它就是另外一系列属性了,像: 是否自动冲水,是否播放音乐,深度,宽度 等信息。
* 问题:为什么属性表要指向分类表而不是产品表呢,是一类商品属性都相同么?
> 是的,一类商品属性都一样。
> 如果要单独为每种商品设计属性,也不是不可以,但是维护起来太辛苦了。 比如演示网站上就有1500种商品,那么每种商品假设有5种属性好了,那就是7500种属性,光是做这个演示网站的准备数据,就太复杂了。
## 步骤 4 : 产品表t_product
产品页的产品信息里显示本产品的名称,小标题,原始价格,促销价,销量,库存等信息
![](https://box.kancloud.cn/31401053db255e8ea6ce0ab6df8ab8d0_691x408.png)
![](https://box.kancloud.cn/b64c6fbeb1de6c3f0f38155d80b8ce53_858x537.png)
> name: 产品名称
subTitle: 小标题
originalPrice: 原始价格
promotePrice: 优惠价格
stock: 库存
createDate: 创建日期
## 步骤 5 : 属性值表t_property_value
在产品页的商品详情标签下,显示本产品的所有属性值
![](https://box.kancloud.cn/acee2f3211179e3c096e222c4aa0210b_996x417.png)
![](https://box.kancloud.cn/eae863a4d02581e617c9803f6ac422a1_858x537.png)
* * * * *
* 问题: 为什么有了属性表还需要一个属性值表呢?
> 因为不同商品的相同属性,他们的属性值不一样呢
比如iphone 有颜色,值是白色
熊猫手机也有颜色,值却是黑白相间
## 步骤 6 : 产品图片表t_product_image
在产品页显示5个单个图片
![](https://box.kancloud.cn/b876b20f33cbbc27f8f39ac8a67fec6c_526x622.png)
![](https://box.kancloud.cn/36bccae66effa8f4f43cf5599c47aad1_858x537.png)
> type表示类型,产品图片分单个图片和详情图片两种
* * * * *
* 问题:商品图片表中并没有图片地址这一字段,我不清楚怎么获取指定的商品图片
> 基于 productImage 表的id值来保存的,保存在固定位置(后面章节会谈到)。
## 步骤 7 : 评价表t_review
产品页显示评价信息
![](https://box.kancloud.cn/7affdd4950a85ce19e69121d913bc64e_1279x229.png)
![](https://box.kancloud.cn/d421516f57617df831f1947bf245d575_858x537.png)
## 步骤 8 : 订单表t_order
在后台的订单管理页面看到的订单信息
![](https://box.kancloud.cn/d02496f1a7d65cef4a72f8a584b55440_1835x185.png)
生成订单前,结算页面
![](https://box.kancloud.cn/45bf50d640b17f33b706fe292f0d7676_1060x320.png)
![](https://box.kancloud.cn/cd26bf3b26b52a562c7e97c2ab233e7b_858x537.png)
> orderCode: 订单号
address:收货地址
post: 邮编
receiver: 收货人信息
mobile: 手机号码
userMessage: 用户备注信息
createDate: 订单创建日期
payDate: 支付日期
deliveryDate: 发货日期
confirmDate:确认收货日期
status: 订单状态
## 步骤 9 : 订单项表t_order_item
在购物车中看到的订单项信息
![](https://box.kancloud.cn/a150a21453f9fabcff204ce9428e380c_1304x524.png)
![](https://box.kancloud.cn/fd31f49ca6f9cde02f85a69763cdaa47_858x537.png)
> number字段表示购买数量
* * * * *
* 问题:订单项表的user_id有点冗余,毕竟通过订单项中的订单id可以确认用户,这里是怎么考虑的呢?
> 在创建了购物车之后,创建订单之前,这些订单项是没有和订单关联起来的。
如果不加个uid, 那么这些订单项属于哪个用户的信息就丢失了。
## 步骤 10:导出SQL语句
1. 把name复制到comment中,运行脚本,选择Tools菜单--Execute Commands,点击打开,
![](https://box.kancloud.cn/08f01db5f9343df7ef5b63569c2b2433_214x101.png)
选择name2comment.vbs
2. 选择Database菜单—Generate Database,生成数据结构的SQL,注意在format标签中将字符编码设置成UTF-8,导出SQL文件。
## 步骤 11:创建数据库,导入SQL
1. 在navicat中创建数据库:tmall_ssm,并且将数据库的编码设置为utf8,便于存放中文
2. 运行刚刚导出的SQL脚本
tmall_ssm.sql
~~~
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2018/8/25 14:56:03 */
/*==============================================================*/
drop table if exists t_category;
drop table if exists t_order;
drop table if exists t_order_item;
drop table if exists t_product;
drop table if exists t_product_image;
drop table if exists t_property;
drop table if exists t_property_value;
drop table if exists t_review;
drop table if exists t_user;
/*==============================================================*/
/* Table: t_category */
/*==============================================================*/
create table t_category
(
id int not null auto_increment comment 'ID',
name varchar(255) comment '名称',
primary key (id)
);
alter table t_category comment '分类表';
/*==============================================================*/
/* Table: t_order */
/*==============================================================*/
create table t_order
(
id int not null auto_increment comment 'ID',
order_code varchar(255) comment '订单编号',
address varchar(255) comment '地址',
post varchar(255) comment '邮编',
receiver varchar(255) comment '收件人',
mobile varchar(255) comment '手机号',
user_message varchar(255) comment '买家留言',
create_date datetime comment '创建时间',
pay_date datetime comment '支付时间',
delivery_date datetime comment '发货时间',
confirm_date datetime comment '确认收货时间',
status varchar(255) comment '状态',
user_id int comment '所属用户',
primary key (id)
);
alter table t_order comment '订单表';
/*==============================================================*/
/* Table: t_order_item */
/*==============================================================*/
create table t_order_item
(
id int not null auto_increment comment 'ID',
number int comment '数量',
user_id int comment '所属用户',
product_id int comment '所属产品',
order_id int comment '所属订单',
primary key (id)
);
alter table t_order_item comment '订单项';
/*==============================================================*/
/* Table: t_product */
/*==============================================================*/
create table t_product
(
id int not null auto_increment comment 'ID',
name varchar(255) comment '名称',
sub_title varchar(255) comment '子标题',
original_price float comment '原价格',
promote_price float comment '促销价',
stock int comment '仓库',
create_date datetime comment '创建时间',
category_id int comment '所属分类',
primary key (id)
);
alter table t_product comment '产品表';
/*==============================================================*/
/* Table: t_product_image */
/*==============================================================*/
create table t_product_image
(
id int not null auto_increment comment 'ID',
type varchar(255) comment '类型',
product_id int comment '所属产品',
primary key (id)
);
alter table t_product_image comment '产品图片表';
/*==============================================================*/
/* Table: t_property */
/*==============================================================*/
create table t_property
(
id int not null auto_increment comment 'ID',
name varchar(255) comment '名称',
category_id int comment '所属分类',
primary key (id)
);
alter table t_property comment '属性表';
/*==============================================================*/
/* Table: t_property_value */
/*==============================================================*/
create table t_property_value
(
id int not null auto_increment comment 'ID',
value varchar(255) comment '属性值',
product_id int comment '所属产品',
property_id int comment '所属属性',
primary key (id)
);
alter table t_property_value comment '属性值表';
/*==============================================================*/
/* Table: t_review */
/*==============================================================*/
create table t_review
(
id int not null auto_increment comment 'ID',
content varchar(4000) comment '内容',
create_date datetime comment '创建时间',
product_id int comment '所属产品',
user_id int comment '所属用户',
primary key (id)
);
alter table t_review comment '评价表';
/*==============================================================*/
/* Table: t_user */
/*==============================================================*/
create table t_user
(
ID int not null auto_increment comment 'ID',
name varchar(255) comment '名称',
password varchar(255) comment '密码',
primary key (ID)
);
alter table t_user comment '用户表';
~~~