數據庫表結構設計,常見的數據庫管理系統

一、數據場景1、表結構簡介任何工具類的東西都是為了解決某個場景下的問題,比如Redis緩存系統熱點數據,ClickHouse解決海量數據的實時分析,MySQL關系型數據庫存儲結構化數據 。數據的存儲則需要設計對應的表結構,清楚的表結構,有助于快速開發業務,和理解系統 。表結構的設計通常從下面幾個方面考慮:業務場景、設計規范、表結構、字段屬性、數據管理 。
2、用戶場景例如存儲用戶基礎信息數據,通常都會下面幾個相關表結構:用戶信息表、單點登錄表、狀態管理表、支付賬戶表等 。

  • 用戶信息表
存儲用戶三要素相關信息:姓名,手機號,身份證,登錄密碼,郵箱等 。
CREATE TABLE `ms_user_center` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',`user_name` varchar(20) NOT NULL COMMENT '用戶名',`real_name` varchar(20) DEFAULT NULL COMMENT '真實姓名',`pass_word` varchar(32) NOT NULL COMMENT '密碼',`phone` varchar(20) NOT NULL COMMENT '手機號',`email` varchar(32) DEFAULT NULL COMMENT '郵箱',`head_url` varchar(100) DEFAULT NULL COMMENT '用戶頭像URL',`card_id` varchar(32) DEFAULT NULL COMMENT '身份證號',`user_sex` int(1) DEFAULT '1' COMMENT '用戶性別:0-女,1-男',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',`state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';
  • 單點登錄表
用意是在多個業務系統中,用戶登錄一次就可以訪問所有相互信任的業務子系統,是聚合業務平臺常用的解決方案 。
CREATE TABLE `ms_user_sso` (`user_id` int(11) NOT NULL COMMENT '用戶ID',`sso_id` varchar(32) NOT NULL COMMENT '單點信息編號ID',`sso_code` varchar(32) NOT NULL COMMENT '單點登錄碼,唯一核心標識',`log_ip` varchar(32) DEFAULT NULL COMMENT '登錄IP地址',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',`state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用',PRIMARY KEY (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶單點登錄表';
  • 狀態管理表
系統用戶在使用時候可能出現多個狀態,例如賬戶凍結、密碼鎖定等,把狀態聚合到一起,可以更加方便的管理和驗證 。
CREATE TABLE `ms_user_status` (`user_id` int(11) NOT NULL COMMENT '用戶ID',`account_status` int(1) DEFAULT '1' COMMENT '賬戶狀態:0-凍結,1-未凍結',`real_name_status` int(1) DEFAULT '0' COMMENT '實名認證狀態:0-未實名,1-已實名',`pay_pass_status` int(1) DEFAULT '0' COMMENT '支付密碼是否設置:0-未設置,1-設置',`wallet_pass_status` int(1) DEFAULT '0' COMMENT '錢包密碼是否設置:0-未設置,1-設置',`wallet_status` int(1) DEFAULT '1' COMMENT '錢包是否凍結:0-凍結,1-未凍結',`email_status` int(1) DEFAULT '0' COMMENT '郵箱狀態:0-未激活,1-激活',`message_status` int(1) DEFAULT '1' COMMENT '短信提醒開啟:0-未開啟,1-開啟',`letter_status` int(1) DEFAULT '1' COMMENT '站內信提醒開啟:0-未開啟,1-開啟',`emailmsg_status` int(1) DEFAULT '0' COMMENT '郵件提醒開啟:0-未開啟,1-開啟',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',`state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用',PRIMARY KEY (`user_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶狀態表';
  • 支付賬戶表
用戶交易的核心表,存儲用戶相關的賬戶資金信息 。
CREATE TABLE `ms_user_wallet` (`wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '錢包ID',`user_id` int(11) NOT NULL COMMENT '用戶ID',`wallet_pwd` varchar(32) DEFAULT NULL COMMENT '錢包密碼',`total_account` decimal(20,2) DEFAULT '0.00' COMMENT '賬戶總額',`usable_money` decimal(20,2) DEFAULT '0.00' COMMENT '可用余額',`freeze_money` decimal(20,2) DEFAULT '0.00' COMMENT '凍結金額',`freeze_time` datetime DEFAULT NULL COMMENT '凍結時間',`thaw_time` datetime DEFAULT NULL COMMENT '解凍時間',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',`state` int(1) DEFAULT '1' COMMENT '是否可用,0-不可用,1-可用',PRIMARY KEY (`wallet_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶錢包';

推薦閱讀