设计MySQL数据表的几个注意点

最近合作搞项目,发现了很多问题。特别的,数据库层面上的问题更为致命。记录一下,希望后面看到博客的同学们注意。
注意:以下观点只用于一般情况下的单体、微服务,不保证适用所有场景。

一、ID问题

ID名称问题

如下图:有的同学喜欢,xx_id,这就很让人迷惑。因为,一般我们使用逻辑外键的时候才会这么写,而实际开发的时候,表的id,就固定为id字段,如图二。
在这里插入图片描述
在这里插入图片描述

ID自增长、映射类型

默认id自增长、映射为JAVA种的Integer

逻辑外键
  • 一张表的逻辑外键最好限制为一个,过多的逻辑外键,尽量额外建表维护。

二、字符

长度
  • 最好使用四种默认长度64、255、1024、2048,使用别的长度,要有明确的要求。
  • 超过2048麻烦额外建表。
适用范围
  • 尽量不要用字符存枚举、类型、状态、ID

三、时间

  • 不知道选的,默认选DATATIME
  • 语句-默认当前时间: DEFAULT CURRENT_TIMESTAMP
  • 语句-更新字段后更新时间:ON UPDATE CURRENT_TIMESTAMP
  • 没有必要,不要存时间戳

四、整型

  • 枚举字段使用默认:tinyint
  • 不知道的整型默认:int
  • 不要设定初始默认值,让应用去控制

五、字段

  • 超过2048字符长度的,尽量使用额外一张表
  • 如果有大字符、大内容需要存,使用文件服务。
  • 如果不想建文件服务,就存文件名,然后用本地文件系统。一定不要存文件到数据库。
  • 不要存模糊的字段,不要使用默认值(时间除外),因为后期会变成一个坑。
  • 不要设计备注、冗余字段,要改的表,让它改,冗余设计和bug一样恐怖

六、数据库的三大范式

如果谁设计的数据库不满足的,让它改!!!

不满足范式的设计,后期大概率要出问题。

七、关系

表间关系
  • 一对多、多对一的情况,可以使用逻辑外键
  • 多对多的情况,一定要建中间表,而且命名要有明显的辨识度例如:tm_user_role。tm就是中间表
  • 优先使用分组表,而不是分组字段。
行关系

设计二叉树行时,例如:每个行都有id、parent_id,其中parent_id是id的逻辑外键。

  • 保证数据总量的有穷性、最大值不会影响性能。
  • 可以的话,设计类似:00112233一样的字段作为code或字段level,进行快速识别。例如(第1-2、3-4、5-6行)、level代表树的高度。
  • 不要使用二叉树分组,新建一个分组表。

八、字段切割

  • 一张表最多20个字段,超过需要切割。
  • 实际上最多15个就够了,超过12个字段,就应该仔细看是不是有问题。

最后,以上就是我的个人经验,如有想法,请留言,感谢。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四平方和c++

题目 输入样例: 5输出样例: 0 0 1 2 思路 首先想到的是使用三重循环求出 a,b,c,d 可以通过 n - a - b - c 得到。理论时间复杂度为O(1000 * 1000 * 1000) O(10^9)。因此需要想办法降低循环层数。 考虑使用两个双重循…

Unreal Engine5记录 02简单的第三人称游戏

