首页 > mysql 数据库表设计问题

mysql 数据库表设计问题

在设计表的过程中,比如英雄等级,英雄id,角色id等等,这些值的位数最多在四位数,我基本都设为char型或者varchar,因为我觉得可以节省内存,不知道这样子对不对,还有我把所有字段都设为not null,希望大家能给小弟一些建议在设计数据库时


数值的选取:
状态值:tinyint
有限范围值:根据范围选择tinyint(不要用enum),smallintmediumint ,int, bigint, float, double
如果数值是无符号的,则设置unsigned
从技术上尽可能将字段设置成NOT NULL,但如果业务上要求该字段可以为NULL,而且如果该字段不会被建立索引,则保持NULL,否则可以用''(空字符串)代替;

就题主所说的情况,应该选用UNSIGNED SMALLINT NOT NULL,用char可能有遭遇一点小坑(有兴趣的可以评论留言,明天再说,现在有点晚了)。

平时用多了就稍微记一下tinyintsmallintmediumintint的取值范围,前三个要求精确背出,第四个知道大概是21E左右就好了。

相比节省内存,更重要的是表结构设计,看上去你这个表的数据量可能在1W以内,内存并不是关注点。


等级 id 这些都是数字吧?
用int会节省空间


int是四个字节,char是一个字节。
理论上你将其存储为char是存储不下的吧,char是八位,最多表示0~256。如果用varchar的话还需要额外的两字节存储。

并不清楚你的数据量有多大,之前我做过每日数据增量过亿的项目,这类表字段一般使用SMALLINT类型,是不会有性能问题的。

如果是小流量系统或者说系统初期,建议还是把精力放在功能设计上,只要库不是设计的太过分,不太会留下过大的技术债务的,毕竟现在的开源组件也都很给力。

【热门文章】
【热门文章】