1.  数据库设计规范

数据库命名规范

数据库基本设计规范

数据库索引设计规范

数据库字段设计规范

SQL开发规范

数据库操作规范

1.1    数据库命名规范

对象使用小写字母并用下划线分隔;

禁止使用MySQL保留关键字;

对象名不要超过32个字符;

PS:其实在oracle11g之前版本,对象都是32位以下,12C好像增大到128.

临时表以tmp前缀日期后缀;

备份表以bak前缀日期后缀;

存储相同数据的列名和类型都要一致

1.2    数据库基本设计规范

所有表使用InnoDB存储引擎;

库和表统一使用UTF8

MySQLUTF8下汉字占用3个字节,ASCII码占用1个字节;

表和字段添加注释

尽量控制单表数据量的大小,建议控制500W以内;

PS:单表数据量太大,备份、恢复、修改表结构DDL都有很大问题。

PS:历史数据归档,分库分表控制单表的数据量大小。

谨慎使用分区表;(这是教案中给的建议)

PS:分区表在物理上分为多个文件,逻辑上表现为一个表,谨慎选择分区键,跨分区查询效率可能更低,建议采用物理分表的方式管理大数据。

尽量做到冷热数据分离,减小表的宽度;

PSMySQL表最多支持4096列。

禁止在表中建立预留字段

PS:预留字段无法选择合适的数据类型,对预留字段进行修改,会锁表影响并发。

禁止在数据库中存储图片、文件等二进制数据

PSDB中存储指向文件服务器的图片或文件的地址信息。

禁止在线上对数据库进行压力测试

禁止从开发测试环境直连生产库;

1.3    数据库索引设计规范

建议单表索引的数量不要超过5个;

每个InnoDB表必须有个主键

PS:不能使用更新频繁的列作为主键,不能使用多列作为主键,

         不能使用uuidmd5hash、字符串作为主键,

主键建议使用自增ID

索引列建议

where从句后的列,包含在group by,order by, distinct中字段的单列索引或组合索引,多表联合的Join列。

索引列的顺序(下面优先级别从上到下由高到低):

选择性高的列在左侧(优先考虑);

字段长度小的列在左侧;

使用最频繁的列在左侧。

避免建立冗余和重复索引

primary key(id), index(id), unique(id)à重复索引;

index(a, b, c), index(a, b), index(a)àa列冗余索引。

对于频繁的查询优先考虑适应覆盖索引

有点类似oracle的回表操作,直接在索引列上取出Select的列。

避免InnoDB表进行索引的二次查找。

Select a, b from tab where c = xxx;

create index index_name on tab(c, a, b);

可把随机IO转为顺序IO

尽量避免使用外键

建立外键时,会自动在外键上建立索引;

不建议使用外键约束,但要在表之间的关联列上建立索引