总结一下最近数据库设计原则(待补充)

在没有做过数据库设计之前认为:数据库设计是表与表的关系设计,合理的表关系设计能使逻辑更易编写,不过这是以前肤浅的认知。后来逐渐开始参与公司数据库的设计才发现,单单是数据库表名,字段名也有一定学问,在最近的开发过程中感觉尤为突出。其中一些是历史遗留发现的,另外一些是新加表中发现的。

一、遗留问题主要体现在文档缺失上,基本所有表没有注释,字段更不用说,然后就对每个字段的作用搞不清楚,而且很多字段也不知道有没有用到,因为所有记录都没有值,但又不敢删。留着不管又影响性能,看着也不爽。

二、在新加表出现的问题是:新人喜欢模仿以前的表设计,也不管字段有没有用,有什么用,先都照搬过来,而且又喜欢添加一些新字段,说是为了预留以后新加功能的时候万一用到了,这就重蹈覆辙了,把字段加上了却又不喜欢写注释,然后导致后来连自己也不知道当初为什么加这个字段。

三、另外对于一些枚举字段,用了数字来表示不同类型,比如用1,2,3,4表示超级管理员,普通管理员,用户,小编,这种方式好处是占用字节少,但是坏处也不少,首先,从数值上看不出代表什么类型,需要看文档注释,要是连注释也没写那就坑了。

四、由于业务不断增加,表字段也不管添加,最后一张表中就会有好几十个字段,最后变得不好维护,而且有些字段是做的时候加上,最后又不用了,又没有及时删掉,然后就变成了垃圾字段。

以上几点问题是比较突出又影响开发的,我也总结出了对策:
1、表和字段一定要写注释
2、只添加需要用到的字段,千万不要加一些以后用到的字段,以后用到以后加
3、枚举字段在MySQL中建议使用enum枚举类型,在插入记录的时候使用单词来表明类型,在数据库保存的实际是数值索引
4、对于常用的字段放到一个表中,不常用的字段可以考虑分表存放,一对一关联,需要的时候查询即可

数据库引擎的使用:

就目前mysql的使用来说,大多数人在数据库引擎上会选择InnoDB,也总是有人建议这么做,主要目的是为了支持事务。但同样有人认为MyISAM读取性能比InnoDB强很多,会选择使用MyISAM。所以说具体选择哪种引擎类型依据业务实际情况决定。根据我们的项目实际使用情况,我最后选择了MyISAM作为数据库引擎。

前一个项目使用java开发,MySQL数据库InnoDB,确实也出现一些问题,在某次活动时200左右的并发量下不仅服务器宕机,连另一台数据库服务器在连接数暴增的情况下读取性能骤降,从而导致java服务器不能及时响应。这次开发语言选择了nodejs,经测试发现,可以支撑的并发量在2000多近3000的样子,所以就要求数据库能尽快读取数据,再加上目前业务中不要求事务,那么MyISAM就成了不二之选。