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. 或者在运行一段时间后,根据慢查询日志找出查询频率和查询速度较慢的语句,分析后添加索引
相关推荐
jllllyuz1 小时前
如何为服务器生成TLS证书
运维·服务器·数据库
rit84324991 小时前
ELK实现nginx、mysql、http的日志可视化实验
mysql·nginx·elk
面朝大海,春不暖,花不开2 小时前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
伍六星2 小时前
Flask和Django,你怎么选?
数据库·django·flask
杜哥无敌2 小时前
ORACLE 修改端口号之后无法启动?
数据库·oracle
远方16092 小时前
0x-4-Oracle 23 ai-sqlcl 25.1.1 独立安装-配置和优化
数据库·ci/cd·oracle
远方16092 小时前
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
数据库·ide·ai·oracle
喵叔哟3 小时前
第1章:Neo4j简介与图数据库基础
数据库·oracle·neo4j
喵叔哟3 小时前
第6章:Neo4j数据导入与导出
数据库·oracle·neo4j
甜甜的资料库4 小时前
基于微信小程序的睡眠宝系统源码数据库文档
数据库·微信小程序·小程序