資料庫設計——冗餘欄位

declandragon發表於2019-10-11

前言

記錄自己在使用 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:

相關文章