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

文章目录

  • 数据库建库建表规范和原理,白话版
    • 1. 数据库的字符集:为何utf8成为首选?
    • 2. 为什么要注意数据库的排序规则?
    • 3. 怎么建表名?
    • 4. 为什么表中会创建id和code?
    • 5. 主键id的命名规则
    • 6. 关联键的命名规则
    • 7. 为什么要创建create_user,create_time,update_user,upadte_time字段?
    • 8. 枚举字段的类型应该怎么处理,用Integer还是字符串?
    • 9. 默认值问题?
    • 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. 或者在运行一段时间后,根据慢查询日志找出查询频率和查询速度较慢的语句,分析后添加索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【考研数学】打基础用张宇《30讲》还是武忠祥《基础篇》?

基础课不太可能所有的东西全都覆盖,还是先搭起一个知识框架,然后不断的填充和完善。 所以不必太过于在意少一些东西,我们不可能一口吃成胖子,基础知识肯定不会遗漏的,只可能一些技巧不到位。 从自己的情况考虑&#…

【哈希表算法题记录】15. 三数之和,18. 四数之和——双指针法

题目链接 15. 三数之和 思路 这题虽然放在哈希表的分类里面,但是用双指针法会更高效。 之前的双指针我们要么是一头left一尾right,要么是快fast慢slow指针。这里是要计算三个数的和,我们首先对数组进行从小到大的排序,先固定一…

./gradlew assembleRelease

在 Android 项目中使用 Gradle 进行打包,通常会涉及到配置 build.gradle 文件。其中,你需要指明签名配置(signing config)和构建类型(build type)。以下是一个基本的配置示例: 首先&#xff0c…

Docker 进阶

1、容器数据卷 什么是容器数据卷? 就是当容器内存在了mysql,在里面书写了数据,如果容器删除了,那么数据也就没有了,通过容器数据卷的技术,可以让容器内的数据持久化到Linux服务器上 操作 #docker run -…

三、HarmonyOS 应用开发入门之运行Hello World

目录 1、课程对象 1.1、有移动端开发经验 1.2、无移动端开发经验 1.3、对 HarmonyOS 感兴趣 2、DevEco Studio 的使用 2.1、DevEco Studio 的关键特性 智能代码编辑 低代码开发 多段双向实时预览 多端模拟仿真 2.2、安装配置 DevEco Studio 2.2.1、官网开发工具下载地…

基于Springboot的面向智慧教育的实习实践系统设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的面向智慧教育的实习实践系统设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller&…

_数据_变量_内存

什么是数据? 存储于内存中代表特定信息的’东东’, 本质就是0101二进制具有可读和可传递的基本特性万物(一切)皆数据, 函数也是数据程序中所有操作的目标: 数据 算术运算逻辑运算赋值调用函数传参 … 什么是内存? 内存条通电后产生的存储空间(临时的)产生和死亡: 内存条(…

《深入Linux内核架构》第2章 进程管理和调度 (1)

目录 前言 2.1 进程优先级 2.2 进程生命周期 2.3 进程表示 2.3.1 进程类型 2.3.2 命名空间 2.3.3 进程ID号 2.3.4 进程关系 2.4 进程管理相关的系统调用 2.4.1 进程复制 2.4.2 内核线程 2.4.3 启动新程序 2.4.4 退出进程 前言 本章内容太多,分为两篇博…

游戏开发中的坑之十三 Lut贴图相关问题

1.网上下载的或者游戏截帧得到的Lut贴图贴上之后可能效果如下,需要在PS里垂直方向反转一下贴图。 2.相关设置: (1)取消勾选sRGB; (2)像素为1024x32或者512x16; (3&#…

2115. 从给定原材料中找到所有可以做出的菜

文章目录 题意思路代码 题意 题目链接 原材料和每道菜需要什么材料&#xff0c;能做那些菜 思路 拓扑排序暴力 代码 // 暴力 class Solution { public:vector<string> findAllRecipes(vector<string>& recipes, vector<vector<string>>&…

常用的C++ STL

这里写自定义目录标题 常用的C STLstackqueuedeque 常用的C STL 常用到的C STL&#xff0c;方便查询。 stack Stack是一种容器适配器&#xff0c;专门设计用于LIFO (last-in first-out)操作&#xff0c;仅从容器的一端插入删除元素&#xff08;back or top&#xff09;。 成…

【机器学习300问】36、什么是集成学习?

一、什么是集成学习&#xff1f; &#xff08;1&#xff09;它的出现是为了解决什么问题&#xff1f; 提高准确性&#xff1a;单个模型可能对某些数据敏感或者有概念偏见&#xff0c;而集成多个模型可以提高预测的准确性。让模型变稳定&#xff1a;一些模型&#xff0c;如决策…

酷开科技以消费者需求为导向冲刺OTT行业的星辰大海

通过大屏营销、互动营销等方式&#xff0c;提升品牌认知度和市场竞争力。酷开科技始终坚持以消费者的需求为导向&#xff0c;致力于为品牌方和消费者搭建高效、准确的沟通桥梁&#xff0c;开创OTT大屏营销新纪元。 伴随技术发展&#xff0c;智能电视已经从“尝鲜”变成了主流产…

服务器镜像是什么

镜像即镜像服务器。镜像服务器与主服务器的服务内容都是一样的&#xff0c;只是放在一个不同的地方&#xff0c;分担主服务器的负载量。 可以使用&#xff0c;但不是原版的。在网上内容完全相同而且同步更新的两个或多个服务器&#xff0c;除主服务器外&#xff0c;其余的都被称…

Go语言必知必会100问题-24 如何正确的对切片进行拷贝

如何正确的对切片进行拷贝 内置的 copy 函数实现了将源切片中的数据拷贝到目标切片中的功能&#xff0c;尽管这是一个常用的内置函数&#xff0c;但是还是有不少开发者使用有误。下面会通过具体的例子说明 copy 的错误使用。如下代码中期望通过 copy 函数将源切片 src 中的数据…

每日温度_单调栈_java

每日温度 leetcode链接 问题描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0…

.NET MAUI 社区工具包 2023 年亮点

作者&#xff1a;Kym Phillpotts 排版&#xff1a;Alan Wang 2023 年已经过去了&#xff0c;让我们花点时间回顾一下 .NET MAUI Community Toolkit 项目的历程以及展望接下来的发展。作为 .NET MAUI 的配套产品&#xff0c;该开源库为开发人员提供了一组丰富多样的控件、转换器…

Axure基础 各元件的作用及介绍

图像热区 增加按钮或者文本的点击区域&#xff0c;他是透明的&#xff0c;在预览时看不见。 动态面板 用来绘制一下带交互效果的元件&#xff0c;他是动态的&#xff0c;如轮播图&#xff0c;一个动态面板里可以有多个子面板&#xff0c;每一个子面板对应着不同的效果。 他…

大数据笔记

文章目录 一、HBase1.HBase集群部署2.HBaseShell常用操作3.HBase过滤器 二、Spark1.spark集群部署 三、Hive1.Hive安装与配置与mySQL的安装2.Hivebeeline配置 四、Zookeeper1.Zookeeper集群部署2.ResourceManagerHA3.SparkHA4.Zookeeper案例 一、HBase 1.HBase集群部署 2.HBa…

C++容器——unordered_map浅谈

实现原理 unordered_map 在 C 标准库中的实现基于哈希表&#xff08;Hash Table&#xff09;数据结构。哈希表通过一个哈希函数将键转换为数组的索引&#xff0c;然后在对应的桶&#xff08;buckets&#xff09;中存储元素。当多个键映射到相同的哈希值时&#xff0c;通常采用…