前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL表设计踩过的坑!

MySQL表设计踩过的坑!

作者头像
企鹅号小编
发布2018-02-07 13:42:52
1.1K0
发布2018-02-07 13:42:52
举报

前言

有朋友在后台留言。希望我能说说我在数据库表设计时踩过的坑。那么,我们今天就来聊聊我在数据库表设计时踩过的坑,以及现在对数据库表设计的一点建议。希望能够帮助到你。

utf8的锅

经验提示: 在设计数据表时,一定要注意该字段存储的内容,如果允许设置表情,则一定不能使用utf8,而是使用utf8mb4。

选择合适的类型

在数据库表设计时,字段的类型还真不好设计,这里简单说说:

保存手机号的字段,用varchar(20)就已经足够了,就不应该设计为varchar(100),设置为varchar(100)只会消耗更多的存储以及内存开销,得不偿失啊!

保存Boolean类型,使用tinyint就够了,而不需要设计为int,甚至bigint。

数据类型设计的过大,就会造成没必要的浪费(磁盘,内存,CPU),最主要的是,这是一件费力不讨好的事情。

主外键字段类型不一致

主外键类型不一致,说起来,你可能会不相信,但在数据库表设计时,稍不留神,就不一致,埋下隐式类型转换的坑。如下:

用户表:

create table t_base_user(

oid bigint(20) not null primary key auto_increment comment "主键", ....

)

注意此时的主键oid为bigint(20)。

用户地址表:

create table t_base_user_address(

oid bigint(20) not null primary key auto_increment comment "主键",

user_id varchar(30) null comment "用户id" ....

)

你看,此时在t_base_user_address表中的user_id外键字段,设计时的却是varchar(30)。你可能觉得你不可能发生这样的错误,说出来也不怕你笑话,我就踩过好几次这样的坑,到最后发现慢SQL了,才发现自己中了这样的坑!!!

注释

之前在数据库表设计时,就没有加注释的习惯,造成的直接后果是:数据库设计阶段一过,后续数据表的使用中,字段名就全靠猜了。我们写代码是知道注释是非常重要的,同样在设计数据库表时,注释也非常重要!一定要记住加注释,无论是表,还是字段,索引,都必须加上注释。

如:

create table t_base_user(

oid bigint(20) not null primary key auto_increment comment "主键", ....

)

已有表加注释

alter table t_base_user modify oid bigint(20) not null primary key auto_increment comment "主键";

加注释时,还要注意的是:在一些需要计算的字段上,需要加上计算规则文档的链接。方便后续查找!

加索引

在之前的文章中也有说过,一个好的数据表设计,在一开始就应该考虑添加索引,这个阶段添加索引成本不仅最低。而且还不给后续留下慢查询,甚至生产事故的隐患!索引怎么加,索引重不重要,可以查看《写会MySQL索引》一文进行查看!唉,我就吃过不少没加索引或忘记添加索引的亏,记忆犹新!!!

小结

以上是我数据库设计表时躺过的坑,下面小结精简版本一下:

允许保存表情的表,存储格式设计为utf8mb4,避免使用utf8。

选择合适的数据类型。

主外键字段类型一定要一致,否则会造成隐式转化,不走索引,造成生产事故!

表以及字段上添加合理的注释。

数据库表设计时,一定要在外键字段以及合适的字段上加索引。

上面是我数据库表设计时,遇到踩过坑以后的经验之谈。有些坑当时还真花了不少时间来填补。记录在这里,如果能帮助到你,那就太好了!

更多推荐《18个技术类微信公众号》

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

本文来自企鹅号 - 数据库开发媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 数据库开发媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档