mysql表设计

表设计流程:
(1)分库:根据模块分
(2)分表:根据流程分表
(3)冗余字段和视图设计
21个表设计准则

(1)命名规范
account_no,account_number
表名用t_user,视图用v_i,字段名:表名_字段名
外键:表名_字段名$1
主键索引:pk_name,唯一索引:uk_name,一般索引:idx_name
(2)选择合适的字段类型
选小的类型:tinyint,smallint,int,bigint
小数,金额选择:decimal,不要使用float和double。
TABLE invoices (
invoice_id INT PRIMARY KEY,
amount DECIMAL(10, 2)
);

在上述示例中,amount列可以存储最多10位数字,其中2位用于小数部分。
精确度和舍入:DECIMAL类型确保数据的精确度,不会导致浮点数的精度问题。任何插入或计算的结果都将按照指定的精度进行四舍五入。
存储的字符串长度相似,尽量使用char定长。
varchar不预先分配空间,长度不要超过5000,如果过大,建议修改类型为text,并且单独抽出一个表,用外键对应。
在一张表中,varchar指定了最大长度的和不能超过65535,超过使用text。
尽管分配了最大长度的内存,但VARCHAR列实际上只会占用实际存储的字符数加上一些额外的字节用于存储长度信息。这意味着如果您在
VARCHAR(50)列中存储了一个只有10个字符的字符串,它只会占用10个字符的存储空间,而不会占用50个字符的存储空间。
在MySQL和许多其他关系型数据库管理系统中,TEXT是一种用于存储长文本数据的数据类型。TEXT数据类型适用于存储大块文本,例如文章、评论、日志、文章内容等等。以下是关于TEXT数据类型的一些关键信息:
1.数据类型分类
:TEXT是一种文本数据类型,通常被分为不同的子类型,根据最大允许的文本长度,可以分为以下几种子类型:

  • TINYTEXT
  • TEXT
  • MEDIUMTEXT
  • LONGTEXT
    2.存储方式
    :TEXT列的数据以二进制形式存储,因此可以容纳各种字符,包括文本、二进制数据或格式化文本,如XML或JSON。
    3.用途
    :TEXT通常用于存储大段的自由文本,例如文章内容、博客帖子、评论等,以及需要较长文本描述的应用程序。
    4.性能考虑
    :由于TEXT列存储大量数据,因此在查询和检索大型TEXT列的数据时可能会对性能产生影响。在处理大文本数据时,您应该考虑合理的索引策略以提高查询性能。
    5.示例
    :以下是一个创建包含TEXT列的表的示例:
    sqlCopy codeCREATE TABLE articles (
    article_id INT PRIMARY KEY,
    title VARCHAR(255),
    content TEXT
    );

在上述示例中,content列用于存储文章的内容,可以容纳大段文本。
总之,TEXT是一种用于存储长文本数据的数据类型,它适用于需要存储大块文本的情况,如文章、评论等。根据您的需求,可以选择不同子类型的TEXT,以满足文本长度的要求。
(3)要选择毫无意义而独立不重复的数字作为主键
比如Auto_increment或者UUID,雪花算法生成的主键。
(4)字段长度选择2的幂次
(5)核心业务不使用物理删除,而是使用逻辑删除
(6)给表添加通用字段
id(主键),create_time,modified_time/update_time,version(用于乐观锁,非必须),remark(备注,非必须),modified_by(修改人,非必须),creator(创建人,非必须)
(7)表中列太多会影响性能,不超过20个
(8)尽量使用not null
(9)考虑哪些列需要加索引
一个表单索引不超过5个,过多会降低写速度。
加在区分度高的列。
(10)三大范式的合理使用
第一范式:字段的原子性
第二范式:所有列都和主键直接相关
第三范式:字段没有冗余,不存在传递依赖。
我们可以通过违反第三范式,添加和主键不是直接相关的冗余数据,从而减少表的数量。
比如:手机,单价,数量,总金额,总金额能通过单价和数量算出来。
(11)不做外键关联,外键概念需要在应用层解决。
(12)使用innodb
(13)使用utf8字符集
(14)枚举需要注释清楚
(15)时间类型的选择:
date,2023-2-2
time,8:30:23
datetime:2023-2-2 8:30:23,和时区无关
timestamp:和时区有关
year:2012
优先选择datetime
(16)不建议使用存储过程和触发器
(17)将多对多表关系,修改为一对多
通过将两个表变为三个表,从而将多对多改为一对多。
比如:学生和课程。通过新建一个学生-课程表,外键关联学生id和课程id,从而实现一对多。
(18)提前考虑分库分表
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

OpenCV-38 图像金字塔

目录 一、图像金字塔 1. 高斯金字塔 2. 拉普拉斯金字塔 一、图像金字塔 图像金字塔是图像中多尺度表达的一种,最主要用于图像的分割,是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说,图像金字塔是同一图像不同分辨率的子图…

【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门

应该是新年前最后一篇博客了,明天浅浅休息一下,提前祝大家新年快乐捏!😊😊😊 01. 基础理解 1.1 同步调用和异步调用 👉 同步调用 的时候调用者会 阻塞 等待被调用函数或方法执行完成&#xff…

《Java 简易速速上手小册》第9章:Java 开发工具和框架 (2024 最新版)

