電商系統設計之用戶系統

圖片描述

電商大夥天天都在用,相似某貓,某狗等。
電商系統設計看似複雜又很簡單,看似簡單又很複雜
本章適合初級工程師及中級工程師細看,大佬請隨意

前言

設計以如下爲工具講起程序員

  • PHP爲開發語言
  • 基於Laravel框架
  • MySQL爲數據存儲

電商的可變性與孩子的心情同樣,變化極快,因此在設計之處就要想好大部分的功能接入及開發,儘可能減小重構次數。對老闆來講節約成本,對程序員來講「珍惜生命」微信

數據表

前期業務簡單時,咱們能夠將數據表設計爲下列的樣子框架

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;

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

銀行卡表

用於用戶提現的業務等,大體將銀行卡所需的信息記錄便可,例如持卡人、卡號、歸屬銀行等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;

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或者表關聯查詢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

致謝

感謝大家看到這裏,下一篇我會講一下關於電商系統的商品設計的部分。有什麼問題能夠評論區提問。謝謝

相關文章
相關標籤/搜索