J2EE项目-仿天猫整站day02(上)

需求分析

需求简单理解就是要做成什么样子,基于模仿天猫整站,主要分为以下三类:

  1. 前端展示:在前端页面上显示数据库中的数据,如首页、产品页、购物车、分类页面等等;
  2. 前端交互:通过POST、GET等http协议,与服务端进行同步或异步数据交互。如购买、购物车、生成订单、登录等功能;
  3. 后台功能:对支撑整站需要用到的数据进行管理维护。比如分类管理、分类属性管理、产品管理、产品图片管理、用户管理、订单管理等等。

前台需求列表

1.首页

  • 在横向导航栏上提供4个分类连接
  • 在纵向导航栏上提供全部17个分类连接
  • 当鼠标移动到某一个纵向分类连接的时候,显示这个分类下的推荐商品
  • 按照每种分类,显示5个商品的方式显示所有17种分类

2.产品页

  • 显示分辨率为950x100的当前商品对应的分类图片
  • 显示本商品的5个单独图片
  • 商品的基本信息,如标题,小标题,加个,销量,评价数量,库存等
  • 商品详情
  • 评价信息
  • 5张商品详细图片
  • 立即购买
  • 加入购物车

3.分类页

  • 显示分辨率为950x100的当前分类图片
  • 显示本分类下的所有产品
  • 分类页排序

4.搜索结果页

  • 显示满足查询条件的商品

5.购物车查看页

  • 在购物车中显示订单项
  • 调整订单项数量
  • 删除订单项

6.结算页

  • 在结算页面显示被选中的订单项
  • 生成订单

7.确认支付页

  • 确认支付页面显示本次订单的金额总数
  • 确认付款

8.支付成功页

  • 付款成功时,显示本次付款金额

9.我的订单页

  • 显示所有订单,以及对应的订单项

10.确认收货页

  • 显示订单项内容
  • 显示订单信息,收货人地址等
  • 确认收货

11.评价页

  • 显示要评价的商品信息,商品当前的总评价数
  • 评价成功后,显示当前商品所有的评价信息
  • 提交评价信息

12.页面信息展示

  • 未登录状态
  • 已登录状态
  • 登录
  • 注册
  • 退出

13.所有页面

  • 搜索

后台需求列表:

  1. 分类管理
    • 分页查询
    • 新增分类
    • 编辑修改
    • 删除
  2. 属性管理
    • 属性概念
    • 分页查询
    • 新增属性
    • 编辑修改
    • 删除
  3. 产品管理
    • 分页查询
    • 新增产品
    • 编辑修改
    • 删除
  4. 产品图片管理
    • 产品图片概念
    • 产品图片管理
  5. 产品属性设置
    • 产品属性值设置
  6. 用户管理
    • 分页查询
  7. 订单管理
    • 订单分页查询
    • 查看详情
    • 发货

表结构设计

只有把表结构设计正确了,才能支撑软件后续的功能开发,这一步非常重要。将过程分解为:

  1. 数据库的创建
  2. 表与表关系
  3. 建表SQL语句
  4. 表与页面

1. 数据库

1.创建数据库:tmall;并将数据库的编码设置为utf8,便于存放中文

DROP DATABASE IF EXISTS tmall;
CREATE DATABASE tmall DAFAULT CHARACTER SET utf8;

2. 表与表关系图

2.1 表关系图

表关系图

2.2 表

 

表名中文含义介绍
Category分类表存放分类信息,如女装,平板电视,沙发等
Property属性表存放属性信息,如颜色,重量,品牌,厂商,型号等
Product产品表存放产品信息,如LED40EC平板电视机,海尔EC6005热水器
PropertyValue属性值表存放属性值信息,如重量是900g,颜色是粉红色
ProductImage产品图片表存放产品图片信息,如产品页显示的5个图片
Review评论表存放评论信息,如买回来的蜡烛很好用,么么哒
User用户表存放用户信息,如斩手狗,千手小粉红
Order订单表存放订单信息,包括邮寄地址,电话号码等信息
OrderItem订单项表存放订单项信息,包括购买产品种类,数量等

 2.3 分析表与表之间关系的方法

