MySQL数据库设计最佳实践
“mysql数据库规范.txt” MySQL数据库设计规范是确保数据库高效、稳定和易于维护的关键。以下是一些关键点: 1. 数据库版本选择:推荐使用MySQL 5.7或更高版本,因为它们提供了更好的性能和稳定性。 2. 属性类型选择: - 数字类型:优先使用`int`,避免使用`tinyint`和`bigint`。`int`类型可容纳上亿条数据,适用于大多数情况。 - 字符串类型:短字符串使用`char`,较长字符串使用`text`或`varchar`。尽可能使用`char`以提高效率,除非确实需要变长字符串。 - 时间戳:对于需要数据库控制时间的字段,设置默认值为`timestamp`。对于程序控制的时间,使用`char`类型。 - 金钱类型:使用`decimal(40,20)`来存储,以确保精确度并兼容区块链相关货币。 3. 主键与索引: - 主键应为自增`int`类型,并自动带索引,以确保唯一性和快速查询。 - 禁止使用`tinyint`、`bigint`作为主键,考虑数据量的增长。 - 避免使用`date`等其他时间格式,统一使用`timestamp`。 - 禁止设立外键,初期设计中可以不考虑,但随着业务发展,可以根据需要添加。 - 索引和联合索引应在业务需求明确时再进行创建,避免初期过度设计。 4. 查询优化: - 禁止联表查询,因为这可能导致性能下降。建议通过程序处理数据,或者在必要时使用临时表解决方案。 5. 数据表示: - 避免使用数字代表状态,如1代表上线,2代表审核等。直接使用`char`存储状态名称,提高可读性。 6. 命名规范: - 所有数据库相关的命名都应使用小写字母,且具有含义的英文单词,单词间用下划线`_`分隔。 - 数据库名称应与业务相关或直接使用项目名称。 - 字符集应选用`utf8mb4`,排序规则为`utf8mb4_general_ci`,以支持更多Unicode字符。 - 表引擎推荐使用`InnoDB`,提供事务支持和行级锁定。 - 表命名遵循`项目名_功能名`的格式,功能名全小写,多单词用下划线分隔。 - 表字段命名示例: - `function_name_id`:`int`类型主键,自增且不能为空。 - 其他字段如`create_time`和`update_time`为`timestamp`类型,用于记录创建和更新时间,分别带有默认值和更新触发器。 - `tb_status`:`char(50)`类型,用于存储状态信息。 遵循这些规范,可以创建一个高效、易理解和维护的MySQL数据库。随着业务的发展,可以根据实际需求调整和优化这些规则。
数据库使用主要属性类型,数字用 int ,字符用 char ,比较多的字符用 text 或者 verchar, 根据实际情况,能用char的,尽量不要使用 verchar 。需要数据库控制时间的用 timestamp 给默认值即可。不需要数据库控制时间的 使用 char ,用程序控制即可。
涉及到金钱的使用 decimal(40,20) 统一用这个,可以兼容区块链相关钱币。
以上 属性类型基本可以满足 90% 以上的业务场景,需要严格遵守。
主键自增ID自带索引。
禁止使用 tinyint ,bigint 等数字类型。可能有人要给主键用bigint 但要考虑到,int类型就有上亿条数据量了,是否能达到?自己写个程序往数据库里插入几百万条数据试试,看怎样操作就明白了。
禁止使用其他时间格式,比如date 等。
禁止设立外键,索引,联合索引。这个可以等到业务发展到一定程度的时候执行。
禁止联表查询。如果做不好,两个表几万的数据就可能会导致数据库慢的不行。用程序处理几十万的数据都没有问题。再大的数据量可以用临时表方案解决。
数据库中如果设计到type属性的,直接用char写入属性名称,禁止用数字代替。比如:1 代表上线,2代表审核,3代表审核通过,4代表待审核,5代表正常,6代表删除等等。禁止这样使用,直接用 char 是什么,就写什么,char的效率在mysql5.6版本之后和int的效率差不多。不用考虑效率问题。
1. 数据库相关的所有命名只能用小写英文字母,必须是有含义的英文单词,单词之间用 _ 进行间隔
2. 数据库名称需要与业务相关,或者直接使用项目名称。
下载后可阅读完整内容,剩余4页未读,立即下载
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构