文章目录 9.1 Maven 和 Gradle - 构建与依赖管理的神兵利器9.1.1 基础知识9.1.2 重点案例:使用 Maven 构建 Spring Boot 应用9.1.3 拓展案例 1:使用 Gradle 构建多模块项目9.1.4 拓展案例 2:利用 Gradle Wrapper 确保构建的一致性 9.2 Spring…

InstantBox:开箱即用的临时 Linux 环境

在云计算和虚拟化技术日益成熟的今天,我们有时需要一个快速、简单、临时的 Linux 环境来进行各种任务。这就是 InstantBox 的用武之地。 什么是 InstantBox? InstantBox 是一个开源项目,它可以快速启动临时的 Linux 系统,并提供…

Vue-自定义属性和插槽(五)

目录 自定义指令 基本语法 (全局&局部注册) 指令的值 练习:v-loading 指令封装 总结: 插槽(slot) 默认插槽 插槽 - 后备内容(默认值) 具名插槽 具名插槽基本语法: 具名插槽简化语法: 作…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、StepperItem组件 用作Stepper组件的页面子组件。 子组件 无。 接口 St…

浅谈进制的转换

本文创作灵感来自CSDN咸鱼WCY 的 咸鱼小白学嵌入式之C语言(2.进制) 博主更完就没更了,决定书接上回(喜 进制是个啥 要理解进制,首先哈,咱得知道不同进制的含义 说到底,各个进制其实有点像在…

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目,在纠结一个注册中心是在双活机房都准备一个,那主机房的数据如果传过去呢,查了一些资料,最终在官网查到了一个NacosSync 的组件,主要用来做数据传输的,并且支持在线替换注册中心的&a…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

springsecurity6使用

spring security 中的类 : AuthenticationManager : 实现类:ProviderManager 管理很多的 provider ,,, 经常使用的,DaoAuthenticationProvider , 这个要设置一个 UserDetailService , 查找数据库&#xff…

生存类游戏《幻兽帕鲁》从部署服务器到开始体验全过程

SteamDB数据显示,《幻兽帕鲁》上线24小时内,在线人数峰值便突破200万,跻身Steam历史排行榜第二位。随着热度进一步发酵,《幻兽帕鲁》官方发布推文称,游戏发售不到6天,销量已经突破了 800万份。欢迎大家在阿…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

遇到 vue-cli-service 不是内部或外部命令,也不是可运行的程序或批处理文件。 的错误时,通常意味着Vue CLI没有被正确安装或配置在项目中。这可能是因为node_modules目录缺失了必要的包,或者局部安装的Vue CLI没有被正确设置到系统的PATH环境…

消息中间件面试篇

目录 消息中间件 RabbitMQ 消息不丢失 生产者确认机制 消息持久化 交换机持久化 队列持久化 消息持久化 消费者确认 消息重复消费 出现的场景 解决方案 每条消息设置一个唯一的标识id 幂等方案:【 分布式锁、数据库锁(悲观锁、乐观锁&#…

【教学类-48-04】202402013“天干地支 六十一甲子”.

背景需求: 2024年是甲辰龙年。 “辛亥革命”“甲午海战”"戊戌变法”都有天干地支的身影。 参观历史建筑,不少书法碑刻上都是用天干地支进行年代记名 所以我用Python来制作60一甲子的所有天干地支组合 60一甲子 天干地支的排序 作者:阿…

JavaScript中有哪些不同的数据类型

在 JavaScript 中,数据类型是一种用来表示数据的分类,它决定了我们可以对这个数据类型执行哪些操作。在 JavaScript 中有以下几种不同的数据类型: 基本数据类型 字符串 (String):表示一组字符,可以使用引号&#xff08…

理解JAVA EE设计模式

理解JAVA EE设计模式 在Web应用程序的设计和开发阶段,开发人员在开发类似的项目时可能会遇到相似的问题。每名开发人员可能会遇到的问题找出不同或相似的解决方案。但是,这导致一些时间和精力浪费在为相似的问题寻找解决方案上。因此,要啊节省时间和精力,需要记录常见问题…

VMware清理拖拽缓存 Ubuntu硬盘情况占用分析

这两天在尝试编译Linux源码,我在win上将源码下载下来然后复制到ubuntu上,这一步我粗略看到了三种方法:安装VM tools,就可以使文件正常的在win和ubuntu中复制剪切;使用scp命令将win和linux系统链接起来;使用…

柚见(伙伴匹配系统)第三期

后端整合SwaggerKnife4j 什么是接口文档 什么是接口文档? 写接口信息的文档, 每条接口包括: 请求参数响应参数错误码接口地址接口名称请求类型请求格式备注 who 谁用? 一般是后端或者负责人来提供,后端和前端都要使用…

Android---PermissionX实现动态权限申请

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 PermissionX是一个扩展Android库,使Android运行时权限请求变得极其容易。你可以将它用于基本的…

ONLYOFFICE文档8.0新功能浅探

ONLYOFFICE文档8.0新功能浅探 上个月末这个月初的几天,ONLYOFFICE版本更新了!更新到了一个比较整的大的版本号,8.0版本,看来这个生产力工具的升级速度基本上能保持每年两个版本号的速度,还是很快的,一般来…