常见电商项目的数据库表设计(MySQL版)
简介:
目的:
- 电商常用功能模块的数据库设计
- 常见问题的数据库解决方案
环境:
- MySQL5.7
- 图形客户端,SQLyog
- Linux
模块:
- 用户:注册、登陆
- 商品:浏览、管理
- 订单:生成、管理
- 仓配:库存、管理
电商实例数据库结构设计:
-
电商项目用户模块
-
用户表涉及的实体
-
改进1:第三范式:将依赖传递的列分离出来。比如:登录名<-用户级别<-级别积分上限,级别积分下限
-
改进2:尽量做到冷热数据的分离,减小表的宽度
-
用户登录表(customer_login)
CREATE TABLE customer_login(
customer_id INT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT ‘用户ID’,
login_name VARCHAR(20) NOT NULL COMMENT ‘用户登录名’,
password CHAR(32) NOT NULL COMMENT ‘md5加密的密码’,
user_stats TINYINT NOT NULL DEFAULT 1 COMMENT ‘用户状态’,
modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘最后修改时间’,
PRIMARY KEY pk_customerid(customer_id)
) ENGINE = innodb COMMENT ‘用户登录表’ -
用户信息表(customer_inf)
CREATE TABLE customer_inf(
customer_inf_id INT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT ‘自增主键ID’,
customer_id INT UNSIGNED NOT NULL COMMENT ‘customer_login表的自增ID’,
customer_name VARCHAR(20) NOT NULL COMMENT ‘用户真实姓名’,
identity_card_type TINYINT NOT NULL DEFAULT 1 COMMENT ‘证件类型:1 身份证,2 军官证,3 护照’,
identity_card_no VARCHAR(20) COMMENT ‘证件号码’,
mobile_phone INT UNSIGNED COMMENT ‘手机号’,
customer_email VARCHAR(50) COMMENT ‘邮箱’,
gender CHAR(1) COMMENT ‘性别’,
user_point INT NOT NULL DEFAULT 0 COMMENT ‘用户积分’,
register_time TIMESTAMP NOT NULL COMMENT ‘注册时间’,
birthday DATETIME COMMENT ‘会员生日’,
customer_level TINYINT NOT NULL DEFAULT 1 COMMENT ‘会员级别:1 普通会员,2 青铜,3白银,4黄金,5钻石’,
user_money DECIMAL(8,2) NOT NULL DEFAULT 0.00 COMMENT ‘用户余额’,
modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘最后修改时间’,
PRIMARY KEY pk_customerinfid(customer_inf_id)
) ENGINE = innodb COMMENT ‘用户信息表’; -
用户级别表(customerlevelinf)
CREATE TABLE customer_level_inf(
customer_level TINYINT NOT NULL AUTO_INCREMENT COMMENT ‘会员级别ID’,
level_name VARCHAR(10) NOT NULL COMMENT ‘会员级别名称’,
min_point INT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘该级别最低积分’,
max_point INT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘该级别最高积分’,
modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘最后修改时间’,
PRIMARY KEY pk_levelid(customer_level)
) ENGINE = innodb COMMENT ‘用户级别信息表’; -
用户地址表(customer_addr)
CREATE TABLE customer_addr(
customer_addr_id INT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT ‘自增主键ID’,
customer_id INT UNSIGNED NOT NULL COMMENT ‘customer_login表的自增ID’,
zip SMALLINT NOT NULL COMMENT ‘邮编’,
province SMALLINT NOT NULL COMMENT ‘地区表中省份的ID’,
city SMALLINT NOT NULL COMMENT ‘地区表中城市的ID’,
district SMALLINT NOT NULL COMMENT ‘地区表中的区ID’,
address VARCHAR(200) NOT NULL COMMENT ‘具体的地址门牌号’,
is_default TINYINT NOT NULL COMMENT ‘是否默认’,
modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘最后修改时间’,
PRIMARY KEY pk_customeraddid(customer_addr_id)
) ENGINE = innodb COMMENT ‘用户地址表’; -
用户积分日志表(customerpointlog)
CREATE TABLE customer_point_log(
point_id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT ‘积分日志ID’,
customer_id INT UNSIGNED NOT NULL COMMENT ‘用户ID’,
source TINYINT UNSIGNED NOT NULL COMMENT ‘积分来源:0订单,1登陆,2活动’,
refer_number INT UNSIGNED NOT NULL DEFAULT 0 COMMENT ‘积分来源相关编号’,
change_point SMALLINT NOT NULL DEFAUL