数据库设计规范

本文详细介绍了MySQL数据库的设计规范,包括数据库命名、存储引擎选择、字符集配置、表结构设计、索引策略及SQL编写规范等内容。

1.数据库设计规范:

①数据库命名规范:

①所有数据库对象名称必须使用小写字母并用下划线分割

②所有数据库对象名称禁止使用MySQL保留关键字

③数据库对象的命名要能做到见名识意,并且最好不要超过32个字符。例如 用户表:mc_userdb

④临时表必须一tmp为前缀,时间为后缀。

⑤备份库、备份表必须以bak为前缀,日期为后缀

⑥所有存储相同数据的列名和列必须一致

②数据库基本设计规范

①所有的表必须以lnnodb存储引擎。(5.6以后的默认引擎,支持事务,行级锁,更好的恢复性,高并发下性能更好)。

②数据库和表的字符集统一使用UTF8(避免乱码问题)(UTF8字符集汉字占3个字节,ASCII码占有一个字节)。

③所有的表和字段都需要添加注释。(方便以后对数据字典的维护)。

④尽量控制单表数据量的大小,建议控制在五百万以内。(这种限制取决于存储设置和文件系统),尽量做到冷热数据分离,减小表的宽度。减少磁盘IO,保证热数据的内存缓存命中率

⑤禁止在表中建立预留字段

⑥禁止在数据库中存储图片,文件等大的二进制数据

⑦禁止在线上做数据库压力测试

⑧禁止从开发环境,测试环境直连生产环境数据库

 

③ 数据库索引设计规范

①限制每张表上的索引数量,建议单张表索引不超过五个

(索引并不是越多越好,可以降低也可以提高效率。禁止给表中的每一列都建立单独的索引)

②每个Innodb表必须有一个主键(不使用更新频繁的列作为主键,不使用多列主键)

③不使用UUID、MD5、HASH,字符串列作为主键(后面的主键值不一定大于前面的,增加IO操作)

④主键建议使用自增ID值

常见索引列建议:

如何选择索引列的顺序:

 避免建立冗余索引和重复索引:

 对于频繁查询的索引优先考虑覆盖索引:(覆盖索引:包含了所有查询字段的索引)

尽量避免使用外键:

④数据库字段设计规范: 

①优先选择存储需要的最小的数据类型

②避免使用TEXT,BLOB数据类型

③避免使用ENUM数据类型

④尽可能把所有列定义为NOT NULL 

⑤不建议字符串存储日期型数据

⑥使用TIMESTAMP或DATETIME类型存储时间

QI

⑦同财务相关的金额类数据,必须使用decimal类型

 

 ⑤数据库SQL开发规范

①在程序中建议使用预编译语句进行数据库操作

②数据库SQL开发中避免数据类型的隐式转换

 

 ③充分利用表上已经存在的索引

④程序连接不同的数据库使用不同的账号,禁止跨库查询 

⑤禁止使用SELECT *必须使用SELECT<字段列表>查询

 ⑥禁止使用不含字段列表的INSERT语句

错误:

正确:

⑦禁止使用子查询,可以把子查询优化为join操作

⑧避免使用JOIN关联太多的表

 ⑨减少数据库的交互次数

⑩使用in代替or

⑪禁止使用order by rand()进行随机排序

⑫WHERE语句禁止对列进行函数转化和计算

 

⑬在明显不会有重复值是使用UNION ALL 而不是UNION

 

 ⑭拆分复杂的大SQL为多个小SQL

⑥数据库操作行为规范

①超过100万行批量写操作,要分批多次进行写操作

②对于大表使用pt-online-schema-change修改表结构

 

 ③禁止为程序使用的账号赋予super权限

 ④对于程序连接数据库账号,遵循权限最小原则

 

 

 

 

 

 

 

 

