数据库设计——冗余字段

前言

记录自己在使用 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 协议》,转载必须注明作者和本文链接
感谢阅读,有收获的话不妨点个赞:smiling_imp:
讨论数量: 1

这是程序员的锅……

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!