电商大伙天天都在用,相似某猫,某狗等。
电商系统设计看似复杂又很简单,看似简单又很复杂
本章适合初级工程师及中级工程师细看,大佬请随意
设计以如下为工具讲起程序员
电商的可变性与孩子的心情同样,变化极快,因此在设计之处就要想好大部分的功能接入及开发,尽可能减小重构次数。对老板来讲节约成本,对程序员来讲“珍惜生命”微信
前期业务简单时,咱们能够将数据表设计为下列的样子框架
TableName | Comments |
---|---|
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;
收货地址与用户是一一相对的,在设计上增长须要的字段便可,例如 收货人、收货人手机号、城市、详细地址等编码
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;
用于用户提现的业务等,大体将银行卡所需的信息记录便可,例如持卡人、卡号、归属银行等spa
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;
为什么单独建这个表,也是又必定缘由的,正常只须要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或者表关联查询code
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;
用户搜索的记录是必定要有的,为了将来的数据分析,智能推荐作准备,毕竟如今是信息共享的时代嘛~blog
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;
有不少场景,都要将标题呀,内容呀直接存储,相似与收藏的店铺和商品,不管卖家怎么作,用户购物车,订单不能动,这是基准。token
感谢大家看到这里,下一篇我会讲一下关于电商系统的商品设计的部分。有什么问题能够评论区提问。谢谢