电商系统设计之用户系统

图片描述

电商大伙每天都在用,类似某猫,某狗等。
电商系统设计看似复杂又很简单,看似简单又很复杂
本章适合初级工程师及中级工程师细看,大佬请随意

前言

设计以以下为工具讲起

  • PHP为开发语言
  • 基于Laravel框架
  • MySQL为数据存储

电商的可变性与孩子的心情一样,变化极快,所以在设计之处就要想好大部分的功能接入及开发,尽量减少重构次数。对老板来说节约成本,对程序员来说“珍惜生命”

数据表

前期业务简单时,我们可以将数据表设计为下列的样子

TableNameComments
member用户表
member_address收货地址表
member_card银行卡表
member_cart购物车表
member_cart_item购物车商品表
member_collect_product商品收藏表
member_collect_supplier店铺收藏表
member_data用户信息表
member_query_history用户搜索历史表
member_wallet用户账户表
member_withdrawal用户提现表

用户表

考虑到多种登录方式,应在数据表中涉及到微信的openid,unionid,支付宝、QQ的用户token等,这些要在前期就涉及进去,因后期用户量大了之后加一个字段简直是噩梦,用户状态status也必不可少,比较人也是分好坏,其次就是创建时间,登录时间等,用户表与用户信息表绝逼是绑定关系,这就不多言了。

CREATE TABLE `member` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tel` bigint(20) DEFAULT NULL COMMENT '手机号码',
  `password` varchar(555) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登录密码',
  `wx_token` varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信TOKEN',
  `im_token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户融云token',
  `open_id` varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `status` enum('1','-1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '1' COMMENT '账号状态',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `member_tel_unique` (`tel`),
  UNIQUE KEY `member_wx_token_unique` (`wx_token`)
) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

clipboard.png

收货地址表

收货地址与用户是一一相对的,在设计上增加需要的字段即可,例如 收货人、收货人手机号、城市、详细地址等

CREATE TABLE `member_address` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL COMMENT '用户编号',
  `nick_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '收货人姓名',
  `tel` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号码',
  `prov` int(11) DEFAULT NULL COMMENT '省',
  `city` int(11) NOT NULL COMMENT '市',
  `area` int(11) DEFAULT NULL COMMENT '区',
  `address` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '街道地址',
  `number` int(11) NOT NULL COMMENT '邮政编码',
  `default` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '默认收货地址 1=>默认',
  `deleted_at` timestamp NULL DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=55 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

clipboard.png

银行卡表

用于用户提现的业务等,大致将银行卡所需的信息记录即可,例如持卡人、卡号、归属银行等

CREATE TABLE `member_card` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL COMMENT '用户编码',
  `card_name` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '持卡人姓名',
  `card_number` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '银行卡号',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `member_card_card_number_unique` (`card_number`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

clipboard.png

购物车表

为何单独建这个表,也是又一定原因的,正常只需要member_cart_item表即可,根据实际下线的业务场景,正常购物到超市需要拿一个购物车,但这个购物车并非属于你,你使用之后,需要归还,他人可继续使用,将购物车公开化,并不是将购物车商品公开化。业务场景比较窄,例如京东到家和京东商城一样(我只是举例,并不清楚他们怎么做的),购物车不通用,那如何区分呢,是应该在购物车上区分还是在购物车商品上区分?我想你已经清楚了。

CREATE TABLE `member_cart` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL COMMENT '用户编码',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `member_cart_member_id_unique` (`member_id`),
  KEY `member_cart_member_id_index` (`member_id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

购物车商品表

这块需要提的一点是 [并不是所有表的设计都是互相绑定,互相依赖的],就例如购物车商品表,不仅仅将商品编码存储在内,还要将商品价格,商品的简介以及商品的规格(既SKU)存储,不能因卖家下架商品,而查询不到商品的存在,比较一切以用户为主,用户是上帝的原则,不能让商品悄悄的就消失了吧。所以在做购物车商品表查询时,切记不要使用join或者表关联查询

