4. 数据库建库建表规范和原理,白话版

文章目录

  • 数据库建库建表规范和原理,白话版
    • [1. 数据库的字符集:为何utf8成为首选?](#1. 数据库的字符集:为何utf8成为首选?)
    • [2. 为什么要注意数据库的排序规则?](#2. 为什么要注意数据库的排序规则?)
    • [3. 怎么建表名?](#3. 怎么建表名?)
    • [4. 为什么表中会创建id和code?](#4. 为什么表中会创建id和code?)
    • [5. 主键id的命名规则](#5. 主键id的命名规则)
    • [6. 关联键的命名规则](#6. 关联键的命名规则)
    • [7. 为什么要创建create_user,create_time,update_user,upadte_time字段?](#7. 为什么要创建create_user,create_time,update_user,upadte_time字段?)
    • [8. 枚举字段的类型应该怎么处理,用Integer还是字符串?](#8. 枚举字段的类型应该怎么处理,用Integer还是字符串?)
    • [9. 默认值问题?](#9. 默认值问题?)
    • [10. 怎么创建索引?](#10. 怎么创建索引?)

数据库建库建表规范和原理,白话版

1. 数据库的字符集:为何utf8成为首选?

在数据库设计过程中,字符集的选择至关重要。不同的字符集对特殊字符和符号的处理方式各不相同。例如,某些字符集可能无法正确存储或显示某些特殊字符,导致数据乱码。因此,为了确保数据的完整性和准确性,许多数据库管理员和开发者选择使用utf8字符集。
utf8字符集是一种可变长度的Unicode字符集,能够支持全球范围内的各种语言。与其他字符集相比,utf8具有更高的兼容性,能够正确存储和显示各种特殊字符和符号。这使得utf8成为处理多语言数据的理想选择。

2. 为什么要注意数据库的排序规则?

以MySQL 5.7与8.0版本的默认排序规则对比,不同规则使用order by对一个字段排序会有不同的结果

1.MySQL 5.7版本的默认排序规则为utf8mb4_general_ci。这是一种通用的、不区分大小写的排序规则。它适用于大多数情况,但在某些特定场景下,可能会因为大小写不敏感而导致数据比较和排序出现问题。
2.MySQL 8.0版本的默认排序规则为utf8mb4_0900_ai_ci。这是一种更先进的排序规则,基于Unicode 9.0版本,并且支持更精细的字符比较。与utf8mb4_general_ci相比,utf8mb4_0900_ai_ci提供了更高的准确性和灵活性,适用于对字符排序有较高要求的场景。

3. 怎么建表名?

在数据库设计过程中,表名的命名规范同样重要。一个好的表名设计应该能够清晰地表达表的用途和含义,同时方便管理和维护。以下是一个建议的表名设计最佳实践:
1.创建表名一定要有逻辑,比如由以下组成:微服务前缀、模块简称和表达表明含义的名词,如系统服务中用户表SYS_USER,系统服务中用户权限表SYS_USER_ROLE。这种命名方式有助于区分不同微服务的数据表,并清晰地表达表的功能和用途。
2.关联表可以在最后添加"relation"以表明其关联性质。这有助于识别和管理与其他表有关联关系的表。

4. 为什么表中会创建id和code?

在数据库表设计中,我们经常会看到两个相似的字段:id和code。尽管它们在功能上有所相似,即都是用于标识表中每一行数据的唯一性,但在实际的应用场景中,它们分别承担了不同的角色。
1.技术主键(id)
id字段通常作为数据库表的技术主键,用于唯一标识表中的每一行数据。它是数据库内部进行数据操作(如增删改查)的重要依据。此外,id字段还用于建立表与表之间的关联关系,通过外键约束实现数据的完整性和一致性。

1.业务主键(code)
code字段则更多地用于业务层面,它通常具有实际的业务含义,如用户编号、订单号等。code字段的命名通常遵循一定的业务规则,方便业务人员理解和使用。在页面中展示数据时,code字段也常常被用作展示给用户的唯一标识。

5. 主键id的命名规则

在数据库表设计中,主键id的命名规则也是非常重要的。一个合理的命名规则可以提高代码的可读性和可维护性。以下是关于主键id命名的一些建议:
1.避免直接使用"id"作为字段名
尽管"id"是一个简洁的命名,但在实际应用中,如果一个表中直接使用了"id"作为主键字段名,那么在涉及多表联查或者多表关联操作时,可能会因为多个表的"id"字段冲突而导致混淆。因此,建议为每个表的id字段加上表名的前缀,如"user_id"、"order_id"等。

2.培养默契,遵循命名规范
在团队开发中,遵循一定的命名规范可以培养大家的默契,减少沟通成本。对于主键id字段的命名,建议团队内部达成一致,遵循一定的命名规则,如"表名_id"。这样,当团队成员在讨论代码或者排查问题时,可以快速地理解字段的含义和用途。

6. 关联键的命名规则

在数据库表设计中,关联键用于建立表与表之间的关联关系。一个合理的关联键命名规则可以提高代码的可读性和可维护性。以下是关于关联键命名的一些建议:
1.采用"关联的表全称_id"的命名方式
关联键的命名应该清晰地表达出它所关联的表以及它的作用。因此,建议采用"关联的表全称_id"的命名方式。例如,如果一个用户表(user_table)和一个订单表(order_table)之间存在关联关系,那么可以在用户表中创建一个名为"order_table_id"的关联键字段,用于存储与当前用户相关联的订单表的id。

7. 为什么要创建create_user,create_time,update_user,upadte_time字段?

1. 是为了能根据时间排序
2. 是作为日志记录操作时间,人物

8. 枚举字段的类型应该怎么处理,用Integer还是字符串?

可能大部分人都会选择数字,12345等等,美名说为了效率。
1. 使用数字不易维护,如mysql-char为1,mysql-varchar为2,oracle-char为3,当想要添加mysql-text时,不能再使用3,造成mysql类型断层。同时不易理解,需要有字典映射才能明白含义
2. 使用字符串时就不会出现这些问题,比如状态用Normal,Fail。无论是见名知意还是变更维护,都是更简单的

9. 默认值问题?

默认值作为最后一道防线,有些字段一定要加。比如类型,一定不要用null,减少处理null值的逻辑,同时降低自己的代码负担

10. 怎么创建索引?

1. 可以在建表初期根据业务估计直接对一些字段添加索引
2. 或者在运行一段时间后,根据慢查询日志找出查询频率和查询速度较慢的语句,分析后添加索引
相关推荐
恒辉信达几秒前
hhdb客户端介绍(53)
数据库·mysql·hhdb·数据库可视化界面客户端
Hello.Reader1 小时前
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
redis·mysql·缓存
是程序喵呀2 小时前
MySQL备份
android·mysql·adb
指尖上跳动的旋律2 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
一勺菠萝丶2 小时前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
m0_748244833 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝3 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067123 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!3 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱4 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite