MySQL基础篇(02):从五个维度出发,审视表结构设计

  
  

本文源码:GitHub·点这里| | GitEE·点这里

     

一、数据场景

  

1,表结构简介

  

任何工具类的东西都是为了解决某个场景下的问题,比如复述,缓存系统热点数据,ClickHouse解决海量数据的实时分析,MySQL关系型数据库存储结构化数据。数据的存储则需要设计对应的表结构,清楚的表结构,有助于快速开发业务,和理解系统。表结构的设计通常从下面几个方面考虑:业务场景,设计规范,表结构,字段属性,数据管理。

  

2,用户场景

  

例如存储用户基础信息数据,通常都会下面几个相关表结构:用户信息表,单点登录表,状态管理表,支付账户表等。

  
      <李>用户信息表   
  

存储用户三要素相关信息:姓,名手机号,身份证,登录密码,邮箱等。

  
 <代码类=" sql语言">创建表“ms_user_center”(
  “id”int (11) NOT NULL AUTO_INCREMENT评论的用户身份证”,
  的user_name varchar (20) NOT NULL评论的用户名”,
  real_name varchar(20)默认空评论的真实姓名”,
  pass_word varchar (32) NOT NULL评论“密码”,
  “电话”varchar (20) NOT NULL评论的手机号”,
  “电子邮件”varchar(32)默认空评论“邮箱”,
  head_url的varchar(100)默认空评论的用户头像URL”,
  card_id varchar(32)默认空评论的身份证号”,
  ‘user_sex int(1)违约' 1 '评论的用户性别:0 -女,1 -男”,
  “create_time”datetime默认空评论“创建时间”,
  update_time datetime默认空评论”更新时间”,
  “状态”int(1)违约' 1 '评论“是否可用,0 -不可用,1 -可用的,
  主键(“id”)
  )引擎=InnoDB默认字符集=utf8评论='用户表的; 
  
      <李>单点登录表   
  

用意是在多个业务系统中,用户登录一次就可以访问所有相互信任的业务子系统,是聚合业务平台常用的解决方案。

  
 <代码类=" sql语言">创建表“ms_user_sso”(
  user_id int (11) NOT NULL评论的用户身份证”,
  sso_id varchar (32) NOT NULL评论“单点信息编号ID”,
  sso_code varchar (32) NOT NULL评论“单点登录码,唯一核心标识”,
  log_ip varchar(32)默认空评论“登录IP地址”,
  “create_time”datetime默认空评论“创建时间”,
  update_time datetime默认空评论”更新时间”,
  “状态”int(1)违约' 1 '评论“是否可用,0 -不可用,1 -可用的,
  主键(“user_id”)
  )引擎=InnoDB默认字符集=utf8评论='用户单点登录表”, 
  
      <李>状态管理表   
  

系统用户在使用时候可能出现多个状态,例如账户冻结,密码锁定等,把状态聚合到一起,可以更加方便的管理和验证。

  
 <代码类=" sql语言">创建表“ms_user_status”(
  user_id int (11) NOT NULL评论的用户身份证”,
  ‘account_status int(1)违约' 1 '评论的账户状态:0 -冻结,1 -未冻结”,
  ' real_name_status ' int(1)默认“0”评论“实名认证状态:0 -未实名,1 -已实名”,
  ' pay_pass_status ' int(1)默认“0”评论“支付密码是否设置:0 -未设置,1 -设置的,
  ' wallet_pass_status ' int(1)默认“0”评论“钱包密码是否设置:0 -未设置,1 -设置的,
  ‘wallet_status int(1)违约' 1 '评论“钱包是否冻结:0 -冻结,1 -未冻结”,
  ' email_status ' int(1)默认“0”评论“邮箱状态:0 -未激活,1 -激活”,
  ‘message_status int(1)违约' 1 '评论“短信提醒开启:0 -未开启,1 -开启”,
  ‘letter_status int(1)违约' 1 '评论的站内信提醒开启:0 -未开启,1 -开启”,
  ' emailmsg_status ' int(1)默认“0”评论“邮件提醒开启:0 -未开启,1 -开启”,
  “create_time”datetime默认空评论“创建时间”,
  update_time datetime默认空评论”更新时间”,
  “状态”int(1)违约' 1 '评论“是否可用,0 -不可用,1 -可用的,
  主键(“user_id”)
  )引擎=InnoDB默认字符集=utf8评论='用户状态表”, 
  
      <李>支付账户表   
  

用户交易的核心表,存储用户相关的账户资金信息。

  
 <代码类=" sql语言">创建表“ms_user_wallet”(
  wallet_id int (11) NOT NULL AUTO_INCREMENT评论“钱包ID”,
  user_id int (11) NOT NULL评论的用户身份证”,
  wallet_pwd varchar(32)默认空评论“钱包密码”,
  total_account的小数(20,2)默认“0.00”评论“账户总额”,
  usable_money的小数(20,2)默认“0.00”评论“可用余额”,
  freeze_money的小数(20,2)默认“0.00”评论“冻结金额”,
  “freeze_time”datetime默认空评论“冻结时间”,
  “thaw_time”datetime默认空评论“解冻时间的,
  “create_time”datetime默认空评论“创建时间”,
  update_time datetime默认空评论”更新时间”,
  “状态”int(1)违约' 1 '评论“是否可用,0 -不可用,1 -可用的,
  主键(“wallet_id”)
  )引擎=InnoDB默认字符集=utf8评论='用户钱包”,

MySQL基础篇(02):从五个维度出发,审视表结构设计