基本原则
1. 避免表关联操作(join) (推荐在应用服务层,通过业务代码来完成)
2. 业务开发避免使用procedure,function,trigger (推荐在应用服务层,通过业务代码来完成)
3. 发版过程中产生的备份表、临时表应及时清除。例如:NewCaseFolder0213、NewCaseFolder.Chart_Timeline_temp_20140508
4. 不在数据库做运算,运算移至业务层处理。例如:各种mysql函数调用 md5() / Order by Rand()
5. 单表字段数少而精,上限控制在20个左右。
6. 拒绝3B,大SQL( Big SQL ),大事务( Big Transaction ),大批量( Big Batch )
7. 永远不在程序端对数据库显式加锁
8. 数据库编码默认是 utf8mb4,以支持表情符号
9. 使用InnoDB存储引擎
10. 所有表都需要添加注释
11. 不在数据库中存储图 、 文件等大数据
12. 库名、表名、字段名禁止使用英文缩写、拼音缩写,须见名知意 (推荐使用英文单词全名)
命名规范表名
1. 正式表以 t_ 开头
2. 全小写字母,单词之间用下划线分隔。比如:user_name
3. 表名不允许出现数字,例如:EPocket2
4. 正式的业务表表名不允许使用copy、temp、new等有歧义的名称,例如:NewCaseFolder.Chart_Timeline_Temp,EPocket2.CalculatorNew
5. 业务日志表以_log结尾,业务日志是记录业务操作的历史,只有数据追加(insert),没有update操作和delete操作。
字段名
1. 全小写字母,单词之间用下划线分隔。比如:user_name
2. 时间列明确区分 date 和 time,比如:EPocket2.Drug 的 PubDate 列格式是datetime,应该命名为pub_time
3. 描述尽量详细,不能含糊,因为含糊会导致不同的字段意义,却有相同的名称。容易导致误解。例如:
xsl_visit.Solution_Resources 患教库和 xsl_visit.TimerJob 定时任务的列表中,有同一列 contentTypeID,但意义不同。应该分别命名为 resources_type_id 和 job_type_id。
4. 描述要能够精确对应字段含义,禁止为了省事儿而借用其它列,导致列名与字段含义不对应的情况。例如:
EPocket2.GuideNew 的列 PubDate 是物理指南的发布时间,EPocket2.Drug 的列 PubDate 是药品上线时间
其它名称
1. 索引命名以 idx_ 开头,单词间用下划线分割,idx之后跟索引列的列名。例如在userid上建立索引,命名为:idx_userid
2. 唯一索引命名以unique_idx_开头,单词间用下划线分割,idx之后跟索引列的列名。
3. 视图以 v_ 开头