数据库设计——冗余字段
前言
记录自己在使用 MySQL 过程中踩过的坑、SQL 优化方案等。
有收获的话请 点个赞,没有收获的话可以 反对 没有帮助 举报 三连。
起因
刚刚测试在群里艾特我,银行卡绑定失败
我抄起键盘打开日志,发现是用户中心接口返回添加失败,顺手把日志扔群里了
然后艾特用户中心负责的小伙伴,双手离开键盘看戏
[ 2019-10-11 15:22:00 ] 返回-addBankCard-{"errorCode":100003,"errorMsg":"添加失败","success":false}
不一会儿用户中心的小伙伴就找到问题了,两个表字段长度不一致,数据写不进去
问题分析
先上表结构,省略了一些字段。
- 用户信息表
CREATE TABLE `user_info` ( `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'id', `name` char(32) DEFAULT NULL COMMENT '姓名', `intl` char(30) DEFAULT '86' COMMENT '国籍', `sex` tinyint(2) unsigned DEFAULT '1' COMMENT '性别 1男 2女', PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户个人信息表';
- 银行卡信息表
CREATE TABLE `user_bank` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `uid` int(11) NOT NULL COMMENT 'UID', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '姓名', `card_id` varchar(20) NOT NULL DEFAULT '' COMMENT '卡号', `bank` varchar(20) NOT NULL DEFAULT '' COMMENT '银行名', `subbank` varchar(40) NOT NULL DEFAULT '' COMMENT '支行名称', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2765 DEFAULT CHARSET=utf8mb4 COMMENT='用户银行卡信息表';
通过观察表结构我们发现两个表里的 name
字段属性差别有点大,另外 uid
字段属性也不一致。
如果还有其他问题欢迎大家评论
结论
冗余字段要保证类型和长度完全一致。
本作品采用《CC 协议》,转载必须注明作者和本文链接
这是程序员的锅……