1、手机号码:使用varchar(20)存储手机号,因为涉及到区号或者国家代号,可能出现+-()。

2、create_time、update_time:创建时间、更新时间,商务上还可以查看每天更新数据。

3、时间:使用datetime直接显示时间,但如果考虑到时区,很明显计算上的麻烦。使用timestamp,可以根据系统的时区来自动输出时间,但是单个用户要定制自己的时区呢?很多项目喜欢使用int,适合需要进行大量时间范围查询的数据表。

4、MediumText和Text:区别是长度不同。 MediumText最大长度是个字节(2^24-1)。

5、长度:如,int类型的长度表示能显示的10进制数的位数上限,实际上也限制了字段中数值的范围。

6、Not Null:对于一些可填可不填的字段,尽量设置为非空,这种可提高性能,而且很大程度上避免空指针一类的问题。

7、MyISAM和InnoDB:MyISAM相对简单,所以在效率上要优于InnoDB。MyISAM恢复速度快,可直接用备份覆盖恢复。如果系统读多、写少,对原子性要求低,那么MyISAM好的选择。如果系统读少、写多,尤其是并发写入高的时候,InnoDB就更好。

8、文章主表副表:文章表用得最多的是分类、标题、描述这些基础信息,所以多半把文章表分为主表、副表,副表存内容等很少使用的信息。在MySQL并发大的情况下,冷热数据分离是常见的优化手段之一。

9、索引:KEY。字段加索引,为了提升检索速度。应该只为那些最经常出现在查询条件、排序条件中的数据列创建索引。

10、建议索引命名格式为:索引类型_字段名。普通索引名idx_xxx,唯一索引名uniq_xxx。

11、不建议使用存储过程、视图、触发器、Event:高并发、大数据的互联网业务,架构设计思路是“解放数据库CPU、将计算转移到服务层”。业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。

12、原则上禁止使用TEXT、BLOB类型,可以做垂直拆分到子表中:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

13、外键:有争论。互联网行业应用不推荐使用外键,如果有外键完整性约束,需要应用程序控制。因为用户量大、并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展。若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而应用服务器一般都是可以做到轻松地水平的伸缩。

14、现在敏捷开发中的数据库设计,在最初几乎不进行预先设计,但是一旦需求发生变化,应该从头审查整个架构设计,在此次修改中设计出能够满足日后类似修改的系统架构。