导航视口 选择对应的第三人称游戏选项,并选择项目创建的位置,点击创建 创建之后,会打开一个默认的导航视口 点击运行,进入窗口 你就像进入了一个游戏关卡,这个和你玩的第三人称游戏一样(类似吃鸡&#xf…

React-useEffect

1.概念 说明:用于在React组件中创建不是由事件引起而是由渲染本身引起的操作,比如发送 A列AX请求,更改DOM等。 2.案例 // useEffect用于组件不是由事件引起的而是由渲染本身引起的操作,如ajax,更改Dom等。 import { useEffect,…

图解目标检测的现代历史

任务分类 图像分类 根据图像的主要对象对图像进行分类。 目标定位 预测包含主要对象的图像区域。然后,可以使用图像分类来识别该区域内的物体 目标检测 定位和分类出现在图像中的所有对象。这个任务通常包括:确定区域,然后对其中的对象进行…

SpringCloudGateway工作原理与链路图

SpringCloudGateway基本介绍 Spring Cloud Gateway 构建于Spring Boot 2.x、 Spring WebFlux和Project Reactor之上。因此,在使用 Spring Cloud Gateway 时,您可能不会应用许多熟悉的同步库(例如 Spring Data 和 Spring Security)和模式。 Spring Cloud Gateway 需要 Sprin…

javaWebssh文玩竞价管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh文玩竞价管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

1909_Arm Cortex-M3编程模型

1909_Arm Cortex-M3编程模型 全部学习汇总: g_arm_cores: ARM内核的学习笔记 (gitee.com) 编程模型的部分除了单独的核心寄存器描述之外,它还包含有关处理器模式和软件执行和堆栈的特权级别的信息。 处理器有两种模式,分别是线程模式和Handle…

2024年【山东省安全员C证】考试试卷及山东省安全员C证复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员C证考试试卷根据新山东省安全员C证考试大纲要求,安全生产模拟考试一点通将山东省安全员C证模拟考试试题进行汇编,组成一套山东省安全员C证全真模拟考试试题,学员可通过…

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多,包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢?只需要简单几步即可,具体如下&#xff1a…

解决前端性能问题:如何优化大量数据渲染和复杂交互?

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、分页加载数据 二、虚拟滚动 三、懒加载 四、数据缓存 五、减少重绘和回流 …

is not valid JSON at JSON.parse

在后台读取一个文件里的JSON数据,转换成字符串返回给前端,前端使用JSON.parse转换JSON报错。在将JSON校验和压缩后发现前端还是转换失败。在返回结果的时候可以看见一个小红点 最后排查,不带BOM的识别是Java遗留的一个bug。 解决方案&#…

OSI 的七层模型

OSI七层模型 一般指开放系统 互连参考模型 (Open System Interconnect 简称OSI) 是国际标准化组 织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系 统提供了一种功能结构的框架。 应用层:各种应用程序协议,比…

第八篇:预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

CSS字体样式的使用,先收藏了

CSS 篇 link 与 import 的区别 link 是 HTML 方式, import 是CSS方式link 最大限度支持并行下载, import 过多嵌套导致串行下载,出现 FOUC (文档样式短暂失效)link 可以通过 rel"alternate stylesheet" 指定候选样式浏览器对 lin…

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例(学生选课成绩统计) 该系总共有多少学生; 该系DataBase课程共有多少人选修; 各门课程的平均分是多少; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…

【深圳五兴科技】Java后端面经

本文目录 写在前面试题总览1、java集合2、创建线程的方式3、对spring的理解4、Spring Boot 和传统 Spring 框架的一些区别5、springboot如何解决循环依赖6、对mybatis的理解7、缓存三兄弟8、接口响应慢的处理思路9、http的状态码 写在前面 关于这个专栏: 本专栏记录…

微信小程序云开发教程——墨刀原型工具入门(页面交互+交互案例教程)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

AlibabaCloud微服务:Linux 部署 Sentinel 流量控制

目录 一、实验 1.环境 2.Linux 部署 Sentinel 3. 微服务接入Sentinel配置 二、 问题 1.Linux本地启动Sentinel控制台 2.JDBC连接失败 一、实验 1.环境 (1)主机 表1 主机 系统软件版本IP备注Linuxopenjdk 1.8.0192.168.204.200 maven3.5.0nac…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

【Redis】Redis持久化模式AOF

目录 引言 AOF持久化模式​编辑​编辑 AOF与RDB的混合持久化(4.x后的新特性) AOF的优缺点 修复破损aof文件 到底用RDB还是AOF 引言 AOF就相当于上面的日志形式。是追加式备份。所有发生的写操作,新增啊,修改啊,删除啊,这些命…