用户实体-电商实例数据库设计及优化学习笔记

一、背景

这是电商实例数据库结构设计的用户模型设计部分,主要内容是用户模块的数据库设计,包括用户的信息、积分、日志等等。

二、数据库结构设计

1、用户模型设计
也就是管理和维护用户信息,用得最多的就是登录和注册两个功能。
用户模块中最基本的用户信息:用户名、密码、手机号
我们通常把用户称为实体,用户信息称为实体的属性。
完整的用户信息,也就是用户实体的属性:真实姓名、登录名、密码、手机号、证件类型和号码、邮箱、性别、邮编、省、市、区、门牌号、积分、注册时间、生日、状态、级别、余额(邮箱、手机号、登录名都可以用来标识一个用户),其中有些是用户录入来获取的,有些是经过计算得出的,比如注册时间、用户生日、余额、积分。
1.1 如何把用户的属性存到表中
把所有的信息存到一个表,优点:易于数据存储。缺点:会发生数据插入、更新、删除异常和冗余问题。更新异常:要修改某一行的值时,不得不修改多行数据。

建立用户登录表

CREATE TABLE customer_login(
    customer_id INT UNSIGNED AUTO_INCREMENT NOT NULL comment '用户ID',
    login_name VARCHAR(20) not null comment '用户登录名',
    password char(20) 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='用户登录表'
    modified_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP
    on UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
这一句会自动记录修改时间

建立用户信息表

    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 '性别',
    uesr_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 '用户余额',
    modidied_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
    PRIMARY key pk_customerinfid(customer_inf_id)
    )ENGINE = INNODB COMMENT='用户信息表'

用户级别信息表

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 '该级别最高积分',
    modidied_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
    PRIMARY key pk_levelid(customer_level)
    )ENGINE = INNODB COMMENT='用户级别信息表'

用户地址表

    CREATE TABLE customer_addr(
    customer_addr_id int UNSIGNED not null auto_increment 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 '是否默认',
    modidied_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP on UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
    PRIMARY key pk_customeraddrid(customer_addr_id)
    )ENGINE = INNODB COMMENT='用户地址表'

接下来是日志表,用来记录操作信息,如果操作出现了失误可以用它来进行分析
用户积分日志表

CREATE TABLE customer_point_log(
    point_id int UNSIGNED not null auto_increment COMMENT '积分日志ID',
    customer_id int UNSIGNED not null COMMENT 'customer_login表的自增主键ID',
    source tinyint UNSIGNED not null comment '积分来源:0 订单,1 登录 ,2 活动',
    refer_numer int UNSIGNED not null DEFAULT 0 comment '积分来源相关编号',
    change_point SMALLINT not null DEFAULT 0 comment '变更积分数',
    create_time TIMESTAMP not null comment '积分日志生成时间',
    PRIMARY key pk_pointid(point_id)
    )ENGINE = INNODB COMMENT='用户积分日志表'

用户余额日志表

    CREATE TABLE customer_balance_log(
    balance_id int UNSIGNED not null auto_increment COMMENT '余额日志ID',
    customer_id int UNSIGNED not null COMMENT 'customer_login表的自增主键ID',
    source tinyint UNSIGNED not null comment '记录来源:1 订单,2 退货单',
    source_sn int UNSIGNED not null comment '相关单据id',
    create_time TIMESTAMP not null DEFAULT CURRENT_TIMESTAMP comment '记录生成时间',
    amount DECIMAL(8,2) not null DEFAULT 0.00 comment '变动金额',
    PRIMARY key pk_balanceid(balance_id)
    )ENGINE = INNODB COMMENT='用户余额变动表'

用户登录日志表

CREATE TABLE customer_login_log(
    login_id int UNSIGNED not null auto_increment COMMENT '登录日志ID',
    customer_id int UNSIGNED not null COMMENT 'customer_login表的自增主键ID',
    login_time TIMESTAMP not null comment '用户登录时间',
    login_ip int UNSIGNED not null comment '登录ip',
    login_type tinyint not null comment '登录类型:0 未成功,1 成功',
    PRIMARY key pk_loginid(login_id)
    )ENGINE = INNODB COMMENT='用户登录日志表'

三、小结

在本模块中设计了
用户登录表、
用户信息表、
用户级别信息表、
用户地址表、
用户积分日志表、
用户登录日志表、
用户余额日志表。
设计一个模块的数据库,首先要分析其设计的功能,然后列出实体的属性,结合功能和属性来设计相关的表。

猜你喜欢

转载自blog.csdn.net/qq_40916110/article/details/80699352