数据库设计规范-命名规范全文共4页,当前为第1页。数据库设计规范-命名规范全文共4页,当前为第1页。数据库设计规范(命名规范) 数据库设计规范-命名规范全文共4页,当前为第1页。 数据库设计规范-命名规范全文共4页,当前为第1页。 1 目的 规范数据库设计。 2 概述 从数据库的设计原则 设计文档几方面论述数据库设计的规范思想及命名规则。 3 数据库应用结构 根据对一般业务系统的分析,将数据库和程序系统统一进行整体描述,展示数据库的 表之间以及与程序模块间的关系。 3.1 数据表和程序模块的分类 根据"处理特点",将数据表和程序模块进行分类如下: 数据表分类:业务数据表、基本编码表、辅助编码表、系统信息表、累计数据表、结 算数据表、决策数据表。 程序模块分类:初始化、业务处理、完整性检测与修正、结算处理、统计处理。 3.1.1 数据表分类说明 业务数据表:记录业务发生的过程和结果。如,合同、出仓单、申单、凭证。 基本编码表:描述业务实体的基本信息和编码。如,产品、客户、供应商、雇员。 辅助编码表:描述属性的列表值。如,合同类型、职称、民族、付款方式。 系统信息表:存放与系统操作、业务控制有关的参数。如,用户信息、权限、用户配 置信息、成本核算方式。 累计数据表:存放业务的当前值和累计值。如,当前库存、当前存款、累计销售、累 计支出、应收账款。 结算数据表:存放各个时期末的结存数。如,月末库存、月末银行存款、应收账款月 结。 决策数据表:存放各个时期内发生的统计值。如,月销售统计、月回款统计、出入库 统计。 3.1.2 程序模块分类说明 初始化:系统运行前对系统进行数据的初始化。如,库存初始化。 业务处理:业务过程的控制和结果记录。如,合同录入、费用审批、出入库。 完整性检测与修正:对累计数据表进行检查并自动修正。如对当前库存、当前存款、 累计销售的检查和重新计算。 结算处理:计算并记录各个时期末的结存数。库存月结、应收账款月结。 统计处理:计算并记录各个时期内发生的统计数。如,统计月销售、统计月回款、统 计出入库。 3.2 数据表间的关系 业务数据表<-->基本编码表 主-外键关系。如,合同表<-->客户编码表; 业务数据表<-->辅助编码表 主-外键关系。如,合同表<-->付款方式; 业务数据表、累计数据表、结算数据表:累计数据表=结算数据表(上期末) + 业务数 据表(本期内发生)。如当前库存=上月末库存数+(本月入库数-本月出库数); 决策数据表<-->业务数据表 决策数据表的数据是由业务数据表中数据导出(统计)的; 数据库设计规范-命名规范全文共4页,当前为第2页。数据库设计规范-命名规范全文共4页,当前为第2页。3.3 数据表与程序模块间的关系 由一个例子(仓库管理)来说明数据表与程序模块之间的关系: . 系统使用前,由初始化模块对库存数(累计数据表)和上月末库存数(结存数据表)进 行初始化; . 当有入库业务发生时,由入库模块(业务处理)将入库单录入并保存到入库单明细帐( 业务数据表)中,同时将入库数累加到库存数(累计数据表)中; . 定期或不定期,库存数核算模块(检查完整性检测与修正)根据上月末的库存数(结存 数据表)、本月已发生数(业务数据表)检查当前的库存数(累计数据表)是否符合,不符合 则给出提示,可手工或自动进行更正(当前库存数=上月末库存数+本月入库数-本月出库数 ); . 每月初,进行上月的月结处理。月结模块(结算处理)根据上月初的库存数(结存数据 表)、上月发生数(业务数据表)计算出上月末的库存数(累计数据表)。公式为:上月末库 存数=上月初库存数+上月入库数-上月出库数; . 每个月月结后,库存业务月统计模块(统计处理)统计上月的各种库存商品的入库和 出库数,便于查询和生成报表,也作为决策支持的数据基础。 3.4 数据表命名时对数据表分类的考虑 . 业务数据表:t_d_<系统标识>_<表标识>。如销售系统的合同表 t_d_SH_Contract 或 t_d_SH_合同; . 基本编码表:t_b_[<系统标识>]_<表标识>。如客户编码表t_b_Customer 或 t_b_客 户; . 辅助编码表:t_a_[<系统标识>]_<表标识>。如合同类别t_a_ContType 或 t_a_合同 类别; . 系统信息表:t_s_[<系统标识>]_<表标识>。如用户表t_s_User 或 t_s_用户; . 累计数据表:t_t_<系统标识>_<表标识>。如当前库存表t_t_SO_Stock 或 t_t_SO_ 库存; . 结算数据表:t_c_<系统标识>_<表标识>。如库存月结表t_c_SO_StockMonth 或 t_c_SO_库存月结; . 决策数据表:t_w_<系统标识>_<表标识>。如月销售统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值