数据库规范

来源:互联网 发布:绑定淘宝联盟 pid 编辑:程序博客网 时间:2024/05/29 04:46
1.基础规范2.命名规范3.表设计规范 4.字段设计规范 5.索引设计规范 6.SQL使用规范1.基础规范1.1 必须使用InnoDB存储引擎支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 1.2 必须使用UTF8或utf8mb4字符集万国码,无需转码,无乱码风险,节省空间1.3 表、字段必须加入中文注释a) 表注释格式:模块|用途|负责人|创建日期,例如:订单表|记录订单信息|张三|2016-09-12b) 格式统一为:用途|负责人|创建日期,如果字段为枚举类型,需要列举枚举范围并说明每个枚举值的含义。|用来分割不同项目,#用来标识数据来源,@用来分割多个枚举,:用来分割枚举名称和值,例如: 记录订单状态@1:待支付@2:已支付@3:订单已关闭|张三|2016-09-12 记录公司id,#取自hollpin_company.company.id|张三|2016-09-121.4 禁止存储大文件或者大照片为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好2.命名规范2.1 库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用2.2 表名使用模块名+下划线+功能别名组成,如supplier_audit,非唯一索引名idx_xxx,唯一索引名uniq_xxx,无特殊需求,索引统一使用normal类型2.3 多表中的语义相同列,保证定义一致3.表设计规范 3.1 表必须有主键,例如自增主键3.2 必须包含create_time和update_time字段记录创建时间和修改时间,datetime类型3.3 禁止使用外键,如果有外键完整性约束,需要应用程序控制外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以性能优先3.4 数据不允许物理删除,统一采用软删除如增加SMALLINT类型del字段,默认值为0正常,-1删除3.5 表设计需审核可由各组leader负责审核4.字段设计规范 4.1 建议不要使用TEXT、BLOB类型会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能4.2 禁止使用小数存储货币使用整数吧,小数容易导致钱对不上4.3 字段长度根据业务实际需要进行设定,禁止预留过长空间5.索引设计规范 5.1 禁止在更新十分频繁、区分度不高的属性上建立索引a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能b)"性别"这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似5.2 被索引列必须NOT NULL,并设置default值NULL会影响索引的统计,一般会默认null为一个值,这样这个索引的筛选价值就降低了,影响优化器的判断5.3 索引设计需审核可由各组leader负责审核6.SQL使用规范6.1 禁止使用SELECT *,只获取必要的字段,显示说明列属性a)读取不需要的列会增加CPU、IO、NET消耗b)不能有效的利用覆盖索引c)使用SELECT *容易在增加或者删除字段后出现程序BUG6.2 禁止使用INSERT INTO table VALUES(xxx),必须显示指定列属性容易在增加或者删除字段后出现程序BUG6.3 禁止使用属性隐式转换SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引 6.4 禁止大表使用JOIN查询和子查询会产生临时表,消耗较多内存与CPU,极大影响数据库性能,建议改为N+1查询6.5 应用程序必须捕获SQL异常,并有相应处理6.6 数据更新建议使用二级索引先查询出主键,再根据主键进行数据更新6.7 禁止使用跨库查询
0 0
原创粉丝点击