表与表之间的关系,基本上分三种:

  • 一对一
  • 一对多
  • 多对多

一个分类对应多个产品;一个产品对应一个分类。所以分类和产品之间的关系是一对多。

正确的分析表与表之间的关系的方法

2.4 表关系

本表列出所有一对多关系

 注:产品和用户之间其实是多对多关系,即一个用户可以购买多种产品,一种产品可以被多个用户购买。但是他们的多对多关系是间接的建立在订单项表(OrderItem)上的。

Category-分类Product-产品
Category-分类Property-属性
Property-属性PropertyValue-属性值
Product-产品PropertyValue-属性值
Product-产品ProductImage-产品图片
Product-产品Review-评价
User-用户Order-订单
Product-产品OrderItem-订单项
User-用户OrderItem-订单项
Order-订单OrderItem-订单项
User-用户User-评价

 3. 建表SQL语句

3.1 建表顺序

在建表过程中,会设置外键约束,所以表与表之间有依赖关系。因此会先建立被外键指向的表,比如User,Category,然后再是其他表。

3.2 用户表

登录页面采集用户的账号和密码

CREATE TABLE user (
    id int(11) NOT NULL AUTO _INCREMENT,
    name varchar(255) DEFAUT NULL,
    password varchar(255) DEFAULT NULL,
    PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 用户表

3.3 分类表

首页的竖状导航栏显示所有17种分类信息

CREATE TABLE category(
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(255) DEFAULT NULL,
    password varchar(255) DAFAULT NULL,
    PRIMARY KEY (id)
)ENGINE=InnoDB DAFAULT CHARSET=utf-8;

 分类表

3.4 属性表

从这个表开始,就有外键约束了。本表的外键cid,指向分类表的id字段

CREATE TABLE property (
   id int(11) NOT NULL AUTO_INCREMENT,
   cid int(11) DEFAULT NULL,
   name varchar(255) DEFAULT NULL,
   PRIMARY KEY (id),
   CONSTRAINT fk_property_category FOREIGN KEY (cid)
REFERENCE category (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在产品页的商品详情标签下,显示本产品对应分类所设置的所有属性。 

 属性表

3.5 产品表

  • name:产品名称
  • subTile:小标题
  • originalPrice:原始价格
  • promotePrice:优惠价格
  • stock:库存
  • createDate:创建日期

本表的外键cid,指向分类表的id字段

CREATE TABLE product (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(255) DEFAULT NULL,
    subTitle varchar(255) DEFAULT NULL,
    originalPrice float DEFAULT NULL,
    promotePrice float DEFAULT NULL,
    stock int(11) DEFAULT NULL,
    createDate datetime DEFAULT NULL,
    PRIMARY KEY (id),
    CONSTRAINT fk_product_category FOREIGN KEY (cid)
REFERENCES category (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

产品页的产品信息里显示本产品的名称,小标题,原始价格,促销价,销量,库存等信息。

 产品表

3.6 属性值表

本表有两个外键

  • 外键ptid,指向属性表的id字段
  • 外键pid,指向产品表的id字段
CREATE TABLE propertyvalue (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  ptid int(11) DEFAULT NULL,
  value varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_propertyvalue_property FOREIGN KEY (ptid) REFERENCES property (id),
  CONSTRAINT fk_propertyvalue_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

在产品页的商品详情标签下,显示本产品的所有属性值

 属性值表

3.7 产品图片表

type表示类型,产品图片分单个图片和详情图片两种。

本表的外键pid,指向产品表的id字段。

CREATE TABLE productimage (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  type varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_productimage_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在产品页显示5个单个图片

 产品图片表

3.8 评价表

  • 外键pid,指向产品的id字段
  • 外键uid,指向用户表的id字段
CREATE TABLE review (
  id int(11) NOT NULL AUTO_INCREMENT,
  content varchar(4000) DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  pid int(11) DEFAULT NULL,
  createDate datetime DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_review_product FOREIGN KEY (pid) REFERENCES product (id),
    CONSTRAINT fk_review_user FOREIGN KEY (uid) REFERENCES user (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

产品页显示评价信息

 评价表

3.9 订单表

  • orderCode:订单号
  • address:收货地址
  • post:邮编
  • receiver:收货人信息
  • mobile:手机号码
  • userMessage:用户备注信息
  • createDate:订单创建日期
  • status:订单状态

外键uid,指向用户表id字段

CREATE TABLE order_ (
  id int(11) NOT NULL AUTO_INCREMENT,
  orderCode varchar(255) DEFAULT NULL,
  address varchar(255) DEFAULT NULL,
  post varchar(255) DEFAULT NULL,
  receiver varchar(255) DEFAULT NULL,
  mobile varchar(255) DEFAULT NULL,
  userMessage varchar(255) DEFAULT NULL,
  createDate datetime DEFAULT NULL,
  payDate datetime DEFAULT NULL,
  deliveryDate datetime DEFAULT NULL,
  confirmDate datetime DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  status varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_order_user FOREIGN KEY (uid) REFERENCES user (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

在后台的订单管理页面看到的订单信息

 订单表

3.10 订单项表

这个表示外键最多的一个表

  • 外键pid,指向产品表id字段
  • 外键oid,指向订单表id字段
  • 外键uid,指向用户表id字段

number字段表示购买数量

注:oid外键没有加约束,是因为创建订单项的时候,其所对应的订单可能还未创建。

CREATE TABLE orderitem (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  oid int(11) DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  number int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_orderitem_user FOREIGN KEY (uid) REFERENCES user (id),
  CONSTRAINT fk_orderitem_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

在购物车中看到的订单项信息

 订单项表

4. 建表代码集合

一般来说,对于一个新项目,建表的时候,会把sql语句都准备好,一次性执行。

DROP DATABASE IF EXISTS tmall;
CREATE DATABASE tmall DEFAULT CHARACTER SET utf8;
USE tmall;

CREATE TABLE user (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  password varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE category (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE property (
  id int(11) NOT NULL AUTO_INCREMENT,
  cid int(11) DEFAULT NULL,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_property_category FOREIGN KEY (cid) REFERENCES category (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE product (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  subTitle varchar(255) DEFAULT NULL,
  orignalPrice float DEFAULT NULL,
  promotePrice float DEFAULT NULL,
  stock int(11) DEFAULT NULL,
  cid int(11) DEFAULT NULL,
  createDate datetime DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_product_category FOREIGN KEY (cid) REFERENCES category (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE propertyvalue (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  ptid int(11) DEFAULT NULL,
  value varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_propertyvalue_property FOREIGN KEY (ptid) REFERENCES property (id),
  CONSTRAINT fk_propertyvalue_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE productimage (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  type varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_productimage_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE review (
  id int(11) NOT NULL AUTO_INCREMENT,
  content varchar(4000) DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  pid int(11) DEFAULT NULL,
  createDate datetime DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_review_product FOREIGN KEY (pid) REFERENCES product (id),
    CONSTRAINT fk_review_user FOREIGN KEY (uid) REFERENCES user (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE order_ (
  id int(11) NOT NULL AUTO_INCREMENT,
  orderCode varchar(255) DEFAULT NULL,
  address varchar(255) DEFAULT NULL,
  post varchar(255) DEFAULT NULL,
  receiver varchar(255) DEFAULT NULL,
  mobile varchar(255) DEFAULT NULL,
  userMessage varchar(255) DEFAULT NULL,
  createDate datetime DEFAULT NULL,
  payDate datetime DEFAULT NULL,
  deliveryDate datetime DEFAULT NULL,
  confirmDate datetime DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  status varchar(255) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_order_user FOREIGN KEY (uid) REFERENCES user (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

CREATE TABLE orderitem (
  id int(11) NOT NULL AUTO_INCREMENT,
  pid int(11) DEFAULT NULL,
  oid int(11) DEFAULT NULL,
  uid int(11) DEFAULT NULL,
  number int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  CONSTRAINT fk_orderitem_user FOREIGN KEY (uid) REFERENCES user (id),
  CONSTRAINT fk_orderitem_product FOREIGN KEY (pid) REFERENCES product (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值