CREATE TABLE `member_cart_item` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `cart_id` int(11) NOT NULL COMMENT '购物车编码',
  `product_desc` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品sku信息',
  `product_img` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品快照',
  `product_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称',
  `price` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '价格',
  `product_id` int(11) NOT NULL COMMENT '商品编码',
  `supplier_id` int(11) NOT NULL COMMENT '店铺编码',
  `sku_id` int(11) NOT NULL COMMENT '商品sku编码',
  `number` int(11) NOT NULL DEFAULT '1' COMMENT '商品数量',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `member_cart_item_cart_id_product_id_supplier_id_index` (`cart_id`,`product_id`,`supplier_id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

用户搜索历史表

用户搜索的记录是一定要有的,为了未来的数据分析,智能推荐做准备,毕竟现在是信息共享的时代嘛~

CREATE TABLE `member_query_history` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL COMMENT '用户编码',
  `keyword` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关键字',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

数据记录

有很多场景,都要将标题呀,内容呀直接存储,类似与收藏的店铺和商品,无论卖家怎么做,用户购物车,订单不能动,这是基准。

致谢

感谢你们看到这里,下一篇我会讲一下关于电商系统的商品设计的部分。有什么问题可以评论区提问。谢谢

第1章 课程简介 本章主要对整个课程的内容进行简要介绍,包括前置知识简介、章节安排、代码效果展示等,会从大的方面对ES6+在实战中的意义进行介绍和比较,让你对课程有一个初步印象 第2章 ES6+实战所需要的环境 本章主要介绍ES6+实战中必备的两个工具:Babel和webpack,以及工程化中脚手架工具的重要性和意义,介绍html-bundler这样一个脚手架工具(后面实战会用到) 第3章 需求分析与架构设计 本章讲解为什么要进行这样的设计,以及前端开发从需求分析、总体设计到模块设计再到代码编写的整个过程,进行思路的梳理,以及SDK常用开发套路的介绍 第4章 最常用ES6语法讲解以及课程环境搭建 本章主要对后面用到最多的几个ES6+语法进行前置讲解,包括import和export,let和const,箭头函数等。使用html-bundler搭建课程环境,讲解一些webpack和babel一些最新的相关插件和配置 第5章 登录模块开发-骨架及渲染部分 本章开始进行登录模块开发,主要讲解模块骨架搭建和视图渲染部分,并在项目中讲解ES6+中的Object.assign, 模板字符串等语法。介绍消除浏览器自带自动填充的技巧 第6章 登录模块开发-表单验证/事件/请求部分 本章主要讲解登录模块中的事件绑定/表单验证/向服务器请求数据/前端数据Mock等内容,结合项目讲解ES6+中的async和await, Array.from, Promise 等API,以及新版浏览器的fetch API。并且对async和await,Promise, fetch之间的关系及结合使用进行了讲解... 第7章 注册模块开发 - 手机号注册部分 本章主要讲解注册模块中的手机号注册,活人验证部分,讲解活人验证的原理和实现,结合项目讲解ES6+中的class、Symbol等语法点。 第8章 注册模块开发 - 个人信息部分 本章主要讲解注册模块中的个人信息填写部分,包括表单验证、省市区三级联动插件等技术点,结合项目回顾之前讲到的ES6+中的class、Symbol、async/await等语法点。 第9章 注册模块开发 - 支付方式绑定和整体串联部分 本章主要讲解注册模块中的支付方式绑定,将整个注册流程串起来并回顾注册流程中涉及的技术点。 第10章 账号设置模块开发 本章主要讲解账号设置部分,包括收货地址管理、安全设置、个人资料编辑,对之前一些大的语法点进行巩固和复习,穿插一些小的记忆性API。 第11章 密码找回模块开发 本章主要讲解密码找回部分的开发,包括手机号找回和邮箱找回,对之前一些大的语法点进行巩固和复习,穿插一些小的记忆性API。 第12章 整体串联和总结 本章会讲解开发完成的SDK如何落地在下游业务上构成一个完整的流程,并对整个项目进行回顾与总结,包括项目中用到的ES6+语法点、SDK开发的套路、账号体系的前端业务等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值